process sidecar: independent process manager for long-running work
Introduces a separate Bun process (port 5100) that owns all spawned processes and long-running work, so the API server can restart freely without disrupting active sessions. The sidecar owns: - Anthropic proxy (port 5051) with persisted secret across restarts - Claude Code process spawning and session tracking (--resume support) - Pi agent spawning and RPC lifecycle (prompt/abort/thinking) - Job queue engine (lane processing, retries, notifications) The API server becomes a thin client that forwards commands over a single WebSocket connection with auto-reconnect. send-claude-code.ts goes from 550 lines of spawn logic to 73 lines of sidecar delegation. State persisted to data/sidecar/state.json every 30s and on shutdown. Lockfile prevents duplicate instances. See SIDECAR.md for full docs and manual testing procedures. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -6,8 +6,8 @@ const ANTHROPIC_API_BASE = 'https://api.anthropic.com';
|
||||
const CREDENTIALS_PATH = join(homedir(), '.claude', '.credentials.json');
|
||||
|
||||
// Generate a random proxy secret at startup — shared with Claude Code spawns
|
||||
// Prefix with sk-ant- so Claude Code accepts it as a valid API key format
|
||||
export const proxySecret = `sk-ant-proxy01-${crypto.randomUUID()}`;
|
||||
// Prefix must match a real Anthropic API key format (sk-ant-api03-*) so Claude Code accepts it
|
||||
export const proxySecret = `sk-ant-api03-${crypto.randomUUID()}`;
|
||||
|
||||
type CredentialsFile = {
|
||||
claudeAiOauth?: {
|
||||
|
||||
Reference in New Issue
Block a user