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>
Add @multica/ui workspace dependency with @tailwindcss/vite plugin
for CSS processing. Import globals.css for theme and replace template
UI with shared Button component. Remove unused template CSS files.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add catalog section to pnpm-workspace.yaml for react, react-dom,
@types/react, @types/react-dom, @types/node, and typescript.
Update all package.json files to use catalog: protocol.
Upgrade desktop from React 18 to 19. Rename to @multica/desktop.
Add dev:desktop script to root.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add initial Electron desktop app using vite-plugin-electron template
with React and TypeScript.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace local UI component and utility imports with @multica/ui
subpath imports. Remove old components/ui/ directory, lib/utils.ts,
and globals.css. Configure postcss, next.config, and tsconfig for
monorepo UI package consumption.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move 13 shadcn UI components, cn() utility, and theme CSS variables
to packages/ui for cross-platform reuse. Add @source directives for
Tailwind v4 content scanning.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Shared UI package for web, electron, and mobile. Uses subpath exports
following the official shadcn monorepo template pattern.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Allow changing the gateway connection URL at runtime via a new
PUT /hub/gateway endpoint and a corresponding input form in the
console UI.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add documentation for web_fetch and web_search tools to the default
agent profile templates. Also adds additional options info for glob
and usage guidelines for the web tools.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* chore(deps): add yaml package for skill parsing
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(agent): add skills system
Implement a skills system inspired by moltbot's approach:
- Skills are markdown files (SKILL.md) with YAML frontmatter
- Multi-source loading with precedence: bundled < user < workspace
- Eligibility filtering based on platform, binaries, and env vars
- Skills are automatically included in agent system prompt
- New AgentOptions: enableSkills, skillsBaseDir, extraSkillDirs
Includes two bundled skills:
- commit: Git commit helper with conventional commit guidelines
- code-review: Code review checklist and best practices
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor(skills): use profile-based skills instead of workspace
Change skill loading from workspace-based (.skills/) to profile-based:
- Skills now load from ~/.super-multica/agent-profiles/<profileId>/skills/
- Remove workspace and user skill sources
- Simplify to only bundled and profile sources
- Profile skills have higher precedence than bundled
This is more appropriate for non-coding agents where skills are
associated with agent identity rather than working directory.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* chore(deps): add web tools dependencies
Add undici, @mozilla/readability, linkedom, and turndown for
web fetching and HTML content extraction capabilities.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(agent): add web_fetch and web_search tools
Port network tools from moltbot with the following features:
web_fetch:
- Fetch and extract readable content from URLs
- Dual extraction mode: readability (smart) or turndown (full page)
- SSRF protection (blocks private IPs, localhost)
- Response caching with TTL
- Redirect handling
web_search:
- Brave Search API for traditional results
- Perplexity API for AI-synthesized answers
- Region/language settings
- Freshness filtering (Brave only)
- Auto-detects provider from available API keys
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* feat(agent): register web_fetch and web_search tools
Add web tools to the agent's tool registry.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Add documentation for glob tool, exec auto-backgrounding, and process
actions. Reorganize into File Operations and Command Execution sections
with usage guidelines.
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>