Reverse-engineer the missing daemon + remoteControlServer implementation
by tracing the call chain from existing code:
- src/daemon/main.ts: restore from stub to full supervisor (spawn/monitor
workers, exponential backoff restart, graceful shutdown)
- src/daemon/workerRegistry.ts: restore from stub to worker dispatcher
(remoteControl kind → runBridgeHeadless())
- src/commands/remoteControlServer/: new slash command /remote-control-server
(alias /rcs) for managing the daemon from REPL
- build.ts + scripts/dev.ts: enable DAEMON feature flag
Both official CLI 2.1.92 and our codebase had the command registered in
commands.ts but the directory and daemon implementation were missing.
The bottom layer (runBridgeHeadless in bridgeMain.ts) was already complete.
Co-authored-by: unraid <local@unraid.local>
Add xAI Grok as a new API provider. Reuses OpenAI-compatible message/tool
converters and stream adapter with Grok-specific client and model mapping.
Default model mapping:
opus → grok-4.20-reasoning
sonnet → grok-3-mini-fast
haiku → grok-3-mini-fast
Users can customize mapping via:
- GROK_MODEL env var (override all)
- GROK_MODEL_MAP env var (JSON family map, e.g. {"opus":"grok-4"})
- GROK_DEFAULT_{FAMILY}_MODEL env vars
Activation: CLAUDE_CODE_USE_GROK=1 or modelType: "grok" in settings.json
Also integrates with /provider command for runtime switching.
- buddy.ts:105: remove unsafe (context as any).messages cast.
ToolUseContext already declares messages: Message[] at Tool.ts:250,
so context.messages is properly typed. Other commands (feedback,
copy, export) access it the same way without cast.
- companionReact.ts:154: wrap resp.json() in try/catch for defensive
JSON parsing. Malformed 200 responses now return null instead of
propagating to the outer catch.
Rate-limit timing (set before API call) kept as-is — matches official
ZUK pattern: prevents retry-storm on transient failures.
src/ path alias suggestions dismissed — project uses relative paths.
Auto-unmute on /buddy view kept — matches official behavior.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- buddy.ts: return type Promise<null> → Promise<React.ReactNode>
to match LocalJSXCommandCall interface (CompanionCard path returns
ReactElement, not null).
- CompanionCard.tsx: clamp stat value to 0..100 before .repeat()
to prevent negative count runtime error on out-of-range values.
Import path alias suggestions (src/ vs ../) dismissed — project
convention uses relative paths (verified against color.ts, help.ts).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>