`pnpm dev` now starts gateway (3000), console (4000) and web (3001)
in parallel with colored labels.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add next-themes integration with a ThemeProvider wrapper and a
ThemeToggle dropdown (Light / Dark / System) in the sidebar footer.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Lift AppSidebar, SidebarInset and SidebarTrigger into the root layout
so page.tsx only contains page-specific content.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Thin 6px scrollbars with transparent tracks and themed thumbs using
CSS standard properties + WebKit pseudo-elements for max compatibility.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Create empty Chat component and wire it into the main page,
replacing the previous mock Markdown/ChatInput content.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Port the SpinKit Grid 3x3 spinner as a shared UI component.
Uses currentColor and em sizing for flexible theming and scaling.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move sidebar markup from page.tsx into a reusable AppSidebar component
in packages/ui for cross-app reuse.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Wrap layout in SidebarProvider, restructure page into left
sidebar navigation + right SidebarInset content area.
Add use-mobile hook via shadcn for responsive behavior.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add CodeBlock, Markdown, StreamingMarkdown components with
Shiki syntax highlighting, GFM support, and linkify utility.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- First Tab: highlights first suggestion
- Second Tab: completes highlighted suggestion to input with trailing space
- Use arrow keys to navigate between suggestions
- Add init_skill.py that always creates skills in ~/.super-multica/skills/
- Restructure SKILL.md with step-by-step creation process
- Make script usage mandatory to prevent skills in wrong directories
- Support --description, --emoji, --tag, --resources options
Add a bundled skill that teaches the agent how to create, edit, and
manage custom skills. This enables the agent to extend its own
capabilities by writing new SKILL.md files.
Features:
- Complete SKILL.md format reference
- Examples for creating translation and code formatter skills
- Best practices for skill development
- Script inclusion guidance
- Skill precedence explanation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add English/Chinese language switch links to skills READMEs
- Update root README.md with new skills features and CLI examples
- Link to full skills documentation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Document plugin system in Loading & Precedence section
- Add guidance on when to use plugins vs `add` command
- Create README.zh-CN.md with full Chinese translation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add plugin.ts with manifest loading and plugin discovery
- Scan node_modules for packages with multica.plugin.json
- Auto-discover and load skills from installed npm packages
- Integrate plugin skills into SkillManager via loader.ts
- Add workspaceDir and pluginPaths options to SkillManagerOptions
- Export plugin types and functions from index.ts
This enables users to install skill packages via npm and have them
automatically discovered without running `skills add`.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Document new Phase 5 features:
- Status diagnostics with diagnostic types table
- Async serialization API and utilities
- Updated troubleshooting section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Export checkEligibilityDetailed, DiagnosticItem, serialize, and
related utilities from skills index.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Apply async serialization to prevent concurrent operations:
- addSkill: serialized by target skill name
- removeSkill: serialized by skill name
- installSkill: serialized by skill ID
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Improve skills:cli status command with:
- Summary view grouping ineligible skills by issue type
- Detailed view showing requirements checklist and diagnostics
- Color-coded output for better readability
- Quick actions section with actionable hints
- Support for verbose mode (-v) for additional details
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Enhance eligibility checking to provide detailed diagnostics including:
- Diagnostic type categorization (binary, env, platform, config)
- Actionable hints for resolving issues
- Platform-specific install suggestions for common tools
- API key source hints for well-known services
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add serialize module to prevent concurrent operations from corrupting
files when multiple add/remove/install operations run simultaneously.
- Queue-based serialization by key
- Utility functions: isProcessing, getQueueLength, waitForKey, waitForAll
- Standard SerializeKeys for common operations
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implement autocomplete input with visual dropdown suggestions:
- Shows matching commands as you type /
- Use arrow keys or Tab to navigate suggestions
- Enter to select, Escape to dismiss
- Displays command descriptions alongside names
No external dependencies - uses raw terminal control codes.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Integrate SkillManager with interactive CLI:
- Tab completion for /command prefixes
- Combined completion for built-in and skill commands
- Skill invocation handling with instructions context
- Updated /help to display available skill commands
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add invocation capabilities to SkillManager:
- getSkillCommands: get user-invocable skill command specs
- resolveCommand: match user input to skill invocation
- getCompletions: get tab completions for command prefix
- buildModelSkillsPrompt: build prompt excluding user-only skills
Export invoke module functions for external use.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Implement skill command invocation system:
- resolveInvocationPolicy: get skill's invocation settings
- isUserInvocable/isModelInvocable: check invocation eligibility
- sanitizeCommandName: normalize skill names for commands
- buildSkillCommands: generate command specs from skills
- findSkillCommand: match command by name or skill ID
- resolveSkillInvocation: parse user input to skill invocation
- getCommandCompletions: tab completion for skill commands
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Rename the business-layer concept from "Device ID" to "Hub ID" for
better user comprehension. The underlying network transport layer
still uses deviceId — Hub ID is passed as the deviceId value.
- Rename device.ts → hub-identity.ts, getDeviceId → getHubId
- Storage file: ~/.super-multica/device-id → ~/.super-multica/hub-id
- Hub property: deviceId → hubId
- API response field: deviceId → hubId
- Console UI label: "Device ID" → "Hub ID"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use generic OPENROUTER_* env vars (OPENROUTER_API_KEY, OPENROUTER_BASE_URL,
OPENROUTER_MODEL) via the existing fallback mechanism instead of hardcoding
mappings to OPENAI_* vars. Also add a guard when resolveModel returns
undefined to throw a clear error instead of crashing on property access.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add managed skills directory (~/.super-multica/skills/) to loader
- Change discoverSkillDirs to recursively scan up to 3 levels deep
- Skip hidden directories during scan
- Fixes skills installed via `skills add` not being discovered
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add new CLI commands:
- add <source>: Add skill from GitHub (owner/repo format)
- remove <name>: Remove installed skill
- Support for --force flag to overwrite existing
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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>