Implement skill download from GitHub repositories:
- parseSource() to handle owner/repo, owner/repo/skill, and full URLs
- addSkill() with shallow clone and sparse checkout support
- removeSkill() to uninstall skills
- listInstalledSkills() for listing managed skills
- Automatic .git cleanup after clone
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add esbuild-based build script to bundle CLI tools into standalone
binaries that can be run directly with node. The built binaries
externalize dependencies to keep bundle size small and avoid
bundling issues with native modules.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add skills-cli.ts with commands:
- list: Show all skills with eligibility status
- status [id]: Show detailed skill info or summary
- install <id>: Install skill dependencies
Add skills:cli script to package.json
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add hot reload support to SkillManager:
- startWatching/stopWatching methods
- Version-based automatic cache invalidation
- Export install and watcher functions
- listAllSkillsWithStatus and checkSkillEligibility helpers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implement install support for brew/npm/uv/go/download methods:
- buildInstallCommand for each installer type
- selectPreferredInstallSpec with configurable priority
- installSkill main function with timeout support
- Download support with archive extraction (tar.gz, zip)
- getInstallOptions for UI listing
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update checkEligibility calls to use EligibilityContext object
- Add tests for new features: anyBins, always flag, config disabled
- Add tests for bundled allowlist filtering
- Add tests for env var injection via config
- Add tests for apiKey + primaryEnv combination
- Add tests for new requires.bins/env format alongside legacy format
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add skills?: SkillsConfig to AgentOptions
- Update runner.ts to pass skills config to SkillManager
- Merge extraSkillDirs from options with config.load.extraDirs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add SkillInstallSpec type for future install mechanism support
- Add SkillRequirements type with bins, anyBins, env, config checks
- Add SkillConfig, SkillsConfig types for per-skill and global config
- Add utility functions: getSkillKey, getSkillConfig, normalizeRequirements
- Support both new (requires.bins, os) and legacy (requiresBinaries, platforms) fields
- Implement 'always' flag to skip eligibility checks
- Implement bundled skills allowlist filtering
- Implement config-based skill enable/disable
- Implement env var injection via config (apiKey + primaryEnv)
- Add listAllSkillsWithStatus() method to SkillManager
- Export new types and utility functions
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Display payload.content instead of raw JSON when the payload
is an object with a content field.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move disconnect button into header as a compact X icon
- Add app logo to header and setup screen
- Truncate device ID with tap-to-copy
- Collapsible target bar with smart label summary
- Empty state illustration when no messages
- Pulsing status dot animation for live connection
- Rounded send button, chat-bubble message input
- Glassmorphism header/compose bar with backdrop blur
- Auto-open target bar when targets not set
- Auto-collapse target bar after first send
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move static files from / to /client to avoid conflicts with
WebSocket and existing HTTP endpoints. Update manifest, service
worker, and HTML asset references accordingly.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace `pnpm build` (turbo recursion) with direct `tsc` invocation
- Copy gateway/public static assets into dist for PWA serving
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace generated SVG icon with the provided PNG icon across
manifest, HTML, and service worker precache.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a mobile-first PWA client served from the Gateway, mirroring the
console demo client functionality with enhanced mobile UX:
- Chat-bubble style messaging UI with safe-area support
- PWA manifest, service worker, and SVG icon
- ServeStaticModule added to Gateway for static file serving
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add tests for createPinnedLookup, resolvePinnedHostname,
createPinnedDispatcher, and closeDispatcher functions.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add tests for getProfileSkillsDir, getBundledSkillsDir, and loadAllSkills
with skill precedence, invalid files, and directory discovery.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add tests for resolveContextWindowInfo, evaluateContextWindowGuard,
and checkContextWindow functions with various threshold scenarios.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Store agent records in ~/.super-multica/agents/agents.json.
Hub restores agents on startup and updates the file on create/delete.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add tests for profile file storage operations including read,
write, load, and save functionality with temp directory isolation.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add Vitest and @vitest/coverage-v8 for unit testing. Configure
test scripts and add coverage directory to gitignore.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add JakartaError base class with error codes and retry semantics
- Add typed error classes for network, session, compaction, process, channel, and gateway errors
- Add withRetry utility with exponential backoff, jitter, and abort support
- Add CancellationToken with hierarchical parent-child cancellation support
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Replace hardcoded ~/.super-multica paths across agent and hub modules
with a single DATA_DIR constant exported from shared.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add .env.example with all supported provider env vars
(OpenAI, Anthropic, DeepSeek, Kimi, Groq, Mistral, Together, Google)
- Update README with environment setup instructions
- Document configuration priority and startup commands
- Whitelist .env.example in .gitignore
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add environment variable support for provider/model defaults:
- AGENT_PROVIDER: default LLM provider (fallback: kimi-coding)
- AGENT_MODEL: default model name
- Auto-load .env via tsx --env-file in agent:cli script
Priority: CLI args > env vars > session meta > defaults.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add apiKey and baseUrl options to AgentOptions, with support for:
- Explicit values via CLI args (--api-key, --base-url)
- Provider-specific environment variables (e.g., OPENAI_BASE_URL)
- Generic fallback format (PROVIDER_BASE_URL)
Priority: CLI args > env vars > library defaults.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Hub now uses AsyncAgent from src/agent/ instead of its own Agent
implementation. Deleted hub/agent.ts and hub/channel.ts as they
are no longer needed.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace stdout/stderr stream interception with direct result.text push
to Channel. Also fix queued tasks still executing after close().
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Introduce two wrapper classes around the core Agent:
- SyncAgent: exposes run() for synchronous request-response usage
- AsyncAgent: exposes write()/read()/close() for non-blocking streaming via Channel
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add dist-electron and release to .gitignore
- Remove tracked dist-electron build outputs from git
- Remove unused createRequire import in electron/main.ts
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create packages/store with @multica/store package
- Add zustand to pnpm catalog for version consistency
- Add counter store as cross-platform state example
- Integrate counter into ComponentExample for verification
- Add tsconfig path mappings for web and desktop
- Add @multica/store to Next.js transpilePackages
- Add @multica/store dependency to packages/ui
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move shadcn components from src/components/ to src/components/ui/
- Move component-example and example from apps/web to packages/ui
- Update package.json exports with separate components/* and components/ui/* paths
- Update components.json ui alias in both packages/ui and apps/web
- Add missing @import "shadcn/tailwind.css" to globals.css
- Add new UI components: sheet, sidebar, skeleton, switch
- Update apps/web and apps/desktop to use shared ComponentExample
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>