Add /model command to interactively switch models:
- /model: Show current model and list available models for provider
- /model <name>: Switch to specified model (preserves session)
Example usage:
/model # Shows claude-opus-4-5, claude-sonnet-4-5, etc.
/model claude-sonnet-4-5 # Switch to sonnet model
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move src/agent/oauth/ to src/agent/providers/oauth/ (parent-child structure)
- Delete deprecated oauth/providers.ts re-export file
- Simplify Claude model names: claude-opus-4-5 (without date suffix)
- Update Codex models to current lineup (gpt-5.2, gpt-5.1-codex, etc.)
- Set claude-opus-4-5 as default model for claude-code provider
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create src/agent/providers/ with registry.ts and resolver.ts
- registry.ts: Provider metadata, status checking, login instructions
- resolver.ts: API key resolution, model resolution
- oauth/providers.ts now re-exports from providers/ (deprecated)
- tools.ts: Remove PROVIDER_ALIAS and DEFAULT_MODELS (moved to providers/)
- Update imports in runner.ts and chat.ts
This separates concerns:
- oauth/ only handles OAuth credential reading
- providers/ manages all provider metadata and resolution
AsyncAgent now subscribes to pi-agent-core events (message_start,
message_update, message_end) and forwards incremental text deltas
through a stream callback. Hub registers the callback and sends
stream payloads to the requesting client via Gateway.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add isOAuthProvider() and isProviderAvailable() helpers
- Show login instructions for OAuth providers without credentials
- Show configuration example for API Key providers without keys
- Fail early with helpful error message instead of cryptic API errors
- Add ID column to show actual provider keys for --provider flag
- Add usage examples with actual command syntax
- Improve visual formatting with table headers
Separate OAuth credential reading (external CLI tools) from the main
CredentialManager (API Key configuration in credentials.json5).
- credentials.ts: API Key configuration management
- oauth/: External OAuth credential reading (Claude Code, Codex)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The /provider command shows:
- Current provider and model
- List of available providers (OAuth and API Key)
- Status of each provider (configured/not configured)
- Instructions for switching providers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add provider alias mapping (claude-code -> anthropic)
- Resolve API key from OAuth credentials for claude-code and codex
- Add default models for each provider
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add support for reading OAuth credentials from external CLI tools:
- Claude Code: ~/.claude/.credentials.json or macOS Keychain
- Codex: ~/.codex/auth.json or macOS Keychain
Includes provider management with status checking and login instructions.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add LIST_DEVICES event and "hub" device type to SDK
- Add listDevices() method to GatewayClient
- Add handleListDevices handler in Gateway
- Change Hub deviceType from "client" to "hub"
- Refactor gateway store: auto-connect WS, separate hubId selection
- Hub-init: auto-connect on mount, discover hubs on registered
- Hub-sidebar: show discovered hubs list with connect/disconnect UI
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changed buildModelSkillsPrompt() to only output skill metadata (name + description)
instead of full instructions. Full instructions are now loaded on-demand when a
skill is triggered via the new buildSkillPromptForInjection() method.
This reduces initial system prompt size significantly for projects with many skills.
Co-Authored-By: Claude <noreply@anthropic.com>
Add 5 new RPC methods (getHubInfo, listAgents, createAgent, deleteAgent,
updateGateway) mirroring the existing Console HTTP API, enabling pure
WebSocket communication from the frontend.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add terminal support detection to gracefully fallback to simple readline
- Add getStringWidth() for proper CJK character width calculation
- Remove unreliable SAVE_CURSOR/RESTORE_CURSOR ANSI sequences
- Use relative cursor movement for better compatibility
- Handle edge case when cursor is at line boundary
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Update both English and Chinese README files with:
- CLI examples for --profile option
- Reorganized manual creation as alternative method
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add profileId parameter to SkillAddRequest interface
- Add getSkillsDir() helper to determine target directory
- Update CLI to parse --profile/-p option
- Update help text and error messages with new option
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add RpcDispatcher and RpcError for method dispatch with typed error
codes (METHOD_NOT_FOUND, INVALID_PARAMS, AGENT_NOT_FOUND). Implement
getAgentMessages handler that checks session files on disk, supporting
both active and closed agents. Wire up RPC request/response flow in Hub.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Sync latest code from src/shared/gateway-sdk/ into packages/sdk/,
update all backend imports to use @multica/sdk, and remove the
duplicate src/shared/gateway-sdk/ directory.
- Translate Chinese comments to English in SDK source
- Fix package.json exports with default condition
- Add @multica/sdk as workspace dependency for backend
- Update imports in gateway, test-client, and hub
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Direct Perplexity API (pplx-*) uses "sonar-pro" model name
- OpenRouter (sk-or-*) uses "perplexity/sonar-pro" model name
- Refactor inferPerplexityBaseUrl to inferPerplexityConfig returning both baseUrl and model
- Export internal functions for potential reuse
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When loading skills, automatically check if bundled skills have a higher
version than managed skills. If so, update the managed skill to the
newer bundled version.
This ensures users get skill updates when upgrading multica, without
needing manual intervention.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add `multica profile setup <id>` command for interactive profile setup
- Create profile-setup skill with conversational setup wizard
- Agent collects user info through natural dialogue and updates profile files
- Supports updating user.md, workspace.md, and config.json
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove identity.md and bootstrap.md from profile files
- Merge identity content into soul.md (now contains identity, personality, and behavior)
- Update templates, storage, and types to reflect new structure
- Update tests to match new profile structure
Profile now has 4 files: soul.md, user.md, workspace.md, memory.md
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Create unified entry point at src/agent/cli/index.ts
- Add subcommand modules: run, chat, session, profile, skills, tools, credentials, dev
- Support both 'multica' and 'mu' aliases
- Add session management commands (list, show, delete)
- Integrate dev server commands into CLI
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update workspace.md template with Profile Files table explaining
when to update each file
- Inject actual profile directory path in buildSystemPrompt()
- Add getProfileDir() method to ProfileManager
- Agent can now use edit/write tools to update profile files
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Enrich soul.md with core truths, boundaries, and continuity guidance
inspired by moltbot's template design
- Add user.md template for building user profile and preferences
- Add workspace.md template for workspace behavior guidelines
- Update memory.md and bootstrap.md with more structured content
- Update all related storage, types, and test files
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The tools.md template content duplicated information already present in
each tool's schema description, causing maintenance burden and potential
inconsistencies. Tool usage guidelines can be added to soul.md if needed.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Added 36 tests covering toolDisplayName, formatToolArgs, extractResultDetails, and formatResultSummary functions. Also refactored code to eliminate duplicate truncate function and remove unused variable.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
* feat(agent): improve interactive CLI with colors, spinner, and status bar
- Add colors.ts module with ANSI terminal color utilities
- Add spinner animation for tool execution feedback
- Add persistent status bar showing session/provider/model
- Apply colors to welcome banner, prompts, commands, and suggestions
- Support NO_COLOR env for accessibility
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix(agent): correct cursor position with ANSI-colored prompts
Strip ANSI escape codes when calculating visual length of prompt
to ensure cursor is positioned correctly after colored text.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* fix(agent): prevent duplicate input echo in interactive CLI
Lazy-initialize readline.Interface only when multiline mode is active.
This prevents readline from interfering with autocomplete's raw mode,
which was causing user input to be echoed twice.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* refactor(agent): move CLI files to dedicated cli/ directory
Reorganize CLI-related files into src/agent/cli/ for better separation:
- interactive.ts (was interactive-cli.ts)
- non-interactive.ts (was cli.ts)
- profile.ts, skills.ts, tools.ts (was *-cli.ts)
- autocomplete.ts, colors.ts, output.ts (CLI utilities)
Update all imports, package.json scripts, and build configuration.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Add 'list' action to process tool that displays all registered processes
with their ID, command, status, duration, and source (exec/process).
Example output:
ID COMMAND STATUS DURATION SOURCE
019c139c-dbb7-70ec-ab91-0a7fd2711043 curl -X POST running 15.2s [exec]
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Handle tool_execution_update events in CLI output to show live progress
while commands are running. Shows the last 60 characters of output on
a single line that updates in place.
This completes the real-time streaming feature added to exec tool.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Utilize the onUpdate callback from pi-agent-core's AgentTool interface
to stream output updates in real-time while commands are executing.
- Accept onUpdate as 4th parameter in execute function
- Emit tailBuffer updates on each stdout/stderr data event
- Stop emitting updates once command is backgrounded (yielded)
This enables UI to show live command output progress via the
tool_execution_update agent event.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Previously, when a command exceeded yieldMs (default 5s) and was
auto-backgrounded, exec returned an empty output string. This caused
agents to misinterpret slow commands (like curl) as failed, leading
to infinite retry loops.
Changes:
- Implement three-layer buffer system (pending 30KB + aggregated 200KB + tail 1KB)
- Return collected output snapshot when backgrounding instead of empty string
- Increase default yieldMs from 5s to 10s for better coverage
- Add auto sweeper for terminated process cleanup (30min TTL)
- Register process immediately on spawn to capture all output
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When input exceeds terminal width, the text wraps to new lines but the
old code only cleared one line, causing screen flashing and duplicate
lines. Now tracks input line count and cursor position across wrapped
lines for proper rendering.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Automatically initialize managed skills directory with bundled skills
on first load. This ensures bundled skills are available without
requiring explicit initialization.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove bundled, extraDirs, and plugin skill sources
- Skills now load from only two sources:
1. managed (~/.super-multica/skills/) - global skills
2. profile (~/.super-multica/agent-profiles/<id>/skills/) - profile-specific
- Add initializeManagedSkills() to copy bundled skills on first run
- Delete plugin.ts (multica.plugin.json discovery)
- Update documentation and tests
This simplifies the architecture by treating bundled skills as
managed skills that are initialized once, rather than maintaining
multiple loading sources with complex precedence.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace phased roadmap with simple future tools list
- Add Chinese README (README.zh-CN.md)
- Add language switching links between EN/CN docs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use spread operator to conditionally add description property
instead of assigning undefined to optional fields.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>