- Add rewrites in next.config.ts to proxy /api/* to api-dev.copilothub.ai
- Update docs to reflect new local dev workflow (no devd needed)
- Fix web port number in CLAUDE.md (3001 → 3000)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add email/code login with verification
- Add Google OAuth login
- Add desktop callback API route
- Add request service with device ID handling
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add auth IPC handlers (main process)
- Add auth store with Zustand (renderer)
- Add login page with branded UI
- Add AuthGuard for protected routes
- Add user dropdown menu in sidebar footer
- Support deep link (multica://) for production
- Support local HTTP callback for development
Reference: https://github.com/CapSoftware/Cap
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Update root dev script to build packages before watching
- Add --no-dts flag to package dev scripts to avoid DTS race conditions
- Document monorepo development workflow in README
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove remarkMath and rehypeKatex plugins that caused text wrapping
issues by interpreting $ signs as LaTeX delimiters
- Configure remarkGfm with singleTilde: false to prevent single ~ from
being parsed as strikethrough (e.g., ~1000 should not become <del>)
- Only double tilde ~~text~~ now renders as strikethrough
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move channel plugin initialization (initChannels + ChannelManager
constructor) before restoreAgents() to prevent TypeError when
createAgent() calls channelManager.listChannelInfos() during restore.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add sendFileToTelegram method that decodes base64 file data and sends
it via grammy's InputFile API. Handle send_file RoutedMessage action
in the virtual device sendCallback.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Create onChannelSendFile callback in Hub.createAgent() that tries the
channel plugin path first (local file), then falls back to the gateway
path (base64 over RoutedMessage). Also pass channel info to agent.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add ChannelInfo type and buildChannelsSection() that informs the LLM
about connected messaging channels and their capabilities (e.g. send
files). Wire through SystemPromptOptions and runner.ts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Prepend [ChannelName · private/group] prefix to debounced messages so
the LLM knows the message source. Add sendFile() for outbound media
routing and listChannelInfos() for system prompt channel awareness.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New send_file tool with TypeBox schema, auto-detect media type from
file extension, and file validation. Wired through AgentOptions and
resolveTools with conditional registration when callback is provided.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add OutboundMedia interface and OutboundMediaType to the channel type
system. Implement sendMedia in the Telegram plugin using grammy's
InputFile API with HTML caption formatting and plain-text fallback.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Guide the LLM to evaluate snippet quality after web_search and
follow up with web_fetch on the most relevant URLs when deeper
content is needed for accurate answers.
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Hidden directory ~/.super-multica is not user-friendly for a working
directory. Move default workspace base to ~/Documents/Multica so
users can easily find agent-created files in Finder.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Clarify that local dev needs no .env (GATEWAY_URL set in package.json)
- Document GATEWAY_URL override for local gateway testing
- Add detailed explanation of both URLs (Gateway vs API Server)
- List dev/prod values for each environment variable
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add MessageSource type to track where user messages originate (local, gateway, channel)
- Broadcast inbound messages from all channels to local Desktop UI via Hub.onInboundMessage()
- Persist source field in JSONL session storage so it survives page refresh
- Display source icon (Monitor/Smartphone/Send) with tooltip for non-local user messages
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
`pnpm dev` now connects to dev gateway by default. Support runtime
GATEWAY_URL env var to override, so no per-worktree .env setup needed.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Each agent profile now gets a dedicated workspace directory
(~/.super-multica/workspace/{profileId}) used as the default CWD
for tool operations. Supports override via MULTICA_WORKSPACE_DIR
env var or config.json workspaceDir field. The workspace path is
injected into system prompt and runtime info.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
A subagent that times out loses all its work, so a generous default
reduces wasted compute. Update the constant, tool description, system
prompt guidelines, and documentation to reflect the new 1800s default.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add xlsx skill with openpyxl/pandas workflows, formula-first approach, LibreOffice recalculation, financial model color coding standards, and formula verification checklist.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add pptx skill with template-based editing workflow, PptxGenJS creation from scratch, slide thumbnails, design guidelines, and visual QA process.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add pdf skill with text/table extraction, merge/split, form filling (fillable and non-fillable), PDF creation with reportlab, and command-line tools integration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add docx skill with document creation via docx-js, XML editing workflow (unpack/edit/pack), tracked changes, comments, and LibreOffice integration for PDF conversion.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Agent was skipping all web searches because instructions used optional
language ("if...", "after reviewing..."). Changed key searches from
conditional to mandatory (MUST/REQUIRED), added a checkpoint after
Step 1b, and rewrote Web Search Guidelines as "Requirements" with a
minimum of 3 mandatory searches per analysis.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When writeInternal fails with a transient error (e.g. undici
"terminated", connection reset, 502/503), wait 5 seconds and retry
once. This prevents continuation tasks from silently failing when
the LLM streaming connection is interrupted mid-generation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>