@recursiv/cli 0.1.11 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/logger.ts","../../src/lib/config.ts","../../src/lib/env.ts","../../src/lib/auth-flow.ts","../../src/lib/credentials.ts","../../src/commands/mcp-install.ts","../../src/commands/quickstart.ts","../../src/chat/renderer.ts","../../src/chat/session.ts","../../src/chat/system-prompt.ts","../../src/chat/tools.ts","../../src/chat/agent.ts","../../src/bin/recursiv.ts","../../src/lib/cli-errors.ts","../../src/commands/init.ts","../../src/lib/templates.ts","../../src/lib/package-manager.ts","../../src/templates/registry.ts","../../src/commands/dev.ts","../../src/commands/deploy.ts","../../src/commands/auth.ts","../../src/commands/info.ts","../../src/commands/brain.tsx","../../src/ui/app.tsx","../../src/commands/studio.tsx","../../src/commands/browser-use.ts","../../src/commands/api.ts","../../src/lib/api.ts"],"sourcesContent":["import pc from 'picocolors';\n\nexport const log = {\n info(msg: string) {\n console.log(pc.cyan('info') + ' ' + msg);\n },\n success(msg: string) {\n console.log(pc.green('ok') + ' ' + msg);\n },\n warn(msg: string) {\n console.log(pc.yellow('warn') + ' ' + msg);\n },\n error(msg: string) {\n console.error(pc.red('error') + ' ' + msg);\n },\n step(n: number, total: number, msg: string) {\n console.log(pc.dim(`[${n}/${total}]`) + ' ' + msg);\n },\n blank() {\n console.log();\n },\n};\n\nexport function banner() {\n console.log();\n console.log(pc.bold('Recursiv') + pc.dim(' — build and ship apps with AI'));\n console.log();\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport interface RecursivConfig {\n version: number;\n project: {\n name: string;\n template: string;\n framework: string;\n };\n api: {\n baseUrl: string;\n };\n dev: {\n port: number;\n command: string;\n };\n}\n\nconst CONFIG_FILE = '.recursiv.json';\n\nexport function configPath(dir: string): string {\n return join(dir, CONFIG_FILE);\n}\n\nexport async function readConfig(dir: string): Promise<RecursivConfig | null> {\n try {\n const raw = await readFile(configPath(dir), 'utf-8');\n return JSON.parse(raw) as RecursivConfig;\n } catch {\n return null;\n }\n}\n\nexport async function writeConfig(dir: string, config: RecursivConfig): Promise<void> {\n await writeFile(configPath(dir), JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n}\n\nexport function createConfig(opts: {\n name: string;\n template: string;\n framework: string;\n port?: number;\n devCommand?: string;\n}): RecursivConfig {\n return {\n version: 1,\n project: {\n name: opts.name,\n template: opts.template,\n framework: opts.framework,\n },\n api: {\n baseUrl: 'https://api.recursiv.io/api/v1',\n },\n dev: {\n port: opts.port ?? 3000,\n command: opts.devCommand ?? 'npm run dev',\n },\n };\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport async function writeEnvFile(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n const content = [\n '# Recursiv API key',\n `RECURSIV_API_KEY=${apiKey}`,\n '',\n ].join('\\n');\n await writeFile(envPath, content, 'utf-8');\n}\n\nexport async function readApiKeyFromEnv(dir: string): Promise<string | null> {\n try {\n const raw = await readFile(join(dir, '.env'), 'utf-8');\n const match = raw.match(/^RECURSIV_API_KEY=(.+)$/m);\n return match?.[1]?.trim() ?? null;\n } catch {\n return null;\n }\n}\n\nexport async function updateApiKeyInEnv(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n let content: string;\n try {\n content = await readFile(envPath, 'utf-8');\n if (content.includes('RECURSIV_API_KEY=')) {\n content = content.replace(/^RECURSIV_API_KEY=.+$/m, `RECURSIV_API_KEY=${apiKey}`);\n } else {\n content += `\\nRECURSIV_API_KEY=${apiKey}\\n`;\n }\n } catch {\n content = `RECURSIV_API_KEY=${apiKey}\\n`;\n }\n await writeFile(envPath, content, 'utf-8');\n}\n","import prompts from 'prompts';\nimport pc from 'picocolors';\nimport { log } from './logger.js';\n\nconst API_KEY_PATTERN = /^sk_(live|test)_[a-zA-Z0-9]{20,}$/;\nconst DASHBOARD_URL = 'https://recursiv.io/dashboard/api-keys';\n\n// Mirror the server's AVAILABLE_SCOPES list (packages/server/src/features/\n// api-keys/apiKeys.router.ts). The dashboard's create-key form defaults to\n// all-selected; keep the CLI quickstart in lockstep so a freshly-minted\n// key works for the full build-your-first-app flow (which needs at minimum\n// organizations:write for provision_app + projects:write for deploy).\nconst DEFAULT_SCOPES = [\n 'posts:read',\n 'posts:write',\n 'users:read',\n 'users:write',\n 'communities:read',\n 'communities:write',\n 'chat:read',\n 'chat:write',\n 'projects:read',\n 'projects:write',\n 'agents:read',\n 'agents:write',\n 'organizations:read',\n 'organizations:write',\n 'memory:read',\n 'memory:write',\n 'notifications:read',\n 'notifications:write',\n 'settings:read',\n 'settings:write',\n 'tags:read',\n 'tags:write',\n 'uploads:write',\n 'commands:read',\n 'commands:write',\n 'billing:read',\n 'billing:write',\n];\n\nexport function isValidKeyFormat(key: string): boolean {\n return API_KEY_PATTERN.test(key);\n}\n\nexport async function validateApiKey(apiKey: string, baseUrl: string): Promise<boolean> {\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Terminal signup flow — create a Recursiv account and API key without a browser.\n *\n * Flow (passwordless OTP):\n * 1. Prompt for email\n * 2. Send 6-digit OTP code via server\n * 3. Prompt user to enter the code\n * 4. Verify OTP → get session cookie\n * 5. Use session cookie to create an API key via REST endpoint\n * 6. Return the API key string\n */\nexport async function terminalSignup(baseUrl: string): Promise<string | null> {\n // baseUrl is like https://recursiv.io/api/v1 — we need the root for auth endpoints\n const rootUrl = baseUrl.replace(/\\/api\\/v1\\/?$/, '');\n\n console.log();\n console.log(pc.bold('Sign in to Recursiv'));\n console.log(pc.dim('We\\'ll send a 6-digit code to your email — no password needed.'));\n console.log(pc.dim('If your email isn\\'t registered yet, we\\'ll create a free account.'));\n console.log(pc.dim('Free tier: 1,000 API calls/day, 1 agent, 3 projects'));\n console.log();\n\n const { email } = await prompts(\n {\n type: 'text',\n name: 'email',\n message: 'Email',\n validate: (v: string) => {\n if (!v || !v.includes('@')) return 'Valid email required';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n // Better Auth requires an Origin header for CSRF protection\n const origin = rootUrl || 'https://api.recursiv.io';\n const authHeaders = { 'Content-Type': 'application/json', Origin: origin };\n\n // Send OTP code\n try {\n const sendRes = await fetch(`${rootUrl}/api/auth/email-otp/send-verification-otp`, {\n method: 'POST',\n headers: authHeaders,\n body: JSON.stringify({ email, type: 'sign-in' }),\n });\n\n if (!sendRes.ok) {\n const errBody = await sendRes.text().catch(() => '');\n log.error(`Failed to send code (${sendRes.status}): ${errBody || 'Unknown error'}`);\n return null;\n }\n } catch (err) {\n log.error(\n `Could not reach ${rootUrl} — ${err instanceof Error ? err.message : 'network error'}`,\n );\n log.info(`You can create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n log.success(`Verification code sent to ${email}`);\n console.log();\n\n // Prompt for OTP code\n const { code } = await prompts(\n {\n type: 'text',\n name: 'code',\n message: 'Enter the 6-digit code',\n validate: (v: string) => {\n if (!v || !/^\\d{6}$/.test(v.trim())) return 'Enter the 6-digit code from your email';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n // Verify OTP and sign in. better-auth's email-OTP plugin exposes two\n // separate endpoints:\n // - /api/auth/sign-in/email-otp → signs an existing user in (returns\n // a session), or creates the account if disableSignUp is false (our\n // config). This is the right endpoint for both first-time signup and\n // returning sign-in.\n // - /api/auth/email-otp/verify-email → strictly for confirming an\n // already-signed-in user's email address. Existing users hit\n // \"Invalid OTP\" here because the OTP was minted with type='sign-in'.\n let sessionCookie: string | null = null;\n\n try {\n const verifyRes = await fetch(`${rootUrl}/api/auth/sign-in/email-otp`, {\n method: 'POST',\n headers: authHeaders,\n body: JSON.stringify({ email, otp: code.trim() }),\n redirect: 'manual',\n });\n\n if (verifyRes.ok || verifyRes.status === 302) {\n sessionCookie = extractSessionCookie(verifyRes);\n } else {\n const errBody = await verifyRes.text().catch(() => '');\n log.error(`Verification failed (${verifyRes.status}): ${errBody || 'Invalid or expired code'}`);\n return null;\n }\n } catch (err) {\n log.error(\n `Verification failed — ${err instanceof Error ? err.message : 'network error'}`,\n );\n return null;\n }\n\n if (!sessionCookie) {\n log.error('No session returned from server');\n log.info(`Create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n log.success('Authenticated');\n\n // Create an API key using the session\n try {\n const keyRes = await fetch(`${baseUrl}/api-keys`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Cookie: sessionCookie,\n },\n body: JSON.stringify({\n name: 'CLI (auto-created)',\n scopes: DEFAULT_SCOPES,\n }),\n });\n\n if (!keyRes.ok) {\n const errBody = await keyRes.text().catch(() => '');\n log.error(`Failed to create API key (${keyRes.status}): ${errBody}`);\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n const { data } = (await keyRes.json()) as { data: { key: string } };\n log.success(`API key created (free tier: 1,000 calls/day)`);\n return data.key;\n } catch (err) {\n log.error(\n `Failed to create API key: ${err instanceof Error ? err.message : 'unknown error'}`,\n );\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n}\n\n/**\n * Extract session cookie from a Better Auth response.\n * Better Auth sets cookies via set-cookie header.\n */\nfunction extractSessionCookie(res: Response): string | null {\n // In Node.js, getSetCookie() returns individual cookie strings\n const setCookieHeaders =\n 'getSetCookie' in res.headers\n ? (res.headers as { getSetCookie(): string[] }).getSetCookie()\n : [];\n\n // Fall back to raw header if getSetCookie not available\n if (setCookieHeaders.length === 0) {\n const raw = res.headers.get('set-cookie');\n if (raw) {\n // Multiple cookies may be comma-separated (though non-standard)\n return raw\n .split(',')\n .map((c) => c.split(';')[0].trim())\n .join('; ');\n }\n return null;\n }\n\n // Extract cookie name=value pairs (strip attributes)\n return setCookieHeaders.map((c) => c.split(';')[0].trim()).join('; ');\n}\n\nexport async function promptApiKey(): Promise<string | null> {\n console.log(\n pc.dim(\n `Get your API key from ${pc.underline(DASHBOARD_URL)}\\n` +\n `Keys start with sk_live_ or sk_test_`,\n ),\n );\n console.log();\n\n const { apiKey } = await prompts(\n {\n type: 'text',\n name: 'apiKey',\n message: 'API key (or press Enter to skip)',\n validate: (value: string) => {\n if (!value) return true; // allow skip\n if (!isValidKeyFormat(value)) {\n return 'Invalid key format. Keys start with sk_live_ or sk_test_';\n }\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (!apiKey) {\n log.warn('No API key provided — you can add one later in .env');\n return null;\n }\n\n return apiKey;\n}\n\nexport async function promptAndValidateApiKey(baseUrl: string): Promise<string | null> {\n const apiKey = await promptApiKey();\n if (!apiKey) return null;\n\n const valid = await validateApiKey(apiKey, baseUrl);\n if (!valid) {\n log.warn('Could not validate API key (server unreachable or invalid key)');\n log.info('Key saved to .env — you can update it later');\n } else {\n log.success('API key validated');\n }\n\n return apiKey;\n}\n\n/**\n * Get an API key — either from env, by prompting for an existing key,\n * or by creating a new account via terminal signup.\n */\nexport async function getOrCreateApiKey(baseUrl: string): Promise<string | null> {\n console.log();\n\n const { method } = await prompts(\n {\n type: 'select',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n {\n title: 'Sign in or create an account with my email',\n description: 'We\\'ll send a 6-digit code. Works whether you\\'re new or returning.',\n value: 'signup',\n },\n {\n title: 'Paste an existing API key',\n description: 'Use a key you\\'ve already saved from the dashboard',\n value: 'paste',\n },\n {\n title: 'Skip for now',\n description: 'Add an API key later in .env',\n value: 'skip',\n },\n ],\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (method === 'signup') {\n return terminalSignup(baseUrl);\n }\n\n if (method === 'paste') {\n return promptAndValidateApiKey(baseUrl);\n }\n\n log.warn('No API key — you can add one later in .env');\n return null;\n}\n","/**\n * Global credential store for the Recursiv CLI.\n * Stores API keys in ~/.recursiv/credentials (JSON).\n *\n * Resolution order:\n * 1. Environment variables (RECURSIV_API_KEY, ANTHROPIC_API_KEY)\n * 2. Project .env file\n * 3. ~/.recursiv/credentials\n */\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\n\nconst RECURSIV_DIR = join(homedir(), '.recursiv');\nconst CREDENTIALS_PATH = join(RECURSIV_DIR, 'credentials');\n\ninterface Credentials {\n recursivApiKey?: string | null;\n anthropicApiKey?: string | null;\n cliAgentId?: string | null;\n}\n\n/**\n * Read stored credentials from ~/.recursiv/credentials.\n */\nexport async function readCredentials(): Promise<Credentials> {\n try {\n const raw = await readFile(CREDENTIALS_PATH, 'utf-8');\n return JSON.parse(raw) as Credentials;\n } catch {\n return {};\n }\n}\n\n/**\n * Save credentials to ~/.recursiv/credentials.\n * Merges with existing credentials.\n */\nexport async function saveCredentials(creds: Partial<Credentials>): Promise<void> {\n await mkdir(RECURSIV_DIR, { recursive: true });\n const existing = await readCredentials();\n const merged = { ...existing, ...creds };\n await writeFile(CREDENTIALS_PATH, JSON.stringify(merged, null, 2) + '\\n', {\n encoding: 'utf-8',\n mode: 0o600, // Owner-only read/write\n });\n}\n\n/**\n * Resolve the Recursiv API key from all sources.\n */\nexport async function resolveRecursivKey(projectDir?: string): Promise<string | null> {\n // 1. Environment\n const envKey = process.env.RECURSIV_API_KEY;\n if (envKey) return envKey;\n\n // 2. Project .env\n if (projectDir) {\n try {\n const { readApiKeyFromEnv } = await import('./env.js');\n const projKey = await readApiKeyFromEnv(projectDir);\n if (projKey) return projKey;\n } catch {\n // No project env\n }\n }\n\n // 3. ~/.recursiv/credentials\n const creds = await readCredentials();\n return creds.recursivApiKey || null;\n}\n\n/**\n * Resolve the Anthropic API key from all sources.\n */\nexport async function resolveAnthropicKey(): Promise<string | null> {\n // 1. Environment\n if (process.env.ANTHROPIC_API_KEY) return process.env.ANTHROPIC_API_KEY;\n\n // 2. ~/.recursiv/credentials\n const creds = await readCredentials();\n return creds.anthropicApiKey || null;\n}\n","/**\n * `recursiv mcp install` — configure the Recursiv MCP server for any supported host.\n *\n * Supported targets:\n * claude-code → .mcp.json (project-level)\n * claude-desktop → claude_desktop_config.json (user-level)\n * codex → ~/.codex/config.toml or `codex mcp add`\n * opencode → opencode.json (project-level)\n */\nimport { existsSync } from 'node:fs';\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { homedir, platform } from 'node:os';\nimport pc from 'picocolors';\n\nexport type McpTarget = 'claude-code' | 'claude-desktop' | 'codex' | 'opencode';\n\nconst VALID_TARGETS: McpTarget[] = ['claude-code', 'claude-desktop', 'codex', 'opencode'];\n\ninterface InstallOptions {\n target: string;\n apiKey?: string;\n global?: boolean;\n}\n\nexport async function mcpInstallCommand(opts: InstallOptions): Promise<void> {\n const target = opts.target as McpTarget;\n\n if (!VALID_TARGETS.includes(target)) {\n console.error(\n pc.red('error') +\n ` Unknown target \"${opts.target}\". Valid targets: ${VALID_TARGETS.join(', ')}`,\n );\n process.exit(1);\n }\n\n // Resolve API key — check all sources, auto-auth if missing\n const { resolveRecursivKey, saveCredentials } = await import('../lib/credentials.js');\n let apiKey = opts.apiKey || await resolveRecursivKey(process.cwd());\n\n if (!apiKey) {\n console.log();\n console.log(pc.dim(' No Recursiv API key found. Let\\'s authenticate.'));\n console.log();\n\n const { getOrCreateApiKey } = await import('../lib/auth-flow.js');\n const baseUrl = process.env.RECURSIV_BASE_URL || 'https://api.recursiv.io/api/v1';\n apiKey = await getOrCreateApiKey(baseUrl);\n\n if (!apiKey) {\n console.error(pc.red(' error') + ' Authentication required to continue.');\n process.exit(1);\n }\n\n await saveCredentials({ recursivApiKey: apiKey });\n console.log(pc.dim(' Credentials saved to ~/.recursiv/credentials'));\n console.log();\n }\n\n switch (target) {\n case 'claude-code':\n await installClaudeCode(apiKey, opts.global);\n break;\n case 'claude-desktop':\n await installClaudeDesktop(apiKey);\n break;\n case 'codex':\n await installCodex(apiKey);\n break;\n case 'opencode':\n await installOpenCode(apiKey, opts.global);\n break;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Claude Code — .mcp.json (project) or ~/.claude/settings.json (global)\n// ---------------------------------------------------------------------------\n\nasync function installClaudeCode(apiKey: string, global?: boolean): Promise<void> {\n if (global) {\n // Global: add to ~/.claude/settings.json\n const claudeDir = join(homedir(), '.claude');\n const settingsPath = join(claudeDir, 'settings.json');\n await mkdir(claudeDir, { recursive: true });\n\n const settings = await readJsonSafe(settingsPath);\n if (!settings.mcpServers) settings.mcpServers = {};\n settings.mcpServers.recursiv = mcpServerEntry(apiKey);\n await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\\n', 'utf-8');\n console.log(pc.green('✓') + ` Recursiv MCP added to ${pc.dim(settingsPath)}`);\n } else {\n // Project-level: .mcp.json\n const mcpPath = join(process.cwd(), '.mcp.json');\n const config = await readJsonSafe(mcpPath);\n if (!config.mcpServers) config.mcpServers = {};\n config.mcpServers.recursiv = mcpServerEntry(apiKey);\n await writeFile(mcpPath, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n console.log(pc.green('✓') + ` Recursiv MCP added to ${pc.dim(mcpPath)}`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Claude Desktop — claude_desktop_config.json\n// ---------------------------------------------------------------------------\n\nfunction claudeDesktopConfigPath(): string {\n const p = platform();\n if (p === 'darwin') {\n return join(homedir(), 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');\n }\n if (p === 'win32') {\n return join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'Claude', 'claude_desktop_config.json');\n }\n // Linux\n return join(homedir(), '.config', 'claude', 'claude_desktop_config.json');\n}\n\nasync function installClaudeDesktop(apiKey: string): Promise<void> {\n const configPath = claudeDesktopConfigPath();\n const dir = resolve(configPath, '..');\n await mkdir(dir, { recursive: true });\n\n const config = await readJsonSafe(configPath);\n if (!config.mcpServers) config.mcpServers = {};\n config.mcpServers.recursiv = mcpServerEntry(apiKey);\n await writeFile(configPath, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n console.log(pc.green('✓') + ` Recursiv MCP added to ${pc.dim(configPath)}`);\n console.log(pc.dim(' Restart Claude Desktop to pick up the change.'));\n}\n\n// ---------------------------------------------------------------------------\n// Codex — ~/.codex/config.toml\n// ---------------------------------------------------------------------------\n\nasync function installCodex(apiKey: string): Promise<void> {\n const codexDir = join(homedir(), '.codex');\n const configPath = join(codexDir, 'config.toml');\n await mkdir(codexDir, { recursive: true });\n\n // Read existing config (preserve other settings)\n let existing = '';\n try {\n existing = await readFile(configPath, 'utf-8');\n } catch {\n // File doesn't exist yet\n }\n\n // Remove existing recursiv MCP block if present\n existing = removeTomlSection(existing, 'mcp_servers.recursiv');\n\n // Append new config\n const tomlBlock = [\n '',\n '[mcp_servers.recursiv]',\n 'command = \"npx\"',\n 'args = [\"-y\", \"@recursiv/mcp\"]',\n '',\n '[mcp_servers.recursiv.env]',\n `RECURSIV_API_KEY = \"${apiKey}\"`,\n ].join('\\n');\n\n const final = existing.trimEnd() + '\\n' + tomlBlock + '\\n';\n await writeFile(configPath, final, 'utf-8');\n console.log(pc.green('✓') + ` Recursiv MCP added to ${pc.dim(configPath)}`);\n}\n\n// ---------------------------------------------------------------------------\n// OpenCode — opencode.json (project) or ~/.config/opencode/opencode.json (global)\n// ---------------------------------------------------------------------------\n\nasync function installOpenCode(apiKey: string, global?: boolean): Promise<void> {\n let configPath: string;\n\n if (global) {\n const configDir = join(homedir(), '.config', 'opencode');\n await mkdir(configDir, { recursive: true });\n configPath = join(configDir, 'opencode.json');\n } else {\n configPath = join(process.cwd(), 'opencode.json');\n }\n\n const config = await readJsonSafe(configPath);\n if (!config.mcp) config.mcp = {};\n config.mcp.recursiv = {\n type: 'local',\n command: ['npx', '-y', '@recursiv/mcp'],\n enabled: true,\n environment: {\n RECURSIV_API_KEY: apiKey,\n },\n };\n\n await writeFile(configPath, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n console.log(pc.green('✓') + ` Recursiv MCP added to ${pc.dim(configPath)}`);\n}\n\n// ---------------------------------------------------------------------------\n// Verify — check that the MCP server starts and responds\n// ---------------------------------------------------------------------------\n\nexport async function mcpVerifyCommand(): Promise<void> {\n const { spawn } = await import('node:child_process');\n\n const apiKey = process.env.RECURSIV_API_KEY;\n if (!apiKey) {\n console.error(pc.red(' error') + ' RECURSIV_API_KEY not set in environment.');\n process.exit(1);\n }\n\n console.log(pc.dim(' Verifying Recursiv MCP server...'));\n\n const child = spawn('npx', ['-y', '@recursiv/mcp'], {\n env: { ...process.env, RECURSIV_API_KEY: apiKey },\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n // Send a JSON-RPC initialize request\n const initRequest = JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'initialize',\n params: {\n protocolVersion: '2024-11-05',\n capabilities: {},\n clientInfo: { name: 'recursiv-cli', version: '0.1.4' },\n },\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout.on('data', (chunk: Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr.on('data', (chunk: Buffer) => {\n stderr += chunk.toString();\n });\n\n // Write the request\n child.stdin.write(initRequest + '\\n');\n\n // Wait for response or timeout\n const result = await Promise.race([\n new Promise<'ok' | 'error'>((resolve) => {\n const check = setInterval(() => {\n if (stdout.includes('\"result\"')) {\n clearInterval(check);\n resolve('ok');\n }\n if (stdout.includes('\"error\"') || stderr.includes('Missing')) {\n clearInterval(check);\n resolve('error');\n }\n }, 100);\n }),\n new Promise<'timeout'>((resolve) => setTimeout(() => resolve('timeout'), 10000)),\n ]);\n\n child.kill();\n\n switch (result) {\n case 'ok':\n console.log(pc.green(' ✓') + ' MCP server responded successfully.');\n try {\n const parsed = JSON.parse(stdout.trim().split('\\n').pop() || '{}');\n const serverName = parsed?.result?.serverInfo?.name;\n const version = parsed?.result?.serverInfo?.version;\n if (serverName) {\n console.log(pc.dim(` Server: ${serverName} v${version || '?'}`));\n }\n } catch {\n // Fine — we confirmed it works\n }\n break;\n case 'error':\n console.error(pc.red(' ✗') + ' MCP server returned an error.');\n if (stderr) console.error(pc.dim(` ${stderr.trim()}`));\n process.exit(1);\n break;\n case 'timeout':\n console.error(pc.red(' ✗') + ' MCP server did not respond within 10s.');\n process.exit(1);\n break;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction mcpServerEntry(apiKey: string) {\n return {\n command: 'npx',\n args: ['-y', '@recursiv/mcp'],\n env: {\n RECURSIV_API_KEY: apiKey,\n },\n };\n}\n\nasync function readJsonSafe(path: string): Promise<Record<string, any>> {\n try {\n const raw = await readFile(path, 'utf-8');\n return JSON.parse(raw);\n } catch {\n return {};\n }\n}\n\n/**\n * Remove a TOML section and its key-value pairs.\n * Handles both `[section]` and `[section.sub]` blocks.\n */\nfunction removeTomlSection(content: string, section: string): string {\n const lines = content.split('\\n');\n const result: string[] = [];\n let skipping = false;\n const sectionHeader = `[${section}]`;\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed === sectionHeader || trimmed.startsWith(`[${section}.`)) {\n skipping = true;\n continue;\n }\n if (skipping && trimmed.startsWith('[')) {\n skipping = false;\n }\n if (!skipping) {\n result.push(line);\n }\n }\n\n return result.join('\\n');\n}\n","/**\n * `recursiv quickstart` — opinionated onboarding for users coming through the\n * \"build your first app\" tutorial.\n *\n * Walks a new user through everything they need before pasting the tutorial\n * prompt into their AI client of choice:\n * 1. Verify GitHub CLI is installed + authenticated (we don't try to install\n * or drive its OAuth flow — too OS-sensitive).\n * 2. Resolve or create a Recursiv API key (via getOrCreateApiKey).\n * 3. Ask which AI client the user is pasting into and install the Recursiv\n * MCP server config there.\n * 4. Print final instructions tailored to that client.\n *\n * Quickstart is opinionated by design — it picks the common path. The general\n * primitive is `recursiv mcp install <target>`, which `quickstart` wraps.\n *\n * Safe to re-run — every step is idempotent.\n */\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { platform } from 'node:os';\nimport prompts from 'prompts';\nimport pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\nimport { resolveRecursivKey, saveCredentials } from '../lib/credentials.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { mcpInstallCommand, type McpTarget } from './mcp-install.js';\n\nconst execFileAsync = promisify(execFile);\n\nconst TUTORIAL_URL = 'https://docs.recursiv.io/guides/tutorials/build-your-first-app';\n\ninterface GhCheckResult {\n installed: boolean;\n authenticated: boolean;\n}\n\n/**\n * Check whether the `gh` binary is on PATH and the user is authenticated.\n * Uses execFile (not shell) — no command injection surface.\n */\nexport async function checkGitHubCli(): Promise<GhCheckResult> {\n try {\n await execFileAsync('gh', ['--version']);\n } catch {\n return { installed: false, authenticated: false };\n }\n\n try {\n await execFileAsync('gh', ['auth', 'status']);\n return { installed: true, authenticated: true };\n } catch {\n return { installed: true, authenticated: false };\n }\n}\n\nfunction ghInstallHint(): string {\n const p = platform();\n if (p === 'darwin') return 'Install with: brew install gh';\n if (p === 'win32') return 'Install with: winget install GitHub.cli';\n return 'Install instructions: https://cli.github.com/';\n}\n\n/**\n * Look up the authenticated username for a given Recursiv API key.\n * Returns null on any failure — this is a \"best effort\" cosmetic call.\n */\nasync function fetchUsername(apiKey: string, baseUrl: string): Promise<string | null> {\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n if (!res.ok) return null;\n const body = (await res.json()) as { data?: { username?: string; email?: string } };\n return body.data?.username ?? body.data?.email ?? null;\n } catch {\n return null;\n }\n}\n\ninterface ClientDescriptor {\n target: McpTarget;\n label: string;\n /** Human label used in the closing \"restart X\" instruction. */\n productName: string;\n}\n\nconst CLIENT_CHOICES: ClientDescriptor[] = [\n { target: 'claude-code', label: 'Claude Code (terminal CLI)', productName: 'Claude Code' },\n { target: 'claude-desktop', label: 'Claude Desktop (chat app)', productName: 'Claude Desktop' },\n { target: 'codex', label: 'Codex', productName: 'Codex' },\n { target: 'opencode', label: 'OpenCode', productName: 'OpenCode' },\n];\n\nasync function pickClient(preferred?: McpTarget): Promise<ClientDescriptor> {\n // If the caller already passed --target, honor it without prompting.\n if (preferred) {\n const match = CLIENT_CHOICES.find((c) => c.target === preferred);\n if (match) return match;\n }\n\n const { target } = await prompts(\n {\n type: 'select',\n name: 'target',\n message: 'Which AI client are you pasting the build prompt into?',\n choices: CLIENT_CHOICES.map((c) => ({ title: c.label, value: c.target })),\n initial: 0,\n },\n { onCancel: () => process.exit(1) },\n );\n\n const match = CLIENT_CHOICES.find((c) => c.target === target);\n if (!match) throw new Error(`Unexpected client selection: ${target}`);\n return match;\n}\n\nexport interface QuickstartOptions {\n /** Override for the gh checker (used by tests). */\n ghCheck?: () => Promise<GhCheckResult>;\n /** Skip the client prompt and use this target directly. */\n target?: McpTarget;\n}\n\nexport async function quickstartCommand(opts: QuickstartOptions = {}): Promise<void> {\n console.log();\n console.log(pc.bold(' Setting up Recursiv on this machine') +\n pc.dim(' — GitHub CLI + Recursiv account + MCP config. ~3 minutes.'));\n console.log();\n\n // ---------------------------------------------------------------------------\n // 1. GitHub CLI check\n // ---------------------------------------------------------------------------\n log.step(1, 3, 'Checking GitHub CLI');\n\n const ghCheck = opts.ghCheck ?? checkGitHubCli;\n const gh = await ghCheck();\n\n if (!gh.installed) {\n log.error('GitHub CLI (`gh`) is not installed.');\n log.info(ghInstallHint());\n log.info('After installing, re-run `recursiv quickstart`.');\n process.exit(1);\n return;\n }\n\n if (!gh.authenticated) {\n log.error('GitHub CLI is installed but not authenticated.');\n log.info('Run `gh auth login` in another terminal, then re-run `recursiv quickstart`.');\n process.exit(1);\n return;\n }\n\n log.success('GitHub CLI installed and authenticated');\n\n // ---------------------------------------------------------------------------\n // 2. Recursiv account / API key\n // ---------------------------------------------------------------------------\n log.step(2, 3, 'Checking Recursiv account');\n\n const cwd = process.cwd();\n const config = await readConfig(cwd).catch(() => null);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n\n let apiKey = await resolveRecursivKey(cwd);\n\n if (apiKey) {\n const username = await fetchUsername(apiKey, baseUrl);\n if (username) {\n log.success(`Already authenticated as ${pc.bold(username)}`);\n } else {\n log.success('Already authenticated (using existing API key)');\n }\n } else {\n console.log();\n console.log(pc.dim(' No Recursiv API key found. Let\\'s create one.'));\n console.log();\n\n apiKey = await getOrCreateApiKey(baseUrl);\n if (!apiKey) {\n log.error('Authentication required to continue.');\n process.exit(1);\n return;\n }\n\n await saveCredentials({ recursivApiKey: apiKey });\n log.success('Credentials saved to ~/.recursiv/credentials');\n }\n\n // ---------------------------------------------------------------------------\n // 3. MCP install for the user's chosen client\n // ---------------------------------------------------------------------------\n log.step(3, 3, 'Configuring Recursiv MCP');\n\n const client = await pickClient(opts.target);\n await mcpInstallCommand({ target: client.target, apiKey });\n\n // ---------------------------------------------------------------------------\n // Final instructions\n // ---------------------------------------------------------------------------\n const isWindows = platform() === 'win32';\n const quitHint = isWindows\n ? `fully quit ${client.productName} (exit from the system tray)`\n : `fully quit ${client.productName} (Cmd-Q on macOS)`;\n\n console.log();\n console.log(pc.green(pc.bold(' Done.')) + pc.dim(' Next steps:'));\n console.log();\n console.log(' 1. ' + quitHint);\n console.log(` 2. Reopen ${client.productName} in this folder`);\n console.log(' 3. Paste the prompt from ' + pc.underline(TUTORIAL_URL));\n console.log(' as your first chat message');\n console.log();\n console.log(pc.dim(' Tip: when the client asks to approve the first Recursiv tool call,'));\n console.log(pc.dim(' choose \"Always allow recursiv\" so you are not prompted again.'));\n console.log();\n}\n","/**\n * Terminal renderer for the Recursiv CLI chat agent.\n * Applies inline ANSI colors during live streaming.\n */\nimport pc from 'picocolors';\n\nconst INDENT = ' ';\n\n/**\n * Get usable terminal width (minus indent).\n */\nfunction getWidth(): number {\n return Math.max((process.stdout.columns || 80) - INDENT.length, 40);\n}\n\n/**\n * Word-wrap a plain text string to fit terminal width.\n * Preserves existing newlines. Adds indent prefix to each line.\n */\nfunction wordWrap(text: string, width: number, indent: string = INDENT): string {\n const lines: string[] = [];\n for (const paragraph of text.split('\\n')) {\n if (paragraph.length <= width) {\n lines.push(indent + paragraph);\n continue;\n }\n const words = paragraph.split(/(\\s+)/);\n let current = '';\n for (const word of words) {\n if (current.length + word.length > width && current.length > 0) {\n lines.push(indent + current.trimEnd());\n current = word.trimStart();\n } else {\n current += word;\n }\n }\n if (current.trimEnd()) lines.push(indent + current.trimEnd());\n }\n return lines.join('\\n');\n}\n\n/**\n * Strip ANSI escape codes for accurate length measurement.\n */\nfunction stripAnsi(str: string): number {\n // eslint-disable-next-line no-control-regex\n return str.replace(/\\x1b\\[[0-9;]*m/g, '').length;\n}\n\n/**\n * Apply inline colors to streamed markdown text.\n * Handles: **bold**, `code`, URLs, headings, lists.\n */\nfunction colorize(text: string): string {\n // URLs — cyan + underline\n text = text.replace(/(https?:\\/\\/[^\\s)\\]>]+)/g, pc.cyan(pc.underline('$1')));\n\n // Inline code `...` — yellow\n text = text.replace(/`([^`]+)`/g, pc.yellow('`$1`'));\n\n // Bold **...** — bold white\n text = text.replace(/\\*\\*([^*]+)\\*\\*/g, pc.bold('$1'));\n\n // Italic *...* (but not inside bold)\n text = text.replace(/(?<!\\*)\\*([^*]+)\\*(?!\\*)/g, pc.italic('$1'));\n\n return text;\n}\n\n/**\n * Streams text live with inline color formatting.\n */\nexport class StreamWriter {\n private buffer = '';\n private lineBuffer = '';\n private inCodeBlock = false;\n\n write(chunk: string): void {\n this.buffer += chunk;\n\n // Process chunk character by character to handle code blocks\n for (const char of chunk) {\n this.lineBuffer += char;\n\n if (char === '\\n') {\n this.flushLine();\n }\n }\n }\n\n private flushLine(): void {\n const line = this.lineBuffer;\n this.lineBuffer = '';\n const width = getWidth();\n\n // Toggle code block state\n if (line.trimStart().startsWith('```')) {\n this.inCodeBlock = !this.inCodeBlock;\n process.stdout.write(INDENT + pc.dim(line));\n return;\n }\n\n if (this.inCodeBlock) {\n process.stdout.write(INDENT + pc.cyan(line));\n return;\n }\n\n // Empty line\n if (line.trim() === '') {\n process.stdout.write('\\n');\n return;\n }\n\n // Headings — bold + cyan\n const headingMatch = line.match(/^(#{1,3})\\s+(.+)\\n?$/);\n if (headingMatch) {\n process.stdout.write(INDENT + pc.bold(pc.cyan(headingMatch[2])) + '\\n');\n return;\n }\n\n // Horizontal rules\n if (/^---+\\s*\\n?$/.test(line)) {\n process.stdout.write(INDENT + pc.dim('─'.repeat(Math.min(width, 60))) + '\\n');\n return;\n }\n\n // List items — colored bullet, word-wrapped\n const bulletMatch = line.match(/^(\\s*)([-*])\\s+(.*)$/);\n if (bulletMatch) {\n const extraIndent = bulletMatch[1];\n const content = colorize(bulletMatch[3]);\n const prefix = INDENT + extraIndent + pc.cyan('•') + ' ';\n process.stdout.write(prefix + content + '\\n');\n return;\n }\n\n // Numbered list items\n const numMatch = line.match(/^(\\s*)(\\d+)\\.\\s+(.*)$/);\n if (numMatch) {\n const extraIndent = numMatch[1];\n const num = numMatch[2];\n const content = colorize(numMatch[3]);\n const prefix = INDENT + extraIndent + pc.cyan(num + '.') + ' ';\n process.stdout.write(prefix + content + '\\n');\n return;\n }\n\n // Regular text — word-wrap and colorize\n const trimmed = line.replace(/\\n$/, '');\n const wrapped = wordWrap(trimmed, width);\n process.stdout.write(colorize(wrapped) + '\\n');\n }\n\n getBuffer(): string {\n return this.buffer;\n }\n\n finishAndRender(): void {\n // Flush any remaining partial line\n if (this.lineBuffer) {\n const remaining = this.lineBuffer;\n this.lineBuffer = '';\n\n if (this.inCodeBlock) {\n process.stdout.write(pc.cyan(remaining));\n } else {\n process.stdout.write(colorize(remaining));\n }\n }\n }\n}\n\n/**\n * Print the startup banner with recursive squares logo, identity, and hints.\n */\nexport function printBanner(opts?: {\n username?: string;\n email?: string;\n resumed?: { id: string; messageCount: number };\n version?: string;\n}): void {\n const v = opts?.version ?? '0.1.4';\n\n const logo = [\n pc.cyan(' ┌─────────────┐'),\n pc.cyan(' │ ┌─────────┐ │'),\n pc.cyan(' │ │ ┌─────┐ │ │') + ' ' + pc.bold(pc.cyan('recursiv')) + pc.dim(` v${v}`),\n pc.cyan(' │ │ │ ┌─┐ │ │ │') + ' ' + pc.dim('https://recursiv.io'),\n pc.cyan(' │ │ │ └─┘ │ │ │'),\n pc.cyan(' │ │ └─────┘ │ │'),\n pc.cyan(' │ └─────────┘ │'),\n pc.cyan(' └─────────────┘'),\n ];\n\n console.log();\n for (const line of logo) {\n console.log(line);\n }\n console.log();\n\n if (opts?.email || opts?.username) {\n const identity = opts.email\n ? `${opts.username ? pc.bold(`@${opts.username}`) : 'signed in'} ${pc.dim(`(${opts.email})`)}`\n : pc.bold(`@${opts.username}`);\n console.log(pc.dim(' ') + identity);\n }\n\n if (opts?.resumed) {\n console.log(\n pc.dim(' ') +\n pc.dim(`resumed session ${opts.resumed.id} (${opts.resumed.messageCount} messages)`),\n );\n }\n\n console.log();\n console.log(pc.dim(' Type a message to get started. /help for commands. Ctrl-D to exit.'));\n}\n\n/**\n * Print the prompt indicator.\n */\nexport function printPrompt(): void {\n process.stdout.write(pc.bold(pc.green('> ')));\n}\n\n/**\n * Print tips/suggestions below the prompt to drive engagement.\n * Context-aware: shows different suggestions based on recent actions.\n */\nexport type HintContext =\n | 'welcome'\n | 'project_created'\n | 'deployed'\n | 'agent_created'\n | 'sandbox_started'\n | 'code_executed'\n | 'listed_projects'\n | 'default';\n\nconst HINT_MAP: Record<HintContext, [string, string][]> = {\n welcome: [\n ['build an app', 'create & deploy a project'],\n ['create an agent', 'spin up an AI agent'],\n ['run some code', 'execute in a sandbox'],\n ['show my projects', 'list everything you\\'ve built'],\n ],\n project_created: [\n ['deploy it', 'push to production'],\n ['add an agent', 'attach AI to this project'],\n ['start a sandbox', 'spin up a dev environment'],\n ['show my projects', 'see all projects'],\n ],\n deployed: [\n ['check deploy status', 'view deployment state'],\n ['view logs', 'see deployment logs'],\n ['create another project', 'start something new'],\n ],\n agent_created: [\n ['chat with it', 'talk to your agent'],\n ['schedule a task', 'set up recurring work'],\n ['create a swarm', 'coordinate multiple agents'],\n ],\n sandbox_started: [\n ['run some code', 'execute in the sandbox'],\n ['deploy it', 'push to production'],\n ['stop sandbox', 'tear down environment'],\n ],\n code_executed: [\n ['run more code', 'iterate in the sandbox'],\n ['deploy it', 'push to production'],\n ['show my projects', 'see all projects'],\n ],\n listed_projects: [\n ['deploy <name>', 'deploy a specific project'],\n ['build something new', 'create a new project'],\n ['create an agent', 'add AI to a project'],\n ],\n default: [\n ['build an app', 'create & deploy a project'],\n ['show my projects', 'see what you\\'ve built'],\n ['create an agent', 'spin up an AI agent'],\n ],\n};\n\nexport function printTips(context: HintContext = 'welcome'): void {\n const tips = HINT_MAP[context] || HINT_MAP.default;\n console.log();\n for (const [cmd, desc] of tips) {\n console.log(\n INDENT + pc.dim(' ') + pc.cyan(cmd) + pc.dim(` — ${desc}`),\n );\n }\n console.log();\n}\n\n/**\n * Detect hint context from the assistant's last response text.\n */\nexport function detectHintContext(responseText: string): HintContext {\n const lower = responseText.toLowerCase();\n if (lower.includes('created') && lower.includes('project')) return 'project_created';\n if (lower.includes('deployed') || lower.includes('deployment')) return 'deployed';\n if (lower.includes('created') && lower.includes('agent')) return 'agent_created';\n if (lower.includes('sandbox') && lower.includes('start')) return 'sandbox_started';\n if (lower.includes('executed') || lower.includes('output:')) return 'code_executed';\n if (lower.includes('projects') && (lower.includes('list') || lower.includes('|'))) return 'listed_projects';\n return 'default';\n}\n\n/**\n * Print assistant label before response.\n */\nexport function printAssistantLabel(): void {\n console.log();\n process.stdout.write(pc.bold(pc.cyan('recursiv ')) + '\\n');\n}\n\n/**\n * Print a tool execution indicator.\n */\nexport function printToolCall(name: string): void {\n console.log(pc.yellow(' ▸ ') + pc.dim(name));\n}\n\n/**\n * Print a tool result indicator.\n */\nexport function printToolResult(name: string, success: boolean): void {\n if (success) {\n console.log(pc.green(' ✓ ') + pc.dim(name));\n } else {\n console.log(pc.red(' ✗ ') + pc.dim(name));\n }\n}\n\n/**\n * Show a thinking indicator that can be cleared.\n */\nexport function startThinking(): { stop: () => void } {\n const frames = [' ·', ' ··', ' ···'];\n let i = 0;\n const interval = setInterval(() => {\n process.stdout.write(`\\r${pc.dim(frames[i % frames.length])} `);\n i++;\n }, 250);\n\n return {\n stop() {\n clearInterval(interval);\n process.stdout.write('\\r\\x1b[0K');\n },\n };\n}\n\n/**\n * Prompt user for confirmation (y/n). Returns true if approved.\n */\nexport async function confirmAction(description: string): Promise<boolean> {\n const readline = await import('node:readline');\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });\n return new Promise((resolve) => {\n process.stdout.write(\n pc.yellow(' ? ') + description + pc.dim(' (y/n) '),\n );\n (rl as any).once('line', (line: string) => {\n rl.close();\n const answer = line.trim().toLowerCase();\n resolve(answer === 'y' || answer === 'yes');\n });\n (rl as any).once('close', () => resolve(false));\n });\n}\n\n/**\n * Print an error message.\n */\nexport function printError(message: string): void {\n console.log(pc.red(' ✗ ') + message);\n}\n\n/**\n * Print an info message.\n */\nexport function printInfo(message: string): void {\n console.log(pc.dim(message));\n}\n\n// Re-export renderMarkdown for any remaining callers\nexport function renderMarkdown(text: string): string {\n return text;\n}\n","/**\n * Conversation session persistence for the Recursiv CLI chat agent.\n * Stores conversation history in ~/.recursiv/sessions/\n */\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { randomUUID } from 'node:crypto';\nimport type Anthropic from '@anthropic-ai/sdk';\n\ntype Message = Anthropic.MessageParam;\n\nconst SESSIONS_DIR = join(homedir(), '.recursiv', 'sessions');\nconst MAX_HISTORY_MESSAGES = 100;\n\nexport interface Session {\n id: string;\n createdAt: string;\n messages: Message[];\n}\n\n/**\n * Create a new session.\n */\nexport function createSession(): Session {\n return {\n id: randomUUID(),\n createdAt: new Date().toISOString(),\n messages: [],\n };\n}\n\n/**\n * Save session to disk.\n */\nexport async function saveSession(session: Session): Promise<void> {\n await mkdir(SESSIONS_DIR, { recursive: true });\n const path = join(SESSIONS_DIR, `${session.id}.json`);\n // Trim old messages to keep file size manageable\n const trimmed = {\n ...session,\n messages: session.messages.slice(-MAX_HISTORY_MESSAGES),\n };\n await writeFile(path, JSON.stringify(trimmed, null, 2), 'utf-8');\n}\n\n/**\n * Load the most recent session, or null if none exists.\n */\nexport async function loadLatestSession(): Promise<Session | null> {\n try {\n const { readdir, stat } = await import('node:fs/promises');\n const files = await readdir(SESSIONS_DIR);\n const jsonFiles = files.filter((f) => f.endsWith('.json'));\n if (jsonFiles.length === 0) return null;\n\n // Find most recent by mtime\n let latest = '';\n let latestTime = 0;\n for (const file of jsonFiles) {\n const info = await stat(join(SESSIONS_DIR, file));\n if (info.mtimeMs > latestTime) {\n latestTime = info.mtimeMs;\n latest = file;\n }\n }\n\n if (!latest) return null;\n const raw = await readFile(join(SESSIONS_DIR, latest), 'utf-8');\n return JSON.parse(raw) as Session;\n } catch {\n return null;\n }\n}\n\n/**\n * Load a session by ID.\n */\nexport async function loadSession(id: string): Promise<Session | null> {\n try {\n const raw = await readFile(join(SESSIONS_DIR, `${id}.json`), 'utf-8');\n return JSON.parse(raw) as Session;\n } catch {\n return null;\n }\n}\n\n/**\n * List recent sessions (most recent first).\n */\nexport async function listSessions(limit = 10): Promise<{ id: string; createdAt: string; messageCount: number; updatedAt: Date }[]> {\n try {\n const { readdir, stat } = await import('node:fs/promises');\n const files = await readdir(SESSIONS_DIR);\n const jsonFiles = files.filter((f) => f.endsWith('.json'));\n\n const entries: { id: string; createdAt: string; messageCount: number; updatedAt: Date }[] = [];\n for (const file of jsonFiles) {\n try {\n const filePath = join(SESSIONS_DIR, file);\n const info = await stat(filePath);\n const raw = await readFile(filePath, 'utf-8');\n const session = JSON.parse(raw) as Session;\n entries.push({\n id: session.id,\n createdAt: session.createdAt,\n messageCount: session.messages.length,\n updatedAt: info.mtime,\n });\n } catch {\n // Skip corrupt session files\n }\n }\n\n entries.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n return entries.slice(0, limit);\n } catch {\n return [];\n }\n}\n\n/**\n * Add a user message to the session.\n */\nexport function addUserMessage(session: Session, content: string): void {\n session.messages.push({ role: 'user', content });\n}\n\n/**\n * Add an assistant message to the session.\n */\nexport function addAssistantMessage(session: Session, content: Anthropic.ContentBlockParam[]): void {\n session.messages.push({ role: 'assistant', content });\n}\n\n/**\n * Add a tool result to the session.\n */\nexport function addToolResult(\n session: Session,\n toolUseId: string,\n result: string,\n isError = false,\n): void {\n session.messages.push({\n role: 'user',\n content: [\n {\n type: 'tool_result',\n tool_use_id: toolUseId,\n content: result,\n is_error: isError,\n },\n ],\n });\n}\n","/**\n * System prompt for the Recursiv CLI chat agent.\n */\nexport function buildSystemPrompt(context: {\n username?: string;\n email?: string;\n apiBaseUrl: string;\n}): string {\n return `You are Recursiv — a CLI agent that builds, deploys, and runs software on the Recursiv platform.\n\n## Current user\n${context.username ? `- Username: @${context.username}` : '- Not yet identified (call get_my_profile)'}\n${context.email ? `- Email: ${context.email}` : ''}\n- API: ${context.apiBaseUrl}\n\n## Your capabilities\n\nYou have the full Recursiv toolchain. Use it:\n\n- **Projects**: create_project, list_projects, get_project, deploy_project\n- **Deployments**: deploy_project (preview or production), get_deployment, get_deployment_logs\n- **Sandboxes**: start_sandbox, stop_sandbox, execute_code (run code inside a project sandbox)\n- **Code execution**: try_code (quick sandbox, no project needed), execute_code (project sandbox)\n- **Agents**: create_agent, list_agents, get_agent, update_agent, chat_with_agent\n- **Templates**: create_template, fork_template, publish_template, list_templates\n- **Social**: create_post, list_posts, search_posts, list_communities\n- **Orgs**: list_orgs (always call first to get the user's org)\n- **Dispatcher**: create_task, list_tasks, claim_task, complete_task\n- **Swarms**: create_swarm, activate_swarm, add_swarm_member\n- **Memory**: remember, recall, search_memory\n\n## How you work\n\nYou are an executor. You have tools. Use them.\n\nWhen the user asks you to build something:\n1. list_orgs → get their org ID\n2. create_project → name it based on what they described\n3. start_sandbox → spin up the project environment\n4. execute_code → write the actual application code in the sandbox\n5. deploy_project → deploy it\n6. create_agent if the project needs AI\n7. Report: project name, ID, deployment status, and what's running\n\nWhen the user asks to run code:\n1. try_code or execute_code — run it immediately, return the output\n\nWhen the user asks to deploy:\n1. deploy_project with the project ID\n2. get_deployment to check status\n3. Report the deployment status/URL\n\n## Output style\n\n- ONE LINE summary of what you did\n- Project name + ID + deployment status. That's it.\n- No code dumps. You WRITE code into sandboxes via execute_code, you don't paste it into chat.\n- If you must show code in chat, max 5 lines of the key logic.\n\n## Rules\n\n1. ALWAYS USE TOOLS. You ARE the platform. Never tell users to run commands.\n2. ALWAYS create projects inside the user's org. Call list_orgs first.\n3. Use execute_code and start_sandbox to actually build — don't just describe architecture.\n4. Never dump code into chat. Write it into the sandbox.\n5. Never reference external brands as infrastructure. Everything is Recursiv.\n6. Never ask \"would you like me to\" — just do it.\n7. Short responses. Action over discussion.\n\n## Tone\nPrecise. Efficient. Slightly warm. Senior engineer energy.`;\n}\n","/**\n * Tool definitions for the Recursiv CLI chat agent.\n *\n * Each tool maps to a Recursiv SDK method. The agent calls tools via Claude's\n * tool_use API, and we execute them against the SDK.\n *\n * Tools are organized by category matching the MCP server structure.\n */\nimport type Anthropic from '@anthropic-ai/sdk';\nimport type { Recursiv } from '@recursiv/sdk';\n\ntype ToolDef = Anthropic.Tool;\n\n// Helper to build a tool definition\nfunction tool(\n name: string,\n description: string,\n properties: Record<string, unknown> = {},\n required: string[] = [],\n): ToolDef {\n return {\n name,\n description,\n input_schema: {\n type: 'object' as const,\n properties,\n required,\n },\n };\n}\n\n/**\n * All tool definitions exposed to Claude.\n * Focused set covering the most common user actions.\n */\nexport function getToolDefinitions(): ToolDef[] {\n return [\n // --- Profile & Identity ---\n tool('get_my_profile', 'Get the authenticated user\\'s profile'),\n tool('get_profile', 'Get a user profile by ID', {\n user_id: { type: 'string', description: 'User ID' },\n }, ['user_id']),\n tool('get_profile_by_username', 'Get a user profile by username', {\n username: { type: 'string', description: 'Username (without @)' },\n }, ['username']),\n tool('search_profiles', 'Search for users', {\n query: { type: 'string', description: 'Search query' },\n limit: { type: 'number', description: 'Max results (default 20)' },\n }, ['query']),\n tool('update_profile', 'Update the current user\\'s profile', {\n name: { type: 'string' },\n bio: { type: 'string' },\n location: { type: 'string' },\n website: { type: 'string' },\n }),\n tool('follow_user', 'Follow a user', {\n user_id: { type: 'string', description: 'User ID to follow' },\n }, ['user_id']),\n tool('unfollow_user', 'Unfollow a user', {\n user_id: { type: 'string', description: 'User ID to unfollow' },\n }, ['user_id']),\n tool('get_followers', 'Get followers of a user', {\n user_id: { type: 'string' },\n limit: { type: 'number' },\n offset: { type: 'number' },\n }, ['user_id']),\n tool('get_following', 'Get users that a user follows', {\n user_id: { type: 'string' },\n limit: { type: 'number' },\n offset: { type: 'number' },\n }, ['user_id']),\n\n // --- Posts ---\n tool('list_posts', 'List posts from the feed', {\n community_id: { type: 'string', description: 'Filter by community' },\n author_id: { type: 'string', description: 'Filter by author' },\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('get_post', 'Get a specific post', {\n post_id: { type: 'string' },\n }, ['post_id']),\n tool('create_post', 'Create a new post', {\n content: { type: 'string', description: 'Post content' },\n content_format: { type: 'string', enum: ['plain', 'markdown'], description: 'Content format (default: plain)' },\n community_id: { type: 'string', description: 'Post to a specific community' },\n organization_id: { type: 'string' },\n reply_to_id: { type: 'string', description: 'Reply to a post' },\n }, ['content']),\n tool('update_post', 'Update a post', {\n post_id: { type: 'string' },\n content: { type: 'string' },\n }, ['post_id', 'content']),\n tool('delete_post', 'Delete a post', {\n post_id: { type: 'string' },\n }, ['post_id']),\n tool('search_posts', 'Search posts', {\n query: { type: 'string' },\n limit: { type: 'number' },\n }, ['query']),\n tool('react_to_post', 'React to a post with one of the allowed reaction types', {\n post_id: { type: 'string' },\n reaction: { type: 'string', enum: ['like', 'heart', 'fire', 'laugh', 'sad', 'angry'], description: 'Reaction type' },\n }, ['post_id', 'reaction']),\n\n // --- Communities ---\n tool('list_communities', 'List communities', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('get_community', 'Get a community by ID', {\n community_id: { type: 'string' },\n }, ['community_id']),\n tool('create_community', 'Create a new community', {\n name: { type: 'string' },\n slug: { type: 'string' },\n description: { type: 'string' },\n privacy: { type: 'string', enum: ['public', 'private', 'hidden'] },\n }, ['name', 'slug']),\n tool('join_community', 'Join a community', {\n community_id: { type: 'string' },\n }, ['community_id']),\n tool('leave_community', 'Leave a community', {\n community_id: { type: 'string' },\n }, ['community_id']),\n\n // --- Chat ---\n tool('list_conversations', 'List chat conversations', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('list_messages', 'List messages in a conversation', {\n conversation_id: { type: 'string' },\n limit: { type: 'number' },\n before: { type: 'string', description: 'Cursor for pagination' },\n }, ['conversation_id']),\n tool('send_message', 'Send a chat message', {\n conversation_id: { type: 'string' },\n content: { type: 'string' },\n }, ['conversation_id', 'content']),\n tool('get_or_create_dm', 'Get or create a DM conversation with a user', {\n user_id: { type: 'string' },\n }, ['user_id']),\n tool('create_group_chat', 'Create a group chat', {\n name: { type: 'string', description: 'Group name' },\n member_ids: { type: 'array', items: { type: 'string' }, description: 'User IDs to add' },\n }, ['name', 'member_ids']),\n tool('get_unread_count', 'Get unread message count for a conversation', {\n conversation_id: { type: 'string', description: 'Conversation ID' },\n }, ['conversation_id']),\n\n // --- Organizations ---\n tool('list_orgs', 'List organizations the user belongs to', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('get_org', 'Get organization details', {\n org_id: { type: 'string' },\n }, ['org_id']),\n tool('create_org', 'Create a new organization', {\n name: { type: 'string' },\n slug: { type: 'string' },\n description: { type: 'string' },\n }, ['name', 'slug']),\n tool('list_org_members', 'List members of an organization', {\n org_id: { type: 'string' },\n limit: { type: 'number' },\n offset: { type: 'number' },\n }, ['org_id']),\n tool('invite_org_member', 'Invite a user to an organization', {\n org_id: { type: 'string' },\n email: { type: 'string' },\n role: { type: 'string', enum: ['member', 'admin', 'owner'] },\n }, ['org_id', 'email']),\n\n // --- Projects ---\n tool('list_projects', 'List projects', {\n organization_id: { type: 'string' },\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('get_project', 'Get a project by ID', {\n project_id: { type: 'string' },\n }, ['project_id']),\n tool('create_project', 'Create a new project', {\n organization_id: { type: 'string' },\n name: { type: 'string' },\n slug: { type: 'string' },\n repo_url: { type: 'string' },\n }, ['organization_id', 'name']),\n\n // --- Agents ---\n tool('list_agents', 'List AI agents', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('get_agent', 'Get an agent by ID', {\n agent_id: { type: 'string' },\n }, ['agent_id']),\n tool('create_agent', 'Create an AI agent', {\n name: { type: 'string' },\n username: { type: 'string' },\n bio: { type: 'string' },\n model: { type: 'string' },\n system_prompt: { type: 'string' },\n social_mode: { type: 'string', enum: ['chat_only', 'chat_post'] },\n post_frequency: { type: 'string', enum: ['never', 'light', 'medium', 'heavy'] },\n tool_mode: { type: 'string', enum: ['chat_only', 'permission', 'autonomous'] },\n organization_id: { type: 'string' },\n }, ['name', 'username']),\n tool('update_agent', 'Update an agent', {\n agent_id: { type: 'string' },\n name: { type: 'string' },\n bio: { type: 'string' },\n system_prompt: { type: 'string' },\n social_mode: { type: 'string' },\n post_frequency: { type: 'string' },\n tool_mode: { type: 'string' },\n }, ['agent_id']),\n tool('delete_agent', 'Delete an agent', {\n agent_id: { type: 'string' },\n }, ['agent_id']),\n tool('chat_with_agent', 'Send a message to an agent and get a response', {\n agent_id: { type: 'string' },\n message: { type: 'string' },\n conversation_id: { type: 'string', description: 'Optional — continue existing conversation' },\n }, ['agent_id', 'message']),\n\n // --- Dispatcher ---\n tool('list_tasks', 'List dispatcher tasks', {\n status: { type: 'string', enum: ['pending', 'in_progress', 'claimed', 'done'] },\n owner: { type: 'string' },\n limit: { type: 'number' },\n }),\n tool('create_task', 'Create a dispatcher task', {\n title: { type: 'string' },\n description: { type: 'string' },\n layer: { type: 'string', enum: ['core', 'plugin', 'ops'] },\n effort: { type: 'number', description: '1-10 effort score' },\n priority: { type: 'number', description: '1-10 priority' },\n }, ['title']),\n tool('claim_task', 'Claim a task', {\n task_id: { type: 'string' },\n agent: { type: 'string', description: 'Agent/person identifier' },\n }, ['task_id', 'agent']),\n tool('complete_task', 'Mark a task as done', {\n task_id: { type: 'string' },\n notes: { type: 'string' },\n }, ['task_id']),\n\n // --- Storage ---\n tool('list_storage_buckets', 'List storage buckets for a project', {\n project_id: { type: 'string' },\n }, ['project_id']),\n tool('list_storage_items', 'List items in a storage bucket', {\n project_id: { type: 'string' },\n bucket_name: { type: 'string' },\n prefix: { type: 'string' },\n }, ['project_id', 'bucket_name']),\n\n // --- Databases ---\n tool('list_databases', 'List databases for a project', {\n project_id: { type: 'string' },\n }, ['project_id']),\n tool('run_sql_query', 'Execute a SQL query against a project database', {\n project_id: { type: 'string' },\n database_id: { type: 'string' },\n query: { type: 'string', description: 'SQL query to execute' },\n }, ['project_id', 'database_id', 'query']),\n\n // --- Deployments ---\n tool('list_deployments', 'List deployments for a project', {\n project_id: { type: 'string' },\n }, ['project_id']),\n tool('trigger_deployment', 'Trigger a new deployment', {\n project_id: { type: 'string' },\n environment: { type: 'string', description: 'Target environment' },\n }, ['project_id']),\n\n // --- Memory ---\n tool('remember', 'Store a fact in agent memory', {\n content: { type: 'string', description: 'What to remember' },\n category: { type: 'string', description: 'Category tag' },\n }, ['content']),\n tool('recall', 'Recall memories matching a query', {\n query: { type: 'string' },\n limit: { type: 'number' },\n }, ['query']),\n tool('search_memory', 'Search memory with filters', {\n query: { type: 'string' },\n category: { type: 'string' },\n limit: { type: 'number' },\n }, ['query']),\n\n // --- Sandbox ---\n tool('execute_code', 'Execute code in a sandboxed environment', {\n code: { type: 'string', description: 'Code to execute' },\n language: { type: 'string', enum: ['python', 'javascript', 'typescript'], description: 'Language (default: python)' },\n }, ['code']),\n\n // --- Wallet ---\n tool('get_my_wallet', 'Get the user\\'s wallet info'),\n tool('get_wallet_balance', 'Get wallet balance'),\n\n // --- Network & Context ---\n tool('get_network_config', 'Get the current network configuration'),\n tool('list_inbox', 'List inbox notifications', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n\n // --- Swarms ---\n tool('list_swarms', 'List agent swarms', {\n limit: { type: 'number' },\n }),\n tool('create_swarm', 'Create a new agent swarm', {\n name: { type: 'string' },\n description: { type: 'string' },\n member_agent_ids: { type: 'array', items: { type: 'string' } },\n }, ['name', 'member_agent_ids']),\n\n // --- Templates ---\n tool('list_templates', 'List available templates', {\n limit: { type: 'number' },\n }),\n\n // --- Billing ---\n tool('get_billing_status', 'Get billing status for the current user'),\n tool('get_tier', 'Get the user\\'s current tier and limits'),\n tool('get_tier_usage', 'Get current tier usage statistics'),\n\n // --- Admin (requires network admin role) ---\n tool('admin_get_stats', 'Get network-wide statistics. Requires: network admin.'),\n tool('admin_list_users', 'List all users. Requires: network admin.', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n ];\n}\n\n/**\n * Tools that require user confirmation before execution.\n * These are destructive or externally-visible actions.\n */\nconst DESTRUCTIVE_TOOLS = new Set([\n 'delete_post',\n 'delete_agent',\n 'create_post',\n 'create_agent',\n 'create_org',\n 'create_community',\n 'update_profile',\n 'send_message',\n 'invite_org_member',\n 'trigger_deployment',\n 'run_sql_query',\n 'execute_code',\n 'create_swarm',\n 'create_task',\n 'complete_task',\n 'claim_task',\n 'follow_user',\n 'unfollow_user',\n 'join_community',\n 'leave_community',\n 'react_to_post',\n]);\n\n/**\n * Check if a tool requires user confirmation.\n */\nexport function requiresConfirmation(name: string): boolean {\n return DESTRUCTIVE_TOOLS.has(name);\n}\n\n/**\n * Get a human-readable summary of what a tool call will do.\n */\nexport function describeToolAction(name: string, input: Record<string, unknown>): string {\n switch (name) {\n case 'delete_post': return `Delete post ${input.post_id}`;\n case 'delete_agent': return `Delete agent ${input.agent_id}`;\n case 'create_post': {\n const content = (input.content as string) || '';\n const preview = content.length > 60 ? content.slice(0, 57) + '...' : content;\n return `Create post: \"${preview}\"`;\n }\n case 'create_agent': return `Create agent @${input.username}`;\n case 'create_org': return `Create organization \"${input.name}\"`;\n case 'create_community': return `Create community \"${input.name}\"`;\n case 'update_profile': return 'Update your profile';\n case 'send_message': {\n const content = (input.content as string) || '';\n const preview = content.length > 60 ? content.slice(0, 57) + '...' : content;\n return `Send message: \"${preview}\"`;\n }\n case 'invite_org_member': return `Invite ${input.email} to organization`;\n case 'trigger_deployment': return `Deploy project ${input.project_id}`;\n case 'run_sql_query': {\n const sql = (input.query as string) || '';\n const preview = sql.length > 60 ? sql.slice(0, 57) + '...' : sql;\n return `Run SQL: ${preview}`;\n }\n case 'execute_code': return `Execute ${input.language || 'python'} code in sandbox`;\n case 'create_swarm': return `Create swarm \"${input.name}\"`;\n case 'create_task': return `Create task \"${input.title}\"`;\n case 'complete_task': return `Complete task ${input.task_id}`;\n case 'claim_task': return `Claim task ${input.task_id}`;\n case 'follow_user': return `Follow user ${input.user_id}`;\n case 'unfollow_user': return `Unfollow user ${input.user_id}`;\n case 'join_community': return `Join community ${input.community_id}`;\n case 'leave_community': return `Leave community ${input.community_id}`;\n case 'react_to_post': return `React ${input.reaction} to post ${input.post_id}`;\n default: return `${name}(${Object.keys(input).join(', ')})`;\n }\n}\n\n/**\n * Execute a tool call against the Recursiv SDK.\n */\nexport async function executeTool(\n client: Recursiv,\n name: string,\n input: Record<string, unknown>,\n): Promise<unknown> {\n switch (name) {\n // --- Profile ---\n case 'get_my_profile':\n return client.profiles.me();\n case 'get_profile':\n return client.profiles.get(input.user_id as string);\n case 'get_profile_by_username':\n return client.profiles.getByUsername(input.username as string);\n case 'search_profiles':\n return client.profiles.search({\n q: input.query as string,\n limit: input.limit as number | undefined,\n });\n case 'update_profile':\n return client.profiles.update(input as any);\n case 'follow_user':\n return client.profiles.follow(input.user_id as string);\n case 'unfollow_user':\n return client.profiles.unfollow(input.user_id as string);\n case 'get_followers':\n return client.profiles.followers(input.user_id as string, {\n limit: input.limit as number | undefined,\n offset: input.offset as number | undefined,\n });\n case 'get_following':\n return client.profiles.following(input.user_id as string, {\n limit: input.limit as number | undefined,\n offset: input.offset as number | undefined,\n });\n\n // --- Posts ---\n case 'list_posts':\n return client.posts.list(input as any);\n case 'get_post':\n return client.posts.get(input.post_id as string);\n case 'create_post':\n return client.posts.create(input as any);\n case 'update_post':\n return client.posts.update(input.post_id as string, { content: input.content as string });\n case 'delete_post':\n return client.posts.delete(input.post_id as string);\n case 'search_posts':\n return client.posts.search(input as any);\n case 'react_to_post':\n return client.posts.react(\n input.post_id as string,\n input.reaction as 'like' | 'heart' | 'fire' | 'laugh' | 'sad' | 'angry',\n );\n\n // --- Communities ---\n case 'list_communities':\n return client.communities.list(input as any);\n case 'get_community':\n return client.communities.get(input.community_id as string);\n case 'create_community':\n return client.communities.create(input as any);\n case 'join_community':\n return client.communities.join(input.community_id as string);\n case 'leave_community':\n return client.communities.leave(input.community_id as string);\n\n // --- Chat ---\n case 'list_conversations':\n return client.chat.conversations(input as any);\n case 'list_messages':\n return client.chat.messages(input.conversation_id as string, {\n limit: input.limit as number | undefined,\n });\n case 'send_message':\n return client.chat.send({\n conversation_id: input.conversation_id as string,\n content: input.content as string,\n });\n case 'get_or_create_dm':\n return client.chat.dm({ user_id: input.user_id as string });\n case 'create_group_chat':\n return client.chat.createGroup({\n name: input.name as string,\n member_ids: input.member_ids as string[],\n });\n case 'get_unread_count':\n return client.chat.unreadCount(input.conversation_id as string);\n\n // --- Organizations ---\n case 'list_orgs':\n return client.organizations.list(input as any);\n case 'get_org':\n return client.organizations.get(input.org_id as string);\n case 'create_org':\n return client.organizations.create(input as any);\n case 'list_org_members':\n return client.organizations.members(input.org_id as string, {\n limit: input.limit as number | undefined,\n offset: input.offset as number | undefined,\n });\n case 'invite_org_member':\n return client.organizations.invite(input.org_id as string, {\n email: input.email as string,\n role: input.role as string | undefined,\n });\n\n // --- Projects ---\n case 'list_projects':\n return client.projects.list(input as any);\n case 'get_project':\n return client.projects.get(input.project_id as string);\n case 'create_project':\n return client.projects.create(input as any);\n\n // --- Agents ---\n case 'list_agents':\n return client.agents.list(input as any);\n case 'get_agent':\n return client.agents.get(input.agent_id as string);\n case 'create_agent':\n return client.agents.create(input as any);\n case 'update_agent':\n return client.agents.update(input.agent_id as string, input as any);\n case 'delete_agent':\n return client.agents.delete(input.agent_id as string);\n case 'chat_with_agent':\n return client.agents.chat(input.agent_id as string, {\n message: input.message as string,\n conversation_id: input.conversation_id as string | undefined,\n });\n\n // --- Dispatcher ---\n case 'list_tasks':\n return client.dispatcher.tasks(input as any);\n case 'create_task':\n return client.dispatcher.create(input as any);\n case 'claim_task':\n return client.dispatcher.claim(input.task_id as string, {\n agent: input.agent as string,\n });\n case 'complete_task':\n return client.dispatcher.complete(input.task_id as string, {\n notes: input.notes as string | undefined,\n });\n\n // --- Storage ---\n case 'list_storage_buckets':\n return client.storage.listBuckets({ project_id: input.project_id as string });\n case 'list_storage_items':\n return client.storage.listItems({\n project_id: input.project_id as string,\n bucket_name: input.bucket_name as string,\n prefix: input.prefix as string | undefined,\n });\n\n // --- Databases ---\n case 'list_databases':\n return client.databases.list({ project_id: input.project_id as string });\n case 'run_sql_query':\n return client.databases.query({\n project_id: input.project_id as string,\n sql: input.query as string,\n database_name: input.database_id as string | undefined,\n });\n\n // --- Deployments ---\n case 'list_deployments':\n return client.deployments.list({ project_id: input.project_id as string });\n case 'trigger_deployment':\n return client.deployments.deploy({\n project_id: input.project_id as string,\n branch: input.environment as string | undefined,\n });\n\n // --- Memory ---\n case 'remember':\n return client.memory.facts.add({\n fact: input.content as string,\n });\n case 'recall':\n return client.memory.search({\n query: input.query as string,\n limit: input.limit as number | undefined,\n });\n case 'search_memory':\n return client.memory.search({\n query: input.query as string,\n limit: input.limit as number | undefined,\n });\n\n // --- Sandbox ---\n case 'execute_code':\n return client.sandbox.execute({\n code: input.code as string,\n language: (input.language as 'python' | 'javascript' | 'typescript' | undefined) || 'python',\n });\n\n // --- Wallet ---\n case 'get_my_wallet':\n return client.wallet.getMyWallet();\n case 'get_wallet_balance':\n return client.wallet.getBalance();\n\n // --- Network & Context ---\n case 'get_network_config':\n return client.network.getConfig();\n case 'list_inbox':\n return client.inbox.list(input as any);\n\n // --- Swarms ---\n case 'list_swarms':\n return client.swarms.list(input as any);\n case 'create_swarm':\n return client.swarms.create(input as any);\n\n // --- Templates ---\n case 'list_templates':\n return client.templates.list(input as any);\n\n // --- Billing ---\n case 'get_billing_status':\n return client.billing.getStatus({});\n case 'get_tier':\n return client.freeTier.getTier();\n case 'get_tier_usage':\n return client.freeTier.getUsage();\n\n // --- Admin ---\n case 'admin_get_stats':\n return client.admin.getStats();\n case 'admin_list_users':\n return client.admin.listUsers(input as any);\n\n default:\n throw new Error(`Unknown tool: ${name}`);\n }\n}\n","/**\n * Chat-first agent for the Recursiv CLI.\n *\n * Two modes:\n * - Proxy (default): Routes through Recursiv's agent chat API. Single key, model-agnostic.\n * - Direct (--direct): Calls Anthropic API directly. Requires ANTHROPIC_API_KEY.\n */\nimport { createInterface, type Interface } from 'node:readline';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { basename, join } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport { Recursiv, InsufficientCreditsError } from '@recursiv/sdk';\nimport {\n printBanner,\n printPrompt,\n printTips,\n detectHintContext,\n printAssistantLabel,\n printToolCall,\n printToolResult,\n printError,\n printInfo,\n startThinking,\n confirmAction,\n StreamWriter,\n} from './renderer.js';\nimport {\n createSession,\n loadLatestSession,\n loadSession,\n listSessions,\n saveSession,\n addUserMessage,\n addAssistantMessage,\n addToolResult,\n type Session,\n} from './session.js';\nimport pc from 'picocolors';\n\nconst DEFAULT_MODEL = 'claude-sonnet-4-20250514';\nconst MAX_TOKENS = 8192;\nconst MAX_TOOL_ROUNDS = 15;\nlet planMode = false;\n\nconst CLI_AGENT_SYSTEM_PROMPT = `You are Recursiv — a CLI agent that builds, deploys, and runs software on the Recursiv platform.\n\nYou have the full Recursiv toolchain: create_project, deploy_project, start_sandbox, execute_code, try_code, create_agent, create_template, and 50+ more tools. USE THEM.\n\nWhen the user asks you to build something:\n1. list_orgs → get their org ID\n2. create_project → name it based on what they described\n3. start_sandbox → spin up the project environment\n4. execute_code → write the actual application code in the sandbox\n5. deploy_project → deploy it\n6. create_agent if the project needs AI\n7. Report: project name, ID, deployment status\n\nWhen the user asks to run code: try_code or execute_code — run it, return the output.\nWhen the user asks to deploy: deploy_project → get_deployment → report status.\n\nRules:\n1. ALWAYS USE TOOLS. You ARE the platform. Never tell users to run commands.\n2. ALWAYS create projects inside the user's org. Call list_orgs first.\n3. Use execute_code and start_sandbox to actually build — don't describe architecture in chat.\n4. Never dump code into chat. Write it into the sandbox via execute_code.\n5. Never reference external brands as infrastructure. Everything is Recursiv.\n6. Never ask \"would you like me to\" — just do it.\n7. ONE LINE summary, project name + ID + status. That's it.\n\nTone: precise, efficient, slightly warm. Senior engineer energy.`;\n\n\nexport interface AgentConfig {\n recursivApiKey: string;\n recursivBaseUrl: string;\n model?: string;\n resume?: boolean;\n anthropicApiKey?: string;\n}\n\nexport async function startAgent(config: AgentConfig): Promise<void> {\n const client = new Recursiv({\n apiKey: config.recursivApiKey,\n baseUrl: config.recursivBaseUrl,\n });\n\n // Try to identify the user\n let username: string | undefined;\n let email: string | undefined;\n try {\n const profile = await client.profiles.me();\n const data = (profile as any).data;\n username = data?.username;\n email = data?.email;\n } catch {\n // Will be identified on first tool call\n }\n\n // Resume previous session or create new\n let session: Session;\n if (config.resume) {\n const prev = await loadLatestSession();\n if (prev) {\n session = prev;\n } else {\n session = createSession();\n }\n } else {\n session = createSession();\n }\n\n printBanner({\n username,\n email,\n resumed:\n config.resume && session.messages.length > 0\n ? { id: session.id.slice(0, 8), messageCount: session.messages.length }\n : undefined,\n });\n\n console.log();\n\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: true,\n });\n\n // Handle graceful shutdown\n (rl as any).on('close', async () => {\n console.log();\n printInfo('Session saved. Goodbye.');\n await saveSession(session);\n process.exit(0);\n });\n\n // Choose mode: direct (with tools) is default, proxy is fallback\n if (config.anthropicApiKey) {\n await replDirect(rl, config, client, session);\n } else {\n // Proxy mode — no local tools, server handles everything\n await replProxy(rl, client, session);\n }\n}\n\n// ─── Shared REPL shell ───────────────────────────────────────────────────────\n\nasync function replProxy(\n rl: Interface,\n client: Recursiv,\n session: Session,\n): Promise<void> {\n // Ensure we have a CLI agent\n const { readCredentials, saveCredentials } = await import('../lib/credentials.js');\n const creds = await readCredentials();\n let agentId = creds.cliAgentId;\n\n if (!agentId) {\n // Auto-create a CLI agent — must belong to user's org for budget access\n try {\n // Fetch user's first org\n let orgId: string | undefined;\n try {\n const orgs = await client.organizations.list({ limit: 1 });\n const orgData = (orgs as any).data;\n if (orgData?.[0]?.id) orgId = orgData[0].id;\n } catch {\n // No org access — agent will be org-less\n }\n\n const result = await client.agents.create({\n name: 'CLI Assistant',\n username: `cli_${Date.now().toString(36)}`,\n bio: 'Personal CLI assistant created by the Recursiv CLI.',\n system_prompt: CLI_AGENT_SYSTEM_PROMPT,\n social_mode: 'chat_only',\n tool_mode: 'autonomous',\n post_frequency: 'never',\n ...(orgId && { organization_id: orgId }),\n });\n agentId = (result as any).data.id;\n await saveCredentials({ cliAgentId: agentId });\n printInfo(` Created CLI agent (${agentId!.slice(0, 8)})`);\n } catch (err) {\n printError(`Could not create CLI agent: ${err instanceof Error ? err.message : String(err)}`);\n printInfo(' Falling back to direct mode. Set ANTHROPIC_API_KEY to use.');\n return;\n }\n }\n\n // Track conversation_id for multi-turn\n let conversationId: string | undefined;\n\n // ── First-run: agent speaks first ──────────────────────────────────\n const isFirstRun = session.messages.length === 0;\n if (isFirstRun) {\n const ctx = detectProjectContext();\n printFirstRunGreeting(ctx);\n }\n\n while (true) {\n const input = await prompt(rl);\n if (input === null) break;\n\n const trimmed = input.trim();\n if (!trimmed) continue;\n\n if (trimmed.startsWith('/')) {\n const handled = await handleSlashCommand(trimmed, session, client);\n if (handled === 'exit') break;\n if (handled) continue;\n }\n\n addUserMessage(session, trimmed);\n\n // In plan mode, prefix the message to request a plan instead of execution\n const messageToSend = planMode\n ? `[PLAN MODE] Do NOT execute anything yet. Instead, outline the steps you would take to accomplish this, what tools you'd call and in what order. Wait for my approval before executing.\\n\\n${trimmed}`\n : trimmed;\n\n // Stream from Recursiv agent API\n try {\n if (planMode) {\n console.log(pc.dim(' ◆ plan mode'));\n }\n printAssistantLabel();\n const thinking = startThinking();\n const writer = new StreamWriter();\n let hasText = false;\n let thinkingStopped = false;\n\n for await (const chunk of client.agents.chatStream(agentId!, {\n message: messageToSend,\n conversation_id: conversationId,\n })) {\n if (chunk.type === 'text_delta' && chunk.delta) {\n if (!thinkingStopped) {\n thinking.stop();\n thinkingStopped = true;\n }\n hasText = true;\n writer.write(chunk.delta);\n } else if (chunk.type === 'tool_use' && chunk.tool_name) {\n if (!thinkingStopped) {\n thinking.stop();\n thinkingStopped = true;\n }\n printToolCall(chunk.tool_name);\n } else if (chunk.type === 'tool_result') {\n printToolResult(chunk.tool_name || 'tool', true);\n } else if (chunk.type === 'error') {\n if (!thinkingStopped) {\n thinking.stop();\n thinkingStopped = true;\n }\n printError(chunk.error || 'Unknown error');\n }\n\n // Capture conversation_id from first chunk\n if ((chunk as any).conversation_id) {\n conversationId = (chunk as any).conversation_id;\n }\n }\n\n if (!thinkingStopped) thinking.stop();\n\n if (hasText) {\n writer.finishAndRender();\n }\n console.log();\n\n // Save assistant response to session (as plain text for session history)\n const fullText = writer.getBuffer() || '';\n if (fullText) {\n addAssistantMessage(session, [{ type: 'text', text: fullText }]);\n // Show contextual hints based on what the agent just did\n const hintCtx = detectHintContext(fullText);\n printTips(hintCtx);\n }\n } catch (err) {\n if (err instanceof InsufficientCreditsError) {\n printError('Out of credits — your account has no remaining balance.');\n printInfo(` Upgrade: ${err.upgradeUrl}`);\n console.log();\n continue;\n }\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('rate_limit') || message.includes('429')) {\n printError('Rate limited — wait a moment and try again.');\n } else if (message.includes('401') || message.includes('authentication')) {\n printError('API key is invalid. Run `recursiv auth login` to re-authenticate.');\n } else if (message.includes('ENOTFOUND') || message.includes('ECONNREFUSED')) {\n printError('Network error — check your internet connection.');\n } else {\n printError(message);\n }\n console.log();\n }\n\n await saveSession(session);\n }\n}\n\n// ─── Direct mode (Anthropic API) ─────────────────────────────────────────────\n\nasync function replDirect(\n rl: Interface,\n config: AgentConfig,\n client: Recursiv,\n session: Session,\n): Promise<void> {\n const Anthropic = (await import('@anthropic-ai/sdk')).default;\n const { buildSystemPrompt } = await import('./system-prompt.js');\n const { getToolDefinitions, executeTool, requiresConfirmation, describeToolAction } = await import('./tools.js');\n\n const anthropic = new Anthropic({ apiKey: config.anthropicApiKey });\n const tools = getToolDefinitions();\n const model = config.model || DEFAULT_MODEL;\n\n let username: string | undefined;\n let email: string | undefined;\n try {\n const profile = await client.profiles.me();\n const data = (profile as any).data;\n username = data?.username;\n email = data?.email;\n } catch {\n // Fine\n }\n\n const systemPrompt = buildSystemPrompt({\n username,\n email,\n apiBaseUrl: config.recursivBaseUrl,\n });\n\n while (true) {\n const input = await prompt(rl);\n if (input === null) break;\n\n const trimmed = input.trim();\n if (!trimmed) continue;\n\n if (trimmed.startsWith('/')) {\n const handled = await handleSlashCommand(trimmed, session, client);\n if (handled === 'exit') break;\n if (handled) continue;\n }\n\n addUserMessage(session, trimmed);\n await runDirectTurn(anthropic, client, tools, model, systemPrompt, session);\n await saveSession(session);\n }\n}\n\n// ─── Direct mode agent turn ──────────────────────────────────────────────────\n\nasync function runDirectTurn(\n anthropic: any,\n client: Recursiv,\n tools: any[],\n model: string,\n systemPrompt: string,\n session: Session,\n): Promise<void> {\n const { requiresConfirmation, describeToolAction, executeTool } = await import('./tools.js');\n\n let rounds = 0;\n\n while (rounds < MAX_TOOL_ROUNDS) {\n rounds++;\n\n try {\n printAssistantLabel();\n const thinking = startThinking();\n\n const stream = anthropic.messages.stream({\n model,\n max_tokens: MAX_TOKENS,\n system: systemPrompt,\n tools,\n messages: session.messages,\n });\n\n const writer = new StreamWriter();\n let hasText = false;\n let thinkingStopped = false;\n\n for await (const event of stream) {\n if (event.type === 'content_block_delta') {\n const delta = event.delta;\n if ('text' in delta && delta.text) {\n if (!thinkingStopped) {\n thinking.stop();\n thinkingStopped = true;\n }\n hasText = true;\n writer.write(delta.text);\n }\n }\n }\n\n if (!thinkingStopped) thinking.stop();\n\n const finalMessage = await stream.finalMessage();\n\n if (hasText) {\n writer.finishAndRender();\n }\n console.log();\n\n const contentBlocks: any[] = [];\n let hasToolUse = false;\n\n for (const block of finalMessage.content) {\n if (block.type === 'text') {\n contentBlocks.push({ type: 'text', text: block.text });\n } else if (block.type === 'tool_use') {\n hasToolUse = true;\n contentBlocks.push({\n type: 'tool_use',\n id: block.id,\n name: block.name,\n input: block.input as Record<string, unknown>,\n });\n }\n }\n\n addAssistantMessage(session, contentBlocks);\n\n if (!hasToolUse) break;\n\n for (const block of finalMessage.content) {\n if (block.type !== 'tool_use') continue;\n const toolInput = block.input as Record<string, unknown>;\n\n if (requiresConfirmation(block.name)) {\n const desc = describeToolAction(block.name, toolInput);\n const approved = await confirmAction(desc);\n if (!approved) {\n printToolResult(block.name, false);\n addToolResult(session, block.id, 'User declined this action.', true);\n continue;\n }\n }\n\n printToolCall(block.name);\n\n try {\n const result = await executeTool(client, block.name, toolInput);\n const resultStr = JSON.stringify(result, null, 2);\n printToolResult(block.name, true);\n addToolResult(session, block.id, resultStr);\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n printToolResult(block.name, false);\n addToolResult(session, block.id, errMsg, true);\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('rate_limit') || message.includes('429')) {\n printError('Rate limited — wait a moment and try again.');\n } else if (message.includes('overloaded') || message.includes('529')) {\n printError('API overloaded — try again in a few seconds.');\n } else if (message.includes('authentication') || message.includes('401')) {\n printError('Anthropic API key is invalid. Set ANTHROPIC_API_KEY in your environment.');\n } else if (message.includes('ENOTFOUND') || message.includes('ECONNREFUSED')) {\n printError('Network error — check your internet connection.');\n } else {\n printError(message);\n }\n console.log();\n break;\n }\n }\n\n if (rounds >= MAX_TOOL_ROUNDS) {\n printError(`Tool loop limit reached (${MAX_TOOL_ROUNDS} rounds). Stopping to prevent runaway.`);\n console.log();\n }\n}\n\n// ─── Shared helpers ──────────────────────────────────────────────────────────\n\nfunction prompt(rl: Interface): Promise<string | null> {\n return new Promise((resolve) => {\n printPrompt();\n (rl as any).once('line', (line: string) => resolve(line));\n (rl as any).once('close', () => resolve(null));\n });\n}\n\nasync function handleSlashCommand(\n input: string,\n session: Session,\n client: Recursiv,\n): Promise<string | boolean> {\n const cmd = input.toLowerCase().split(/\\s+/)[0];\n\n switch (cmd) {\n case '/exit':\n case '/quit':\n case '/q':\n printInfo('Session saved. Goodbye.');\n await saveSession(session);\n return 'exit';\n\n case '/plan':\n planMode = !planMode;\n if (planMode) {\n console.log(pc.cyan(' ◆ Plan mode ON') + pc.dim(' — agent will outline steps before executing'));\n } else {\n console.log(pc.green(' ◆ Plan mode OFF') + pc.dim(' — agent will execute immediately'));\n }\n console.log();\n return true;\n\n case '/clear':\n session.messages = [];\n console.log(pc.dim(' Conversation cleared.'));\n console.log();\n return true;\n\n case '/help':\n console.log();\n console.log(pc.bold(' Commands'));\n console.log(pc.dim(' /help ') + 'Show this help');\n console.log(pc.dim(' /plan ') + 'Toggle plan mode (outline before executing)');\n console.log(pc.dim(' /clear ') + 'Clear conversation history');\n console.log(pc.dim(' /status ') + 'Show connection status');\n console.log(pc.dim(' /context ') + 'Show full user context (profile, orgs, tier)');\n console.log(pc.dim(' /sessions ') + 'List recent sessions');\n console.log(pc.dim(' /load <id> ') + 'Load a previous session by ID');\n console.log(pc.dim(' /exit ') + 'Exit the CLI');\n console.log();\n console.log(pc.bold(' Usage'));\n console.log(pc.dim(' Just type naturally. Examples:'));\n console.log(pc.dim(' \"show my posts\"'));\n console.log(pc.dim(' \"create a post saying hello world\"'));\n console.log(pc.dim(' \"list my agents\"'));\n console.log(pc.dim(' \"what communities can I join?\"'));\n console.log(pc.dim(' \"check my unread messages\"'));\n console.log(pc.dim(' \"show dispatcher tasks\"'));\n console.log();\n console.log(pc.dim(' Destructive actions (delete, deploy, send) require confirmation.'));\n console.log();\n return true;\n\n case '/status':\n try {\n const profile = await client.profiles.me();\n const data = (profile as any).data;\n console.log();\n console.log(pc.bold(' Status'));\n console.log(pc.dim(' User: ') + pc.bold(`@${data.username || 'unknown'}`));\n if (data.email) console.log(pc.dim(' Email: ') + data.email);\n console.log(pc.dim(' Session: ') + session.id.slice(0, 8));\n console.log(pc.dim(' History: ') + `${session.messages.length} messages`);\n console.log();\n } catch {\n printError('Could not fetch status — check your API key');\n console.log();\n }\n return true;\n\n case '/context':\n try {\n const [profile, orgs, tier] = await Promise.allSettled([\n client.profiles.me(),\n client.organizations.list({ limit: 50 }),\n client.freeTier.getTier(),\n ]);\n\n console.log();\n console.log(pc.bold(' User Context'));\n\n if (profile.status === 'fulfilled') {\n const p = (profile.value as any).data;\n console.log(pc.dim(' User: ') + pc.bold(`@${p.username || 'unknown'}`));\n console.log(pc.dim(' Name: ') + (p.name || '-'));\n console.log(pc.dim(' Email: ') + (p.email || '-'));\n console.log(pc.dim(' Followers: ') + (p.followers_count ?? 0));\n console.log(pc.dim(' Following: ') + (p.following_count ?? 0));\n }\n\n if (orgs.status === 'fulfilled') {\n const orgList = (orgs.value as any).data;\n console.log();\n console.log(pc.bold(' Organizations'));\n if (orgList.length === 0) {\n console.log(pc.dim(' None'));\n } else {\n for (const org of orgList) {\n const role = org.role ? pc.dim(` (${org.role})`) : '';\n console.log(` - ${pc.bold(org.name)}${role}`);\n }\n }\n }\n\n if (tier.status === 'fulfilled') {\n const t = (tier.value as any).data;\n console.log();\n console.log(pc.bold(' Tier'));\n console.log(pc.dim(' Plan: ') + (t.tier || t.plan || 'free'));\n if (t.api_calls_remaining != null) {\n console.log(pc.dim(' Calls: ') + `${t.api_calls_remaining} remaining`);\n }\n }\n\n console.log();\n } catch {\n printError('Could not fetch context');\n console.log();\n }\n return true;\n\n case '/sessions': {\n const sessions = await listSessions();\n console.log();\n if (sessions.length === 0) {\n console.log(pc.dim(' No saved sessions.'));\n } else {\n console.log(pc.bold(' Recent Sessions'));\n for (const s of sessions) {\n const current = s.id === session.id ? pc.green(' (current)') : '';\n const date = new Date(s.createdAt).toLocaleDateString();\n console.log(\n pc.dim(' ') +\n pc.bold(s.id.slice(0, 8)) +\n pc.dim(` — ${date}, ${s.messageCount} messages`) +\n current,\n );\n }\n }\n console.log();\n return true;\n }\n\n case '/load': {\n const parts = input.split(/\\s+/);\n const targetId = parts[1];\n if (!targetId) {\n console.log(pc.dim(' Usage: /load <session-id>'));\n console.log();\n return true;\n }\n\n const sessions = await listSessions(50);\n const match = sessions.find((s) => s.id.startsWith(targetId));\n if (!match) {\n printError(`No session found matching \"${targetId}\"`);\n console.log();\n return true;\n }\n\n const loaded = await loadSession(match.id);\n if (!loaded) {\n printError('Could not load session file');\n console.log();\n return true;\n }\n\n session.id = loaded.id;\n session.createdAt = loaded.createdAt;\n session.messages = loaded.messages;\n console.log(\n pc.dim(' ') +\n `Loaded session ${pc.bold(loaded.id.slice(0, 8))} (${loaded.messages.length} messages)`,\n );\n console.log();\n return true;\n }\n\n default:\n console.log(pc.dim(` Unknown command: ${cmd}. Type /help for available commands.`));\n console.log();\n return true;\n }\n}\n\n// ─── Project context detection ────────────────────────────────────────────────\n\ninterface ProjectContext {\n dirName: string;\n hasPackageJson: boolean;\n packageName?: string;\n packageDescription?: string;\n framework?: string;\n language?: string;\n isGitRepo: boolean;\n hasReadme: boolean;\n isEmpty: boolean;\n}\n\nfunction detectProjectContext(): ProjectContext {\n const cwd = process.cwd();\n const dirName = basename(cwd);\n const hasPackageJson = existsSync(join(cwd, 'package.json'));\n const hasReadme = existsSync(join(cwd, 'README.md'));\n\n let isGitRepo = false;\n try {\n execSync('git rev-parse --is-inside-work-tree', { cwd, stdio: 'pipe' });\n isGitRepo = true;\n } catch { /* not a git repo */ }\n\n // Check if directory is essentially empty (no source files)\n let isEmpty = true;\n try {\n const files = execSync('ls -A', { cwd, encoding: 'utf-8' }).trim().split('\\n');\n isEmpty = files.length <= 2 && files.every(f => f.startsWith('.') || f === 'node_modules');\n } catch { /* fine */ }\n\n let packageName: string | undefined;\n let packageDescription: string | undefined;\n let framework: string | undefined;\n let language: string | undefined;\n\n if (hasPackageJson) {\n try {\n const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf-8'));\n packageName = pkg.name;\n packageDescription = pkg.description;\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n if (deps.next) framework = 'Next.js';\n else if (deps.nuxt) framework = 'Nuxt';\n else if (deps.svelte || deps['@sveltejs/kit']) framework = 'SvelteKit';\n else if (deps.react) framework = 'React';\n else if (deps.vue) framework = 'Vue';\n else if (deps.express) framework = 'Express';\n else if (deps.hono) framework = 'Hono';\n else if (deps.fastify) framework = 'Fastify';\n } catch { /* malformed package.json */ }\n }\n\n if (existsSync(join(cwd, 'tsconfig.json'))) language = 'TypeScript';\n else if (existsSync(join(cwd, 'pyproject.toml')) || existsSync(join(cwd, 'requirements.txt'))) language = 'Python';\n else if (existsSync(join(cwd, 'go.mod'))) language = 'Go';\n else if (existsSync(join(cwd, 'Cargo.toml'))) language = 'Rust';\n\n return { dirName, hasPackageJson, packageName, packageDescription, framework, language, isGitRepo, hasReadme, isEmpty };\n}\n\nfunction printFirstRunGreeting(_ctx: ProjectContext): void {\n printAssistantLabel();\n console.log();\n console.log(' What do you want to build?');\n printTips();\n}\n","import { Command } from 'commander';\nimport { printCliError } from '../lib/cli-errors.js';\nimport { initCommand } from '../commands/init.js';\nimport { devCommand } from '../commands/dev.js';\nimport { deployCommand } from '../commands/deploy.js';\nimport { loginCommand, logoutCommand, whoamiCommand } from '../commands/auth.js';\nimport { infoCommand } from '../commands/info.js';\nimport { brainCommand } from '../commands/brain.js';\nimport { studioCommand } from '../commands/studio.js';\nimport { browserUseMcpSnippetCommand, browserUseRunCommand } from '../commands/browser-use.js';\nimport {\n agentsCreateCommand,\n agentsListCommand,\n communitiesCreateCommand,\n communitiesListCommand,\n postsCreateCommand,\n postsListCommand,\n projectsCreateCommand,\n projectsListCommand,\n usersMeCommand,\n} from '../commands/api.js';\n\nconst program = new Command();\n\nprogram\n .name('recursiv')\n .description('Recursiv CLI — build and ship apps with AI')\n .version('0.1.0');\n\n// --- Chat command (default interactive mode) ---\nprogram\n .command('chat')\n .description('Start the chat-first AI agent (default when no command is given)')\n .option('--model <model>', 'Claude model to use (default: claude-sonnet-4-20250514)')\n .option('--resume', 'Resume the most recent session')\n .action(async (opts: { model?: string; resume?: boolean }) => {\n try {\n await launchChatAgent({ model: opts.model, resume: opts.resume });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('create [name]')\n .description('Create a new Recursiv application')\n .action(async (name?: string) => {\n try {\n await initCommand(name);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('dev')\n .description('Start the development server')\n .option('-p, --port <port>', 'port to run on')\n .action(async (opts: { port?: string }) => {\n try {\n await devCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('deploy <target>')\n .description('Generate deployment config (vercel, docker, render, railway, cloud)')\n .action(async (target: string) => {\n try {\n await deployCommand(target);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst auth = program\n .command('auth')\n .description('Manage API authentication');\n\nauth\n .command('login')\n .description('Set or update your API key')\n .action(async () => {\n try {\n await loginCommand();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nauth\n .command('logout')\n .description('Remove API key from .env')\n .action(async () => {\n try {\n await logoutCommand();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nauth\n .command('whoami')\n .description('Show current authenticated user')\n .action(async () => {\n try {\n await whoamiCommand();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('info')\n .description('Display project information')\n .action(async () => {\n try {\n await infoCommand();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst browserUse = program.command('browser-use').description('Browser Use helpers');\n\nbrowserUse\n .command('run')\n .description('Run a Browser Use task with the official SDK')\n .requiredOption('--task <task>', 'task to run')\n .option('--start-url <url>', 'initial URL')\n .option('--max-steps <n>', 'maximum Browser Use steps')\n .option('--no-wait', 'return quickly instead of waiting for the full result')\n .option('--json', 'Output JSON')\n .action(async (opts: { task?: string; startUrl?: string; maxSteps?: string; wait?: boolean; json?: boolean }) => {\n try {\n await browserUseRunCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nbrowserUse\n .command('mcp-snippet')\n .description('Print Browser Use MCP configuration snippets')\n .option('--target <target>', 'generic | codex | claude-code', 'generic')\n .action(async (opts: { target?: string }) => {\n try {\n await browserUseMcpSnippetCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst users = program.command('users').description('Users API');\nusers\n .command('me')\n .description('Show current authenticated user')\n .option('--json', 'Output JSON')\n .action(async (opts: { json?: boolean }) => {\n try {\n await usersMeCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst communities = program.command('communities').description('Communities API');\ncommunities\n .command('list')\n .description('List communities')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { limit?: string; offset?: string; json?: boolean }) => {\n try {\n await communitiesListCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\ncommunities\n .command('create')\n .description('Create a community')\n .requiredOption('--name <name>', 'community name')\n .requiredOption('--slug <slug>', 'community slug')\n .option('--description <description>', 'description')\n .option('--privacy <privacy>', 'public | private | hidden', 'public')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n name?: string;\n slug?: string;\n description?: string;\n privacy?: string;\n json?: boolean;\n }) => {\n try {\n await communitiesCreateCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst posts = program.command('posts').description('Posts API');\nposts\n .command('list')\n .description('List posts')\n .option('--community-id <id>', 'filter by community')\n .option('--author-id <id>', 'filter by author')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n communityId?: string;\n authorId?: string;\n limit?: string;\n offset?: string;\n json?: boolean;\n }) => {\n try {\n await postsListCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nposts\n .command('create')\n .description('Create a post')\n .requiredOption('--content <content>', 'post content')\n .option('--markdown', 'content is markdown')\n .option('--community-id <id>', 'community id')\n .option('--organization-id <id>', 'organization id')\n .option('--reply-to-id <id>', 'reply to post id')\n .option('--tag-ids <ids>', 'comma-separated tag ids')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n content?: string;\n markdown?: boolean;\n communityId?: string;\n organizationId?: string;\n replyToId?: string;\n tagIds?: string;\n json?: boolean;\n }) => {\n try {\n await postsCreateCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst projects = program.command('projects').description('Projects API');\nprojects\n .command('list')\n .description('List projects')\n .option('--org <id>', 'organization id')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { org?: string; limit?: string; offset?: string; json?: boolean }) => {\n try {\n await projectsListCommand({\n organizationId: opts.org,\n limit: opts.limit,\n offset: opts.offset,\n json: opts.json,\n });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprojects\n .command('create')\n .description('Create a project')\n .requiredOption('--org <id>', 'organization id')\n .requiredOption('--name <name>', 'project name')\n .option('--slug <slug>', 'project slug')\n .option('--repo <url>', 'repo URL')\n .option('--template <source>', 'default | custom', 'default')\n .option('--template-url <url>', 'custom template URL')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n org?: string;\n name?: string;\n slug?: string;\n repo?: string;\n template?: string;\n templateUrl?: string;\n json?: boolean;\n }) => {\n try {\n await projectsCreateCommand({\n organizationId: opts.org,\n name: opts.name,\n slug: opts.slug,\n repoUrl: opts.repo,\n templateSource: opts.template,\n templateUrl: opts.templateUrl,\n json: opts.json,\n });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst agents = program.command('agents').description('Agents API');\nagents\n .command('list')\n .description('List agents')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { limit?: string; offset?: string; json?: boolean }) => {\n try {\n await agentsListCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nagents\n .command('create')\n .description('Create an AI agent')\n .requiredOption('--name <name>', 'agent name')\n .requiredOption('--username <username>', 'agent username')\n .option('--bio <bio>', 'agent bio')\n .option('--model <model>', 'model id')\n .option('--system-prompt <prompt>', 'system prompt')\n .option('--social-mode <mode>', 'chat_only | chat_post')\n .option('--post-frequency <freq>', 'never | light | medium | heavy')\n .option('--tool-mode <mode>', 'chat_only | permission | autonomous')\n .option('--daily-request-limit <n>', 'daily request limit')\n .option('--org <id>', 'organization id')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n name?: string;\n username?: string;\n bio?: string;\n model?: string;\n systemPrompt?: string;\n socialMode?: string;\n postFrequency?: string;\n toolMode?: string;\n dailyRequestLimit?: string;\n org?: string;\n json?: boolean;\n }) => {\n try {\n await agentsCreateCommand({\n name: opts.name,\n username: opts.username,\n bio: opts.bio,\n model: opts.model,\n systemPrompt: opts.systemPrompt,\n socialMode: opts.socialMode,\n postFrequency: opts.postFrequency,\n toolMode: opts.toolMode,\n dailyRequestLimit: opts.dailyRequestLimit,\n organizationId: opts.org,\n json: opts.json,\n });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('brain')\n .description('Launch the visual Recursiv brain TUI')\n .option('--no-anim', 'Disable animations')\n .action(async (opts: { anim?: boolean }) => {\n try {\n await brainCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('studio')\n .description('Legacy alias for brain')\n .option('--no-anim', 'Disable animations')\n .action(async (opts: { anim?: boolean }) => {\n try {\n await studioCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\n// --- Quickstart command ---\nprogram\n .command('quickstart')\n .description('Set up Recursiv on this machine (GitHub CLI + account + MCP for an AI client). ~3 min')\n .option(\n '--target <client>',\n 'Skip the client prompt and install MCP for this client (claude-code, claude-desktop, codex, opencode)',\n )\n .action(async (opts: { target?: string }) => {\n try {\n const { quickstartCommand } = await import('../commands/quickstart.js');\n const allowed = ['claude-code', 'claude-desktop', 'codex', 'opencode'] as const;\n const target = opts.target && (allowed as readonly string[]).includes(opts.target)\n ? (opts.target as typeof allowed[number])\n : undefined;\n await quickstartCommand({ target });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\n// --- MCP install command ---\nconst mcp = program.command('mcp').description('Manage MCP server integrations');\nmcp\n .command('install <target>')\n .description('Configure Recursiv MCP server for a host (claude-code, claude-desktop, codex, opencode)')\n .option('--api-key <key>', 'Recursiv API key (defaults to RECURSIV_API_KEY env var)')\n .option('--global', 'Install globally instead of project-level (claude-code, opencode)')\n .action(async (target: string, opts: { apiKey?: string; global?: boolean }) => {\n try {\n const { mcpInstallCommand } = await import('../commands/mcp-install.js');\n await mcpInstallCommand({ target, apiKey: opts.apiKey, global: opts.global });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nmcp\n .command('verify')\n .description('Verify that the Recursiv MCP server starts and responds')\n .action(async () => {\n try {\n const { mcpVerifyCommand } = await import('../commands/mcp-install.js');\n await mcpVerifyCommand();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nasync function launchChatAgent(opts?: { model?: string; resume?: boolean }): Promise<void> {\n const { startAgent } = await import('../chat/agent.js');\n const { readConfig } = await import('../lib/config.js');\n const { resolveRecursivKey, resolveAnthropicKey, saveCredentials } = await import('../lib/credentials.js');\n const { getOrCreateApiKey } = await import('../lib/auth-flow.js');\n const pc = (await import('picocolors')).default;\n const prompts = (await import('prompts')).default;\n\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n\n // --- Resolve Recursiv API key (auto-auth if missing) ---\n let recursivApiKey = await resolveRecursivKey(cwd);\n if (!recursivApiKey) {\n console.log();\n console.log(pc.bold(' Welcome to Recursiv'));\n console.log(pc.dim(' Let\\'s get you authenticated.'));\n console.log();\n\n recursivApiKey = await getOrCreateApiKey(baseUrl);\n if (!recursivApiKey) {\n console.error(pc.red(' error') + ' Authentication required to continue.');\n process.exit(1);\n }\n\n // Persist for future sessions\n await saveCredentials({ recursivApiKey });\n console.log(pc.dim(' Credentials saved to ~/.recursiv/credentials'));\n console.log();\n }\n\n // --- Resolve Anthropic API key (optional — enables full toolset) ---\n const anthropicApiKey = (await resolveAnthropicKey()) ?? undefined;\n\n await startAgent({\n recursivApiKey: recursivApiKey!,\n recursivBaseUrl: baseUrl,\n model: opts?.model,\n resume: opts?.resume,\n anthropicApiKey,\n });\n}\n\nfunction shouldAutoLaunchChat(args: string[]): boolean {\n // Explicit brain/studio env vars override\n if (process.env.RECURSIV_BRAIN === '1') return false;\n if (process.env.RECURSIV_STUDIO === '1') return false;\n // No args + TTY = launch chat agent\n if (args.length > 0) return false;\n if (!process.stdout.isTTY) return false;\n if (process.env.CI) return false;\n return true;\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n\n // Legacy --brain/--studio flags\n if (args.includes('--brain') || args.includes('--studio')) {\n const filtered = args.filter((arg) => arg !== '--brain' && arg !== '--studio');\n process.argv = [process.argv[0], process.argv[1], ...filtered];\n const noAnim = filtered.includes('--no-anim');\n await brainCommand({ anim: !noAnim });\n return;\n }\n\n // Default interactive mode: chat agent (replaces brain as default)\n if (shouldAutoLaunchChat(args)) {\n try {\n await launchChatAgent();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n return;\n }\n\n program.parse();\n}\n\nvoid main();\n","import pc from 'picocolors';\nimport { InsufficientCreditsError } from '@recursiv/sdk';\n\n/**\n * Format and print an error caught at a CLI command boundary.\n *\n * Special-cases `InsufficientCreditsError` (HTTP 402) so users see a clear\n * \"out of credits — upgrade here\" message instead of a raw API error string.\n * Every other error falls back to its message (or stringified form).\n */\nexport function printCliError(err: unknown): void {\n if (err instanceof InsufficientCreditsError) {\n console.error(pc.red(' Out of credits.'));\n console.error(` ${err.message.split('\\n')[0]}`);\n console.error(` Upgrade: ${pc.bold(pc.cyan(err.upgradeUrl))}`);\n return;\n }\n console.error(err instanceof Error ? err.message : err);\n}\n","import { existsSync } from 'node:fs';\nimport { mkdir, readFile, unlink, writeFile } from 'node:fs/promises';\nimport { resolve, basename } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport prompts from 'prompts';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { log, banner } from '../lib/logger.js';\nimport { createConfig, writeConfig } from '../lib/config.js';\nimport { writeEnvFile } from '../lib/env.js';\nimport { cloneTemplate } from '../lib/templates.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { detectFromUserAgent, installCommand, runCommand } from '../lib/package-manager.js';\nimport { templates, type Template } from '../templates/registry.js';\n\nexport async function initCommand(nameArg?: string): Promise<void> {\n banner();\n\n const totalSteps = 7;\n\n // 1. Project name\n log.step(1, totalSteps, 'Project setup');\n let projectName: string;\n if (nameArg) {\n projectName = nameArg;\n } else {\n const { name } = await prompts(\n {\n type: 'text',\n name: 'name',\n message: 'Project name',\n initial: 'my-recursiv-app',\n validate: (v: string) => (v.trim() ? true : 'Name is required'),\n },\n { onCancel: () => process.exit(1) }\n );\n projectName = name;\n }\n\n const projectDir = resolve(process.cwd(), projectName);\n\n if (existsSync(projectDir)) {\n log.error(`Directory ${pc.bold(projectName)} already exists`);\n process.exit(1);\n }\n\n // 2. Template selection\n log.step(2, totalSteps, 'Choose a template');\n const templateChoices = templates.map((t) => ({\n title: t.recommended ? `${t.name} ${pc.dim('(recommended)')}` : t.name,\n description: t.description,\n value: t.id,\n }));\n\n const { templateId } = await prompts(\n {\n type: 'select',\n name: 'templateId',\n message: 'Template',\n choices: templateChoices,\n initial: 0,\n },\n { onCancel: () => process.exit(1) }\n );\n\n const template = templates.find((t) => t.id === templateId) as Template;\n\n // 3. API key\n log.step(3, totalSteps, 'Authentication');\n const apiKey = await getOrCreateApiKey('https://api.recursiv.io/api/v1');\n\n // 4. Clone template\n log.step(4, totalSteps, 'Creating project');\n await mkdir(projectDir, { recursive: true });\n await cloneTemplate(template, projectDir);\n\n // Fix: ensure next.config is valid JS (templates may ship TypeScript syntax in .mjs/.ts)\n const nextConfigTs = resolve(projectDir, 'next.config.ts');\n const nextConfigMjs = resolve(projectDir, 'next.config.mjs');\n const cleanNextConfig = '/** @type {import(\"next\").NextConfig} */\\nconst nextConfig = {};\\nexport default nextConfig;\\n';\n\n if (existsSync(nextConfigTs)) {\n await unlink(nextConfigTs);\n // Remove stale .mjs if template shipped both\n if (existsSync(nextConfigMjs)) await unlink(nextConfigMjs);\n await writeFile(nextConfigMjs, cleanNextConfig, 'utf-8');\n } else if (existsSync(nextConfigMjs)) {\n // Template may have .mjs with TypeScript syntax (import type) — replace it\n const content = await readFile(nextConfigMjs, 'utf-8');\n if (content.includes('import type') || content.includes(': NextConfig')) {\n await writeFile(nextConfigMjs, cleanNextConfig, 'utf-8');\n }\n }\n\n // 5. Write config files\n log.step(5, totalSteps, 'Writing config');\n const pm = detectFromUserAgent();\n\n const config = createConfig({\n name: projectName,\n template: template.id,\n framework: template.framework,\n port: template.devPort,\n devCommand: runCommand(pm, 'dev'),\n });\n await writeConfig(projectDir, config);\n\n if (apiKey) {\n await writeEnvFile(projectDir, apiKey);\n }\n\n // Write .gitignore if it doesn't exist\n const gitignorePath = resolve(projectDir, '.gitignore');\n if (!existsSync(gitignorePath)) {\n await writeFile(\n gitignorePath,\n ['node_modules', 'dist', '.env', '.env.local', '.next', '.turbo', ''].join('\\n'),\n 'utf-8'\n );\n }\n\n // 6. Install dependencies\n log.step(6, totalSteps, 'Installing dependencies');\n const installSpinner = ora(`Running ${pc.bold(installCommand(pm))}...`).start();\n try {\n execSync(installCommand(pm), {\n cwd: projectDir,\n stdio: 'pipe',\n timeout: 120_000,\n });\n installSpinner.succeed('Dependencies installed');\n } catch {\n installSpinner.warn('Could not install dependencies — run install manually');\n }\n\n // 7. Init git\n log.step(7, totalSteps, 'Initializing git');\n try {\n execSync('git init', { cwd: projectDir, stdio: 'pipe' });\n execSync('git add -A', { cwd: projectDir, stdio: 'pipe' });\n execSync('git commit -m \"Initial commit from create-recursiv-app\"', {\n cwd: projectDir,\n stdio: 'pipe',\n });\n log.success('Git repository initialized');\n } catch {\n log.warn('Could not initialize git repository');\n }\n\n // Done!\n log.blank();\n console.log(pc.bold(pc.green('Your Recursiv app is ready!')));\n log.blank();\n console.log(' Next steps:');\n console.log();\n console.log(` ${pc.dim('$')} cd ${projectName}`);\n if (!apiKey) {\n console.log(` ${pc.dim('$')} ${pc.dim('# Add your API key to .env')}`);\n }\n console.log(` ${pc.dim('$')} ${runCommand(pm, 'dev')}`);\n log.blank();\n console.log(pc.dim('Docs: https://docs.recursiv.io'));\n console.log(pc.dim('Dashboard: https://recursiv.io/dashboard'));\n log.blank();\n}\n","import degit from 'degit';\nimport ora from 'ora';\nimport type { Template } from '../templates/registry.js';\n\nexport async function cloneTemplate(template: Template, dest: string): Promise<void> {\n const spinner = ora(`Cloning ${template.name} template...`).start();\n try {\n const emitter = degit(template.repo, {\n cache: false,\n force: true,\n verbose: false,\n });\n\n await emitter.clone(dest);\n spinner.succeed(`Template cloned successfully`);\n } catch (err) {\n spinner.fail('Failed to clone template');\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Could not clone template from ${template.repo}.\\n` +\n `Make sure you have internet access and the repo exists.\\n` +\n `Details: ${message}`\n );\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport function detectPackageManager(dir: string): PackageManager {\n if (existsSync(join(dir, 'bun.lockb')) || existsSync(join(dir, 'bun.lock'))) return 'bun';\n if (existsSync(join(dir, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(join(dir, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\nexport function detectFromUserAgent(): PackageManager {\n const ua = process.env.npm_config_user_agent ?? '';\n if (ua.startsWith('bun')) return 'bun';\n if (ua.startsWith('pnpm')) return 'pnpm';\n if (ua.startsWith('yarn')) return 'yarn';\n return 'npm';\n}\n\nexport function installCommand(pm: PackageManager): string {\n return pm === 'yarn' ? 'yarn' : `${pm} install`;\n}\n\nexport function runCommand(pm: PackageManager, script: string): string {\n if (pm === 'npm') return `npm run ${script}`;\n return `${pm} ${script}`;\n}\n","export interface Template {\n id: string;\n name: string;\n description: string;\n repo: string;\n framework: string;\n devCommand: string;\n devPort: number;\n recommended?: boolean;\n}\n\nexport const templates: Template[] = [\n {\n id: 'nextjs',\n name: 'Next.js + Recursiv',\n description: 'Full-stack Next.js app with feeds, chat, and agents',\n repo: 'recursivlabs/template-nextjs',\n framework: 'nextjs',\n devCommand: 'next dev',\n devPort: 3000,\n recommended: true,\n },\n {\n id: 'node',\n name: 'Node.js + Express',\n description: 'Express API server with Recursiv SDK',\n repo: 'recursivlabs/template-node',\n framework: 'express',\n devCommand: 'node --watch src/index.js',\n devPort: 4000,\n },\n {\n id: 'vite',\n name: 'Vite + React',\n description: 'React SPA with social feed components',\n repo: 'recursivlabs/template-vite',\n framework: 'vite',\n devCommand: 'vite',\n devPort: 5173,\n },\n];\n\nexport function getTemplate(id: string): Template | undefined {\n return templates.find((t) => t.id === id);\n}\n\nexport function getDefaultTemplate(): Template {\n return templates.find((t) => t.recommended) ?? templates[0]!;\n}\n","import { spawn } from 'node:child_process';\nimport { resolve } from 'node:path';\nimport pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager, runCommand } from '../lib/package-manager.js';\n\nexport async function devCommand(opts: { port?: string }): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n log.info(`Run ${pc.bold('create-recursiv-app')} to create a new project`);\n process.exit(1);\n }\n\n const apiKey = await readApiKeyFromEnv(cwd);\n if (!apiKey) {\n log.warn('No RECURSIV_API_KEY found in .env — API calls will fail');\n }\n\n const pm = detectPackageManager(cwd);\n const port = opts.port ?? String(config.dev.port);\n const devCmd = config.dev.command || runCommand(pm, 'dev');\n\n // Build env vars to inject\n const env: Record<string, string> = {\n ...process.env,\n PORT: port,\n };\n\n if (apiKey) {\n env.RECURSIV_API_KEY = apiKey;\n }\n\n log.info(`Starting dev server on port ${pc.bold(port)}`);\n log.info(`Running: ${pc.dim(devCmd)}`);\n console.log();\n\n const [cmd, ...args] = devCmd.split(' ');\n const child = spawn(cmd!, args, {\n cwd,\n env,\n stdio: 'inherit',\n shell: true,\n });\n\n (child as any).on('close', (code: number | null) => {\n process.exit(code ?? 0);\n });\n\n // Forward signals\n const cleanup = () => {\n child.kill('SIGTERM');\n };\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n}\n","import { writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\n\ninterface DeployTarget {\n id: string;\n name: string;\n generate: (projectName: string, framework: string) => { file: string; content: string };\n}\n\nconst targets: DeployTarget[] = [\n {\n id: 'vercel',\n name: 'Vercel',\n generate: (name, framework) => ({\n file: 'vercel.json',\n content: JSON.stringify(\n {\n $schema: 'https://openapi.vercel.sh/vercel.json',\n projectSettings: {\n framework: framework === 'nextjs' ? 'nextjs' : framework === 'vite' ? 'vite' : null,\n },\n env: {\n RECURSIV_API_KEY: '@recursiv-api-key',\n },\n },\n null,\n 2\n ),\n }),\n },\n {\n id: 'docker',\n name: 'Docker',\n generate: (name, framework) => ({\n file: 'Dockerfile',\n content: [\n 'FROM node:20-slim AS base',\n 'WORKDIR /app',\n 'COPY package*.json ./',\n 'RUN npm ci --omit=dev',\n 'COPY . .',\n framework === 'nextjs' ? 'RUN npm run build' : '',\n framework === 'nextjs' ? 'EXPOSE 3000' : 'EXPOSE 4000',\n framework === 'nextjs'\n ? 'CMD [\"npm\", \"start\"]'\n : 'CMD [\"node\", \"src/index.js\"]',\n '',\n ]\n .filter(Boolean)\n .join('\\n'),\n }),\n },\n {\n id: 'render',\n name: 'Render',\n generate: (name, framework) => ({\n file: 'render.yaml',\n content: [\n 'services:',\n ` - type: web`,\n ` name: ${name}`,\n ` runtime: node`,\n ` buildCommand: npm install && npm run build`,\n framework === 'nextjs'\n ? ' startCommand: npm start'\n : ' startCommand: node src/index.js',\n ' envVars:',\n ' - key: RECURSIV_API_KEY',\n ' sync: false',\n '',\n ].join('\\n'),\n }),\n },\n {\n id: 'railway',\n name: 'Railway',\n generate: (name, framework) => ({\n file: 'railway.toml',\n content: [\n '[build]',\n 'builder = \"nixpacks\"',\n '',\n '[deploy]',\n framework === 'nextjs'\n ? 'startCommand = \"npm start\"'\n : 'startCommand = \"node src/index.js\"',\n 'healthcheckPath = \"/\"',\n '',\n ].join('\\n'),\n }),\n },\n];\n\nexport async function deployCommand(target: string): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n process.exit(1);\n }\n\n if (target === 'cloud') {\n log.info('Cloud deployment via Recursiv is coming soon');\n log.info(`For now, deploy to Vercel, Render, or Railway with ${pc.bold('recursiv deploy <target>')}`);\n return;\n }\n\n const deployTarget = targets.find((t) => t.id === target);\n if (!deployTarget) {\n log.error(`Unknown target: ${pc.bold(target)}`);\n log.info(`Available targets: ${targets.map((t) => t.id).join(', ')}, cloud`);\n process.exit(1);\n }\n\n const spinner = ora(`Generating ${deployTarget.name} config...`).start();\n const { file, content } = deployTarget.generate(\n config.project.name,\n config.project.framework\n );\n\n await writeFile(resolve(cwd, file), content + '\\n', 'utf-8');\n spinner.succeed(`Created ${pc.bold(file)}`);\n\n log.blank();\n log.info(`Remember to set ${pc.bold('RECURSIV_API_KEY')} in your ${deployTarget.name} environment`);\n}\n","import pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readApiKeyFromEnv, updateApiKeyInEnv } from '../lib/env.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { readConfig } from '../lib/config.js';\nimport { resolveRecursivKey, saveCredentials } from '../lib/credentials.js';\n\nexport async function loginCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n\n const existing = await resolveRecursivKey(cwd);\n if (existing) {\n log.info(`Existing key found: ${pc.dim(maskKey(existing))}`);\n log.info('Enter a new key to replace it, or press Enter to keep it');\n }\n\n const apiKey = await getOrCreateApiKey(baseUrl);\n if (apiKey) {\n // Save globally to ~/.recursiv/credentials\n await saveCredentials({ recursivApiKey: apiKey });\n log.success('API key saved to ~/.recursiv/credentials');\n\n // Also save to project .env if one exists\n try {\n await updateApiKeyInEnv(cwd, apiKey);\n log.success('Also saved to .env');\n } catch {\n // No .env in this directory — that's fine\n }\n }\n}\n\nexport async function logoutCommand(): Promise<void> {\n // Clear global credentials\n await saveCredentials({ recursivApiKey: undefined });\n log.success('API key removed from ~/.recursiv/credentials');\n\n // Also clear project .env if present\n const cwd = process.cwd();\n const existing = await readApiKeyFromEnv(cwd);\n if (existing) {\n await updateApiKeyInEnv(cwd, '');\n log.success('Also removed from .env');\n }\n}\n\nexport async function whoamiCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n const apiKey = await resolveRecursivKey(cwd);\n\n if (!apiKey) {\n log.error('No API key found in .env');\n log.info(`Run ${pc.bold('recursiv auth login')} to set one`);\n return;\n }\n\n log.info(`Key: ${pc.dim(maskKey(apiKey))}`);\n\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n\n if (!res.ok) {\n log.error('API key is invalid or expired');\n return;\n }\n\n const body = (await res.json()) as { data: { username?: string; email?: string } };\n if (body.data.username) log.info(`User: ${pc.bold(body.data.username)}`);\n if (body.data.email) log.info(`Email: ${body.data.email}`);\n } catch {\n log.warn('Could not reach API — check your network');\n }\n}\n\nfunction maskKey(key: string): string {\n if (key.length <= 12) return '****';\n return key.slice(0, 8) + '...' + key.slice(-4);\n}\n","import pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager } from '../lib/package-manager.js';\nimport { getTemplate } from '../templates/registry.js';\n\nexport async function infoCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n log.info(`Run ${pc.bold('create-recursiv-app')} to create a new project`);\n process.exit(1);\n }\n\n const apiKey = await readApiKeyFromEnv(cwd);\n const pm = detectPackageManager(cwd);\n const template = getTemplate(config.project.template);\n\n console.log();\n console.log(pc.bold('Project Info'));\n console.log();\n console.log(` Name: ${pc.bold(config.project.name)}`);\n console.log(` Template: ${template?.name ?? config.project.template}`);\n console.log(` Framework: ${config.project.framework}`);\n console.log(` Dev port: ${config.dev.port}`);\n console.log(` Dev cmd: ${pc.dim(config.dev.command)}`);\n console.log(` Pkg mgr: ${pm}`);\n console.log(` API URL: ${pc.dim(config.api.baseUrl)}`);\n console.log(` API key: ${apiKey ? pc.green('configured') : pc.yellow('not set')}`);\n console.log(` Config: ${pc.dim('.recursiv.json v' + config.version)}`);\n console.log();\n\n // Connection check\n if (apiKey) {\n try {\n const res = await fetch(`${config.api.baseUrl}/users/me`, {\n headers: { Authorization: `Bearer ${apiKey}`, Accept: 'application/json' },\n });\n if (res.ok) {\n log.success('API connection OK');\n } else {\n log.warn(`API returned ${res.status} — key may be invalid`);\n }\n } catch {\n log.warn('Could not reach API');\n }\n }\n}\n","import React from 'react';\nimport { render } from 'ink';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager } from '../lib/package-manager.js';\nimport { App, type ProjectSnapshot } from '../ui/app.js';\n\nexport async function brainCommand(opts: { anim?: boolean }): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const apiKey = await readApiKeyFromEnv(cwd);\n const packageManager = detectPackageManager(cwd);\n\n const snapshot: ProjectSnapshot | null = config\n ? {\n name: config.project.name,\n template: config.project.template,\n framework: config.project.framework,\n port: config.dev.port,\n devCommand: config.dev.command,\n apiBaseUrl: config.api.baseUrl,\n apiKeyConfigured: Boolean(apiKey),\n packageManager,\n }\n : null;\n\n const app = render(<App snapshot={snapshot} animate={opts.anim !== false} />);\n\n await app.waitUntilExit();\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Box, Text, useApp, useInput, useStdout, type Key } from 'ink';\n\nexport type ProjectSnapshot = {\n name: string;\n template: string;\n framework: string;\n port: number;\n devCommand: string;\n apiBaseUrl: string;\n apiKeyConfigured: boolean;\n packageManager: string;\n} | null;\n\ntype TabKey = 'overview' | 'commands' | 'stack';\ntype Glow = 'none' | 'soft' | 'strong';\n\nconst TABS: { key: TabKey; label: string }[] = [\n { key: 'overview', label: 'Overview' },\n { key: 'commands', label: 'Commands' },\n { key: 'stack', label: 'App' },\n];\n\nconst THEME = {\n accent: '#1FE4C6',\n accentWarm: '#F6D47A',\n accentCool: '#4DB6FF',\n muted: '#6F7C8A',\n bright: '#E9FFFA',\n danger: '#FF6B6B',\n};\n\nconst WORDMARK_COLORS = ['cyan', 'blue', 'yellow'];\nconst WORDMARK_LINES = [\n '#### #### ### ##### # #',\n '# # # # # # # ## #',\n '#### #### ##### # # # #',\n '# # # # # # # # ##',\n '#### # # # # ##### # #',\n];\n\nconst HERO_LINES = [\n 'Neurons, particles, waves.',\n 'The brain behind Recursiv.',\n 'Signals in motion, products alive.',\n 'A living map of your platform.',\n 'Bioluminescent systems in sync.',\n];\n\nconst COPY: Record<TabKey, string> = {\n overview: `# Social.dev Brain\nA neural CLI reflection of your product surface with neurons, particles, and waves.\n\n## What it shows\n- Branded networks, communities, posts, and reactions\n- Real-time chat with human + AI agent threads\n- Tool-enabled agents with sandboxes and integrations\n- Deployments, storage buckets, and databases\n\n## Flow\n1. Create a project\n2. Run dev locally\n3. Deploy anywhere`,\n commands: `# Command Deck\n- \\`recursiv\\` runs Brain when interactive\n- \\`recursiv brain\\`\n- \\`RECURSIV_BRAIN=1 recursiv\\`\n- \\`RECURSIV_BRAIN=0 recursiv\\`\n- \\`recursiv create my-app\\`\n- \\`recursiv dev --port 3000\\`\n- \\`recursiv deploy <target>\\`\n- \\`recursiv auth login | logout | whoami\\`\n- \\`recursiv info\\`\n- \\`recursiv users me\\`\n- \\`recursiv communities list\\`\n- \\`recursiv posts list\\`\n- \\`recursiv agents list\\``,\n stack: `# App Reflection\n## Client\n- React Native + Expo\n- NativeWind + Tailwind\n\n## Backend\n- Hono + tRPC\n- Better Auth\n\n## Data + Realtime\n- PostgreSQL + Drizzle ORM\n- Socket.IO + optional Redis adapter\n\n## Agents\n- Composio + E2B + OpenRouter`,\n};\n\nconst PULSE_FRAMES = ['spark', 'pulse', 'sync', 'bloom'];\nconst DOT_FRAMES = ['.', '..', '...'];\nconst BAR_FRAMES = ['[~ ]', '[~~ ]', '[~~~ ]', '[ ~~~~ ]', '[ ~~~~]', '[ ~~~]', '[ ~~]', '[ ~]'];\nconst AURORA_COLORS = ['#1FE4C6', '#4DB6FF', '#8AF0FF', '#F6D47A'];\nconst AURORA_COLORS_DEEP = ['#0C2236', '#12314C', '#1E3A5F'];\n\nconst QUICK_ACTIONS = [\n 'recursiv brain',\n 'create-recursiv-app my-app',\n 'recursiv dev --port 3000',\n 'recursiv users me',\n 'recursiv deploy vercel',\n];\n\nconst HINTS = ['Tab or arrows to switch tabs.', '1/2/3 to jump instantly.', 'q or Esc to exit.'];\n\nconst INTEGRATIONS = ['Composio', 'E2B', 'OpenRouter'];\n\nconst INTRO_DURATION_MS = 5200;\nconst INTRO_STEPS = [\n 'Igniting cortex',\n 'Mapping synapses',\n 'Charging particles',\n 'Calibrating agents',\n 'Locking signal',\n];\nconst INTRO_HINTS = ['Press Space to skip', 'Press q to exit'];\n\nexport function App(props: { snapshot: ProjectSnapshot; animate: boolean }): React.ReactElement {\n const { snapshot, animate } = props;\n const { exit } = useApp();\n const { stdout } = useStdout();\n const [tab, setTab] = useState<TabKey>('overview');\n const [introActive, setIntroActive] = useState<boolean>(animate);\n\n const columns = stdout?.columns ?? process.stdout.columns ?? 100;\n const isNarrow = columns < 100;\n const fieldWidth = isNarrow ? Math.max(12, columns - 6) : 26;\n const fieldHeight = isNarrow ? 6 : 10;\n const navWidth = isNarrow ? undefined : 26;\n const infoWidth = isNarrow ? undefined : 34;\n\n const pulseIndex = useTicker(animate, 700, PULSE_FRAMES.length);\n const dotIndex = useTicker(animate, 450, DOT_FRAMES.length);\n const heroIndex = useTicker(animate, 2200, HERO_LINES.length);\n const barIndex = useTicker(animate, 140, BAR_FRAMES.length);\n const sweepIndex = useTicker(animate, 60, Math.max(10, Math.min(columns - 4, 120)));\n const scanIndex = useTicker(animate, 320, 9);\n const introProgress = useProgress(introActive && animate, INTRO_DURATION_MS, 80);\n const introFrame = useTicker(introActive && animate, 60, Math.max(10, columns - 6));\n\n const pulse = PULSE_FRAMES[pulseIndex];\n const dots = DOT_FRAMES[dotIndex];\n const hero = HERO_LINES[heroIndex];\n const bar = BAR_FRAMES[barIndex];\n\n useEffect(() => {\n if (!animate) {\n setIntroActive(false);\n return;\n }\n setIntroActive(true);\n const id = setTimeout(() => setIntroActive(false), INTRO_DURATION_MS);\n return () => clearTimeout(id);\n }, [animate]);\n\n useInput((input: string, key: Key) => {\n if (input === 'q' || key.escape) {\n exit();\n return;\n }\n\n if (introActive) {\n if (input === ' ' || key.return || input === 's') {\n setIntroActive(false);\n }\n return;\n }\n\n if (key.tab || key.rightArrow) {\n const next = (tabIndex(tab) + 1) % TABS.length;\n setTab(TABS[next].key);\n return;\n }\n\n if (key.leftArrow) {\n const prev = (tabIndex(tab) - 1 + TABS.length) % TABS.length;\n setTab(TABS[prev].key);\n return;\n }\n\n if (input === '1') setTab('overview');\n if (input === '2') setTab('commands');\n if (input === '3') setTab('stack');\n });\n\n if (introActive) {\n return (\n <IntroScreen\n width={columns}\n height={Math.max(14, fieldHeight + 6)}\n progress={introProgress}\n frame={introFrame}\n />\n );\n }\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Header\n hero={hero}\n pulse={pulse}\n dots={dots}\n bar={bar}\n sweep={sweepIndex}\n width={columns}\n animate={animate}\n />\n\n <Box marginTop={1} flexDirection={isNarrow ? 'column' : 'row'}>\n <Box\n flexDirection=\"column\"\n width={navWidth}\n marginRight={isNarrow ? 0 : 2}\n marginBottom={isNarrow ? 1 : 0}\n >\n <Panel title=\"Brain Map\" accent={THEME.accent} borderStyle=\"round\">\n <NeuralField width={fieldWidth} height={fieldHeight} frame={sweepIndex} animate={animate} />\n <Text color={THEME.muted}>* neuron o synapse + particle ~ wave</Text>\n <Divider width={fieldWidth} />\n <SectionTitle label=\"Navigator\" />\n <Navigation active={tab} />\n <Divider />\n <SectionTitle label=\"Quick Actions\" />\n {QUICK_ACTIONS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n <Divider />\n <SectionTitle label=\"Hints\" />\n {HINTS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n </Panel>\n </Box>\n\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n marginRight={isNarrow ? 0 : 2}\n marginBottom={isNarrow ? 1 : 0}\n >\n <Panel title={tabTitle(tab)} accent={THEME.accentWarm} borderStyle=\"double\">\n <AnimatedMarkdown content={COPY[tab]} animate={animate} />\n </Panel>\n </Box>\n\n <Box flexDirection=\"column\" width={infoWidth}>\n <Panel title=\"Synapses\" accent={THEME.accentCool} borderStyle=\"round\">\n <ProjectPanel snapshot={snapshot} animate={animate} dots={dots} frame={sweepIndex} scanIndex={scanIndex} />\n </Panel>\n </Box>\n </Box>\n\n <Footer snapshot={snapshot} animate={animate} />\n </Box>\n );\n}\n\nfunction Header(props: {\n hero: string;\n pulse: string;\n dots: string;\n bar: string;\n sweep: number;\n width: number;\n animate: boolean;\n}): React.ReactElement {\n const { hero, pulse, dots, bar, sweep, width, animate } = props;\n const lineWidth = Math.max(32, Math.min(width - 4, 120));\n const pulseLabel = animate ? `${pulse}${dots}` : 'ready';\n const time = new Date().toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });\n const wordmarkPalette = rotatePalette(WORDMARK_COLORS, sweep);\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Wordmark lines={WORDMARK_LINES} palette={wordmarkPalette} />\n <Text color={THEME.muted}>{hero}</Text>\n <Text color={THEME.muted}>by Recursiv</Text>\n <Box marginTop={1} flexDirection=\"row\">\n <Box marginRight={2}>\n <StatusPill label=\"brain\" value={pulseLabel} tone={THEME.accent} />\n </Box>\n <Box marginRight={2}>\n <StatusPill label=\"clock\" value={time} tone={THEME.accentWarm} />\n </Box>\n <StatusPill label=\"waves\" value={bar} tone={THEME.accentCool} />\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n <Aurora width={lineWidth} frame={sweep} />\n </Box>\n <Box marginTop={1}>\n <AccentLine width={lineWidth} frame={sweep} />\n </Box>\n </Box>\n );\n}\n\nfunction Footer(props: { snapshot: ProjectSnapshot; animate: boolean }): React.ReactElement {\n const { snapshot, animate } = props;\n const projectHint = snapshot ? `${snapshot.name}` : 'no project loaded';\n const status = animate ? 'brain live' : 'brain ready';\n\n return (\n <Box marginTop={1} flexDirection=\"row\" justifyContent=\"space-between\">\n <Text color={THEME.muted}>Tab to switch | 1/2/3 to jump | q to quit</Text>\n <Text color={THEME.muted}>\n {status} | {projectHint}\n </Text>\n </Box>\n );\n}\n\nfunction Panel(props: {\n title: string;\n accent: string;\n borderStyle?: 'single' | 'double' | 'round' | 'classic';\n children: React.ReactNode;\n}): React.ReactElement {\n const { title, accent, borderStyle = 'round', children } = props;\n return (\n <Box flexDirection=\"column\" borderStyle={borderStyle} borderColor={accent} paddingX={1} paddingY={1}>\n <Text color={accent}>{title}</Text>\n <Box flexDirection=\"column\" marginTop={1}>\n {children as any}\n </Box>\n </Box>\n );\n}\n\nfunction SectionTitle(props: { label: string }): React.ReactElement {\n return <Text color={THEME.accentWarm}>{props.label}</Text>;\n}\n\nfunction Navigation(props: { active: TabKey }): React.ReactElement {\n const { active } = props;\n return (\n <Box flexDirection=\"column\">\n {TABS.map((tab, index) => {\n const isActive = tab.key === active;\n const marker = isActive ? '>' : ' ';\n const color = isActive ? THEME.accent : THEME.muted;\n return (\n <Text key={tab.key} color={color}>\n {marker} {index + 1}. {tab.label}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction NeuralField(props: { width: number; height: number; frame: number; animate: boolean }): React.ReactElement {\n const { width, height, frame, animate } = props;\n const lines = useMemo(() => buildNeuralField(width, height, animate ? frame : 0), [width, height, frame, animate]);\n\n return (\n <Box flexDirection=\"column\">\n {lines.map((line, index) => {\n const tone =\n line.includes('~') ||\n line.includes('*') ||\n line.includes('+') ||\n line.includes('o') ||\n line.includes('O')\n ? THEME.accentCool\n : THEME.muted;\n return (\n <Text key={index} color={tone}>\n {line}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction ProjectPanel(props: {\n snapshot: ProjectSnapshot;\n animate: boolean;\n dots: string;\n frame: number;\n scanIndex: number;\n}): React.ReactElement {\n const { snapshot, animate, dots, frame, scanIndex } = props;\n\n if (!snapshot) {\n return (\n <Box flexDirection=\"column\">\n <Text color={THEME.accentWarm}>Not in a Recursiv project.</Text>\n <Text color={THEME.muted}>Run create-recursiv-app to start.</Text>\n </Box>\n );\n }\n\n const status = animate ? `firing${dots}` : 'quiet';\n const apiStatus = snapshot.apiKeyConfigured ? 'linked' : 'missing';\n const apiTone = snapshot.apiKeyConfigured ? THEME.accentCool : THEME.danger;\n const meter = buildPulseMeter(animate ? frame : 0, 16);\n\n const fields = [\n { label: 'Name', value: snapshot.name },\n { label: 'Template', value: snapshot.template },\n { label: 'Framework', value: snapshot.framework },\n { label: 'Dev port', value: String(snapshot.port) },\n { label: 'Pkg mgr', value: snapshot.packageManager },\n { label: 'API base', value: snapshot.apiBaseUrl, dim: true },\n { label: 'API key', value: apiStatus, tone: apiTone },\n { label: 'Status', value: status, tone: THEME.accent },\n { label: 'Pulse', value: meter, tone: THEME.accentWarm },\n ];\n\n const activeIndex = fields.length > 0 ? scanIndex % fields.length : 0;\n const scanBar = buildScanBar(activeIndex, 18);\n\n return (\n <Box flexDirection=\"column\">\n {fields.map((field, index) => {\n const distance = Math.min(\n Math.abs(index - activeIndex),\n fields.length - Math.abs(index - activeIndex),\n );\n const glow: Glow = animate && distance === 0 ? 'strong' : animate && distance === 1 ? 'soft' : 'none';\n\n return (\n <Field\n key={field.label}\n label={field.label}\n value={field.value}\n dim={field.dim}\n tone={field.tone}\n glow={glow}\n />\n );\n })}\n <Text color={THEME.accentCool}>Neural scan {scanBar}</Text>\n <Divider />\n <SectionTitle label=\"Integrations\" />\n {INTEGRATIONS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n <Divider />\n <Text color={THEME.muted}>Dev cmd:</Text>\n <Text color={THEME.muted}>{snapshot.devCommand}</Text>\n </Box>\n );\n}\n\nfunction Field(props: { label: string; value: string; dim?: boolean; tone?: string; glow?: Glow }): React.ReactElement {\n const { label, value, dim, tone, glow = 'none' } = props;\n const marker = glow === 'strong' ? '>' : glow === 'soft' ? '-' : ' ';\n const paddedLabel = `${marker} ${label.padEnd(9, ' ')}`;\n const labelColor = glow === 'strong' ? THEME.accentWarm : glow === 'soft' ? THEME.accent : THEME.muted;\n const valueColor =\n glow === 'strong'\n ? THEME.bright\n : glow === 'soft'\n ? THEME.accentCool\n : tone ?? (dim ? THEME.muted : undefined);\n\n return (\n <Text>\n <Text color={labelColor}>{paddedLabel}</Text>\n <Text color={valueColor}>{value}</Text>\n </Text>\n );\n}\n\nfunction StatusPill(props: { label: string; value: string; tone: string }): React.ReactElement {\n const { label, value, tone } = props;\n return (\n <Text color={tone}>\n [{label}: {value}]\n </Text>\n );\n}\n\nfunction Wordmark(props: { lines: string[]; palette: string[] }): React.ReactElement {\n const { lines, palette } = props;\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n {lines.map((line, index) => (\n <Text key={index} color={palette[index % palette.length] ?? THEME.accent}>\n {line}\n </Text>\n ))}\n </Box>\n );\n}\n\nfunction ColorLine(props: { text: string; color: string }): React.ReactElement {\n return <Text color={props.color}>{props.text}</Text>;\n}\n\nfunction Aurora(props: { width: number; frame: number }): React.ReactElement {\n const { width, frame } = props;\n const lineWidth = Math.max(18, width);\n const lineA = buildAuroraLine(lineWidth, frame, 0);\n const lineB = buildInterferenceLine(lineWidth, frame + 7, 1);\n const lineC = buildAuroraLine(lineWidth, frame + 13, 2);\n const lineD = buildNeuronHalo(lineWidth, frame);\n const palette = rotatePalette(AURORA_COLORS, frame);\n const deepPalette = rotatePalette(AURORA_COLORS_DEEP, frame);\n\n return (\n <Box flexDirection=\"column\">\n <ColorLine text={lineA} color={palette[0]} />\n <ColorLine text={lineB} color={deepPalette[0]} />\n <ColorLine text={lineC} color={palette[1] ?? palette[0]} />\n <ColorLine text={lineD} color={palette[2] ?? palette[0]} />\n </Box>\n );\n}\n\nfunction Divider(props: { width?: number } = {}): React.ReactElement {\n const { width } = props;\n const lineWidth = Math.max(12, Math.min(32, width ?? 22));\n return <Text color={THEME.muted}>{'-'.repeat(lineWidth)}</Text>;\n}\n\nfunction AccentLine(props: { width: number; frame: number }): React.ReactElement {\n const { width, frame } = props;\n const lineWidth = Math.max(10, width);\n const head = Math.min(frame % lineWidth, lineWidth - 1);\n const left = '-'.repeat(head);\n const right = '-'.repeat(Math.max(0, lineWidth - head - 1));\n\n return (\n <Text color={THEME.muted}>\n {left}\n <Text color={THEME.accent}>*</Text>\n {right}\n </Text>\n );\n}\n\nfunction AnimatedMarkdown(props: { content: string; animate: boolean }): React.ReactElement {\n const { content, animate } = props;\n const safe = useMemo(() => content.replace(/\\r\\n/g, '\\n'), [content]);\n const lines = useMemo(() => safe.split('\\n'), [safe]);\n const [visibleLines, setVisibleLines] = useState(animate ? 1 : lines.length);\n\n useEffect(() => {\n if (!animate) {\n setVisibleLines(lines.length);\n return;\n }\n\n setVisibleLines(1);\n const id = setInterval(() => {\n setVisibleLines((current) => (current >= lines.length ? current : current + 1));\n }, 55);\n\n return () => clearInterval(id);\n }, [animate, lines.length, safe]);\n\n const sliceCount = Math.max(1, visibleLines);\n const text = animate ? lines.slice(0, sliceCount).join('\\n') : safe;\n\n return <MarkdownBlock content={text} />;\n}\n\nfunction MarkdownBlock(props: { content: string }): React.ReactElement {\n const lines = props.content.split('\\n');\n return (\n <Box flexDirection=\"column\">\n {lines.map((line, index) => {\n if (line.startsWith('### ')) {\n return (\n <Text key={index} color={THEME.accentCool}>\n {line.slice(4)}\n </Text>\n );\n }\n if (line.startsWith('## ')) {\n return (\n <Text key={index} color={THEME.accentWarm}>\n {line.slice(3)}\n </Text>\n );\n }\n if (line.startsWith('# ')) {\n return (\n <Text key={index} color={THEME.accent}>\n {line.slice(2)}\n </Text>\n );\n }\n if (line.startsWith('- ')) {\n return (\n <Text key={index} color={THEME.muted}>\n - {line.slice(2)}\n </Text>\n );\n }\n if (/^\\d+\\.\\s/.test(line)) {\n return (\n <Text key={index} color={THEME.muted}>\n {line}\n </Text>\n );\n }\n if (line.trim().length === 0) {\n return <Text key={index}> </Text>;\n }\n return (\n <Text key={index} color={THEME.bright}>\n {line}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction useTicker(animate: boolean, intervalMs: number, length: number): number {\n const [tick, setTick] = useState(0);\n\n useEffect(() => {\n if (!animate || length <= 0) {\n setTick(0);\n return;\n }\n\n const id = setInterval(() => {\n setTick((current) => (current + 1) % length);\n }, intervalMs);\n\n return () => clearInterval(id);\n }, [animate, intervalMs, length]);\n\n return tick;\n}\n\nfunction tabIndex(tab: TabKey): number {\n return TABS.findIndex((item) => item.key === tab);\n}\n\nfunction tabTitle(tab: TabKey): string {\n const active = TABS.find((item) => item.key === tab);\n return active ? active.label : 'Overview';\n}\n\nfunction buildNeuralField(width: number, height: number, frame: number): string[] {\n const safeWidth = Math.max(8, width);\n const safeHeight = Math.max(4, height);\n const grid: string[][] = Array.from({ length: safeHeight }, () => Array(safeWidth).fill(' '));\n const phase = Math.floor(frame / 6);\n const rng = makeRng(phase * 109 + 97);\n const nodes: Array<{ x: number; y: number }> = [];\n\n const place = (x: number, y: number, char: string, priority = 0): void => {\n if (x < 0 || x >= safeWidth || y < 0 || y >= safeHeight) return;\n const current = grid[y][x];\n const currentPriority = current === '*' || current === 'O' ? 3 : current === 'o' ? 2 : current === '~' ? 1 : 0;\n if (priority >= currentPriority || current === ' ') {\n grid[y][x] = char;\n }\n };\n\n for (let y = 0; y < safeHeight; y += 1) {\n for (let x = 0; x < safeWidth; x += 1) {\n const roll = rng();\n if (roll < 0.018) {\n grid[y][x] = '*';\n nodes.push({ x, y });\n } else if (roll < 0.04) {\n grid[y][x] = 'o';\n nodes.push({ x, y });\n } else if (roll < 0.12) {\n grid[y][x] = '.';\n }\n }\n }\n\n const mid = Math.floor(safeHeight / 2);\n const amp = Math.max(1, Math.floor(safeHeight / 3));\n for (let x = 0; x < safeWidth; x += 1) {\n const y = Math.round(mid + Math.sin((x + frame * 0.6) / 3) * amp);\n place(x, y, '~', 1);\n if ((x + frame) % 11 === 0) place(x, y, '*', 3);\n }\n\n const mid2 = Math.floor(safeHeight / 3);\n const amp2 = Math.max(1, Math.floor(safeHeight / 4));\n for (let x = 0; x < safeWidth; x += 1) {\n const y = Math.round(mid2 + Math.sin((x + frame * 0.4) / 2.6) * amp2);\n place(x, y, '~', 1);\n if ((x + frame * 2) % 17 === 0) place(x, y, 'o', 2);\n }\n\n const particleCount = Math.max(2, Math.floor(safeWidth / 12));\n for (let i = 0; i < particleCount; i += 1) {\n const particleX = (frame * (i + 2) + i * 7) % safeWidth;\n const particleY = (frame * (i + 3) + i * 5) % safeHeight;\n place(particleX, particleY, '+', 2);\n }\n\n nodes.forEach((node) => {\n if (rng() < 0.35) {\n const length = 2 + Math.floor(rng() * 6);\n const drift = rng() < 0.5 ? 1 : -1;\n for (let step = 1; step <= length; step += 1) {\n const x = node.x + step;\n const y = node.y + (rng() < 0.3 ? drift : 0);\n place(x, y, rng() < 0.5 ? '-' : '=', 0);\n }\n }\n if ((node.x + frame) % 14 === 0) {\n place(node.x, node.y, 'O', 3);\n }\n });\n\n return grid.map((row) => row.join(''));\n}\n\nfunction buildAuroraLine(width: number, frame: number, offset: number): string {\n const safeWidth = Math.max(10, width);\n const chars = [' ', ' ', '.', ':', '-', '=', '+', '*'];\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const phase = (x + frame * 0.9 + offset * 7) / 4;\n const wave = Math.sin(phase) * 0.6 + Math.sin(phase / 2 + offset) * 0.4 + 1;\n const normalized = Math.max(0, Math.min(1, wave / 2));\n const idx = Math.min(chars.length - 1, Math.floor(normalized * (chars.length - 1)));\n line += chars[idx];\n }\n return line;\n}\n\nfunction buildInterferenceLine(width: number, frame: number, offset: number): string {\n const safeWidth = Math.max(10, width);\n const chars = [' ', '.', ':', '-', '=', '+', '*', '#'];\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const waveA = Math.sin((x + frame * 0.6 + offset * 5) / 3);\n const waveB = Math.sin((x * 0.6 + frame * 0.3) / 2.1);\n const waveC = Math.sin((x * 1.2 + frame * 0.9) / 4.6);\n const mix = (waveA + waveB + waveC + 3) / 6;\n const idx = Math.min(chars.length - 1, Math.floor(mix * (chars.length - 1)));\n line += chars[idx];\n }\n return line;\n}\n\nfunction buildNeuronHalo(width: number, frame: number): string {\n const safeWidth = Math.max(10, width);\n const rng = makeRng((Math.floor(frame / 4) + 11) * 233);\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const roll = rng();\n if (roll < 0.04) line += '*';\n else if (roll < 0.08) line += 'o';\n else if (roll < 0.11) line += '.';\n else line += ' ';\n }\n return line;\n}\n\nfunction buildPulseMeter(frame: number, width: number): string {\n const safeWidth = Math.max(8, width);\n const head = frame % safeWidth;\n let line = '';\n for (let i = 0; i < safeWidth; i += 1) {\n if (i === head) {\n line += '*';\n } else if (Math.abs(i - head) === 1) {\n line += '+';\n } else if ((i + frame) % 5 === 0) {\n line += '-';\n } else {\n line += '.';\n }\n }\n return line;\n}\n\nfunction buildScanBar(position: number, width: number): string {\n const safeWidth = Math.max(8, width);\n if (position < 0) return '[' + '.'.repeat(safeWidth) + ']';\n const head = position % safeWidth;\n let line = '';\n for (let i = 0; i < safeWidth; i += 1) {\n if (i === head) line += '>';\n else if (Math.abs(i - head) === 1) line += '=';\n else line += '.';\n }\n return `[${line}]`;\n}\n\nfunction makeRng(seed: number): () => number {\n let state = seed >>> 0;\n return () => {\n state = (state * 1664525 + 1013904223) >>> 0;\n return state / 4294967295;\n };\n}\n\nfunction rotatePalette(palette: string[], frame: number): string[] {\n if (palette.length === 0) return palette;\n const offset = frame % palette.length;\n return [...palette.slice(offset), ...palette.slice(0, offset)];\n}\n\nfunction useProgress(active: boolean, durationMs: number, stepMs: number): number {\n const [progress, setProgress] = useState(active ? 0 : 1);\n\n useEffect(() => {\n if (!active) {\n setProgress(1);\n return;\n }\n\n setProgress(0);\n const start = Date.now();\n const id = setInterval(() => {\n const value = Math.min(1, (Date.now() - start) / durationMs);\n setProgress(value);\n if (value >= 1) clearInterval(id);\n }, stepMs);\n\n return () => clearInterval(id);\n }, [active, durationMs, stepMs]);\n\n return progress;\n}\n\nfunction IntroScreen(props: { width: number; height: number; progress: number; frame: number }): React.ReactElement {\n const { width, height, progress, frame } = props;\n const fieldWidth = Math.max(24, width - 6);\n const fieldHeight = Math.max(10, Math.min(14, height));\n const steps = INTRO_STEPS.map((label, index) => ({\n label,\n done: progress >= (index + 1) / INTRO_STEPS.length,\n }));\n const bar = buildProgressBar(progress, Math.max(16, Math.min(34, Math.floor(width / 3))));\n const palette = rotatePalette(WORDMARK_COLORS, frame);\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Wordmark lines={WORDMARK_LINES} palette={palette} />\n <Text color={THEME.muted}>Neural ignition sequence</Text>\n </Box>\n <Box marginTop={1} flexDirection=\"column\" alignItems=\"center\">\n <ColorLine text={bar} color={THEME.accentWarm} />\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n {steps.map((step, index) => (\n <Text key={index} color={step.done ? THEME.accent : THEME.muted}>\n [{step.done ? 'x' : ' '}] {step.label}\n </Text>\n ))}\n </Box>\n <Box marginTop={1}>\n <NeuralField width={fieldWidth} height={fieldHeight} frame={frame} animate />\n </Box>\n <Box marginTop={1}>\n {INTRO_HINTS.map((hint) => (\n <Text key={hint} color={THEME.muted}>\n {hint}\n </Text>\n ))}\n </Box>\n </Box>\n );\n}\n\nfunction buildProgressBar(progress: number, width: number): string {\n const safeWidth = Math.max(10, width);\n const filled = Math.round(progress * safeWidth);\n const left = '='.repeat(filled);\n const right = '.'.repeat(Math.max(0, safeWidth - filled));\n return `[${left}${right}]`;\n}\n","import { brainCommand } from './brain.js';\n\nexport async function studioCommand(opts: { anim?: boolean }): Promise<void> {\n await brainCommand(opts);\n}\n","import pc from 'picocolors';\nimport { BrowserUse } from 'browser-use-sdk';\n\ninterface BrowserUseRunOptions {\n task?: string;\n startUrl?: string;\n maxSteps?: string;\n wait?: boolean;\n json?: boolean;\n}\n\ninterface BrowserUseMcpSnippetOptions {\n target?: string;\n}\n\nfunction getClient(): BrowserUse {\n const apiKey = process.env.BROWSER_USE_API_KEY;\n if (!apiKey) {\n throw new Error('BROWSER_USE_API_KEY is required');\n }\n\n return new BrowserUse({\n apiKey,\n baseUrl: process.env.BROWSER_USE_BASE_URL || undefined,\n });\n}\n\nexport async function browserUseRunCommand(opts: BrowserUseRunOptions): Promise<void> {\n if (!opts.task) {\n throw new Error('--task is required');\n }\n\n const client = getClient();\n const result = await client.run(opts.task, {\n startUrl: opts.startUrl,\n maxSteps: opts.maxSteps ? Number.parseInt(opts.maxSteps, 10) : undefined,\n timeout: opts.wait === false ? 10_000 : 300_000,\n });\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(pc.green('Browser Use task complete'));\n console.log(`${pc.dim('Task:')} ${opts.task}`);\n console.log(`${pc.dim('Status:')} ${result.status}`);\n if (result.output) {\n console.log(`${pc.dim('Output:')} ${String(result.output)}`);\n }\n}\n\nexport async function browserUseMcpSnippetCommand(opts: BrowserUseMcpSnippetOptions): Promise<void> {\n const target = opts.target || 'generic';\n\n if (target === 'generic') {\n console.log(JSON.stringify({\n name: 'browser-use',\n transport: 'streamable-http',\n url: 'https://api.browser-use.com/mcp',\n headers: {\n Authorization: 'Bearer ${BROWSER_USE_API_KEY}',\n },\n }, null, 2));\n return;\n }\n\n if (target === 'codex') {\n console.log([\n '[mcp_servers.browser_use]',\n 'url = \"https://api.browser-use.com/mcp\"',\n '',\n '[mcp_servers.browser_use.http_headers]',\n 'Authorization = \"Bearer ${BROWSER_USE_API_KEY}\"',\n ].join('\\n'));\n return;\n }\n\n if (target === 'claude-code') {\n console.log(JSON.stringify({\n mcpServers: {\n 'browser-use': {\n type: 'http',\n url: 'https://api.browser-use.com/mcp',\n headers: {\n Authorization: 'Bearer ${BROWSER_USE_API_KEY}',\n },\n },\n },\n }, null, 2));\n return;\n }\n\n throw new Error(`Unsupported target \"${target}\". Use generic, codex, or claude-code.`);\n}\n","import pc from 'picocolors';\nimport { apiRequest, getApiContext } from '../lib/api.js';\nimport { log } from '../lib/logger.js';\n\ntype ListOpts = {\n limit?: string;\n offset?: string;\n json?: boolean;\n};\n\nexport async function usersMeCommand(opts: { json?: boolean }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, { method: 'GET', path: 'users/me' });\n output(res, opts.json, (data) => {\n log.blank();\n console.log(pc.bold('User'));\n console.log(` ${pc.dim('id')}: ${data.id}`);\n console.log(` ${pc.dim('name')}: ${data.name ?? '-'}`);\n console.log(` ${pc.dim('username')}: ${data.username ?? '-'}`);\n console.log(` ${pc.dim('email')}: ${data.email ?? '-'}`);\n console.log(` ${pc.dim('followers')}: ${data.followers_count ?? 0}`);\n console.log(` ${pc.dim('following')}: ${data.following_count ?? 0}`);\n console.log(` ${pc.dim('posts')}: ${data.posts_count ?? 0}`);\n log.blank();\n });\n}\n\nexport async function communitiesListCommand(opts: ListOpts): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'communities',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Communities'));\n data.forEach((comm: any) => {\n const name = pc.bold(comm.name);\n const slug = comm.slug ? pc.dim(`/${comm.slug}`) : '';\n const members = pc.dim(`members ${comm.member_count ?? 0}`);\n console.log(` ${name} ${slug} ${members}`);\n if (comm.description) console.log(` ${pc.dim(comm.description)}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function communitiesCreateCommand(opts: {\n name?: string;\n slug?: string;\n description?: string;\n privacy?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.name || !opts.slug) {\n log.error('Missing required flags: --name and --slug');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'communities',\n body: {\n name: opts.name,\n slug: opts.slug,\n description: opts.description,\n privacy: opts.privacy ?? 'public',\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Community created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nexport async function postsListCommand(opts: ListOpts & { communityId?: string; authorId?: string }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'posts',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n community_id: opts.communityId,\n author_id: opts.authorId,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Posts'));\n data.forEach((post: any) => {\n const author = post.author?.username ? `@${post.author.username}` : 'unknown';\n const content = truncate(post.content ?? '', 100);\n console.log(` ${pc.bold(author)} ${pc.dim(post.id)}`);\n console.log(` ${content}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function postsCreateCommand(opts: {\n content?: string;\n markdown?: boolean;\n communityId?: string;\n organizationId?: string;\n replyToId?: string;\n tagIds?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.content) {\n log.error('Missing required flag: --content');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const tagIds = opts.tagIds ? opts.tagIds.split(',').map((id) => id.trim()).filter(Boolean) : undefined;\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'posts',\n body: {\n content: opts.content,\n content_format: opts.markdown ? 'markdown' : 'plain',\n community_id: opts.communityId,\n organization_id: opts.organizationId,\n reply_to_id: opts.replyToId,\n tag_ids: tagIds,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Post created: ${pc.dim(data.id)}`);\n });\n}\n\nexport async function projectsListCommand(opts: ListOpts & { organizationId?: string }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'projects',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n organization_id: opts.organizationId,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Projects'));\n data.forEach((proj: any) => {\n const name = pc.bold(proj.name);\n const slug = proj.slug ? pc.dim(`/${proj.slug}`) : '';\n const org = proj.organization?.slug ? pc.dim(`org ${proj.organization.slug}`) : '';\n console.log(` ${name} ${slug} ${org}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function projectsCreateCommand(opts: {\n organizationId?: string;\n name?: string;\n slug?: string;\n repoUrl?: string;\n templateSource?: string;\n templateUrl?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.organizationId || !opts.name) {\n log.error('Missing required flags: --org and --name');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'projects',\n body: {\n organization_id: opts.organizationId,\n name: opts.name,\n slug: opts.slug,\n repo_url: opts.repoUrl,\n template_source: opts.templateSource ?? 'default',\n custom_template_url: opts.templateUrl,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Project created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nexport async function agentsListCommand(opts: ListOpts): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'agents',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Agents'));\n data.forEach((agent: any) => {\n const name = pc.bold(agent.name);\n const handle = agent.username ? pc.dim(`@${agent.username}`) : '';\n const model = agent.model ? pc.dim(agent.model) : '';\n console.log(` ${name} ${handle} ${model}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function agentsCreateCommand(opts: {\n name?: string;\n username?: string;\n bio?: string;\n model?: string;\n systemPrompt?: string;\n socialMode?: string;\n postFrequency?: string;\n toolMode?: string;\n dailyRequestLimit?: string;\n organizationId?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.name || !opts.username) {\n log.error('Missing required flags: --name and --username');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'agents',\n body: {\n name: opts.name,\n username: opts.username,\n bio: opts.bio,\n model: opts.model,\n system_prompt: opts.systemPrompt,\n social_mode: opts.socialMode,\n post_frequency: opts.postFrequency,\n tool_mode: opts.toolMode,\n daily_request_limit: opts.dailyRequestLimit ? Number(opts.dailyRequestLimit) : undefined,\n organization_id: opts.organizationId,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Agent created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nfunction output(\n res: { data: any; meta?: any },\n json: boolean | undefined,\n render: (data: any, meta?: any) => void\n): void {\n if (json) {\n console.log(JSON.stringify(res, null, 2));\n return;\n }\n render(res.data, res.meta);\n}\n\nfunction printMeta(meta?: { limit?: number; offset?: number; has_more?: boolean }): void {\n if (!meta) return;\n log.blank();\n console.log(pc.dim(`limit ${meta.limit ?? 0} offset ${meta.offset ?? 0} has_more ${meta.has_more ?? false}`));\n log.blank();\n}\n\nfunction truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return value.slice(0, max - 1) + '…';\n}\n","import pc from 'picocolors';\nimport { readConfig } from './config.js';\nimport { readApiKeyFromEnv } from './env.js';\nimport { log } from './logger.js';\n\nexport type ApiContext = {\n baseUrl: string;\n apiKey: string;\n};\n\nexport async function getApiContext(cwd: string): Promise<ApiContext> {\n const config = await readConfig(cwd);\n const apiKey = await readApiKeyFromEnv(cwd);\n if (!apiKey) {\n log.error('No API key configured.');\n log.info(`Run ${pc.bold('recursiv auth login')} to set your key.`);\n process.exit(1);\n }\n\n return {\n baseUrl: config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1',\n apiKey,\n };\n}\n\nexport async function apiRequest<T>(ctx: ApiContext, opts: {\n method: 'GET' | 'POST';\n path: string;\n query?: Record<string, string | number | undefined>;\n body?: unknown;\n}): Promise<T> {\n const url = new URL(opts.path, ctx.baseUrl.endsWith('/') ? ctx.baseUrl : ctx.baseUrl + '/');\n if (opts.query) {\n Object.entries(opts.query).forEach(([key, value]) => {\n if (value === undefined || value === null || value === '') return;\n url.searchParams.set(key, String(value));\n });\n }\n\n const res = await fetch(url, {\n method: opts.method,\n headers: {\n Authorization: `Bearer ${ctx.apiKey}`,\n Accept: 'application/json',\n ...(opts.body ? { 'Content-Type': 'application/json' } : {}),\n },\n body: opts.body ? JSON.stringify(opts.body) : undefined,\n });\n\n const text = await res.text();\n const payload = safeJson(text);\n\n if (!res.ok) {\n const message =\n payload?.error?.message ||\n payload?.message ||\n `Request failed (${res.status} ${res.statusText})`;\n throw new Error(message);\n }\n\n return (payload ?? {}) as T;\n}\n\nfunction safeJson(text: string): any {\n if (!text) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n"],"mappings":"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","names":["pc","readFile","writeFile","join","pc","readFile","writeFile","mkdir","join","readApiKeyFromEnv","readFile","writeFile","mkdir","join","resolve","homedir","pc","resolveRecursivKey","saveCredentials","getOrCreateApiKey","configPath","spawn","platform","prompts","pc","match","pc","resolve","readFile","writeFile","mkdir","join","homedir","existsSync","basename","join","execSync","InsufficientCreditsError","pc","readCredentials","saveCredentials","buildSystemPrompt","getToolDefinitions","executeTool","requiresConfirmation","describeToolAction","resolve","existsSync","readFile","writeFile","prompts","pc","ora","join","prompts","existsSync","pc","writeFile","readFile","ora","pc","pc","writeFile","resolve","pc","ora","pc","pc","pc","jsx","pc","pc","pc","pc","render","quickstartCommand","mcpInstallCommand","mcpVerifyCommand","startAgent","readConfig","resolveRecursivKey","resolveAnthropicKey","saveCredentials","getOrCreateApiKey","pc","prompts"]}
1
+ {"version":3,"sources":["../../src/lib/logger.ts","../../src/lib/config.ts","../../src/lib/env.ts","../../src/lib/auth-flow.ts","../../src/lib/credentials.ts","../../src/commands/mcp-install.ts","../../src/commands/quickstart.ts","../../src/chat/renderer.ts","../../src/chat/session.ts","../../src/chat/system-prompt.ts","../../src/chat/tools.ts","../../src/chat/agent.ts","../../src/bin/recursiv.ts","../../src/lib/cli-errors.ts","../../src/commands/init.ts","../../src/lib/templates.ts","../../src/lib/package-manager.ts","../../src/templates/registry.ts","../../src/commands/dev.ts","../../src/commands/deploy.ts","../../src/commands/auth.ts","../../src/commands/info.ts","../../src/commands/brain.tsx","../../src/ui/app.tsx","../../src/commands/studio.tsx","../../src/commands/browser-use.ts","../../src/commands/api.ts","../../src/lib/api.ts"],"sourcesContent":["import pc from 'picocolors';\n\nexport const log = {\n info(msg: string) {\n console.log(pc.cyan('info') + ' ' + msg);\n },\n success(msg: string) {\n console.log(pc.green('ok') + ' ' + msg);\n },\n warn(msg: string) {\n console.log(pc.yellow('warn') + ' ' + msg);\n },\n error(msg: string) {\n console.error(pc.red('error') + ' ' + msg);\n },\n step(n: number, total: number, msg: string) {\n console.log(pc.dim(`[${n}/${total}]`) + ' ' + msg);\n },\n blank() {\n console.log();\n },\n};\n\nexport function banner() {\n console.log();\n console.log(pc.bold('Recursiv') + pc.dim(' — build and ship apps with AI'));\n console.log();\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport interface RecursivConfig {\n version: number;\n project: {\n name: string;\n template: string;\n framework: string;\n };\n api: {\n baseUrl: string;\n };\n dev: {\n port: number;\n command: string;\n };\n}\n\nconst CONFIG_FILE = '.recursiv.json';\n\nexport function configPath(dir: string): string {\n return join(dir, CONFIG_FILE);\n}\n\nexport async function readConfig(dir: string): Promise<RecursivConfig | null> {\n try {\n const raw = await readFile(configPath(dir), 'utf-8');\n return JSON.parse(raw) as RecursivConfig;\n } catch {\n return null;\n }\n}\n\nexport async function writeConfig(dir: string, config: RecursivConfig): Promise<void> {\n await writeFile(configPath(dir), JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n}\n\nexport function createConfig(opts: {\n name: string;\n template: string;\n framework: string;\n port?: number;\n devCommand?: string;\n}): RecursivConfig {\n return {\n version: 1,\n project: {\n name: opts.name,\n template: opts.template,\n framework: opts.framework,\n },\n api: {\n baseUrl: 'https://api.recursiv.io/api/v1',\n },\n dev: {\n port: opts.port ?? 3000,\n command: opts.devCommand ?? 'npm run dev',\n },\n };\n}\n","import { readFile, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nexport async function writeEnvFile(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n const content = [\n '# Recursiv API key',\n `RECURSIV_API_KEY=${apiKey}`,\n '',\n ].join('\\n');\n await writeFile(envPath, content, 'utf-8');\n}\n\nexport async function readApiKeyFromEnv(dir: string): Promise<string | null> {\n try {\n const raw = await readFile(join(dir, '.env'), 'utf-8');\n const match = raw.match(/^RECURSIV_API_KEY=(.+)$/m);\n return match?.[1]?.trim() ?? null;\n } catch {\n return null;\n }\n}\n\nexport async function updateApiKeyInEnv(dir: string, apiKey: string): Promise<void> {\n const envPath = join(dir, '.env');\n let content: string;\n try {\n content = await readFile(envPath, 'utf-8');\n if (content.includes('RECURSIV_API_KEY=')) {\n content = content.replace(/^RECURSIV_API_KEY=.+$/m, `RECURSIV_API_KEY=${apiKey}`);\n } else {\n content += `\\nRECURSIV_API_KEY=${apiKey}\\n`;\n }\n } catch {\n content = `RECURSIV_API_KEY=${apiKey}\\n`;\n }\n await writeFile(envPath, content, 'utf-8');\n}\n","import prompts from 'prompts';\nimport pc from 'picocolors';\nimport { log } from './logger.js';\n\nconst API_KEY_PATTERN = /^sk_(live|test)_[a-zA-Z0-9]{20,}$/;\nconst DASHBOARD_URL = 'https://recursiv.io/dashboard/api-keys';\n\n// Mirror the server's AVAILABLE_SCOPES list (packages/server/src/features/\n// api-keys/apiKeys.router.ts). The dashboard's create-key form defaults to\n// all-selected; keep the CLI quickstart in lockstep so a freshly-minted\n// key works for the full build-your-first-app flow (which needs at minimum\n// organizations:write for provision_app + projects:write for deploy).\nconst DEFAULT_SCOPES = [\n 'posts:read',\n 'posts:write',\n 'users:read',\n 'users:write',\n 'communities:read',\n 'communities:write',\n 'chat:read',\n 'chat:write',\n 'projects:read',\n 'projects:write',\n 'agents:read',\n 'agents:write',\n 'organizations:read',\n 'organizations:write',\n 'memory:read',\n 'memory:write',\n 'notifications:read',\n 'notifications:write',\n 'settings:read',\n 'settings:write',\n 'tags:read',\n 'tags:write',\n 'uploads:write',\n 'commands:read',\n 'commands:write',\n 'billing:read',\n 'billing:write',\n];\n\nexport function isValidKeyFormat(key: string): boolean {\n return API_KEY_PATTERN.test(key);\n}\n\nexport async function validateApiKey(apiKey: string, baseUrl: string): Promise<boolean> {\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/**\n * Terminal signup flow — create a Recursiv account and API key without a browser.\n *\n * Flow (passwordless OTP):\n * 1. Prompt for email\n * 2. Send 6-digit OTP code via server\n * 3. Prompt user to enter the code\n * 4. Verify OTP → get session cookie\n * 5. Use session cookie to create an API key via REST endpoint\n * 6. Return the API key string\n */\nexport async function terminalSignup(baseUrl: string): Promise<string | null> {\n // baseUrl is like https://recursiv.io/api/v1 — we need the root for auth endpoints\n const rootUrl = baseUrl.replace(/\\/api\\/v1\\/?$/, '');\n\n console.log();\n console.log(pc.bold('Sign in to Recursiv'));\n console.log(pc.dim('We\\'ll send a 6-digit code to your email — no password needed.'));\n console.log(pc.dim('If your email isn\\'t registered yet, we\\'ll create a free account.'));\n console.log(pc.dim('Free tier: 1,000 API calls/day, 1 agent, 3 projects'));\n console.log();\n\n const { email } = await prompts(\n {\n type: 'text',\n name: 'email',\n message: 'Email',\n validate: (v: string) => {\n if (!v || !v.includes('@')) return 'Valid email required';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n // Better Auth requires an Origin header for CSRF protection\n const origin = rootUrl || 'https://api.recursiv.io';\n const authHeaders = { 'Content-Type': 'application/json', Origin: origin };\n\n // Send OTP code\n try {\n const sendRes = await fetch(`${rootUrl}/api/auth/email-otp/send-verification-otp`, {\n method: 'POST',\n headers: authHeaders,\n body: JSON.stringify({ email, type: 'sign-in' }),\n });\n\n if (!sendRes.ok) {\n const errBody = await sendRes.text().catch(() => '');\n log.error(`Failed to send code (${sendRes.status}): ${errBody || 'Unknown error'}`);\n return null;\n }\n } catch (err) {\n log.error(\n `Could not reach ${rootUrl} — ${err instanceof Error ? err.message : 'network error'}`,\n );\n log.info(`You can create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n log.success(`Verification code sent to ${email}`);\n console.log();\n\n // Prompt for OTP code\n const { code } = await prompts(\n {\n type: 'text',\n name: 'code',\n message: 'Enter the 6-digit code',\n validate: (v: string) => {\n if (!v || !/^\\d{6}$/.test(v.trim())) return 'Enter the 6-digit code from your email';\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n // Verify OTP and sign in. better-auth's email-OTP plugin exposes two\n // separate endpoints:\n // - /api/auth/sign-in/email-otp → signs an existing user in (returns\n // a session), or creates the account if disableSignUp is false (our\n // config). This is the right endpoint for both first-time signup and\n // returning sign-in.\n // - /api/auth/email-otp/verify-email → strictly for confirming an\n // already-signed-in user's email address. Existing users hit\n // \"Invalid OTP\" here because the OTP was minted with type='sign-in'.\n let sessionCookie: string | null = null;\n\n try {\n const verifyRes = await fetch(`${rootUrl}/api/auth/sign-in/email-otp`, {\n method: 'POST',\n headers: authHeaders,\n body: JSON.stringify({ email, otp: code.trim() }),\n redirect: 'manual',\n });\n\n if (verifyRes.ok || verifyRes.status === 302) {\n sessionCookie = extractSessionCookie(verifyRes);\n } else {\n const errBody = await verifyRes.text().catch(() => '');\n log.error(`Verification failed (${verifyRes.status}): ${errBody || 'Invalid or expired code'}`);\n return null;\n }\n } catch (err) {\n log.error(\n `Verification failed — ${err instanceof Error ? err.message : 'network error'}`,\n );\n return null;\n }\n\n if (!sessionCookie) {\n log.error('No session returned from server');\n log.info(`Create an API key manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n log.success('Authenticated');\n\n // Create an API key using the session\n try {\n const keyRes = await fetch(`${baseUrl}/api-keys`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Cookie: sessionCookie,\n },\n body: JSON.stringify({\n name: 'CLI (auto-created)',\n scopes: DEFAULT_SCOPES,\n }),\n });\n\n if (!keyRes.ok) {\n const errBody = await keyRes.text().catch(() => '');\n log.error(`Failed to create API key (${keyRes.status}): ${errBody}`);\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n\n const { data } = (await keyRes.json()) as { data: { key: string } };\n log.success(`API key created (free tier: 1,000 calls/day)`);\n return data.key;\n } catch (err) {\n log.error(\n `Failed to create API key: ${err instanceof Error ? err.message : 'unknown error'}`,\n );\n log.info(`Create one manually at ${pc.underline(DASHBOARD_URL)}`);\n return null;\n }\n}\n\n/**\n * Extract session cookie from a Better Auth response.\n * Better Auth sets cookies via set-cookie header.\n */\nfunction extractSessionCookie(res: Response): string | null {\n // In Node.js, getSetCookie() returns individual cookie strings\n const setCookieHeaders =\n 'getSetCookie' in res.headers\n ? (res.headers as { getSetCookie(): string[] }).getSetCookie()\n : [];\n\n // Fall back to raw header if getSetCookie not available\n if (setCookieHeaders.length === 0) {\n const raw = res.headers.get('set-cookie');\n if (raw) {\n // Multiple cookies may be comma-separated (though non-standard)\n return raw\n .split(',')\n .map((c) => c.split(';')[0].trim())\n .join('; ');\n }\n return null;\n }\n\n // Extract cookie name=value pairs (strip attributes)\n return setCookieHeaders.map((c) => c.split(';')[0].trim()).join('; ');\n}\n\nexport async function promptApiKey(): Promise<string | null> {\n console.log(\n pc.dim(\n `Get your API key from ${pc.underline(DASHBOARD_URL)}\\n` +\n `Keys start with sk_live_ or sk_test_`,\n ),\n );\n console.log();\n\n const { apiKey } = await prompts(\n {\n type: 'text',\n name: 'apiKey',\n message: 'API key (or press Enter to skip)',\n validate: (value: string) => {\n if (!value) return true; // allow skip\n if (!isValidKeyFormat(value)) {\n return 'Invalid key format. Keys start with sk_live_ or sk_test_';\n }\n return true;\n },\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (!apiKey) {\n log.warn('No API key provided — you can add one later in .env');\n return null;\n }\n\n return apiKey;\n}\n\nexport async function promptAndValidateApiKey(baseUrl: string): Promise<string | null> {\n const apiKey = await promptApiKey();\n if (!apiKey) return null;\n\n const valid = await validateApiKey(apiKey, baseUrl);\n if (!valid) {\n log.warn('Could not validate API key (server unreachable or invalid key)');\n log.info('Key saved to .env — you can update it later');\n } else {\n log.success('API key validated');\n }\n\n return apiKey;\n}\n\n/**\n * Get an API key — either from env, by prompting for an existing key,\n * or by creating a new account via terminal signup.\n */\nexport async function getOrCreateApiKey(baseUrl: string): Promise<string | null> {\n console.log();\n\n const { method } = await prompts(\n {\n type: 'select',\n name: 'method',\n message: 'How would you like to authenticate?',\n choices: [\n {\n title: 'Sign in or create an account with my email',\n description: 'We\\'ll send a 6-digit code. Works whether you\\'re new or returning.',\n value: 'signup',\n },\n {\n title: 'Paste an existing API key',\n description: 'Use a key you\\'ve already saved from the dashboard',\n value: 'paste',\n },\n {\n title: 'Skip for now',\n description: 'Add an API key later in .env',\n value: 'skip',\n },\n ],\n },\n { onCancel: () => process.exit(1) },\n );\n\n if (method === 'signup') {\n return terminalSignup(baseUrl);\n }\n\n if (method === 'paste') {\n return promptAndValidateApiKey(baseUrl);\n }\n\n log.warn('No API key — you can add one later in .env');\n return null;\n}\n","/**\n * Global credential store for the Recursiv CLI.\n * Stores API keys in ~/.recursiv/credentials (JSON).\n *\n * Resolution order:\n * 1. Environment variables (RECURSIV_API_KEY, ANTHROPIC_API_KEY)\n * 2. Project .env file\n * 3. ~/.recursiv/credentials\n */\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\n\nconst RECURSIV_DIR = join(homedir(), '.recursiv');\nconst CREDENTIALS_PATH = join(RECURSIV_DIR, 'credentials');\n\ninterface Credentials {\n recursivApiKey?: string | null;\n anthropicApiKey?: string | null;\n cliAgentId?: string | null;\n}\n\n/**\n * Read stored credentials from ~/.recursiv/credentials.\n */\nexport async function readCredentials(): Promise<Credentials> {\n try {\n const raw = await readFile(CREDENTIALS_PATH, 'utf-8');\n return JSON.parse(raw) as Credentials;\n } catch {\n return {};\n }\n}\n\n/**\n * Save credentials to ~/.recursiv/credentials.\n * Merges with existing credentials.\n */\nexport async function saveCredentials(creds: Partial<Credentials>): Promise<void> {\n await mkdir(RECURSIV_DIR, { recursive: true });\n const existing = await readCredentials();\n const merged = { ...existing, ...creds };\n await writeFile(CREDENTIALS_PATH, JSON.stringify(merged, null, 2) + '\\n', {\n encoding: 'utf-8',\n mode: 0o600, // Owner-only read/write\n });\n}\n\n/**\n * Resolve the Recursiv API key from all sources.\n */\nexport async function resolveRecursivKey(projectDir?: string): Promise<string | null> {\n // 1. Environment\n const envKey = process.env.RECURSIV_API_KEY;\n if (envKey) return envKey;\n\n // 2. Project .env\n if (projectDir) {\n try {\n const { readApiKeyFromEnv } = await import('./env.js');\n const projKey = await readApiKeyFromEnv(projectDir);\n if (projKey) return projKey;\n } catch {\n // No project env\n }\n }\n\n // 3. ~/.recursiv/credentials\n const creds = await readCredentials();\n return creds.recursivApiKey || null;\n}\n\n/**\n * Resolve the Anthropic API key from all sources.\n */\nexport async function resolveAnthropicKey(): Promise<string | null> {\n // 1. Environment\n if (process.env.ANTHROPIC_API_KEY) return process.env.ANTHROPIC_API_KEY;\n\n // 2. ~/.recursiv/credentials\n const creds = await readCredentials();\n return creds.anthropicApiKey || null;\n}\n","/**\n * `recursiv mcp install` — configure the Recursiv MCP server for any supported host.\n *\n * Supported targets:\n * claude-code → .mcp.json (project-level)\n * claude-desktop → claude_desktop_config.json (user-level)\n * codex → ~/.codex/config.toml or `codex mcp add`\n * opencode → opencode.json (project-level)\n */\nimport { existsSync } from 'node:fs';\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { join, resolve } from 'node:path';\nimport { homedir, platform } from 'node:os';\nimport pc from 'picocolors';\n\nexport type McpTarget = 'claude-code' | 'claude-desktop' | 'codex' | 'opencode';\n\nconst VALID_TARGETS: McpTarget[] = ['claude-code', 'claude-desktop', 'codex', 'opencode'];\n\ninterface InstallOptions {\n target: string;\n apiKey?: string;\n global?: boolean;\n}\n\nexport async function mcpInstallCommand(opts: InstallOptions): Promise<void> {\n const target = opts.target as McpTarget;\n\n if (!VALID_TARGETS.includes(target)) {\n console.error(\n pc.red('error') +\n ` Unknown target \"${opts.target}\". Valid targets: ${VALID_TARGETS.join(', ')}`,\n );\n process.exit(1);\n }\n\n // Resolve API key — check all sources, auto-auth if missing\n const { resolveRecursivKey, saveCredentials } = await import('../lib/credentials.js');\n let apiKey = opts.apiKey || await resolveRecursivKey(process.cwd());\n\n if (!apiKey) {\n console.log();\n console.log(pc.dim(' No Recursiv API key found. Let\\'s authenticate.'));\n console.log();\n\n const { getOrCreateApiKey } = await import('../lib/auth-flow.js');\n const baseUrl = process.env.RECURSIV_BASE_URL || 'https://api.recursiv.io/api/v1';\n apiKey = await getOrCreateApiKey(baseUrl);\n\n if (!apiKey) {\n console.error(pc.red(' error') + ' Authentication required to continue.');\n process.exit(1);\n }\n\n await saveCredentials({ recursivApiKey: apiKey });\n console.log(pc.dim(' Credentials saved to ~/.recursiv/credentials'));\n console.log();\n }\n\n switch (target) {\n case 'claude-code':\n await installClaudeCode(apiKey, opts.global);\n break;\n case 'claude-desktop':\n await installClaudeDesktop(apiKey);\n break;\n case 'codex':\n await installCodex(apiKey);\n break;\n case 'opencode':\n await installOpenCode(apiKey, opts.global);\n break;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Claude Code — .mcp.json (project) or ~/.claude/settings.json (global)\n// ---------------------------------------------------------------------------\n\nasync function installClaudeCode(apiKey: string, global?: boolean): Promise<void> {\n if (global) {\n // Global: add to ~/.claude/settings.json\n const claudeDir = join(homedir(), '.claude');\n const settingsPath = join(claudeDir, 'settings.json');\n await mkdir(claudeDir, { recursive: true });\n\n const settings = await readJsonSafe(settingsPath);\n if (!settings.mcpServers) settings.mcpServers = {};\n settings.mcpServers.recursiv = mcpServerEntry(apiKey);\n await writeFile(settingsPath, JSON.stringify(settings, null, 2) + '\\n', 'utf-8');\n console.log(pc.green('✓') + ` Recursiv MCP added to ${pc.dim(settingsPath)}`);\n } else {\n // Project-level: .mcp.json\n const mcpPath = join(process.cwd(), '.mcp.json');\n const config = await readJsonSafe(mcpPath);\n if (!config.mcpServers) config.mcpServers = {};\n config.mcpServers.recursiv = mcpServerEntry(apiKey);\n await writeFile(mcpPath, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n console.log(pc.green('✓') + ` Recursiv MCP added to ${pc.dim(mcpPath)}`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Claude Desktop — claude_desktop_config.json\n// ---------------------------------------------------------------------------\n\nfunction claudeDesktopConfigPath(): string {\n const p = platform();\n if (p === 'darwin') {\n return join(homedir(), 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');\n }\n if (p === 'win32') {\n return join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'Claude', 'claude_desktop_config.json');\n }\n // Linux\n return join(homedir(), '.config', 'claude', 'claude_desktop_config.json');\n}\n\nasync function installClaudeDesktop(apiKey: string): Promise<void> {\n const configPath = claudeDesktopConfigPath();\n const dir = resolve(configPath, '..');\n await mkdir(dir, { recursive: true });\n\n const config = await readJsonSafe(configPath);\n if (!config.mcpServers) config.mcpServers = {};\n config.mcpServers.recursiv = mcpServerEntry(apiKey);\n await writeFile(configPath, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n console.log(pc.green('✓') + ` Recursiv MCP added to ${pc.dim(configPath)}`);\n console.log(pc.dim(' Restart Claude Desktop to pick up the change.'));\n}\n\n// ---------------------------------------------------------------------------\n// Codex — ~/.codex/config.toml\n// ---------------------------------------------------------------------------\n\nasync function installCodex(apiKey: string): Promise<void> {\n const codexDir = join(homedir(), '.codex');\n const configPath = join(codexDir, 'config.toml');\n await mkdir(codexDir, { recursive: true });\n\n // Read existing config (preserve other settings)\n let existing = '';\n try {\n existing = await readFile(configPath, 'utf-8');\n } catch {\n // File doesn't exist yet\n }\n\n // Remove existing recursiv MCP block if present\n existing = removeTomlSection(existing, 'mcp_servers.recursiv');\n\n // Append new config\n const tomlBlock = [\n '',\n '[mcp_servers.recursiv]',\n 'command = \"npx\"',\n 'args = [\"-y\", \"@recursiv/mcp\"]',\n '',\n '[mcp_servers.recursiv.env]',\n `RECURSIV_API_KEY = \"${apiKey}\"`,\n // Opt into the full tool surface — see mcpServerEntry() for context.\n `RECURSIV_API_KEY_SCOPES = \"*\"`,\n ].join('\\n');\n\n const final = existing.trimEnd() + '\\n' + tomlBlock + '\\n';\n await writeFile(configPath, final, 'utf-8');\n console.log(pc.green('✓') + ` Recursiv MCP added to ${pc.dim(configPath)}`);\n}\n\n// ---------------------------------------------------------------------------\n// OpenCode — opencode.json (project) or ~/.config/opencode/opencode.json (global)\n// ---------------------------------------------------------------------------\n\nasync function installOpenCode(apiKey: string, global?: boolean): Promise<void> {\n let configPath: string;\n\n if (global) {\n const configDir = join(homedir(), '.config', 'opencode');\n await mkdir(configDir, { recursive: true });\n configPath = join(configDir, 'opencode.json');\n } else {\n configPath = join(process.cwd(), 'opencode.json');\n }\n\n const config = await readJsonSafe(configPath);\n if (!config.mcp) config.mcp = {};\n config.mcp.recursiv = {\n type: 'local',\n command: ['npx', '-y', '@recursiv/mcp'],\n enabled: true,\n // Opt into the full tool surface — see mcpServerEntry() for context.\n environment: {\n RECURSIV_API_KEY_SCOPES: '*',\n RECURSIV_API_KEY: apiKey,\n },\n };\n\n await writeFile(configPath, JSON.stringify(config, null, 2) + '\\n', 'utf-8');\n console.log(pc.green('✓') + ` Recursiv MCP added to ${pc.dim(configPath)}`);\n}\n\n// ---------------------------------------------------------------------------\n// Verify — check that the MCP server starts and responds\n// ---------------------------------------------------------------------------\n\nexport async function mcpVerifyCommand(): Promise<void> {\n const { spawn } = await import('node:child_process');\n\n const apiKey = process.env.RECURSIV_API_KEY;\n if (!apiKey) {\n console.error(pc.red(' error') + ' RECURSIV_API_KEY not set in environment.');\n process.exit(1);\n }\n\n console.log(pc.dim(' Verifying Recursiv MCP server...'));\n\n const child = spawn('npx', ['-y', '@recursiv/mcp'], {\n env: { ...process.env, RECURSIV_API_KEY: apiKey },\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n // Send a JSON-RPC initialize request\n const initRequest = JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'initialize',\n params: {\n protocolVersion: '2024-11-05',\n capabilities: {},\n clientInfo: { name: 'recursiv-cli', version: '0.1.4' },\n },\n });\n\n let stdout = '';\n let stderr = '';\n\n child.stdout.on('data', (chunk: Buffer) => {\n stdout += chunk.toString();\n });\n child.stderr.on('data', (chunk: Buffer) => {\n stderr += chunk.toString();\n });\n\n // Write the request\n child.stdin.write(initRequest + '\\n');\n\n // Wait for response or timeout\n const result = await Promise.race([\n new Promise<'ok' | 'error'>((resolve) => {\n const check = setInterval(() => {\n if (stdout.includes('\"result\"')) {\n clearInterval(check);\n resolve('ok');\n }\n if (stdout.includes('\"error\"') || stderr.includes('Missing')) {\n clearInterval(check);\n resolve('error');\n }\n }, 100);\n }),\n new Promise<'timeout'>((resolve) => setTimeout(() => resolve('timeout'), 10000)),\n ]);\n\n child.kill();\n\n switch (result) {\n case 'ok':\n console.log(pc.green(' ✓') + ' MCP server responded successfully.');\n try {\n const parsed = JSON.parse(stdout.trim().split('\\n').pop() || '{}');\n const serverName = parsed?.result?.serverInfo?.name;\n const version = parsed?.result?.serverInfo?.version;\n if (serverName) {\n console.log(pc.dim(` Server: ${serverName} v${version || '?'}`));\n }\n } catch {\n // Fine — we confirmed it works\n }\n break;\n case 'error':\n console.error(pc.red(' ✗') + ' MCP server returned an error.');\n if (stderr) console.error(pc.dim(` ${stderr.trim()}`));\n process.exit(1);\n break;\n case 'timeout':\n console.error(pc.red(' ✗') + ' MCP server did not respond within 10s.');\n process.exit(1);\n break;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction mcpServerEntry(apiKey: string) {\n return {\n command: 'npx',\n args: ['-y', '@recursiv/mcp'],\n env: {\n RECURSIV_API_KEY: apiKey,\n // The MCP server defaults to read-only tool registration when\n // RECURSIV_API_KEY_SCOPES is absent (a safety default for ambient\n // keys with unknown scope). The CLI mints a key with the full\n // scope set on purpose — explicitly opt in so the user gets the\n // tools they expect (create_project, provision_app, deploy_project,\n // etc.). The wildcard says \"all scopes the key actually has.\"\n RECURSIV_API_KEY_SCOPES: '*',\n },\n };\n}\n\nasync function readJsonSafe(path: string): Promise<Record<string, any>> {\n try {\n const raw = await readFile(path, 'utf-8');\n return JSON.parse(raw);\n } catch {\n return {};\n }\n}\n\n/**\n * Remove a TOML section and its key-value pairs.\n * Handles both `[section]` and `[section.sub]` blocks.\n */\nfunction removeTomlSection(content: string, section: string): string {\n const lines = content.split('\\n');\n const result: string[] = [];\n let skipping = false;\n const sectionHeader = `[${section}]`;\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed === sectionHeader || trimmed.startsWith(`[${section}.`)) {\n skipping = true;\n continue;\n }\n if (skipping && trimmed.startsWith('[')) {\n skipping = false;\n }\n if (!skipping) {\n result.push(line);\n }\n }\n\n return result.join('\\n');\n}\n","/**\n * `recursiv quickstart` — opinionated onboarding for users coming through the\n * \"build your first app\" tutorial.\n *\n * Walks a new user through everything they need before pasting the tutorial\n * prompt into their AI client of choice:\n * 1. Verify GitHub CLI is installed + authenticated (we don't try to install\n * or drive its OAuth flow — too OS-sensitive).\n * 2. Resolve or create a Recursiv API key (via getOrCreateApiKey).\n * 3. Ask which AI client the user is pasting into and install the Recursiv\n * MCP server config there.\n * 4. Print final instructions tailored to that client.\n *\n * Quickstart is opinionated by design — it picks the common path. The general\n * primitive is `recursiv mcp install <target>`, which `quickstart` wraps.\n *\n * Safe to re-run — every step is idempotent.\n */\nimport { execFile } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport { platform } from 'node:os';\nimport prompts from 'prompts';\nimport pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\nimport { resolveRecursivKey, saveCredentials } from '../lib/credentials.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { mcpInstallCommand, type McpTarget } from './mcp-install.js';\n\nconst execFileAsync = promisify(execFile);\n\nconst TUTORIAL_URL = 'https://docs.recursiv.io/guides/tutorials/build-your-first-app';\n\ninterface GhCheckResult {\n installed: boolean;\n authenticated: boolean;\n}\n\n/**\n * Check whether the `gh` binary is on PATH and the user is authenticated.\n * Uses execFile (not shell) — no command injection surface.\n */\nexport async function checkGitHubCli(): Promise<GhCheckResult> {\n try {\n await execFileAsync('gh', ['--version']);\n } catch {\n return { installed: false, authenticated: false };\n }\n\n try {\n await execFileAsync('gh', ['auth', 'status']);\n return { installed: true, authenticated: true };\n } catch {\n return { installed: true, authenticated: false };\n }\n}\n\nfunction ghInstallHint(): string {\n const p = platform();\n if (p === 'darwin') return 'Install with: brew install gh';\n if (p === 'win32') return 'Install with: winget install GitHub.cli';\n return 'Install instructions: https://cli.github.com/';\n}\n\n/**\n * Look up the authenticated username for a given Recursiv API key.\n * Returns null on any failure — this is a \"best effort\" cosmetic call.\n */\nasync function fetchUsername(apiKey: string, baseUrl: string): Promise<string | null> {\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n if (!res.ok) return null;\n const body = (await res.json()) as { data?: { username?: string; email?: string } };\n return body.data?.username ?? body.data?.email ?? null;\n } catch {\n return null;\n }\n}\n\ninterface ClientDescriptor {\n target: McpTarget;\n label: string;\n /** Human label used in the closing \"restart X\" instruction. */\n productName: string;\n}\n\nconst CLIENT_CHOICES: ClientDescriptor[] = [\n { target: 'claude-code', label: 'Claude Code (terminal CLI)', productName: 'Claude Code' },\n { target: 'claude-desktop', label: 'Claude Desktop (chat app)', productName: 'Claude Desktop' },\n { target: 'codex', label: 'Codex', productName: 'Codex' },\n { target: 'opencode', label: 'OpenCode', productName: 'OpenCode' },\n];\n\nasync function pickClient(preferred?: McpTarget): Promise<ClientDescriptor> {\n // If the caller already passed --target, honor it without prompting.\n if (preferred) {\n const match = CLIENT_CHOICES.find((c) => c.target === preferred);\n if (match) return match;\n }\n\n const { target } = await prompts(\n {\n type: 'select',\n name: 'target',\n message: 'Which AI client are you pasting the build prompt into?',\n choices: CLIENT_CHOICES.map((c) => ({ title: c.label, value: c.target })),\n initial: 0,\n },\n { onCancel: () => process.exit(1) },\n );\n\n const match = CLIENT_CHOICES.find((c) => c.target === target);\n if (!match) throw new Error(`Unexpected client selection: ${target}`);\n return match;\n}\n\nexport interface QuickstartOptions {\n /** Override for the gh checker (used by tests). */\n ghCheck?: () => Promise<GhCheckResult>;\n /** Skip the client prompt and use this target directly. */\n target?: McpTarget;\n}\n\nexport async function quickstartCommand(opts: QuickstartOptions = {}): Promise<void> {\n console.log();\n console.log(pc.bold(' Setting up Recursiv on this machine') +\n pc.dim(' — GitHub CLI + Recursiv account + MCP config. ~3 minutes.'));\n console.log();\n\n // ---------------------------------------------------------------------------\n // 1. GitHub CLI check\n // ---------------------------------------------------------------------------\n log.step(1, 3, 'Checking GitHub CLI');\n\n const ghCheck = opts.ghCheck ?? checkGitHubCli;\n const gh = await ghCheck();\n\n if (!gh.installed) {\n log.error('GitHub CLI (`gh`) is not installed.');\n log.info(ghInstallHint());\n log.info('After installing, re-run `recursiv quickstart`.');\n process.exit(1);\n return;\n }\n\n if (!gh.authenticated) {\n log.error('GitHub CLI is installed but not authenticated.');\n log.info('Run `gh auth login` in another terminal, then re-run `recursiv quickstart`.');\n process.exit(1);\n return;\n }\n\n log.success('GitHub CLI installed and authenticated');\n\n // ---------------------------------------------------------------------------\n // 2. Recursiv account / API key\n // ---------------------------------------------------------------------------\n log.step(2, 3, 'Checking Recursiv account');\n\n const cwd = process.cwd();\n const config = await readConfig(cwd).catch(() => null);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n\n let apiKey = await resolveRecursivKey(cwd);\n\n if (apiKey) {\n const username = await fetchUsername(apiKey, baseUrl);\n if (username) {\n log.success(`Already authenticated as ${pc.bold(username)}`);\n } else {\n log.success('Already authenticated (using existing API key)');\n }\n } else {\n console.log();\n console.log(pc.dim(' No Recursiv API key found. Let\\'s create one.'));\n console.log();\n\n apiKey = await getOrCreateApiKey(baseUrl);\n if (!apiKey) {\n log.error('Authentication required to continue.');\n process.exit(1);\n return;\n }\n\n await saveCredentials({ recursivApiKey: apiKey });\n log.success('Credentials saved to ~/.recursiv/credentials');\n }\n\n // ---------------------------------------------------------------------------\n // 3. MCP install for the user's chosen client\n // ---------------------------------------------------------------------------\n log.step(3, 3, 'Configuring Recursiv MCP');\n\n const client = await pickClient(opts.target);\n await mcpInstallCommand({ target: client.target, apiKey });\n\n // ---------------------------------------------------------------------------\n // Final instructions\n // ---------------------------------------------------------------------------\n const isWindows = platform() === 'win32';\n const quitHint = isWindows\n ? `fully quit ${client.productName} (exit from the system tray)`\n : `fully quit ${client.productName} (Cmd-Q on macOS)`;\n\n console.log();\n console.log(pc.green(pc.bold(' Done.')) + pc.dim(' Next steps:'));\n console.log();\n console.log(' 1. ' + quitHint);\n console.log(` 2. Reopen ${client.productName} in this folder`);\n console.log(' 3. Paste the prompt from ' + pc.underline(TUTORIAL_URL));\n console.log(' as your first chat message');\n console.log();\n console.log(pc.dim(' Tip: when the client asks to approve the first Recursiv tool call,'));\n console.log(pc.dim(' choose \"Always allow recursiv\" so you are not prompted again.'));\n console.log();\n}\n","/**\n * Terminal renderer for the Recursiv CLI chat agent.\n * Applies inline ANSI colors during live streaming.\n */\nimport pc from 'picocolors';\n\nconst INDENT = ' ';\n\n/**\n * Get usable terminal width (minus indent).\n */\nfunction getWidth(): number {\n return Math.max((process.stdout.columns || 80) - INDENT.length, 40);\n}\n\n/**\n * Word-wrap a plain text string to fit terminal width.\n * Preserves existing newlines. Adds indent prefix to each line.\n */\nfunction wordWrap(text: string, width: number, indent: string = INDENT): string {\n const lines: string[] = [];\n for (const paragraph of text.split('\\n')) {\n if (paragraph.length <= width) {\n lines.push(indent + paragraph);\n continue;\n }\n const words = paragraph.split(/(\\s+)/);\n let current = '';\n for (const word of words) {\n if (current.length + word.length > width && current.length > 0) {\n lines.push(indent + current.trimEnd());\n current = word.trimStart();\n } else {\n current += word;\n }\n }\n if (current.trimEnd()) lines.push(indent + current.trimEnd());\n }\n return lines.join('\\n');\n}\n\n/**\n * Strip ANSI escape codes for accurate length measurement.\n */\nfunction stripAnsi(str: string): number {\n // eslint-disable-next-line no-control-regex\n return str.replace(/\\x1b\\[[0-9;]*m/g, '').length;\n}\n\n/**\n * Apply inline colors to streamed markdown text.\n * Handles: **bold**, `code`, URLs, headings, lists.\n */\nfunction colorize(text: string): string {\n // URLs — cyan + underline\n text = text.replace(/(https?:\\/\\/[^\\s)\\]>]+)/g, pc.cyan(pc.underline('$1')));\n\n // Inline code `...` — yellow\n text = text.replace(/`([^`]+)`/g, pc.yellow('`$1`'));\n\n // Bold **...** — bold white\n text = text.replace(/\\*\\*([^*]+)\\*\\*/g, pc.bold('$1'));\n\n // Italic *...* (but not inside bold)\n text = text.replace(/(?<!\\*)\\*([^*]+)\\*(?!\\*)/g, pc.italic('$1'));\n\n return text;\n}\n\n/**\n * Streams text live with inline color formatting.\n */\nexport class StreamWriter {\n private buffer = '';\n private lineBuffer = '';\n private inCodeBlock = false;\n\n write(chunk: string): void {\n this.buffer += chunk;\n\n // Process chunk character by character to handle code blocks\n for (const char of chunk) {\n this.lineBuffer += char;\n\n if (char === '\\n') {\n this.flushLine();\n }\n }\n }\n\n private flushLine(): void {\n const line = this.lineBuffer;\n this.lineBuffer = '';\n const width = getWidth();\n\n // Toggle code block state\n if (line.trimStart().startsWith('```')) {\n this.inCodeBlock = !this.inCodeBlock;\n process.stdout.write(INDENT + pc.dim(line));\n return;\n }\n\n if (this.inCodeBlock) {\n process.stdout.write(INDENT + pc.cyan(line));\n return;\n }\n\n // Empty line\n if (line.trim() === '') {\n process.stdout.write('\\n');\n return;\n }\n\n // Headings — bold + cyan\n const headingMatch = line.match(/^(#{1,3})\\s+(.+)\\n?$/);\n if (headingMatch) {\n process.stdout.write(INDENT + pc.bold(pc.cyan(headingMatch[2])) + '\\n');\n return;\n }\n\n // Horizontal rules\n if (/^---+\\s*\\n?$/.test(line)) {\n process.stdout.write(INDENT + pc.dim('─'.repeat(Math.min(width, 60))) + '\\n');\n return;\n }\n\n // List items — colored bullet, word-wrapped\n const bulletMatch = line.match(/^(\\s*)([-*])\\s+(.*)$/);\n if (bulletMatch) {\n const extraIndent = bulletMatch[1];\n const content = colorize(bulletMatch[3]);\n const prefix = INDENT + extraIndent + pc.cyan('•') + ' ';\n process.stdout.write(prefix + content + '\\n');\n return;\n }\n\n // Numbered list items\n const numMatch = line.match(/^(\\s*)(\\d+)\\.\\s+(.*)$/);\n if (numMatch) {\n const extraIndent = numMatch[1];\n const num = numMatch[2];\n const content = colorize(numMatch[3]);\n const prefix = INDENT + extraIndent + pc.cyan(num + '.') + ' ';\n process.stdout.write(prefix + content + '\\n');\n return;\n }\n\n // Regular text — word-wrap and colorize\n const trimmed = line.replace(/\\n$/, '');\n const wrapped = wordWrap(trimmed, width);\n process.stdout.write(colorize(wrapped) + '\\n');\n }\n\n getBuffer(): string {\n return this.buffer;\n }\n\n finishAndRender(): void {\n // Flush any remaining partial line\n if (this.lineBuffer) {\n const remaining = this.lineBuffer;\n this.lineBuffer = '';\n\n if (this.inCodeBlock) {\n process.stdout.write(pc.cyan(remaining));\n } else {\n process.stdout.write(colorize(remaining));\n }\n }\n }\n}\n\n/**\n * Print the startup banner with recursive squares logo, identity, and hints.\n */\nexport function printBanner(opts?: {\n username?: string;\n email?: string;\n resumed?: { id: string; messageCount: number };\n version?: string;\n}): void {\n const v = opts?.version ?? '0.1.4';\n\n const logo = [\n pc.cyan(' ┌─────────────┐'),\n pc.cyan(' │ ┌─────────┐ │'),\n pc.cyan(' │ │ ┌─────┐ │ │') + ' ' + pc.bold(pc.cyan('recursiv')) + pc.dim(` v${v}`),\n pc.cyan(' │ │ │ ┌─┐ │ │ │') + ' ' + pc.dim('https://recursiv.io'),\n pc.cyan(' │ │ │ └─┘ │ │ │'),\n pc.cyan(' │ │ └─────┘ │ │'),\n pc.cyan(' │ └─────────┘ │'),\n pc.cyan(' └─────────────┘'),\n ];\n\n console.log();\n for (const line of logo) {\n console.log(line);\n }\n console.log();\n\n if (opts?.email || opts?.username) {\n const identity = opts.email\n ? `${opts.username ? pc.bold(`@${opts.username}`) : 'signed in'} ${pc.dim(`(${opts.email})`)}`\n : pc.bold(`@${opts.username}`);\n console.log(pc.dim(' ') + identity);\n }\n\n if (opts?.resumed) {\n console.log(\n pc.dim(' ') +\n pc.dim(`resumed session ${opts.resumed.id} (${opts.resumed.messageCount} messages)`),\n );\n }\n\n console.log();\n console.log(pc.dim(' Type a message to get started. /help for commands. Ctrl-D to exit.'));\n}\n\n/**\n * Print the prompt indicator.\n */\nexport function printPrompt(): void {\n process.stdout.write(pc.bold(pc.green('> ')));\n}\n\n/**\n * Print tips/suggestions below the prompt to drive engagement.\n * Context-aware: shows different suggestions based on recent actions.\n */\nexport type HintContext =\n | 'welcome'\n | 'project_created'\n | 'deployed'\n | 'agent_created'\n | 'sandbox_started'\n | 'code_executed'\n | 'listed_projects'\n | 'default';\n\nconst HINT_MAP: Record<HintContext, [string, string][]> = {\n welcome: [\n ['build an app', 'create & deploy a project'],\n ['create an agent', 'spin up an AI agent'],\n ['run some code', 'execute in a sandbox'],\n ['show my projects', 'list everything you\\'ve built'],\n ],\n project_created: [\n ['deploy it', 'push to production'],\n ['add an agent', 'attach AI to this project'],\n ['start a sandbox', 'spin up a dev environment'],\n ['show my projects', 'see all projects'],\n ],\n deployed: [\n ['check deploy status', 'view deployment state'],\n ['view logs', 'see deployment logs'],\n ['create another project', 'start something new'],\n ],\n agent_created: [\n ['chat with it', 'talk to your agent'],\n ['schedule a task', 'set up recurring work'],\n ['create a swarm', 'coordinate multiple agents'],\n ],\n sandbox_started: [\n ['run some code', 'execute in the sandbox'],\n ['deploy it', 'push to production'],\n ['stop sandbox', 'tear down environment'],\n ],\n code_executed: [\n ['run more code', 'iterate in the sandbox'],\n ['deploy it', 'push to production'],\n ['show my projects', 'see all projects'],\n ],\n listed_projects: [\n ['deploy <name>', 'deploy a specific project'],\n ['build something new', 'create a new project'],\n ['create an agent', 'add AI to a project'],\n ],\n default: [\n ['build an app', 'create & deploy a project'],\n ['show my projects', 'see what you\\'ve built'],\n ['create an agent', 'spin up an AI agent'],\n ],\n};\n\nexport function printTips(context: HintContext = 'welcome'): void {\n const tips = HINT_MAP[context] || HINT_MAP.default;\n console.log();\n for (const [cmd, desc] of tips) {\n console.log(\n INDENT + pc.dim(' ') + pc.cyan(cmd) + pc.dim(` — ${desc}`),\n );\n }\n console.log();\n}\n\n/**\n * Detect hint context from the assistant's last response text.\n */\nexport function detectHintContext(responseText: string): HintContext {\n const lower = responseText.toLowerCase();\n if (lower.includes('created') && lower.includes('project')) return 'project_created';\n if (lower.includes('deployed') || lower.includes('deployment')) return 'deployed';\n if (lower.includes('created') && lower.includes('agent')) return 'agent_created';\n if (lower.includes('sandbox') && lower.includes('start')) return 'sandbox_started';\n if (lower.includes('executed') || lower.includes('output:')) return 'code_executed';\n if (lower.includes('projects') && (lower.includes('list') || lower.includes('|'))) return 'listed_projects';\n return 'default';\n}\n\n/**\n * Print assistant label before response.\n */\nexport function printAssistantLabel(): void {\n console.log();\n process.stdout.write(pc.bold(pc.cyan('recursiv ')) + '\\n');\n}\n\n/**\n * Print a tool execution indicator.\n */\nexport function printToolCall(name: string): void {\n console.log(pc.yellow(' ▸ ') + pc.dim(name));\n}\n\n/**\n * Print a tool result indicator.\n */\nexport function printToolResult(name: string, success: boolean): void {\n if (success) {\n console.log(pc.green(' ✓ ') + pc.dim(name));\n } else {\n console.log(pc.red(' ✗ ') + pc.dim(name));\n }\n}\n\n/**\n * Show a thinking indicator that can be cleared.\n */\nexport function startThinking(): { stop: () => void } {\n const frames = [' ·', ' ··', ' ···'];\n let i = 0;\n const interval = setInterval(() => {\n process.stdout.write(`\\r${pc.dim(frames[i % frames.length])} `);\n i++;\n }, 250);\n\n return {\n stop() {\n clearInterval(interval);\n process.stdout.write('\\r\\x1b[0K');\n },\n };\n}\n\n/**\n * Prompt user for confirmation (y/n). Returns true if approved.\n */\nexport async function confirmAction(description: string): Promise<boolean> {\n const readline = await import('node:readline');\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });\n return new Promise((resolve) => {\n process.stdout.write(\n pc.yellow(' ? ') + description + pc.dim(' (y/n) '),\n );\n (rl as any).once('line', (line: string) => {\n rl.close();\n const answer = line.trim().toLowerCase();\n resolve(answer === 'y' || answer === 'yes');\n });\n (rl as any).once('close', () => resolve(false));\n });\n}\n\n/**\n * Print an error message.\n */\nexport function printError(message: string): void {\n console.log(pc.red(' ✗ ') + message);\n}\n\n/**\n * Print an info message.\n */\nexport function printInfo(message: string): void {\n console.log(pc.dim(message));\n}\n\n// Re-export renderMarkdown for any remaining callers\nexport function renderMarkdown(text: string): string {\n return text;\n}\n","/**\n * Conversation session persistence for the Recursiv CLI chat agent.\n * Stores conversation history in ~/.recursiv/sessions/\n */\nimport { readFile, writeFile, mkdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { randomUUID } from 'node:crypto';\nimport type Anthropic from '@anthropic-ai/sdk';\n\ntype Message = Anthropic.MessageParam;\n\nconst SESSIONS_DIR = join(homedir(), '.recursiv', 'sessions');\nconst MAX_HISTORY_MESSAGES = 100;\n\nexport interface Session {\n id: string;\n createdAt: string;\n messages: Message[];\n}\n\n/**\n * Create a new session.\n */\nexport function createSession(): Session {\n return {\n id: randomUUID(),\n createdAt: new Date().toISOString(),\n messages: [],\n };\n}\n\n/**\n * Save session to disk.\n */\nexport async function saveSession(session: Session): Promise<void> {\n await mkdir(SESSIONS_DIR, { recursive: true });\n const path = join(SESSIONS_DIR, `${session.id}.json`);\n // Trim old messages to keep file size manageable\n const trimmed = {\n ...session,\n messages: session.messages.slice(-MAX_HISTORY_MESSAGES),\n };\n await writeFile(path, JSON.stringify(trimmed, null, 2), 'utf-8');\n}\n\n/**\n * Load the most recent session, or null if none exists.\n */\nexport async function loadLatestSession(): Promise<Session | null> {\n try {\n const { readdir, stat } = await import('node:fs/promises');\n const files = await readdir(SESSIONS_DIR);\n const jsonFiles = files.filter((f) => f.endsWith('.json'));\n if (jsonFiles.length === 0) return null;\n\n // Find most recent by mtime\n let latest = '';\n let latestTime = 0;\n for (const file of jsonFiles) {\n const info = await stat(join(SESSIONS_DIR, file));\n if (info.mtimeMs > latestTime) {\n latestTime = info.mtimeMs;\n latest = file;\n }\n }\n\n if (!latest) return null;\n const raw = await readFile(join(SESSIONS_DIR, latest), 'utf-8');\n return JSON.parse(raw) as Session;\n } catch {\n return null;\n }\n}\n\n/**\n * Load a session by ID.\n */\nexport async function loadSession(id: string): Promise<Session | null> {\n try {\n const raw = await readFile(join(SESSIONS_DIR, `${id}.json`), 'utf-8');\n return JSON.parse(raw) as Session;\n } catch {\n return null;\n }\n}\n\n/**\n * List recent sessions (most recent first).\n */\nexport async function listSessions(limit = 10): Promise<{ id: string; createdAt: string; messageCount: number; updatedAt: Date }[]> {\n try {\n const { readdir, stat } = await import('node:fs/promises');\n const files = await readdir(SESSIONS_DIR);\n const jsonFiles = files.filter((f) => f.endsWith('.json'));\n\n const entries: { id: string; createdAt: string; messageCount: number; updatedAt: Date }[] = [];\n for (const file of jsonFiles) {\n try {\n const filePath = join(SESSIONS_DIR, file);\n const info = await stat(filePath);\n const raw = await readFile(filePath, 'utf-8');\n const session = JSON.parse(raw) as Session;\n entries.push({\n id: session.id,\n createdAt: session.createdAt,\n messageCount: session.messages.length,\n updatedAt: info.mtime,\n });\n } catch {\n // Skip corrupt session files\n }\n }\n\n entries.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n return entries.slice(0, limit);\n } catch {\n return [];\n }\n}\n\n/**\n * Add a user message to the session.\n */\nexport function addUserMessage(session: Session, content: string): void {\n session.messages.push({ role: 'user', content });\n}\n\n/**\n * Add an assistant message to the session.\n */\nexport function addAssistantMessage(session: Session, content: Anthropic.ContentBlockParam[]): void {\n session.messages.push({ role: 'assistant', content });\n}\n\n/**\n * Add a tool result to the session.\n */\nexport function addToolResult(\n session: Session,\n toolUseId: string,\n result: string,\n isError = false,\n): void {\n session.messages.push({\n role: 'user',\n content: [\n {\n type: 'tool_result',\n tool_use_id: toolUseId,\n content: result,\n is_error: isError,\n },\n ],\n });\n}\n","/**\n * System prompt for the Recursiv CLI chat agent.\n */\nexport function buildSystemPrompt(context: {\n username?: string;\n email?: string;\n apiBaseUrl: string;\n}): string {\n return `You are Recursiv — a CLI agent that builds, deploys, and runs software on the Recursiv platform.\n\n## Current user\n${context.username ? `- Username: @${context.username}` : '- Not yet identified (call get_my_profile)'}\n${context.email ? `- Email: ${context.email}` : ''}\n- API: ${context.apiBaseUrl}\n\n## Your capabilities\n\nYou have the full Recursiv toolchain. Use it:\n\n- **Projects**: create_project, list_projects, get_project, deploy_project\n- **Deployments**: deploy_project (preview or production), get_deployment, get_deployment_logs\n- **Sandboxes**: start_sandbox, stop_sandbox, execute_code (run code inside a project sandbox)\n- **Code execution**: try_code (quick sandbox, no project needed), execute_code (project sandbox)\n- **Agents**: create_agent, list_agents, get_agent, update_agent, chat_with_agent\n- **Templates**: create_template, fork_template, publish_template, list_templates\n- **Social**: create_post, list_posts, search_posts, list_communities\n- **Orgs**: list_orgs (always call first to get the user's org)\n- **Dispatcher**: create_task, list_tasks, claim_task, complete_task\n- **Swarms**: create_swarm, activate_swarm, add_swarm_member\n- **Memory**: remember, recall, search_memory\n\n## How you work\n\nYou are an executor. You have tools. Use them.\n\nWhen the user asks you to build something:\n1. list_orgs → get their org ID\n2. create_project → name it based on what they described\n3. start_sandbox → spin up the project environment\n4. execute_code → write the actual application code in the sandbox\n5. deploy_project → deploy it\n6. create_agent if the project needs AI\n7. Report: project name, ID, deployment status, and what's running\n\nWhen the user asks to run code:\n1. try_code or execute_code — run it immediately, return the output\n\nWhen the user asks to deploy:\n1. deploy_project with the project ID\n2. get_deployment to check status\n3. Report the deployment status/URL\n\n## Output style\n\n- ONE LINE summary of what you did\n- Project name + ID + deployment status. That's it.\n- No code dumps. You WRITE code into sandboxes via execute_code, you don't paste it into chat.\n- If you must show code in chat, max 5 lines of the key logic.\n\n## Rules\n\n1. ALWAYS USE TOOLS. You ARE the platform. Never tell users to run commands.\n2. ALWAYS create projects inside the user's org. Call list_orgs first.\n3. Use execute_code and start_sandbox to actually build — don't just describe architecture.\n4. Never dump code into chat. Write it into the sandbox.\n5. Never reference external brands as infrastructure. Everything is Recursiv.\n6. Never ask \"would you like me to\" — just do it.\n7. Short responses. Action over discussion.\n\n## Tone\nPrecise. Efficient. Slightly warm. Senior engineer energy.`;\n}\n","/**\n * Tool definitions for the Recursiv CLI chat agent.\n *\n * Each tool maps to a Recursiv SDK method. The agent calls tools via Claude's\n * tool_use API, and we execute them against the SDK.\n *\n * Tools are organized by category matching the MCP server structure.\n */\nimport type Anthropic from '@anthropic-ai/sdk';\nimport type { Recursiv } from '@recursiv/sdk';\n\ntype ToolDef = Anthropic.Tool;\n\n// Helper to build a tool definition\nfunction tool(\n name: string,\n description: string,\n properties: Record<string, unknown> = {},\n required: string[] = [],\n): ToolDef {\n return {\n name,\n description,\n input_schema: {\n type: 'object' as const,\n properties,\n required,\n },\n };\n}\n\n/**\n * All tool definitions exposed to Claude.\n * Focused set covering the most common user actions.\n */\nexport function getToolDefinitions(): ToolDef[] {\n return [\n // --- Profile & Identity ---\n tool('get_my_profile', 'Get the authenticated user\\'s profile'),\n tool('get_profile', 'Get a user profile by ID', {\n user_id: { type: 'string', description: 'User ID' },\n }, ['user_id']),\n tool('get_profile_by_username', 'Get a user profile by username', {\n username: { type: 'string', description: 'Username (without @)' },\n }, ['username']),\n tool('search_profiles', 'Search for users', {\n query: { type: 'string', description: 'Search query' },\n limit: { type: 'number', description: 'Max results (default 20)' },\n }, ['query']),\n tool('update_profile', 'Update the current user\\'s profile', {\n name: { type: 'string' },\n bio: { type: 'string' },\n location: { type: 'string' },\n website: { type: 'string' },\n }),\n tool('follow_user', 'Follow a user', {\n user_id: { type: 'string', description: 'User ID to follow' },\n }, ['user_id']),\n tool('unfollow_user', 'Unfollow a user', {\n user_id: { type: 'string', description: 'User ID to unfollow' },\n }, ['user_id']),\n tool('get_followers', 'Get followers of a user', {\n user_id: { type: 'string' },\n limit: { type: 'number' },\n offset: { type: 'number' },\n }, ['user_id']),\n tool('get_following', 'Get users that a user follows', {\n user_id: { type: 'string' },\n limit: { type: 'number' },\n offset: { type: 'number' },\n }, ['user_id']),\n\n // --- Posts ---\n tool('list_posts', 'List posts from the feed', {\n community_id: { type: 'string', description: 'Filter by community' },\n author_id: { type: 'string', description: 'Filter by author' },\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('get_post', 'Get a specific post', {\n post_id: { type: 'string' },\n }, ['post_id']),\n tool('create_post', 'Create a new post', {\n content: { type: 'string', description: 'Post content' },\n content_format: { type: 'string', enum: ['plain', 'markdown'], description: 'Content format (default: plain)' },\n community_id: { type: 'string', description: 'Post to a specific community' },\n organization_id: { type: 'string' },\n reply_to_id: { type: 'string', description: 'Reply to a post' },\n }, ['content']),\n tool('update_post', 'Update a post', {\n post_id: { type: 'string' },\n content: { type: 'string' },\n }, ['post_id', 'content']),\n tool('delete_post', 'Delete a post', {\n post_id: { type: 'string' },\n }, ['post_id']),\n tool('search_posts', 'Search posts', {\n query: { type: 'string' },\n limit: { type: 'number' },\n }, ['query']),\n tool('react_to_post', 'React to a post with one of the allowed reaction types', {\n post_id: { type: 'string' },\n reaction: { type: 'string', enum: ['like', 'heart', 'fire', 'laugh', 'sad', 'angry'], description: 'Reaction type' },\n }, ['post_id', 'reaction']),\n\n // --- Communities ---\n tool('list_communities', 'List communities', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('get_community', 'Get a community by ID', {\n community_id: { type: 'string' },\n }, ['community_id']),\n tool('create_community', 'Create a new community', {\n name: { type: 'string' },\n slug: { type: 'string' },\n description: { type: 'string' },\n privacy: { type: 'string', enum: ['public', 'private', 'hidden'] },\n }, ['name', 'slug']),\n tool('join_community', 'Join a community', {\n community_id: { type: 'string' },\n }, ['community_id']),\n tool('leave_community', 'Leave a community', {\n community_id: { type: 'string' },\n }, ['community_id']),\n\n // --- Chat ---\n tool('list_conversations', 'List chat conversations', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('list_messages', 'List messages in a conversation', {\n conversation_id: { type: 'string' },\n limit: { type: 'number' },\n before: { type: 'string', description: 'Cursor for pagination' },\n }, ['conversation_id']),\n tool('send_message', 'Send a chat message', {\n conversation_id: { type: 'string' },\n content: { type: 'string' },\n }, ['conversation_id', 'content']),\n tool('get_or_create_dm', 'Get or create a DM conversation with a user', {\n user_id: { type: 'string' },\n }, ['user_id']),\n tool('create_group_chat', 'Create a group chat', {\n name: { type: 'string', description: 'Group name' },\n member_ids: { type: 'array', items: { type: 'string' }, description: 'User IDs to add' },\n }, ['name', 'member_ids']),\n tool('get_unread_count', 'Get unread message count for a conversation', {\n conversation_id: { type: 'string', description: 'Conversation ID' },\n }, ['conversation_id']),\n\n // --- Organizations ---\n tool('list_orgs', 'List organizations the user belongs to', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('get_org', 'Get organization details', {\n org_id: { type: 'string' },\n }, ['org_id']),\n tool('create_org', 'Create a new organization', {\n name: { type: 'string' },\n slug: { type: 'string' },\n description: { type: 'string' },\n }, ['name', 'slug']),\n tool('list_org_members', 'List members of an organization', {\n org_id: { type: 'string' },\n limit: { type: 'number' },\n offset: { type: 'number' },\n }, ['org_id']),\n tool('invite_org_member', 'Invite a user to an organization', {\n org_id: { type: 'string' },\n email: { type: 'string' },\n role: { type: 'string', enum: ['member', 'admin', 'owner'] },\n }, ['org_id', 'email']),\n\n // --- Projects ---\n tool('list_projects', 'List projects', {\n organization_id: { type: 'string' },\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('get_project', 'Get a project by ID', {\n project_id: { type: 'string' },\n }, ['project_id']),\n tool('create_project', 'Create a new project', {\n organization_id: { type: 'string' },\n name: { type: 'string' },\n slug: { type: 'string' },\n repo_url: { type: 'string' },\n }, ['organization_id', 'name']),\n\n // --- Agents ---\n tool('list_agents', 'List AI agents', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n tool('get_agent', 'Get an agent by ID', {\n agent_id: { type: 'string' },\n }, ['agent_id']),\n tool('create_agent', 'Create an AI agent', {\n name: { type: 'string' },\n username: { type: 'string' },\n bio: { type: 'string' },\n model: { type: 'string' },\n system_prompt: { type: 'string' },\n social_mode: { type: 'string', enum: ['chat_only', 'chat_post'] },\n post_frequency: { type: 'string', enum: ['never', 'light', 'medium', 'heavy'] },\n tool_mode: { type: 'string', enum: ['chat_only', 'permission', 'autonomous'] },\n organization_id: { type: 'string' },\n }, ['name', 'username']),\n tool('update_agent', 'Update an agent', {\n agent_id: { type: 'string' },\n name: { type: 'string' },\n bio: { type: 'string' },\n system_prompt: { type: 'string' },\n social_mode: { type: 'string' },\n post_frequency: { type: 'string' },\n tool_mode: { type: 'string' },\n }, ['agent_id']),\n tool('delete_agent', 'Delete an agent', {\n agent_id: { type: 'string' },\n }, ['agent_id']),\n tool('chat_with_agent', 'Send a message to an agent and get a response', {\n agent_id: { type: 'string' },\n message: { type: 'string' },\n conversation_id: { type: 'string', description: 'Optional — continue existing conversation' },\n }, ['agent_id', 'message']),\n\n // --- Dispatcher ---\n tool('list_tasks', 'List dispatcher tasks', {\n status: { type: 'string', enum: ['pending', 'in_progress', 'claimed', 'done'] },\n owner: { type: 'string' },\n limit: { type: 'number' },\n }),\n tool('create_task', 'Create a dispatcher task', {\n title: { type: 'string' },\n description: { type: 'string' },\n layer: { type: 'string', enum: ['core', 'plugin', 'ops'] },\n effort: { type: 'number', description: '1-10 effort score' },\n priority: { type: 'number', description: '1-10 priority' },\n }, ['title']),\n tool('claim_task', 'Claim a task', {\n task_id: { type: 'string' },\n agent: { type: 'string', description: 'Agent/person identifier' },\n }, ['task_id', 'agent']),\n tool('complete_task', 'Mark a task as done', {\n task_id: { type: 'string' },\n notes: { type: 'string' },\n }, ['task_id']),\n\n // --- Storage ---\n tool('list_storage_buckets', 'List storage buckets for a project', {\n project_id: { type: 'string' },\n }, ['project_id']),\n tool('list_storage_items', 'List items in a storage bucket', {\n project_id: { type: 'string' },\n bucket_name: { type: 'string' },\n prefix: { type: 'string' },\n }, ['project_id', 'bucket_name']),\n\n // --- Databases ---\n tool('list_databases', 'List databases for a project', {\n project_id: { type: 'string' },\n }, ['project_id']),\n tool('run_sql_query', 'Execute a SQL query against a project database', {\n project_id: { type: 'string' },\n database_id: { type: 'string' },\n query: { type: 'string', description: 'SQL query to execute' },\n }, ['project_id', 'database_id', 'query']),\n\n // --- Deployments ---\n tool('list_deployments', 'List deployments for a project', {\n project_id: { type: 'string' },\n }, ['project_id']),\n tool('trigger_deployment', 'Trigger a new deployment', {\n project_id: { type: 'string' },\n environment: { type: 'string', description: 'Target environment' },\n }, ['project_id']),\n\n // --- Memory ---\n tool('remember', 'Store a fact in agent memory', {\n content: { type: 'string', description: 'What to remember' },\n category: { type: 'string', description: 'Category tag' },\n }, ['content']),\n tool('recall', 'Recall memories matching a query', {\n query: { type: 'string' },\n limit: { type: 'number' },\n }, ['query']),\n tool('search_memory', 'Search memory with filters', {\n query: { type: 'string' },\n category: { type: 'string' },\n limit: { type: 'number' },\n }, ['query']),\n\n // --- Sandbox ---\n tool('execute_code', 'Execute code in a sandboxed environment', {\n code: { type: 'string', description: 'Code to execute' },\n language: { type: 'string', enum: ['python', 'javascript', 'typescript'], description: 'Language (default: python)' },\n }, ['code']),\n\n // --- Wallet ---\n tool('get_my_wallet', 'Get the user\\'s wallet info'),\n tool('get_wallet_balance', 'Get wallet balance'),\n\n // --- Network & Context ---\n tool('get_network_config', 'Get the current network configuration'),\n tool('list_inbox', 'List inbox notifications', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n\n // --- Swarms ---\n tool('list_swarms', 'List agent swarms', {\n limit: { type: 'number' },\n }),\n tool('create_swarm', 'Create a new agent swarm', {\n name: { type: 'string' },\n description: { type: 'string' },\n member_agent_ids: { type: 'array', items: { type: 'string' } },\n }, ['name', 'member_agent_ids']),\n\n // --- Templates ---\n tool('list_templates', 'List available templates', {\n limit: { type: 'number' },\n }),\n\n // --- Billing ---\n tool('get_billing_status', 'Get billing status for the current user'),\n tool('get_tier', 'Get the user\\'s current tier and limits'),\n tool('get_tier_usage', 'Get current tier usage statistics'),\n\n // --- Admin (requires network admin role) ---\n tool('admin_get_stats', 'Get network-wide statistics. Requires: network admin.'),\n tool('admin_list_users', 'List all users. Requires: network admin.', {\n limit: { type: 'number' },\n offset: { type: 'number' },\n }),\n ];\n}\n\n/**\n * Tools that require user confirmation before execution.\n * These are destructive or externally-visible actions.\n */\nconst DESTRUCTIVE_TOOLS = new Set([\n 'delete_post',\n 'delete_agent',\n 'create_post',\n 'create_agent',\n 'create_org',\n 'create_community',\n 'update_profile',\n 'send_message',\n 'invite_org_member',\n 'trigger_deployment',\n 'run_sql_query',\n 'execute_code',\n 'create_swarm',\n 'create_task',\n 'complete_task',\n 'claim_task',\n 'follow_user',\n 'unfollow_user',\n 'join_community',\n 'leave_community',\n 'react_to_post',\n]);\n\n/**\n * Check if a tool requires user confirmation.\n */\nexport function requiresConfirmation(name: string): boolean {\n return DESTRUCTIVE_TOOLS.has(name);\n}\n\n/**\n * Get a human-readable summary of what a tool call will do.\n */\nexport function describeToolAction(name: string, input: Record<string, unknown>): string {\n switch (name) {\n case 'delete_post': return `Delete post ${input.post_id}`;\n case 'delete_agent': return `Delete agent ${input.agent_id}`;\n case 'create_post': {\n const content = (input.content as string) || '';\n const preview = content.length > 60 ? content.slice(0, 57) + '...' : content;\n return `Create post: \"${preview}\"`;\n }\n case 'create_agent': return `Create agent @${input.username}`;\n case 'create_org': return `Create organization \"${input.name}\"`;\n case 'create_community': return `Create community \"${input.name}\"`;\n case 'update_profile': return 'Update your profile';\n case 'send_message': {\n const content = (input.content as string) || '';\n const preview = content.length > 60 ? content.slice(0, 57) + '...' : content;\n return `Send message: \"${preview}\"`;\n }\n case 'invite_org_member': return `Invite ${input.email} to organization`;\n case 'trigger_deployment': return `Deploy project ${input.project_id}`;\n case 'run_sql_query': {\n const sql = (input.query as string) || '';\n const preview = sql.length > 60 ? sql.slice(0, 57) + '...' : sql;\n return `Run SQL: ${preview}`;\n }\n case 'execute_code': return `Execute ${input.language || 'python'} code in sandbox`;\n case 'create_swarm': return `Create swarm \"${input.name}\"`;\n case 'create_task': return `Create task \"${input.title}\"`;\n case 'complete_task': return `Complete task ${input.task_id}`;\n case 'claim_task': return `Claim task ${input.task_id}`;\n case 'follow_user': return `Follow user ${input.user_id}`;\n case 'unfollow_user': return `Unfollow user ${input.user_id}`;\n case 'join_community': return `Join community ${input.community_id}`;\n case 'leave_community': return `Leave community ${input.community_id}`;\n case 'react_to_post': return `React ${input.reaction} to post ${input.post_id}`;\n default: return `${name}(${Object.keys(input).join(', ')})`;\n }\n}\n\n/**\n * Execute a tool call against the Recursiv SDK.\n */\nexport async function executeTool(\n client: Recursiv,\n name: string,\n input: Record<string, unknown>,\n): Promise<unknown> {\n switch (name) {\n // --- Profile ---\n case 'get_my_profile':\n return client.profiles.me();\n case 'get_profile':\n return client.profiles.get(input.user_id as string);\n case 'get_profile_by_username':\n return client.profiles.getByUsername(input.username as string);\n case 'search_profiles':\n return client.profiles.search({\n q: input.query as string,\n limit: input.limit as number | undefined,\n });\n case 'update_profile':\n return client.profiles.update(input as any);\n case 'follow_user':\n return client.profiles.follow(input.user_id as string);\n case 'unfollow_user':\n return client.profiles.unfollow(input.user_id as string);\n case 'get_followers':\n return client.profiles.followers(input.user_id as string, {\n limit: input.limit as number | undefined,\n offset: input.offset as number | undefined,\n });\n case 'get_following':\n return client.profiles.following(input.user_id as string, {\n limit: input.limit as number | undefined,\n offset: input.offset as number | undefined,\n });\n\n // --- Posts ---\n case 'list_posts':\n return client.posts.list(input as any);\n case 'get_post':\n return client.posts.get(input.post_id as string);\n case 'create_post':\n return client.posts.create(input as any);\n case 'update_post':\n return client.posts.update(input.post_id as string, { content: input.content as string });\n case 'delete_post':\n return client.posts.delete(input.post_id as string);\n case 'search_posts':\n return client.posts.search(input as any);\n case 'react_to_post':\n return client.posts.react(\n input.post_id as string,\n input.reaction as 'like' | 'heart' | 'fire' | 'laugh' | 'sad' | 'angry',\n );\n\n // --- Communities ---\n case 'list_communities':\n return client.communities.list(input as any);\n case 'get_community':\n return client.communities.get(input.community_id as string);\n case 'create_community':\n return client.communities.create(input as any);\n case 'join_community':\n return client.communities.join(input.community_id as string);\n case 'leave_community':\n return client.communities.leave(input.community_id as string);\n\n // --- Chat ---\n case 'list_conversations':\n return client.chat.conversations(input as any);\n case 'list_messages':\n return client.chat.messages(input.conversation_id as string, {\n limit: input.limit as number | undefined,\n });\n case 'send_message':\n return client.chat.send({\n conversation_id: input.conversation_id as string,\n content: input.content as string,\n });\n case 'get_or_create_dm':\n return client.chat.dm({ user_id: input.user_id as string });\n case 'create_group_chat':\n return client.chat.createGroup({\n name: input.name as string,\n member_ids: input.member_ids as string[],\n });\n case 'get_unread_count':\n return client.chat.unreadCount(input.conversation_id as string);\n\n // --- Organizations ---\n case 'list_orgs':\n return client.organizations.list(input as any);\n case 'get_org':\n return client.organizations.get(input.org_id as string);\n case 'create_org':\n return client.organizations.create(input as any);\n case 'list_org_members':\n return client.organizations.members(input.org_id as string, {\n limit: input.limit as number | undefined,\n offset: input.offset as number | undefined,\n });\n case 'invite_org_member':\n return client.organizations.invite(input.org_id as string, {\n email: input.email as string,\n role: input.role as string | undefined,\n });\n\n // --- Projects ---\n case 'list_projects':\n return client.projects.list(input as any);\n case 'get_project':\n return client.projects.get(input.project_id as string);\n case 'create_project':\n return client.projects.create(input as any);\n\n // --- Agents ---\n case 'list_agents':\n return client.agents.list(input as any);\n case 'get_agent':\n return client.agents.get(input.agent_id as string);\n case 'create_agent':\n return client.agents.create(input as any);\n case 'update_agent':\n return client.agents.update(input.agent_id as string, input as any);\n case 'delete_agent':\n return client.agents.delete(input.agent_id as string);\n case 'chat_with_agent':\n return client.agents.chat(input.agent_id as string, {\n message: input.message as string,\n conversation_id: input.conversation_id as string | undefined,\n });\n\n // --- Dispatcher ---\n case 'list_tasks':\n return client.dispatcher.tasks(input as any);\n case 'create_task':\n return client.dispatcher.create(input as any);\n case 'claim_task':\n return client.dispatcher.claim(input.task_id as string, {\n agent: input.agent as string,\n });\n case 'complete_task':\n return client.dispatcher.complete(input.task_id as string, {\n notes: input.notes as string | undefined,\n });\n\n // --- Storage ---\n case 'list_storage_buckets':\n return client.storage.listBuckets({ project_id: input.project_id as string });\n case 'list_storage_items':\n return client.storage.listItems({\n project_id: input.project_id as string,\n bucket_name: input.bucket_name as string,\n prefix: input.prefix as string | undefined,\n });\n\n // --- Databases ---\n case 'list_databases':\n return client.databases.list({ project_id: input.project_id as string });\n case 'run_sql_query':\n return client.databases.query({\n project_id: input.project_id as string,\n sql: input.query as string,\n database_name: input.database_id as string | undefined,\n });\n\n // --- Deployments ---\n case 'list_deployments':\n return client.deployments.list({ project_id: input.project_id as string });\n case 'trigger_deployment':\n return client.deployments.deploy({\n project_id: input.project_id as string,\n branch: input.environment as string | undefined,\n });\n\n // --- Memory ---\n case 'remember':\n return client.memory.facts.add({\n fact: input.content as string,\n });\n case 'recall':\n return client.memory.search({\n query: input.query as string,\n limit: input.limit as number | undefined,\n });\n case 'search_memory':\n return client.memory.search({\n query: input.query as string,\n limit: input.limit as number | undefined,\n });\n\n // --- Sandbox ---\n case 'execute_code':\n return client.sandbox.execute({\n code: input.code as string,\n language: (input.language as 'python' | 'javascript' | 'typescript' | undefined) || 'python',\n });\n\n // --- Wallet ---\n case 'get_my_wallet':\n return client.wallet.getMyWallet();\n case 'get_wallet_balance':\n return client.wallet.getBalance();\n\n // --- Network & Context ---\n case 'get_network_config':\n return client.network.getConfig();\n case 'list_inbox':\n return client.inbox.list(input as any);\n\n // --- Swarms ---\n case 'list_swarms':\n return client.swarms.list(input as any);\n case 'create_swarm':\n return client.swarms.create(input as any);\n\n // --- Templates ---\n case 'list_templates':\n return client.templates.list(input as any);\n\n // --- Billing ---\n case 'get_billing_status':\n return client.billing.getStatus({});\n case 'get_tier':\n return client.freeTier.getTier();\n case 'get_tier_usage':\n return client.freeTier.getUsage();\n\n // --- Admin ---\n case 'admin_get_stats':\n return client.admin.getStats();\n case 'admin_list_users':\n return client.admin.listUsers(input as any);\n\n default:\n throw new Error(`Unknown tool: ${name}`);\n }\n}\n","/**\n * Chat-first agent for the Recursiv CLI.\n *\n * Two modes:\n * - Proxy (default): Routes through Recursiv's agent chat API. Single key, model-agnostic.\n * - Direct (--direct): Calls Anthropic API directly. Requires ANTHROPIC_API_KEY.\n */\nimport { createInterface, type Interface } from 'node:readline';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { basename, join } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport { Recursiv, InsufficientCreditsError } from '@recursiv/sdk';\nimport {\n printBanner,\n printPrompt,\n printTips,\n detectHintContext,\n printAssistantLabel,\n printToolCall,\n printToolResult,\n printError,\n printInfo,\n startThinking,\n confirmAction,\n StreamWriter,\n} from './renderer.js';\nimport {\n createSession,\n loadLatestSession,\n loadSession,\n listSessions,\n saveSession,\n addUserMessage,\n addAssistantMessage,\n addToolResult,\n type Session,\n} from './session.js';\nimport pc from 'picocolors';\n\nconst DEFAULT_MODEL = 'claude-sonnet-4-20250514';\nconst MAX_TOKENS = 8192;\nconst MAX_TOOL_ROUNDS = 15;\nlet planMode = false;\n\nconst CLI_AGENT_SYSTEM_PROMPT = `You are Recursiv — a CLI agent that builds, deploys, and runs software on the Recursiv platform.\n\nYou have the full Recursiv toolchain: create_project, deploy_project, start_sandbox, execute_code, try_code, create_agent, create_template, and 50+ more tools. USE THEM.\n\nWhen the user asks you to build something:\n1. list_orgs → get their org ID\n2. create_project → name it based on what they described\n3. start_sandbox → spin up the project environment\n4. execute_code → write the actual application code in the sandbox\n5. deploy_project → deploy it\n6. create_agent if the project needs AI\n7. Report: project name, ID, deployment status\n\nWhen the user asks to run code: try_code or execute_code — run it, return the output.\nWhen the user asks to deploy: deploy_project → get_deployment → report status.\n\nRules:\n1. ALWAYS USE TOOLS. You ARE the platform. Never tell users to run commands.\n2. ALWAYS create projects inside the user's org. Call list_orgs first.\n3. Use execute_code and start_sandbox to actually build — don't describe architecture in chat.\n4. Never dump code into chat. Write it into the sandbox via execute_code.\n5. Never reference external brands as infrastructure. Everything is Recursiv.\n6. Never ask \"would you like me to\" — just do it.\n7. ONE LINE summary, project name + ID + status. That's it.\n\nTone: precise, efficient, slightly warm. Senior engineer energy.`;\n\n\nexport interface AgentConfig {\n recursivApiKey: string;\n recursivBaseUrl: string;\n model?: string;\n resume?: boolean;\n anthropicApiKey?: string;\n}\n\nexport async function startAgent(config: AgentConfig): Promise<void> {\n const client = new Recursiv({\n apiKey: config.recursivApiKey,\n baseUrl: config.recursivBaseUrl,\n });\n\n // Try to identify the user\n let username: string | undefined;\n let email: string | undefined;\n try {\n const profile = await client.profiles.me();\n const data = (profile as any).data;\n username = data?.username;\n email = data?.email;\n } catch {\n // Will be identified on first tool call\n }\n\n // Resume previous session or create new\n let session: Session;\n if (config.resume) {\n const prev = await loadLatestSession();\n if (prev) {\n session = prev;\n } else {\n session = createSession();\n }\n } else {\n session = createSession();\n }\n\n printBanner({\n username,\n email,\n resumed:\n config.resume && session.messages.length > 0\n ? { id: session.id.slice(0, 8), messageCount: session.messages.length }\n : undefined,\n });\n\n console.log();\n\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n terminal: true,\n });\n\n // Handle graceful shutdown\n (rl as any).on('close', async () => {\n console.log();\n printInfo('Session saved. Goodbye.');\n await saveSession(session);\n process.exit(0);\n });\n\n // Choose mode: direct (with tools) is default, proxy is fallback\n if (config.anthropicApiKey) {\n await replDirect(rl, config, client, session);\n } else {\n // Proxy mode — no local tools, server handles everything\n await replProxy(rl, client, session);\n }\n}\n\n// ─── Shared REPL shell ───────────────────────────────────────────────────────\n\nasync function replProxy(\n rl: Interface,\n client: Recursiv,\n session: Session,\n): Promise<void> {\n // Ensure we have a CLI agent\n const { readCredentials, saveCredentials } = await import('../lib/credentials.js');\n const creds = await readCredentials();\n let agentId = creds.cliAgentId;\n\n if (!agentId) {\n // Auto-create a CLI agent — must belong to user's org for budget access\n try {\n // Fetch user's first org\n let orgId: string | undefined;\n try {\n const orgs = await client.organizations.list({ limit: 1 });\n const orgData = (orgs as any).data;\n if (orgData?.[0]?.id) orgId = orgData[0].id;\n } catch {\n // No org access — agent will be org-less\n }\n\n const result = await client.agents.create({\n name: 'CLI Assistant',\n username: `cli_${Date.now().toString(36)}`,\n bio: 'Personal CLI assistant created by the Recursiv CLI.',\n system_prompt: CLI_AGENT_SYSTEM_PROMPT,\n social_mode: 'chat_only',\n tool_mode: 'autonomous',\n post_frequency: 'never',\n ...(orgId && { organization_id: orgId }),\n });\n agentId = (result as any).data.id;\n await saveCredentials({ cliAgentId: agentId });\n printInfo(` Created CLI agent (${agentId!.slice(0, 8)})`);\n } catch (err) {\n printError(`Could not create CLI agent: ${err instanceof Error ? err.message : String(err)}`);\n printInfo(' Falling back to direct mode. Set ANTHROPIC_API_KEY to use.');\n return;\n }\n }\n\n // Track conversation_id for multi-turn\n let conversationId: string | undefined;\n\n // ── First-run: agent speaks first ──────────────────────────────────\n const isFirstRun = session.messages.length === 0;\n if (isFirstRun) {\n const ctx = detectProjectContext();\n printFirstRunGreeting(ctx);\n }\n\n while (true) {\n const input = await prompt(rl);\n if (input === null) break;\n\n const trimmed = input.trim();\n if (!trimmed) continue;\n\n if (trimmed.startsWith('/')) {\n const handled = await handleSlashCommand(trimmed, session, client);\n if (handled === 'exit') break;\n if (handled) continue;\n }\n\n addUserMessage(session, trimmed);\n\n // In plan mode, prefix the message to request a plan instead of execution\n const messageToSend = planMode\n ? `[PLAN MODE] Do NOT execute anything yet. Instead, outline the steps you would take to accomplish this, what tools you'd call and in what order. Wait for my approval before executing.\\n\\n${trimmed}`\n : trimmed;\n\n // Stream from Recursiv agent API\n try {\n if (planMode) {\n console.log(pc.dim(' ◆ plan mode'));\n }\n printAssistantLabel();\n const thinking = startThinking();\n const writer = new StreamWriter();\n let hasText = false;\n let thinkingStopped = false;\n\n for await (const chunk of client.agents.chatStream(agentId!, {\n message: messageToSend,\n conversation_id: conversationId,\n })) {\n if (chunk.type === 'text_delta' && chunk.delta) {\n if (!thinkingStopped) {\n thinking.stop();\n thinkingStopped = true;\n }\n hasText = true;\n writer.write(chunk.delta);\n } else if (chunk.type === 'tool_use' && chunk.tool_name) {\n if (!thinkingStopped) {\n thinking.stop();\n thinkingStopped = true;\n }\n printToolCall(chunk.tool_name);\n } else if (chunk.type === 'tool_result') {\n printToolResult(chunk.tool_name || 'tool', true);\n } else if (chunk.type === 'error') {\n if (!thinkingStopped) {\n thinking.stop();\n thinkingStopped = true;\n }\n printError(chunk.error || 'Unknown error');\n }\n\n // Capture conversation_id from first chunk\n if ((chunk as any).conversation_id) {\n conversationId = (chunk as any).conversation_id;\n }\n }\n\n if (!thinkingStopped) thinking.stop();\n\n if (hasText) {\n writer.finishAndRender();\n }\n console.log();\n\n // Save assistant response to session (as plain text for session history)\n const fullText = writer.getBuffer() || '';\n if (fullText) {\n addAssistantMessage(session, [{ type: 'text', text: fullText }]);\n // Show contextual hints based on what the agent just did\n const hintCtx = detectHintContext(fullText);\n printTips(hintCtx);\n }\n } catch (err) {\n if (err instanceof InsufficientCreditsError) {\n printError('Out of credits — your account has no remaining balance.');\n printInfo(` Upgrade: ${err.upgradeUrl}`);\n console.log();\n continue;\n }\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('rate_limit') || message.includes('429')) {\n printError('Rate limited — wait a moment and try again.');\n } else if (message.includes('401') || message.includes('authentication')) {\n printError('API key is invalid. Run `recursiv auth login` to re-authenticate.');\n } else if (message.includes('ENOTFOUND') || message.includes('ECONNREFUSED')) {\n printError('Network error — check your internet connection.');\n } else {\n printError(message);\n }\n console.log();\n }\n\n await saveSession(session);\n }\n}\n\n// ─── Direct mode (Anthropic API) ─────────────────────────────────────────────\n\nasync function replDirect(\n rl: Interface,\n config: AgentConfig,\n client: Recursiv,\n session: Session,\n): Promise<void> {\n const Anthropic = (await import('@anthropic-ai/sdk')).default;\n const { buildSystemPrompt } = await import('./system-prompt.js');\n const { getToolDefinitions, executeTool, requiresConfirmation, describeToolAction } = await import('./tools.js');\n\n const anthropic = new Anthropic({ apiKey: config.anthropicApiKey });\n const tools = getToolDefinitions();\n const model = config.model || DEFAULT_MODEL;\n\n let username: string | undefined;\n let email: string | undefined;\n try {\n const profile = await client.profiles.me();\n const data = (profile as any).data;\n username = data?.username;\n email = data?.email;\n } catch {\n // Fine\n }\n\n const systemPrompt = buildSystemPrompt({\n username,\n email,\n apiBaseUrl: config.recursivBaseUrl,\n });\n\n while (true) {\n const input = await prompt(rl);\n if (input === null) break;\n\n const trimmed = input.trim();\n if (!trimmed) continue;\n\n if (trimmed.startsWith('/')) {\n const handled = await handleSlashCommand(trimmed, session, client);\n if (handled === 'exit') break;\n if (handled) continue;\n }\n\n addUserMessage(session, trimmed);\n await runDirectTurn(anthropic, client, tools, model, systemPrompt, session);\n await saveSession(session);\n }\n}\n\n// ─── Direct mode agent turn ──────────────────────────────────────────────────\n\nasync function runDirectTurn(\n anthropic: any,\n client: Recursiv,\n tools: any[],\n model: string,\n systemPrompt: string,\n session: Session,\n): Promise<void> {\n const { requiresConfirmation, describeToolAction, executeTool } = await import('./tools.js');\n\n let rounds = 0;\n\n while (rounds < MAX_TOOL_ROUNDS) {\n rounds++;\n\n try {\n printAssistantLabel();\n const thinking = startThinking();\n\n const stream = anthropic.messages.stream({\n model,\n max_tokens: MAX_TOKENS,\n system: systemPrompt,\n tools,\n messages: session.messages,\n });\n\n const writer = new StreamWriter();\n let hasText = false;\n let thinkingStopped = false;\n\n for await (const event of stream) {\n if (event.type === 'content_block_delta') {\n const delta = event.delta;\n if ('text' in delta && delta.text) {\n if (!thinkingStopped) {\n thinking.stop();\n thinkingStopped = true;\n }\n hasText = true;\n writer.write(delta.text);\n }\n }\n }\n\n if (!thinkingStopped) thinking.stop();\n\n const finalMessage = await stream.finalMessage();\n\n if (hasText) {\n writer.finishAndRender();\n }\n console.log();\n\n const contentBlocks: any[] = [];\n let hasToolUse = false;\n\n for (const block of finalMessage.content) {\n if (block.type === 'text') {\n contentBlocks.push({ type: 'text', text: block.text });\n } else if (block.type === 'tool_use') {\n hasToolUse = true;\n contentBlocks.push({\n type: 'tool_use',\n id: block.id,\n name: block.name,\n input: block.input as Record<string, unknown>,\n });\n }\n }\n\n addAssistantMessage(session, contentBlocks);\n\n if (!hasToolUse) break;\n\n for (const block of finalMessage.content) {\n if (block.type !== 'tool_use') continue;\n const toolInput = block.input as Record<string, unknown>;\n\n if (requiresConfirmation(block.name)) {\n const desc = describeToolAction(block.name, toolInput);\n const approved = await confirmAction(desc);\n if (!approved) {\n printToolResult(block.name, false);\n addToolResult(session, block.id, 'User declined this action.', true);\n continue;\n }\n }\n\n printToolCall(block.name);\n\n try {\n const result = await executeTool(client, block.name, toolInput);\n const resultStr = JSON.stringify(result, null, 2);\n printToolResult(block.name, true);\n addToolResult(session, block.id, resultStr);\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : String(err);\n printToolResult(block.name, false);\n addToolResult(session, block.id, errMsg, true);\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n if (message.includes('rate_limit') || message.includes('429')) {\n printError('Rate limited — wait a moment and try again.');\n } else if (message.includes('overloaded') || message.includes('529')) {\n printError('API overloaded — try again in a few seconds.');\n } else if (message.includes('authentication') || message.includes('401')) {\n printError('Anthropic API key is invalid. Set ANTHROPIC_API_KEY in your environment.');\n } else if (message.includes('ENOTFOUND') || message.includes('ECONNREFUSED')) {\n printError('Network error — check your internet connection.');\n } else {\n printError(message);\n }\n console.log();\n break;\n }\n }\n\n if (rounds >= MAX_TOOL_ROUNDS) {\n printError(`Tool loop limit reached (${MAX_TOOL_ROUNDS} rounds). Stopping to prevent runaway.`);\n console.log();\n }\n}\n\n// ─── Shared helpers ──────────────────────────────────────────────────────────\n\nfunction prompt(rl: Interface): Promise<string | null> {\n return new Promise((resolve) => {\n printPrompt();\n (rl as any).once('line', (line: string) => resolve(line));\n (rl as any).once('close', () => resolve(null));\n });\n}\n\nasync function handleSlashCommand(\n input: string,\n session: Session,\n client: Recursiv,\n): Promise<string | boolean> {\n const cmd = input.toLowerCase().split(/\\s+/)[0];\n\n switch (cmd) {\n case '/exit':\n case '/quit':\n case '/q':\n printInfo('Session saved. Goodbye.');\n await saveSession(session);\n return 'exit';\n\n case '/plan':\n planMode = !planMode;\n if (planMode) {\n console.log(pc.cyan(' ◆ Plan mode ON') + pc.dim(' — agent will outline steps before executing'));\n } else {\n console.log(pc.green(' ◆ Plan mode OFF') + pc.dim(' — agent will execute immediately'));\n }\n console.log();\n return true;\n\n case '/clear':\n session.messages = [];\n console.log(pc.dim(' Conversation cleared.'));\n console.log();\n return true;\n\n case '/help':\n console.log();\n console.log(pc.bold(' Commands'));\n console.log(pc.dim(' /help ') + 'Show this help');\n console.log(pc.dim(' /plan ') + 'Toggle plan mode (outline before executing)');\n console.log(pc.dim(' /clear ') + 'Clear conversation history');\n console.log(pc.dim(' /status ') + 'Show connection status');\n console.log(pc.dim(' /context ') + 'Show full user context (profile, orgs, tier)');\n console.log(pc.dim(' /sessions ') + 'List recent sessions');\n console.log(pc.dim(' /load <id> ') + 'Load a previous session by ID');\n console.log(pc.dim(' /exit ') + 'Exit the CLI');\n console.log();\n console.log(pc.bold(' Usage'));\n console.log(pc.dim(' Just type naturally. Examples:'));\n console.log(pc.dim(' \"show my posts\"'));\n console.log(pc.dim(' \"create a post saying hello world\"'));\n console.log(pc.dim(' \"list my agents\"'));\n console.log(pc.dim(' \"what communities can I join?\"'));\n console.log(pc.dim(' \"check my unread messages\"'));\n console.log(pc.dim(' \"show dispatcher tasks\"'));\n console.log();\n console.log(pc.dim(' Destructive actions (delete, deploy, send) require confirmation.'));\n console.log();\n return true;\n\n case '/status':\n try {\n const profile = await client.profiles.me();\n const data = (profile as any).data;\n console.log();\n console.log(pc.bold(' Status'));\n console.log(pc.dim(' User: ') + pc.bold(`@${data.username || 'unknown'}`));\n if (data.email) console.log(pc.dim(' Email: ') + data.email);\n console.log(pc.dim(' Session: ') + session.id.slice(0, 8));\n console.log(pc.dim(' History: ') + `${session.messages.length} messages`);\n console.log();\n } catch {\n printError('Could not fetch status — check your API key');\n console.log();\n }\n return true;\n\n case '/context':\n try {\n const [profile, orgs, tier] = await Promise.allSettled([\n client.profiles.me(),\n client.organizations.list({ limit: 50 }),\n client.freeTier.getTier(),\n ]);\n\n console.log();\n console.log(pc.bold(' User Context'));\n\n if (profile.status === 'fulfilled') {\n const p = (profile.value as any).data;\n console.log(pc.dim(' User: ') + pc.bold(`@${p.username || 'unknown'}`));\n console.log(pc.dim(' Name: ') + (p.name || '-'));\n console.log(pc.dim(' Email: ') + (p.email || '-'));\n console.log(pc.dim(' Followers: ') + (p.followers_count ?? 0));\n console.log(pc.dim(' Following: ') + (p.following_count ?? 0));\n }\n\n if (orgs.status === 'fulfilled') {\n const orgList = (orgs.value as any).data;\n console.log();\n console.log(pc.bold(' Organizations'));\n if (orgList.length === 0) {\n console.log(pc.dim(' None'));\n } else {\n for (const org of orgList) {\n const role = org.role ? pc.dim(` (${org.role})`) : '';\n console.log(` - ${pc.bold(org.name)}${role}`);\n }\n }\n }\n\n if (tier.status === 'fulfilled') {\n const t = (tier.value as any).data;\n console.log();\n console.log(pc.bold(' Tier'));\n console.log(pc.dim(' Plan: ') + (t.tier || t.plan || 'free'));\n if (t.api_calls_remaining != null) {\n console.log(pc.dim(' Calls: ') + `${t.api_calls_remaining} remaining`);\n }\n }\n\n console.log();\n } catch {\n printError('Could not fetch context');\n console.log();\n }\n return true;\n\n case '/sessions': {\n const sessions = await listSessions();\n console.log();\n if (sessions.length === 0) {\n console.log(pc.dim(' No saved sessions.'));\n } else {\n console.log(pc.bold(' Recent Sessions'));\n for (const s of sessions) {\n const current = s.id === session.id ? pc.green(' (current)') : '';\n const date = new Date(s.createdAt).toLocaleDateString();\n console.log(\n pc.dim(' ') +\n pc.bold(s.id.slice(0, 8)) +\n pc.dim(` — ${date}, ${s.messageCount} messages`) +\n current,\n );\n }\n }\n console.log();\n return true;\n }\n\n case '/load': {\n const parts = input.split(/\\s+/);\n const targetId = parts[1];\n if (!targetId) {\n console.log(pc.dim(' Usage: /load <session-id>'));\n console.log();\n return true;\n }\n\n const sessions = await listSessions(50);\n const match = sessions.find((s) => s.id.startsWith(targetId));\n if (!match) {\n printError(`No session found matching \"${targetId}\"`);\n console.log();\n return true;\n }\n\n const loaded = await loadSession(match.id);\n if (!loaded) {\n printError('Could not load session file');\n console.log();\n return true;\n }\n\n session.id = loaded.id;\n session.createdAt = loaded.createdAt;\n session.messages = loaded.messages;\n console.log(\n pc.dim(' ') +\n `Loaded session ${pc.bold(loaded.id.slice(0, 8))} (${loaded.messages.length} messages)`,\n );\n console.log();\n return true;\n }\n\n default:\n console.log(pc.dim(` Unknown command: ${cmd}. Type /help for available commands.`));\n console.log();\n return true;\n }\n}\n\n// ─── Project context detection ────────────────────────────────────────────────\n\ninterface ProjectContext {\n dirName: string;\n hasPackageJson: boolean;\n packageName?: string;\n packageDescription?: string;\n framework?: string;\n language?: string;\n isGitRepo: boolean;\n hasReadme: boolean;\n isEmpty: boolean;\n}\n\nfunction detectProjectContext(): ProjectContext {\n const cwd = process.cwd();\n const dirName = basename(cwd);\n const hasPackageJson = existsSync(join(cwd, 'package.json'));\n const hasReadme = existsSync(join(cwd, 'README.md'));\n\n let isGitRepo = false;\n try {\n execSync('git rev-parse --is-inside-work-tree', { cwd, stdio: 'pipe' });\n isGitRepo = true;\n } catch { /* not a git repo */ }\n\n // Check if directory is essentially empty (no source files)\n let isEmpty = true;\n try {\n const files = execSync('ls -A', { cwd, encoding: 'utf-8' }).trim().split('\\n');\n isEmpty = files.length <= 2 && files.every(f => f.startsWith('.') || f === 'node_modules');\n } catch { /* fine */ }\n\n let packageName: string | undefined;\n let packageDescription: string | undefined;\n let framework: string | undefined;\n let language: string | undefined;\n\n if (hasPackageJson) {\n try {\n const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf-8'));\n packageName = pkg.name;\n packageDescription = pkg.description;\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n if (deps.next) framework = 'Next.js';\n else if (deps.nuxt) framework = 'Nuxt';\n else if (deps.svelte || deps['@sveltejs/kit']) framework = 'SvelteKit';\n else if (deps.react) framework = 'React';\n else if (deps.vue) framework = 'Vue';\n else if (deps.express) framework = 'Express';\n else if (deps.hono) framework = 'Hono';\n else if (deps.fastify) framework = 'Fastify';\n } catch { /* malformed package.json */ }\n }\n\n if (existsSync(join(cwd, 'tsconfig.json'))) language = 'TypeScript';\n else if (existsSync(join(cwd, 'pyproject.toml')) || existsSync(join(cwd, 'requirements.txt'))) language = 'Python';\n else if (existsSync(join(cwd, 'go.mod'))) language = 'Go';\n else if (existsSync(join(cwd, 'Cargo.toml'))) language = 'Rust';\n\n return { dirName, hasPackageJson, packageName, packageDescription, framework, language, isGitRepo, hasReadme, isEmpty };\n}\n\nfunction printFirstRunGreeting(_ctx: ProjectContext): void {\n printAssistantLabel();\n console.log();\n console.log(' What do you want to build?');\n printTips();\n}\n","import { Command } from 'commander';\nimport { printCliError } from '../lib/cli-errors.js';\nimport { initCommand } from '../commands/init.js';\nimport { devCommand } from '../commands/dev.js';\nimport { deployCommand } from '../commands/deploy.js';\nimport { loginCommand, logoutCommand, whoamiCommand } from '../commands/auth.js';\nimport { infoCommand } from '../commands/info.js';\nimport { brainCommand } from '../commands/brain.js';\nimport { studioCommand } from '../commands/studio.js';\nimport { browserUseMcpSnippetCommand, browserUseRunCommand } from '../commands/browser-use.js';\nimport {\n agentsCreateCommand,\n agentsListCommand,\n communitiesCreateCommand,\n communitiesListCommand,\n postsCreateCommand,\n postsListCommand,\n projectsCreateCommand,\n projectsListCommand,\n usersMeCommand,\n} from '../commands/api.js';\n\nconst program = new Command();\n\nprogram\n .name('recursiv')\n .description('Recursiv CLI — build and ship apps with AI')\n .version('0.1.0');\n\n// --- Chat command (default interactive mode) ---\nprogram\n .command('chat')\n .description('Start the chat-first AI agent (default when no command is given)')\n .option('--model <model>', 'Claude model to use (default: claude-sonnet-4-20250514)')\n .option('--resume', 'Resume the most recent session')\n .action(async (opts: { model?: string; resume?: boolean }) => {\n try {\n await launchChatAgent({ model: opts.model, resume: opts.resume });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('create [name]')\n .description('Create a new Recursiv application')\n .action(async (name?: string) => {\n try {\n await initCommand(name);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('dev')\n .description('Start the development server')\n .option('-p, --port <port>', 'port to run on')\n .action(async (opts: { port?: string }) => {\n try {\n await devCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('deploy <target>')\n .description('Generate deployment config (vercel, docker, render, railway, cloud)')\n .action(async (target: string) => {\n try {\n await deployCommand(target);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst auth = program\n .command('auth')\n .description('Manage API authentication');\n\nauth\n .command('login')\n .description('Set or update your API key')\n .action(async () => {\n try {\n await loginCommand();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nauth\n .command('logout')\n .description('Remove API key from .env')\n .action(async () => {\n try {\n await logoutCommand();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nauth\n .command('whoami')\n .description('Show current authenticated user')\n .action(async () => {\n try {\n await whoamiCommand();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('info')\n .description('Display project information')\n .action(async () => {\n try {\n await infoCommand();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst browserUse = program.command('browser-use').description('Browser Use helpers');\n\nbrowserUse\n .command('run')\n .description('Run a Browser Use task with the official SDK')\n .requiredOption('--task <task>', 'task to run')\n .option('--start-url <url>', 'initial URL')\n .option('--max-steps <n>', 'maximum Browser Use steps')\n .option('--no-wait', 'return quickly instead of waiting for the full result')\n .option('--json', 'Output JSON')\n .action(async (opts: { task?: string; startUrl?: string; maxSteps?: string; wait?: boolean; json?: boolean }) => {\n try {\n await browserUseRunCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nbrowserUse\n .command('mcp-snippet')\n .description('Print Browser Use MCP configuration snippets')\n .option('--target <target>', 'generic | codex | claude-code', 'generic')\n .action(async (opts: { target?: string }) => {\n try {\n await browserUseMcpSnippetCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst users = program.command('users').description('Users API');\nusers\n .command('me')\n .description('Show current authenticated user')\n .option('--json', 'Output JSON')\n .action(async (opts: { json?: boolean }) => {\n try {\n await usersMeCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst communities = program.command('communities').description('Communities API');\ncommunities\n .command('list')\n .description('List communities')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { limit?: string; offset?: string; json?: boolean }) => {\n try {\n await communitiesListCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\ncommunities\n .command('create')\n .description('Create a community')\n .requiredOption('--name <name>', 'community name')\n .requiredOption('--slug <slug>', 'community slug')\n .option('--description <description>', 'description')\n .option('--privacy <privacy>', 'public | private | hidden', 'public')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n name?: string;\n slug?: string;\n description?: string;\n privacy?: string;\n json?: boolean;\n }) => {\n try {\n await communitiesCreateCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst posts = program.command('posts').description('Posts API');\nposts\n .command('list')\n .description('List posts')\n .option('--community-id <id>', 'filter by community')\n .option('--author-id <id>', 'filter by author')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n communityId?: string;\n authorId?: string;\n limit?: string;\n offset?: string;\n json?: boolean;\n }) => {\n try {\n await postsListCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nposts\n .command('create')\n .description('Create a post')\n .requiredOption('--content <content>', 'post content')\n .option('--markdown', 'content is markdown')\n .option('--community-id <id>', 'community id')\n .option('--organization-id <id>', 'organization id')\n .option('--reply-to-id <id>', 'reply to post id')\n .option('--tag-ids <ids>', 'comma-separated tag ids')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n content?: string;\n markdown?: boolean;\n communityId?: string;\n organizationId?: string;\n replyToId?: string;\n tagIds?: string;\n json?: boolean;\n }) => {\n try {\n await postsCreateCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst projects = program.command('projects').description('Projects API');\nprojects\n .command('list')\n .description('List projects')\n .option('--org <id>', 'organization id')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { org?: string; limit?: string; offset?: string; json?: boolean }) => {\n try {\n await projectsListCommand({\n organizationId: opts.org,\n limit: opts.limit,\n offset: opts.offset,\n json: opts.json,\n });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprojects\n .command('create')\n .description('Create a project')\n .requiredOption('--org <id>', 'organization id')\n .requiredOption('--name <name>', 'project name')\n .option('--slug <slug>', 'project slug')\n .option('--repo <url>', 'repo URL')\n .option('--template <source>', 'default | custom', 'default')\n .option('--template-url <url>', 'custom template URL')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n org?: string;\n name?: string;\n slug?: string;\n repo?: string;\n template?: string;\n templateUrl?: string;\n json?: boolean;\n }) => {\n try {\n await projectsCreateCommand({\n organizationId: opts.org,\n name: opts.name,\n slug: opts.slug,\n repoUrl: opts.repo,\n templateSource: opts.template,\n templateUrl: opts.templateUrl,\n json: opts.json,\n });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nconst agents = program.command('agents').description('Agents API');\nagents\n .command('list')\n .description('List agents')\n .option('--limit <limit>', 'number of results')\n .option('--offset <offset>', 'pagination offset')\n .option('--json', 'Output JSON')\n .action(async (opts: { limit?: string; offset?: string; json?: boolean }) => {\n try {\n await agentsListCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nagents\n .command('create')\n .description('Create an AI agent')\n .requiredOption('--name <name>', 'agent name')\n .requiredOption('--username <username>', 'agent username')\n .option('--bio <bio>', 'agent bio')\n .option('--model <model>', 'model id')\n .option('--system-prompt <prompt>', 'system prompt')\n .option('--social-mode <mode>', 'chat_only | chat_post')\n .option('--post-frequency <freq>', 'never | light | medium | heavy')\n .option('--tool-mode <mode>', 'chat_only | permission | autonomous')\n .option('--daily-request-limit <n>', 'daily request limit')\n .option('--org <id>', 'organization id')\n .option('--json', 'Output JSON')\n .action(async (opts: {\n name?: string;\n username?: string;\n bio?: string;\n model?: string;\n systemPrompt?: string;\n socialMode?: string;\n postFrequency?: string;\n toolMode?: string;\n dailyRequestLimit?: string;\n org?: string;\n json?: boolean;\n }) => {\n try {\n await agentsCreateCommand({\n name: opts.name,\n username: opts.username,\n bio: opts.bio,\n model: opts.model,\n systemPrompt: opts.systemPrompt,\n socialMode: opts.socialMode,\n postFrequency: opts.postFrequency,\n toolMode: opts.toolMode,\n dailyRequestLimit: opts.dailyRequestLimit,\n organizationId: opts.org,\n json: opts.json,\n });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('brain')\n .description('Launch the visual Recursiv brain TUI')\n .option('--no-anim', 'Disable animations')\n .action(async (opts: { anim?: boolean }) => {\n try {\n await brainCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nprogram\n .command('studio')\n .description('Legacy alias for brain')\n .option('--no-anim', 'Disable animations')\n .action(async (opts: { anim?: boolean }) => {\n try {\n await studioCommand(opts);\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\n// --- Quickstart command ---\nprogram\n .command('quickstart')\n .description('Set up Recursiv on this machine (GitHub CLI + account + MCP for an AI client). ~3 min')\n .option(\n '--target <client>',\n 'Skip the client prompt and install MCP for this client (claude-code, claude-desktop, codex, opencode)',\n )\n .action(async (opts: { target?: string }) => {\n try {\n const { quickstartCommand } = await import('../commands/quickstart.js');\n const allowed = ['claude-code', 'claude-desktop', 'codex', 'opencode'] as const;\n const target = opts.target && (allowed as readonly string[]).includes(opts.target)\n ? (opts.target as typeof allowed[number])\n : undefined;\n await quickstartCommand({ target });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\n// --- MCP install command ---\nconst mcp = program.command('mcp').description('Manage MCP server integrations');\nmcp\n .command('install <target>')\n .description('Configure Recursiv MCP server for a host (claude-code, claude-desktop, codex, opencode)')\n .option('--api-key <key>', 'Recursiv API key (defaults to RECURSIV_API_KEY env var)')\n .option('--global', 'Install globally instead of project-level (claude-code, opencode)')\n .action(async (target: string, opts: { apiKey?: string; global?: boolean }) => {\n try {\n const { mcpInstallCommand } = await import('../commands/mcp-install.js');\n await mcpInstallCommand({ target, apiKey: opts.apiKey, global: opts.global });\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nmcp\n .command('verify')\n .description('Verify that the Recursiv MCP server starts and responds')\n .action(async () => {\n try {\n const { mcpVerifyCommand } = await import('../commands/mcp-install.js');\n await mcpVerifyCommand();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n });\n\nasync function launchChatAgent(opts?: { model?: string; resume?: boolean }): Promise<void> {\n const { startAgent } = await import('../chat/agent.js');\n const { readConfig } = await import('../lib/config.js');\n const { resolveRecursivKey, resolveAnthropicKey, saveCredentials } = await import('../lib/credentials.js');\n const { getOrCreateApiKey } = await import('../lib/auth-flow.js');\n const pc = (await import('picocolors')).default;\n const prompts = (await import('prompts')).default;\n\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n\n // --- Resolve Recursiv API key (auto-auth if missing) ---\n let recursivApiKey = await resolveRecursivKey(cwd);\n if (!recursivApiKey) {\n console.log();\n console.log(pc.bold(' Welcome to Recursiv'));\n console.log(pc.dim(' Let\\'s get you authenticated.'));\n console.log();\n\n recursivApiKey = await getOrCreateApiKey(baseUrl);\n if (!recursivApiKey) {\n console.error(pc.red(' error') + ' Authentication required to continue.');\n process.exit(1);\n }\n\n // Persist for future sessions\n await saveCredentials({ recursivApiKey });\n console.log(pc.dim(' Credentials saved to ~/.recursiv/credentials'));\n console.log();\n }\n\n // --- Resolve Anthropic API key (optional — enables full toolset) ---\n const anthropicApiKey = (await resolveAnthropicKey()) ?? undefined;\n\n await startAgent({\n recursivApiKey: recursivApiKey!,\n recursivBaseUrl: baseUrl,\n model: opts?.model,\n resume: opts?.resume,\n anthropicApiKey,\n });\n}\n\nfunction shouldAutoLaunchChat(args: string[]): boolean {\n // Explicit brain/studio env vars override\n if (process.env.RECURSIV_BRAIN === '1') return false;\n if (process.env.RECURSIV_STUDIO === '1') return false;\n // No args + TTY = launch chat agent\n if (args.length > 0) return false;\n if (!process.stdout.isTTY) return false;\n if (process.env.CI) return false;\n return true;\n}\n\nasync function main(): Promise<void> {\n const args = process.argv.slice(2);\n\n // Legacy --brain/--studio flags\n if (args.includes('--brain') || args.includes('--studio')) {\n const filtered = args.filter((arg) => arg !== '--brain' && arg !== '--studio');\n process.argv = [process.argv[0], process.argv[1], ...filtered];\n const noAnim = filtered.includes('--no-anim');\n await brainCommand({ anim: !noAnim });\n return;\n }\n\n // Default interactive mode: chat agent (replaces brain as default)\n if (shouldAutoLaunchChat(args)) {\n try {\n await launchChatAgent();\n } catch (err) {\n printCliError(err);\n process.exit(1);\n }\n return;\n }\n\n program.parse();\n}\n\nvoid main();\n","import pc from 'picocolors';\nimport { InsufficientCreditsError } from '@recursiv/sdk';\n\n/**\n * Format and print an error caught at a CLI command boundary.\n *\n * Special-cases `InsufficientCreditsError` (HTTP 402) so users see a clear\n * \"out of credits — upgrade here\" message instead of a raw API error string.\n * Every other error falls back to its message (or stringified form).\n */\nexport function printCliError(err: unknown): void {\n if (err instanceof InsufficientCreditsError) {\n console.error(pc.red(' Out of credits.'));\n console.error(` ${err.message.split('\\n')[0]}`);\n console.error(` Upgrade: ${pc.bold(pc.cyan(err.upgradeUrl))}`);\n return;\n }\n console.error(err instanceof Error ? err.message : err);\n}\n","import { existsSync } from 'node:fs';\nimport { mkdir, readFile, unlink, writeFile } from 'node:fs/promises';\nimport { resolve, basename } from 'node:path';\nimport { execSync } from 'node:child_process';\nimport prompts from 'prompts';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { log, banner } from '../lib/logger.js';\nimport { createConfig, writeConfig } from '../lib/config.js';\nimport { writeEnvFile } from '../lib/env.js';\nimport { cloneTemplate } from '../lib/templates.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { detectFromUserAgent, installCommand, runCommand } from '../lib/package-manager.js';\nimport { templates, type Template } from '../templates/registry.js';\n\nexport async function initCommand(nameArg?: string): Promise<void> {\n banner();\n\n const totalSteps = 7;\n\n // 1. Project name\n log.step(1, totalSteps, 'Project setup');\n let projectName: string;\n if (nameArg) {\n projectName = nameArg;\n } else {\n const { name } = await prompts(\n {\n type: 'text',\n name: 'name',\n message: 'Project name',\n initial: 'my-recursiv-app',\n validate: (v: string) => (v.trim() ? true : 'Name is required'),\n },\n { onCancel: () => process.exit(1) }\n );\n projectName = name;\n }\n\n const projectDir = resolve(process.cwd(), projectName);\n\n if (existsSync(projectDir)) {\n log.error(`Directory ${pc.bold(projectName)} already exists`);\n process.exit(1);\n }\n\n // 2. Template selection\n log.step(2, totalSteps, 'Choose a template');\n const templateChoices = templates.map((t) => ({\n title: t.recommended ? `${t.name} ${pc.dim('(recommended)')}` : t.name,\n description: t.description,\n value: t.id,\n }));\n\n const { templateId } = await prompts(\n {\n type: 'select',\n name: 'templateId',\n message: 'Template',\n choices: templateChoices,\n initial: 0,\n },\n { onCancel: () => process.exit(1) }\n );\n\n const template = templates.find((t) => t.id === templateId) as Template;\n\n // 3. API key\n log.step(3, totalSteps, 'Authentication');\n const apiKey = await getOrCreateApiKey('https://api.recursiv.io/api/v1');\n\n // 4. Clone template\n log.step(4, totalSteps, 'Creating project');\n await mkdir(projectDir, { recursive: true });\n await cloneTemplate(template, projectDir);\n\n // Fix: ensure next.config is valid JS (templates may ship TypeScript syntax in .mjs/.ts)\n const nextConfigTs = resolve(projectDir, 'next.config.ts');\n const nextConfigMjs = resolve(projectDir, 'next.config.mjs');\n const cleanNextConfig = '/** @type {import(\"next\").NextConfig} */\\nconst nextConfig = {};\\nexport default nextConfig;\\n';\n\n if (existsSync(nextConfigTs)) {\n await unlink(nextConfigTs);\n // Remove stale .mjs if template shipped both\n if (existsSync(nextConfigMjs)) await unlink(nextConfigMjs);\n await writeFile(nextConfigMjs, cleanNextConfig, 'utf-8');\n } else if (existsSync(nextConfigMjs)) {\n // Template may have .mjs with TypeScript syntax (import type) — replace it\n const content = await readFile(nextConfigMjs, 'utf-8');\n if (content.includes('import type') || content.includes(': NextConfig')) {\n await writeFile(nextConfigMjs, cleanNextConfig, 'utf-8');\n }\n }\n\n // 5. Write config files\n log.step(5, totalSteps, 'Writing config');\n const pm = detectFromUserAgent();\n\n const config = createConfig({\n name: projectName,\n template: template.id,\n framework: template.framework,\n port: template.devPort,\n devCommand: runCommand(pm, 'dev'),\n });\n await writeConfig(projectDir, config);\n\n if (apiKey) {\n await writeEnvFile(projectDir, apiKey);\n }\n\n // Write .gitignore if it doesn't exist\n const gitignorePath = resolve(projectDir, '.gitignore');\n if (!existsSync(gitignorePath)) {\n await writeFile(\n gitignorePath,\n ['node_modules', 'dist', '.env', '.env.local', '.next', '.turbo', ''].join('\\n'),\n 'utf-8'\n );\n }\n\n // 6. Install dependencies\n log.step(6, totalSteps, 'Installing dependencies');\n const installSpinner = ora(`Running ${pc.bold(installCommand(pm))}...`).start();\n try {\n execSync(installCommand(pm), {\n cwd: projectDir,\n stdio: 'pipe',\n timeout: 120_000,\n });\n installSpinner.succeed('Dependencies installed');\n } catch {\n installSpinner.warn('Could not install dependencies — run install manually');\n }\n\n // 7. Init git\n log.step(7, totalSteps, 'Initializing git');\n try {\n execSync('git init', { cwd: projectDir, stdio: 'pipe' });\n execSync('git add -A', { cwd: projectDir, stdio: 'pipe' });\n execSync('git commit -m \"Initial commit from create-recursiv-app\"', {\n cwd: projectDir,\n stdio: 'pipe',\n });\n log.success('Git repository initialized');\n } catch {\n log.warn('Could not initialize git repository');\n }\n\n // Done!\n log.blank();\n console.log(pc.bold(pc.green('Your Recursiv app is ready!')));\n log.blank();\n console.log(' Next steps:');\n console.log();\n console.log(` ${pc.dim('$')} cd ${projectName}`);\n if (!apiKey) {\n console.log(` ${pc.dim('$')} ${pc.dim('# Add your API key to .env')}`);\n }\n console.log(` ${pc.dim('$')} ${runCommand(pm, 'dev')}`);\n log.blank();\n console.log(pc.dim('Docs: https://docs.recursiv.io'));\n console.log(pc.dim('Dashboard: https://recursiv.io/dashboard'));\n log.blank();\n}\n","import degit from 'degit';\nimport ora from 'ora';\nimport type { Template } from '../templates/registry.js';\n\nexport async function cloneTemplate(template: Template, dest: string): Promise<void> {\n const spinner = ora(`Cloning ${template.name} template...`).start();\n try {\n const emitter = degit(template.repo, {\n cache: false,\n force: true,\n verbose: false,\n });\n\n await emitter.clone(dest);\n spinner.succeed(`Template cloned successfully`);\n } catch (err) {\n spinner.fail('Failed to clone template');\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Could not clone template from ${template.repo}.\\n` +\n `Make sure you have internet access and the repo exists.\\n` +\n `Details: ${message}`\n );\n }\n}\n","import { existsSync } from 'node:fs';\nimport { join } from 'node:path';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport function detectPackageManager(dir: string): PackageManager {\n if (existsSync(join(dir, 'bun.lockb')) || existsSync(join(dir, 'bun.lock'))) return 'bun';\n if (existsSync(join(dir, 'pnpm-lock.yaml'))) return 'pnpm';\n if (existsSync(join(dir, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\nexport function detectFromUserAgent(): PackageManager {\n const ua = process.env.npm_config_user_agent ?? '';\n if (ua.startsWith('bun')) return 'bun';\n if (ua.startsWith('pnpm')) return 'pnpm';\n if (ua.startsWith('yarn')) return 'yarn';\n return 'npm';\n}\n\nexport function installCommand(pm: PackageManager): string {\n return pm === 'yarn' ? 'yarn' : `${pm} install`;\n}\n\nexport function runCommand(pm: PackageManager, script: string): string {\n if (pm === 'npm') return `npm run ${script}`;\n return `${pm} ${script}`;\n}\n","export interface Template {\n id: string;\n name: string;\n description: string;\n repo: string;\n framework: string;\n devCommand: string;\n devPort: number;\n recommended?: boolean;\n}\n\nexport const templates: Template[] = [\n {\n id: 'nextjs',\n name: 'Next.js + Recursiv',\n description: 'Full-stack Next.js app with feeds, chat, and agents',\n repo: 'recursivlabs/template-nextjs',\n framework: 'nextjs',\n devCommand: 'next dev',\n devPort: 3000,\n recommended: true,\n },\n {\n id: 'node',\n name: 'Node.js + Express',\n description: 'Express API server with Recursiv SDK',\n repo: 'recursivlabs/template-node',\n framework: 'express',\n devCommand: 'node --watch src/index.js',\n devPort: 4000,\n },\n {\n id: 'vite',\n name: 'Vite + React',\n description: 'React SPA with social feed components',\n repo: 'recursivlabs/template-vite',\n framework: 'vite',\n devCommand: 'vite',\n devPort: 5173,\n },\n];\n\nexport function getTemplate(id: string): Template | undefined {\n return templates.find((t) => t.id === id);\n}\n\nexport function getDefaultTemplate(): Template {\n return templates.find((t) => t.recommended) ?? templates[0]!;\n}\n","import { spawn } from 'node:child_process';\nimport { resolve } from 'node:path';\nimport pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager, runCommand } from '../lib/package-manager.js';\n\nexport async function devCommand(opts: { port?: string }): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n log.info(`Run ${pc.bold('create-recursiv-app')} to create a new project`);\n process.exit(1);\n }\n\n const apiKey = await readApiKeyFromEnv(cwd);\n if (!apiKey) {\n log.warn('No RECURSIV_API_KEY found in .env — API calls will fail');\n }\n\n const pm = detectPackageManager(cwd);\n const port = opts.port ?? String(config.dev.port);\n const devCmd = config.dev.command || runCommand(pm, 'dev');\n\n // Build env vars to inject\n const env: Record<string, string> = {\n ...process.env,\n PORT: port,\n };\n\n if (apiKey) {\n env.RECURSIV_API_KEY = apiKey;\n }\n\n log.info(`Starting dev server on port ${pc.bold(port)}`);\n log.info(`Running: ${pc.dim(devCmd)}`);\n console.log();\n\n const [cmd, ...args] = devCmd.split(' ');\n const child = spawn(cmd!, args, {\n cwd,\n env,\n stdio: 'inherit',\n shell: true,\n });\n\n (child as any).on('close', (code: number | null) => {\n process.exit(code ?? 0);\n });\n\n // Forward signals\n const cleanup = () => {\n child.kill('SIGTERM');\n };\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n}\n","import { writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport pc from 'picocolors';\nimport ora from 'ora';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\n\ninterface DeployTarget {\n id: string;\n name: string;\n generate: (projectName: string, framework: string) => { file: string; content: string };\n}\n\nconst targets: DeployTarget[] = [\n {\n id: 'vercel',\n name: 'Vercel',\n generate: (name, framework) => ({\n file: 'vercel.json',\n content: JSON.stringify(\n {\n $schema: 'https://openapi.vercel.sh/vercel.json',\n projectSettings: {\n framework: framework === 'nextjs' ? 'nextjs' : framework === 'vite' ? 'vite' : null,\n },\n env: {\n RECURSIV_API_KEY: '@recursiv-api-key',\n },\n },\n null,\n 2\n ),\n }),\n },\n {\n id: 'docker',\n name: 'Docker',\n generate: (name, framework) => ({\n file: 'Dockerfile',\n content: [\n 'FROM node:20-slim AS base',\n 'WORKDIR /app',\n 'COPY package*.json ./',\n 'RUN npm ci --omit=dev',\n 'COPY . .',\n framework === 'nextjs' ? 'RUN npm run build' : '',\n framework === 'nextjs' ? 'EXPOSE 3000' : 'EXPOSE 4000',\n framework === 'nextjs'\n ? 'CMD [\"npm\", \"start\"]'\n : 'CMD [\"node\", \"src/index.js\"]',\n '',\n ]\n .filter(Boolean)\n .join('\\n'),\n }),\n },\n {\n id: 'render',\n name: 'Render',\n generate: (name, framework) => ({\n file: 'render.yaml',\n content: [\n 'services:',\n ` - type: web`,\n ` name: ${name}`,\n ` runtime: node`,\n ` buildCommand: npm install && npm run build`,\n framework === 'nextjs'\n ? ' startCommand: npm start'\n : ' startCommand: node src/index.js',\n ' envVars:',\n ' - key: RECURSIV_API_KEY',\n ' sync: false',\n '',\n ].join('\\n'),\n }),\n },\n {\n id: 'railway',\n name: 'Railway',\n generate: (name, framework) => ({\n file: 'railway.toml',\n content: [\n '[build]',\n 'builder = \"nixpacks\"',\n '',\n '[deploy]',\n framework === 'nextjs'\n ? 'startCommand = \"npm start\"'\n : 'startCommand = \"node src/index.js\"',\n 'healthcheckPath = \"/\"',\n '',\n ].join('\\n'),\n }),\n },\n];\n\nexport async function deployCommand(target: string): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n process.exit(1);\n }\n\n if (target === 'cloud') {\n log.info('Cloud deployment via Recursiv is coming soon');\n log.info(`For now, deploy to Vercel, Render, or Railway with ${pc.bold('recursiv deploy <target>')}`);\n return;\n }\n\n const deployTarget = targets.find((t) => t.id === target);\n if (!deployTarget) {\n log.error(`Unknown target: ${pc.bold(target)}`);\n log.info(`Available targets: ${targets.map((t) => t.id).join(', ')}, cloud`);\n process.exit(1);\n }\n\n const spinner = ora(`Generating ${deployTarget.name} config...`).start();\n const { file, content } = deployTarget.generate(\n config.project.name,\n config.project.framework\n );\n\n await writeFile(resolve(cwd, file), content + '\\n', 'utf-8');\n spinner.succeed(`Created ${pc.bold(file)}`);\n\n log.blank();\n log.info(`Remember to set ${pc.bold('RECURSIV_API_KEY')} in your ${deployTarget.name} environment`);\n}\n","import pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readApiKeyFromEnv, updateApiKeyInEnv } from '../lib/env.js';\nimport { getOrCreateApiKey } from '../lib/auth-flow.js';\nimport { readConfig } from '../lib/config.js';\nimport { resolveRecursivKey, saveCredentials } from '../lib/credentials.js';\n\nexport async function loginCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n\n const existing = await resolveRecursivKey(cwd);\n if (existing) {\n log.info(`Existing key found: ${pc.dim(maskKey(existing))}`);\n log.info('Enter a new key to replace it, or press Enter to keep it');\n }\n\n const apiKey = await getOrCreateApiKey(baseUrl);\n if (apiKey) {\n // Save globally to ~/.recursiv/credentials\n await saveCredentials({ recursivApiKey: apiKey });\n log.success('API key saved to ~/.recursiv/credentials');\n\n // Also save to project .env if one exists\n try {\n await updateApiKeyInEnv(cwd, apiKey);\n log.success('Also saved to .env');\n } catch {\n // No .env in this directory — that's fine\n }\n }\n}\n\nexport async function logoutCommand(): Promise<void> {\n // Clear global credentials\n await saveCredentials({ recursivApiKey: undefined });\n log.success('API key removed from ~/.recursiv/credentials');\n\n // Also clear project .env if present\n const cwd = process.cwd();\n const existing = await readApiKeyFromEnv(cwd);\n if (existing) {\n await updateApiKeyInEnv(cwd, '');\n log.success('Also removed from .env');\n }\n}\n\nexport async function whoamiCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const baseUrl = config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1';\n const apiKey = await resolveRecursivKey(cwd);\n\n if (!apiKey) {\n log.error('No API key found in .env');\n log.info(`Run ${pc.bold('recursiv auth login')} to set one`);\n return;\n }\n\n log.info(`Key: ${pc.dim(maskKey(apiKey))}`);\n\n try {\n const res = await fetch(`${baseUrl}/users/me`, {\n headers: {\n Authorization: `Bearer ${apiKey}`,\n Accept: 'application/json',\n },\n });\n\n if (!res.ok) {\n log.error('API key is invalid or expired');\n return;\n }\n\n const body = (await res.json()) as { data: { username?: string; email?: string } };\n if (body.data.username) log.info(`User: ${pc.bold(body.data.username)}`);\n if (body.data.email) log.info(`Email: ${body.data.email}`);\n } catch {\n log.warn('Could not reach API — check your network');\n }\n}\n\nfunction maskKey(key: string): string {\n if (key.length <= 12) return '****';\n return key.slice(0, 8) + '...' + key.slice(-4);\n}\n","import pc from 'picocolors';\nimport { log } from '../lib/logger.js';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager } from '../lib/package-manager.js';\nimport { getTemplate } from '../templates/registry.js';\n\nexport async function infoCommand(): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n\n if (!config) {\n log.error('No .recursiv.json found — are you in a Recursiv project?');\n log.info(`Run ${pc.bold('create-recursiv-app')} to create a new project`);\n process.exit(1);\n }\n\n const apiKey = await readApiKeyFromEnv(cwd);\n const pm = detectPackageManager(cwd);\n const template = getTemplate(config.project.template);\n\n console.log();\n console.log(pc.bold('Project Info'));\n console.log();\n console.log(` Name: ${pc.bold(config.project.name)}`);\n console.log(` Template: ${template?.name ?? config.project.template}`);\n console.log(` Framework: ${config.project.framework}`);\n console.log(` Dev port: ${config.dev.port}`);\n console.log(` Dev cmd: ${pc.dim(config.dev.command)}`);\n console.log(` Pkg mgr: ${pm}`);\n console.log(` API URL: ${pc.dim(config.api.baseUrl)}`);\n console.log(` API key: ${apiKey ? pc.green('configured') : pc.yellow('not set')}`);\n console.log(` Config: ${pc.dim('.recursiv.json v' + config.version)}`);\n console.log();\n\n // Connection check\n if (apiKey) {\n try {\n const res = await fetch(`${config.api.baseUrl}/users/me`, {\n headers: { Authorization: `Bearer ${apiKey}`, Accept: 'application/json' },\n });\n if (res.ok) {\n log.success('API connection OK');\n } else {\n log.warn(`API returned ${res.status} — key may be invalid`);\n }\n } catch {\n log.warn('Could not reach API');\n }\n }\n}\n","import React from 'react';\nimport { render } from 'ink';\nimport { readConfig } from '../lib/config.js';\nimport { readApiKeyFromEnv } from '../lib/env.js';\nimport { detectPackageManager } from '../lib/package-manager.js';\nimport { App, type ProjectSnapshot } from '../ui/app.js';\n\nexport async function brainCommand(opts: { anim?: boolean }): Promise<void> {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n const apiKey = await readApiKeyFromEnv(cwd);\n const packageManager = detectPackageManager(cwd);\n\n const snapshot: ProjectSnapshot | null = config\n ? {\n name: config.project.name,\n template: config.project.template,\n framework: config.project.framework,\n port: config.dev.port,\n devCommand: config.dev.command,\n apiBaseUrl: config.api.baseUrl,\n apiKeyConfigured: Boolean(apiKey),\n packageManager,\n }\n : null;\n\n const app = render(<App snapshot={snapshot} animate={opts.anim !== false} />);\n\n await app.waitUntilExit();\n}\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { Box, Text, useApp, useInput, useStdout, type Key } from 'ink';\n\nexport type ProjectSnapshot = {\n name: string;\n template: string;\n framework: string;\n port: number;\n devCommand: string;\n apiBaseUrl: string;\n apiKeyConfigured: boolean;\n packageManager: string;\n} | null;\n\ntype TabKey = 'overview' | 'commands' | 'stack';\ntype Glow = 'none' | 'soft' | 'strong';\n\nconst TABS: { key: TabKey; label: string }[] = [\n { key: 'overview', label: 'Overview' },\n { key: 'commands', label: 'Commands' },\n { key: 'stack', label: 'App' },\n];\n\nconst THEME = {\n accent: '#1FE4C6',\n accentWarm: '#F6D47A',\n accentCool: '#4DB6FF',\n muted: '#6F7C8A',\n bright: '#E9FFFA',\n danger: '#FF6B6B',\n};\n\nconst WORDMARK_COLORS = ['cyan', 'blue', 'yellow'];\nconst WORDMARK_LINES = [\n '#### #### ### ##### # #',\n '# # # # # # # ## #',\n '#### #### ##### # # # #',\n '# # # # # # # # ##',\n '#### # # # # ##### # #',\n];\n\nconst HERO_LINES = [\n 'Neurons, particles, waves.',\n 'The brain behind Recursiv.',\n 'Signals in motion, products alive.',\n 'A living map of your platform.',\n 'Bioluminescent systems in sync.',\n];\n\nconst COPY: Record<TabKey, string> = {\n overview: `# Social.dev Brain\nA neural CLI reflection of your product surface with neurons, particles, and waves.\n\n## What it shows\n- Branded networks, communities, posts, and reactions\n- Real-time chat with human + AI agent threads\n- Tool-enabled agents with sandboxes and integrations\n- Deployments, storage buckets, and databases\n\n## Flow\n1. Create a project\n2. Run dev locally\n3. Deploy anywhere`,\n commands: `# Command Deck\n- \\`recursiv\\` runs Brain when interactive\n- \\`recursiv brain\\`\n- \\`RECURSIV_BRAIN=1 recursiv\\`\n- \\`RECURSIV_BRAIN=0 recursiv\\`\n- \\`recursiv create my-app\\`\n- \\`recursiv dev --port 3000\\`\n- \\`recursiv deploy <target>\\`\n- \\`recursiv auth login | logout | whoami\\`\n- \\`recursiv info\\`\n- \\`recursiv users me\\`\n- \\`recursiv communities list\\`\n- \\`recursiv posts list\\`\n- \\`recursiv agents list\\``,\n stack: `# App Reflection\n## Client\n- React Native + Expo\n- NativeWind + Tailwind\n\n## Backend\n- Hono + tRPC\n- Better Auth\n\n## Data + Realtime\n- PostgreSQL + Drizzle ORM\n- Socket.IO + optional Redis adapter\n\n## Agents\n- Composio + E2B + OpenRouter`,\n};\n\nconst PULSE_FRAMES = ['spark', 'pulse', 'sync', 'bloom'];\nconst DOT_FRAMES = ['.', '..', '...'];\nconst BAR_FRAMES = ['[~ ]', '[~~ ]', '[~~~ ]', '[ ~~~~ ]', '[ ~~~~]', '[ ~~~]', '[ ~~]', '[ ~]'];\nconst AURORA_COLORS = ['#1FE4C6', '#4DB6FF', '#8AF0FF', '#F6D47A'];\nconst AURORA_COLORS_DEEP = ['#0C2236', '#12314C', '#1E3A5F'];\n\nconst QUICK_ACTIONS = [\n 'recursiv brain',\n 'create-recursiv-app my-app',\n 'recursiv dev --port 3000',\n 'recursiv users me',\n 'recursiv deploy vercel',\n];\n\nconst HINTS = ['Tab or arrows to switch tabs.', '1/2/3 to jump instantly.', 'q or Esc to exit.'];\n\nconst INTEGRATIONS = ['Composio', 'E2B', 'OpenRouter'];\n\nconst INTRO_DURATION_MS = 5200;\nconst INTRO_STEPS = [\n 'Igniting cortex',\n 'Mapping synapses',\n 'Charging particles',\n 'Calibrating agents',\n 'Locking signal',\n];\nconst INTRO_HINTS = ['Press Space to skip', 'Press q to exit'];\n\nexport function App(props: { snapshot: ProjectSnapshot; animate: boolean }): React.ReactElement {\n const { snapshot, animate } = props;\n const { exit } = useApp();\n const { stdout } = useStdout();\n const [tab, setTab] = useState<TabKey>('overview');\n const [introActive, setIntroActive] = useState<boolean>(animate);\n\n const columns = stdout?.columns ?? process.stdout.columns ?? 100;\n const isNarrow = columns < 100;\n const fieldWidth = isNarrow ? Math.max(12, columns - 6) : 26;\n const fieldHeight = isNarrow ? 6 : 10;\n const navWidth = isNarrow ? undefined : 26;\n const infoWidth = isNarrow ? undefined : 34;\n\n const pulseIndex = useTicker(animate, 700, PULSE_FRAMES.length);\n const dotIndex = useTicker(animate, 450, DOT_FRAMES.length);\n const heroIndex = useTicker(animate, 2200, HERO_LINES.length);\n const barIndex = useTicker(animate, 140, BAR_FRAMES.length);\n const sweepIndex = useTicker(animate, 60, Math.max(10, Math.min(columns - 4, 120)));\n const scanIndex = useTicker(animate, 320, 9);\n const introProgress = useProgress(introActive && animate, INTRO_DURATION_MS, 80);\n const introFrame = useTicker(introActive && animate, 60, Math.max(10, columns - 6));\n\n const pulse = PULSE_FRAMES[pulseIndex];\n const dots = DOT_FRAMES[dotIndex];\n const hero = HERO_LINES[heroIndex];\n const bar = BAR_FRAMES[barIndex];\n\n useEffect(() => {\n if (!animate) {\n setIntroActive(false);\n return;\n }\n setIntroActive(true);\n const id = setTimeout(() => setIntroActive(false), INTRO_DURATION_MS);\n return () => clearTimeout(id);\n }, [animate]);\n\n useInput((input: string, key: Key) => {\n if (input === 'q' || key.escape) {\n exit();\n return;\n }\n\n if (introActive) {\n if (input === ' ' || key.return || input === 's') {\n setIntroActive(false);\n }\n return;\n }\n\n if (key.tab || key.rightArrow) {\n const next = (tabIndex(tab) + 1) % TABS.length;\n setTab(TABS[next].key);\n return;\n }\n\n if (key.leftArrow) {\n const prev = (tabIndex(tab) - 1 + TABS.length) % TABS.length;\n setTab(TABS[prev].key);\n return;\n }\n\n if (input === '1') setTab('overview');\n if (input === '2') setTab('commands');\n if (input === '3') setTab('stack');\n });\n\n if (introActive) {\n return (\n <IntroScreen\n width={columns}\n height={Math.max(14, fieldHeight + 6)}\n progress={introProgress}\n frame={introFrame}\n />\n );\n }\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Header\n hero={hero}\n pulse={pulse}\n dots={dots}\n bar={bar}\n sweep={sweepIndex}\n width={columns}\n animate={animate}\n />\n\n <Box marginTop={1} flexDirection={isNarrow ? 'column' : 'row'}>\n <Box\n flexDirection=\"column\"\n width={navWidth}\n marginRight={isNarrow ? 0 : 2}\n marginBottom={isNarrow ? 1 : 0}\n >\n <Panel title=\"Brain Map\" accent={THEME.accent} borderStyle=\"round\">\n <NeuralField width={fieldWidth} height={fieldHeight} frame={sweepIndex} animate={animate} />\n <Text color={THEME.muted}>* neuron o synapse + particle ~ wave</Text>\n <Divider width={fieldWidth} />\n <SectionTitle label=\"Navigator\" />\n <Navigation active={tab} />\n <Divider />\n <SectionTitle label=\"Quick Actions\" />\n {QUICK_ACTIONS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n <Divider />\n <SectionTitle label=\"Hints\" />\n {HINTS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n </Panel>\n </Box>\n\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n marginRight={isNarrow ? 0 : 2}\n marginBottom={isNarrow ? 1 : 0}\n >\n <Panel title={tabTitle(tab)} accent={THEME.accentWarm} borderStyle=\"double\">\n <AnimatedMarkdown content={COPY[tab]} animate={animate} />\n </Panel>\n </Box>\n\n <Box flexDirection=\"column\" width={infoWidth}>\n <Panel title=\"Synapses\" accent={THEME.accentCool} borderStyle=\"round\">\n <ProjectPanel snapshot={snapshot} animate={animate} dots={dots} frame={sweepIndex} scanIndex={scanIndex} />\n </Panel>\n </Box>\n </Box>\n\n <Footer snapshot={snapshot} animate={animate} />\n </Box>\n );\n}\n\nfunction Header(props: {\n hero: string;\n pulse: string;\n dots: string;\n bar: string;\n sweep: number;\n width: number;\n animate: boolean;\n}): React.ReactElement {\n const { hero, pulse, dots, bar, sweep, width, animate } = props;\n const lineWidth = Math.max(32, Math.min(width - 4, 120));\n const pulseLabel = animate ? `${pulse}${dots}` : 'ready';\n const time = new Date().toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });\n const wordmarkPalette = rotatePalette(WORDMARK_COLORS, sweep);\n\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Wordmark lines={WORDMARK_LINES} palette={wordmarkPalette} />\n <Text color={THEME.muted}>{hero}</Text>\n <Text color={THEME.muted}>by Recursiv</Text>\n <Box marginTop={1} flexDirection=\"row\">\n <Box marginRight={2}>\n <StatusPill label=\"brain\" value={pulseLabel} tone={THEME.accent} />\n </Box>\n <Box marginRight={2}>\n <StatusPill label=\"clock\" value={time} tone={THEME.accentWarm} />\n </Box>\n <StatusPill label=\"waves\" value={bar} tone={THEME.accentCool} />\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n <Aurora width={lineWidth} frame={sweep} />\n </Box>\n <Box marginTop={1}>\n <AccentLine width={lineWidth} frame={sweep} />\n </Box>\n </Box>\n );\n}\n\nfunction Footer(props: { snapshot: ProjectSnapshot; animate: boolean }): React.ReactElement {\n const { snapshot, animate } = props;\n const projectHint = snapshot ? `${snapshot.name}` : 'no project loaded';\n const status = animate ? 'brain live' : 'brain ready';\n\n return (\n <Box marginTop={1} flexDirection=\"row\" justifyContent=\"space-between\">\n <Text color={THEME.muted}>Tab to switch | 1/2/3 to jump | q to quit</Text>\n <Text color={THEME.muted}>\n {status} | {projectHint}\n </Text>\n </Box>\n );\n}\n\nfunction Panel(props: {\n title: string;\n accent: string;\n borderStyle?: 'single' | 'double' | 'round' | 'classic';\n children: React.ReactNode;\n}): React.ReactElement {\n const { title, accent, borderStyle = 'round', children } = props;\n return (\n <Box flexDirection=\"column\" borderStyle={borderStyle} borderColor={accent} paddingX={1} paddingY={1}>\n <Text color={accent}>{title}</Text>\n <Box flexDirection=\"column\" marginTop={1}>\n {children as any}\n </Box>\n </Box>\n );\n}\n\nfunction SectionTitle(props: { label: string }): React.ReactElement {\n return <Text color={THEME.accentWarm}>{props.label}</Text>;\n}\n\nfunction Navigation(props: { active: TabKey }): React.ReactElement {\n const { active } = props;\n return (\n <Box flexDirection=\"column\">\n {TABS.map((tab, index) => {\n const isActive = tab.key === active;\n const marker = isActive ? '>' : ' ';\n const color = isActive ? THEME.accent : THEME.muted;\n return (\n <Text key={tab.key} color={color}>\n {marker} {index + 1}. {tab.label}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction NeuralField(props: { width: number; height: number; frame: number; animate: boolean }): React.ReactElement {\n const { width, height, frame, animate } = props;\n const lines = useMemo(() => buildNeuralField(width, height, animate ? frame : 0), [width, height, frame, animate]);\n\n return (\n <Box flexDirection=\"column\">\n {lines.map((line, index) => {\n const tone =\n line.includes('~') ||\n line.includes('*') ||\n line.includes('+') ||\n line.includes('o') ||\n line.includes('O')\n ? THEME.accentCool\n : THEME.muted;\n return (\n <Text key={index} color={tone}>\n {line}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction ProjectPanel(props: {\n snapshot: ProjectSnapshot;\n animate: boolean;\n dots: string;\n frame: number;\n scanIndex: number;\n}): React.ReactElement {\n const { snapshot, animate, dots, frame, scanIndex } = props;\n\n if (!snapshot) {\n return (\n <Box flexDirection=\"column\">\n <Text color={THEME.accentWarm}>Not in a Recursiv project.</Text>\n <Text color={THEME.muted}>Run create-recursiv-app to start.</Text>\n </Box>\n );\n }\n\n const status = animate ? `firing${dots}` : 'quiet';\n const apiStatus = snapshot.apiKeyConfigured ? 'linked' : 'missing';\n const apiTone = snapshot.apiKeyConfigured ? THEME.accentCool : THEME.danger;\n const meter = buildPulseMeter(animate ? frame : 0, 16);\n\n const fields = [\n { label: 'Name', value: snapshot.name },\n { label: 'Template', value: snapshot.template },\n { label: 'Framework', value: snapshot.framework },\n { label: 'Dev port', value: String(snapshot.port) },\n { label: 'Pkg mgr', value: snapshot.packageManager },\n { label: 'API base', value: snapshot.apiBaseUrl, dim: true },\n { label: 'API key', value: apiStatus, tone: apiTone },\n { label: 'Status', value: status, tone: THEME.accent },\n { label: 'Pulse', value: meter, tone: THEME.accentWarm },\n ];\n\n const activeIndex = fields.length > 0 ? scanIndex % fields.length : 0;\n const scanBar = buildScanBar(activeIndex, 18);\n\n return (\n <Box flexDirection=\"column\">\n {fields.map((field, index) => {\n const distance = Math.min(\n Math.abs(index - activeIndex),\n fields.length - Math.abs(index - activeIndex),\n );\n const glow: Glow = animate && distance === 0 ? 'strong' : animate && distance === 1 ? 'soft' : 'none';\n\n return (\n <Field\n key={field.label}\n label={field.label}\n value={field.value}\n dim={field.dim}\n tone={field.tone}\n glow={glow}\n />\n );\n })}\n <Text color={THEME.accentCool}>Neural scan {scanBar}</Text>\n <Divider />\n <SectionTitle label=\"Integrations\" />\n {INTEGRATIONS.map((item) => (\n <Text key={item} color={THEME.muted}>\n - {item}\n </Text>\n ))}\n <Divider />\n <Text color={THEME.muted}>Dev cmd:</Text>\n <Text color={THEME.muted}>{snapshot.devCommand}</Text>\n </Box>\n );\n}\n\nfunction Field(props: { label: string; value: string; dim?: boolean; tone?: string; glow?: Glow }): React.ReactElement {\n const { label, value, dim, tone, glow = 'none' } = props;\n const marker = glow === 'strong' ? '>' : glow === 'soft' ? '-' : ' ';\n const paddedLabel = `${marker} ${label.padEnd(9, ' ')}`;\n const labelColor = glow === 'strong' ? THEME.accentWarm : glow === 'soft' ? THEME.accent : THEME.muted;\n const valueColor =\n glow === 'strong'\n ? THEME.bright\n : glow === 'soft'\n ? THEME.accentCool\n : tone ?? (dim ? THEME.muted : undefined);\n\n return (\n <Text>\n <Text color={labelColor}>{paddedLabel}</Text>\n <Text color={valueColor}>{value}</Text>\n </Text>\n );\n}\n\nfunction StatusPill(props: { label: string; value: string; tone: string }): React.ReactElement {\n const { label, value, tone } = props;\n return (\n <Text color={tone}>\n [{label}: {value}]\n </Text>\n );\n}\n\nfunction Wordmark(props: { lines: string[]; palette: string[] }): React.ReactElement {\n const { lines, palette } = props;\n return (\n <Box flexDirection=\"column\" alignItems=\"center\">\n {lines.map((line, index) => (\n <Text key={index} color={palette[index % palette.length] ?? THEME.accent}>\n {line}\n </Text>\n ))}\n </Box>\n );\n}\n\nfunction ColorLine(props: { text: string; color: string }): React.ReactElement {\n return <Text color={props.color}>{props.text}</Text>;\n}\n\nfunction Aurora(props: { width: number; frame: number }): React.ReactElement {\n const { width, frame } = props;\n const lineWidth = Math.max(18, width);\n const lineA = buildAuroraLine(lineWidth, frame, 0);\n const lineB = buildInterferenceLine(lineWidth, frame + 7, 1);\n const lineC = buildAuroraLine(lineWidth, frame + 13, 2);\n const lineD = buildNeuronHalo(lineWidth, frame);\n const palette = rotatePalette(AURORA_COLORS, frame);\n const deepPalette = rotatePalette(AURORA_COLORS_DEEP, frame);\n\n return (\n <Box flexDirection=\"column\">\n <ColorLine text={lineA} color={palette[0]} />\n <ColorLine text={lineB} color={deepPalette[0]} />\n <ColorLine text={lineC} color={palette[1] ?? palette[0]} />\n <ColorLine text={lineD} color={palette[2] ?? palette[0]} />\n </Box>\n );\n}\n\nfunction Divider(props: { width?: number } = {}): React.ReactElement {\n const { width } = props;\n const lineWidth = Math.max(12, Math.min(32, width ?? 22));\n return <Text color={THEME.muted}>{'-'.repeat(lineWidth)}</Text>;\n}\n\nfunction AccentLine(props: { width: number; frame: number }): React.ReactElement {\n const { width, frame } = props;\n const lineWidth = Math.max(10, width);\n const head = Math.min(frame % lineWidth, lineWidth - 1);\n const left = '-'.repeat(head);\n const right = '-'.repeat(Math.max(0, lineWidth - head - 1));\n\n return (\n <Text color={THEME.muted}>\n {left}\n <Text color={THEME.accent}>*</Text>\n {right}\n </Text>\n );\n}\n\nfunction AnimatedMarkdown(props: { content: string; animate: boolean }): React.ReactElement {\n const { content, animate } = props;\n const safe = useMemo(() => content.replace(/\\r\\n/g, '\\n'), [content]);\n const lines = useMemo(() => safe.split('\\n'), [safe]);\n const [visibleLines, setVisibleLines] = useState(animate ? 1 : lines.length);\n\n useEffect(() => {\n if (!animate) {\n setVisibleLines(lines.length);\n return;\n }\n\n setVisibleLines(1);\n const id = setInterval(() => {\n setVisibleLines((current) => (current >= lines.length ? current : current + 1));\n }, 55);\n\n return () => clearInterval(id);\n }, [animate, lines.length, safe]);\n\n const sliceCount = Math.max(1, visibleLines);\n const text = animate ? lines.slice(0, sliceCount).join('\\n') : safe;\n\n return <MarkdownBlock content={text} />;\n}\n\nfunction MarkdownBlock(props: { content: string }): React.ReactElement {\n const lines = props.content.split('\\n');\n return (\n <Box flexDirection=\"column\">\n {lines.map((line, index) => {\n if (line.startsWith('### ')) {\n return (\n <Text key={index} color={THEME.accentCool}>\n {line.slice(4)}\n </Text>\n );\n }\n if (line.startsWith('## ')) {\n return (\n <Text key={index} color={THEME.accentWarm}>\n {line.slice(3)}\n </Text>\n );\n }\n if (line.startsWith('# ')) {\n return (\n <Text key={index} color={THEME.accent}>\n {line.slice(2)}\n </Text>\n );\n }\n if (line.startsWith('- ')) {\n return (\n <Text key={index} color={THEME.muted}>\n - {line.slice(2)}\n </Text>\n );\n }\n if (/^\\d+\\.\\s/.test(line)) {\n return (\n <Text key={index} color={THEME.muted}>\n {line}\n </Text>\n );\n }\n if (line.trim().length === 0) {\n return <Text key={index}> </Text>;\n }\n return (\n <Text key={index} color={THEME.bright}>\n {line}\n </Text>\n );\n })}\n </Box>\n );\n}\n\nfunction useTicker(animate: boolean, intervalMs: number, length: number): number {\n const [tick, setTick] = useState(0);\n\n useEffect(() => {\n if (!animate || length <= 0) {\n setTick(0);\n return;\n }\n\n const id = setInterval(() => {\n setTick((current) => (current + 1) % length);\n }, intervalMs);\n\n return () => clearInterval(id);\n }, [animate, intervalMs, length]);\n\n return tick;\n}\n\nfunction tabIndex(tab: TabKey): number {\n return TABS.findIndex((item) => item.key === tab);\n}\n\nfunction tabTitle(tab: TabKey): string {\n const active = TABS.find((item) => item.key === tab);\n return active ? active.label : 'Overview';\n}\n\nfunction buildNeuralField(width: number, height: number, frame: number): string[] {\n const safeWidth = Math.max(8, width);\n const safeHeight = Math.max(4, height);\n const grid: string[][] = Array.from({ length: safeHeight }, () => Array(safeWidth).fill(' '));\n const phase = Math.floor(frame / 6);\n const rng = makeRng(phase * 109 + 97);\n const nodes: Array<{ x: number; y: number }> = [];\n\n const place = (x: number, y: number, char: string, priority = 0): void => {\n if (x < 0 || x >= safeWidth || y < 0 || y >= safeHeight) return;\n const current = grid[y][x];\n const currentPriority = current === '*' || current === 'O' ? 3 : current === 'o' ? 2 : current === '~' ? 1 : 0;\n if (priority >= currentPriority || current === ' ') {\n grid[y][x] = char;\n }\n };\n\n for (let y = 0; y < safeHeight; y += 1) {\n for (let x = 0; x < safeWidth; x += 1) {\n const roll = rng();\n if (roll < 0.018) {\n grid[y][x] = '*';\n nodes.push({ x, y });\n } else if (roll < 0.04) {\n grid[y][x] = 'o';\n nodes.push({ x, y });\n } else if (roll < 0.12) {\n grid[y][x] = '.';\n }\n }\n }\n\n const mid = Math.floor(safeHeight / 2);\n const amp = Math.max(1, Math.floor(safeHeight / 3));\n for (let x = 0; x < safeWidth; x += 1) {\n const y = Math.round(mid + Math.sin((x + frame * 0.6) / 3) * amp);\n place(x, y, '~', 1);\n if ((x + frame) % 11 === 0) place(x, y, '*', 3);\n }\n\n const mid2 = Math.floor(safeHeight / 3);\n const amp2 = Math.max(1, Math.floor(safeHeight / 4));\n for (let x = 0; x < safeWidth; x += 1) {\n const y = Math.round(mid2 + Math.sin((x + frame * 0.4) / 2.6) * amp2);\n place(x, y, '~', 1);\n if ((x + frame * 2) % 17 === 0) place(x, y, 'o', 2);\n }\n\n const particleCount = Math.max(2, Math.floor(safeWidth / 12));\n for (let i = 0; i < particleCount; i += 1) {\n const particleX = (frame * (i + 2) + i * 7) % safeWidth;\n const particleY = (frame * (i + 3) + i * 5) % safeHeight;\n place(particleX, particleY, '+', 2);\n }\n\n nodes.forEach((node) => {\n if (rng() < 0.35) {\n const length = 2 + Math.floor(rng() * 6);\n const drift = rng() < 0.5 ? 1 : -1;\n for (let step = 1; step <= length; step += 1) {\n const x = node.x + step;\n const y = node.y + (rng() < 0.3 ? drift : 0);\n place(x, y, rng() < 0.5 ? '-' : '=', 0);\n }\n }\n if ((node.x + frame) % 14 === 0) {\n place(node.x, node.y, 'O', 3);\n }\n });\n\n return grid.map((row) => row.join(''));\n}\n\nfunction buildAuroraLine(width: number, frame: number, offset: number): string {\n const safeWidth = Math.max(10, width);\n const chars = [' ', ' ', '.', ':', '-', '=', '+', '*'];\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const phase = (x + frame * 0.9 + offset * 7) / 4;\n const wave = Math.sin(phase) * 0.6 + Math.sin(phase / 2 + offset) * 0.4 + 1;\n const normalized = Math.max(0, Math.min(1, wave / 2));\n const idx = Math.min(chars.length - 1, Math.floor(normalized * (chars.length - 1)));\n line += chars[idx];\n }\n return line;\n}\n\nfunction buildInterferenceLine(width: number, frame: number, offset: number): string {\n const safeWidth = Math.max(10, width);\n const chars = [' ', '.', ':', '-', '=', '+', '*', '#'];\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const waveA = Math.sin((x + frame * 0.6 + offset * 5) / 3);\n const waveB = Math.sin((x * 0.6 + frame * 0.3) / 2.1);\n const waveC = Math.sin((x * 1.2 + frame * 0.9) / 4.6);\n const mix = (waveA + waveB + waveC + 3) / 6;\n const idx = Math.min(chars.length - 1, Math.floor(mix * (chars.length - 1)));\n line += chars[idx];\n }\n return line;\n}\n\nfunction buildNeuronHalo(width: number, frame: number): string {\n const safeWidth = Math.max(10, width);\n const rng = makeRng((Math.floor(frame / 4) + 11) * 233);\n let line = '';\n for (let x = 0; x < safeWidth; x += 1) {\n const roll = rng();\n if (roll < 0.04) line += '*';\n else if (roll < 0.08) line += 'o';\n else if (roll < 0.11) line += '.';\n else line += ' ';\n }\n return line;\n}\n\nfunction buildPulseMeter(frame: number, width: number): string {\n const safeWidth = Math.max(8, width);\n const head = frame % safeWidth;\n let line = '';\n for (let i = 0; i < safeWidth; i += 1) {\n if (i === head) {\n line += '*';\n } else if (Math.abs(i - head) === 1) {\n line += '+';\n } else if ((i + frame) % 5 === 0) {\n line += '-';\n } else {\n line += '.';\n }\n }\n return line;\n}\n\nfunction buildScanBar(position: number, width: number): string {\n const safeWidth = Math.max(8, width);\n if (position < 0) return '[' + '.'.repeat(safeWidth) + ']';\n const head = position % safeWidth;\n let line = '';\n for (let i = 0; i < safeWidth; i += 1) {\n if (i === head) line += '>';\n else if (Math.abs(i - head) === 1) line += '=';\n else line += '.';\n }\n return `[${line}]`;\n}\n\nfunction makeRng(seed: number): () => number {\n let state = seed >>> 0;\n return () => {\n state = (state * 1664525 + 1013904223) >>> 0;\n return state / 4294967295;\n };\n}\n\nfunction rotatePalette(palette: string[], frame: number): string[] {\n if (palette.length === 0) return palette;\n const offset = frame % palette.length;\n return [...palette.slice(offset), ...palette.slice(0, offset)];\n}\n\nfunction useProgress(active: boolean, durationMs: number, stepMs: number): number {\n const [progress, setProgress] = useState(active ? 0 : 1);\n\n useEffect(() => {\n if (!active) {\n setProgress(1);\n return;\n }\n\n setProgress(0);\n const start = Date.now();\n const id = setInterval(() => {\n const value = Math.min(1, (Date.now() - start) / durationMs);\n setProgress(value);\n if (value >= 1) clearInterval(id);\n }, stepMs);\n\n return () => clearInterval(id);\n }, [active, durationMs, stepMs]);\n\n return progress;\n}\n\nfunction IntroScreen(props: { width: number; height: number; progress: number; frame: number }): React.ReactElement {\n const { width, height, progress, frame } = props;\n const fieldWidth = Math.max(24, width - 6);\n const fieldHeight = Math.max(10, Math.min(14, height));\n const steps = INTRO_STEPS.map((label, index) => ({\n label,\n done: progress >= (index + 1) / INTRO_STEPS.length,\n }));\n const bar = buildProgressBar(progress, Math.max(16, Math.min(34, Math.floor(width / 3))));\n const palette = rotatePalette(WORDMARK_COLORS, frame);\n\n return (\n <Box flexDirection=\"column\" paddingX={1} paddingY={1}>\n <Box flexDirection=\"column\" alignItems=\"center\">\n <Wordmark lines={WORDMARK_LINES} palette={palette} />\n <Text color={THEME.muted}>Neural ignition sequence</Text>\n </Box>\n <Box marginTop={1} flexDirection=\"column\" alignItems=\"center\">\n <ColorLine text={bar} color={THEME.accentWarm} />\n </Box>\n <Box marginTop={1} flexDirection=\"column\">\n {steps.map((step, index) => (\n <Text key={index} color={step.done ? THEME.accent : THEME.muted}>\n [{step.done ? 'x' : ' '}] {step.label}\n </Text>\n ))}\n </Box>\n <Box marginTop={1}>\n <NeuralField width={fieldWidth} height={fieldHeight} frame={frame} animate />\n </Box>\n <Box marginTop={1}>\n {INTRO_HINTS.map((hint) => (\n <Text key={hint} color={THEME.muted}>\n {hint}\n </Text>\n ))}\n </Box>\n </Box>\n );\n}\n\nfunction buildProgressBar(progress: number, width: number): string {\n const safeWidth = Math.max(10, width);\n const filled = Math.round(progress * safeWidth);\n const left = '='.repeat(filled);\n const right = '.'.repeat(Math.max(0, safeWidth - filled));\n return `[${left}${right}]`;\n}\n","import { brainCommand } from './brain.js';\n\nexport async function studioCommand(opts: { anim?: boolean }): Promise<void> {\n await brainCommand(opts);\n}\n","import pc from 'picocolors';\nimport { BrowserUse } from 'browser-use-sdk';\n\ninterface BrowserUseRunOptions {\n task?: string;\n startUrl?: string;\n maxSteps?: string;\n wait?: boolean;\n json?: boolean;\n}\n\ninterface BrowserUseMcpSnippetOptions {\n target?: string;\n}\n\nfunction getClient(): BrowserUse {\n const apiKey = process.env.BROWSER_USE_API_KEY;\n if (!apiKey) {\n throw new Error('BROWSER_USE_API_KEY is required');\n }\n\n return new BrowserUse({\n apiKey,\n baseUrl: process.env.BROWSER_USE_BASE_URL || undefined,\n });\n}\n\nexport async function browserUseRunCommand(opts: BrowserUseRunOptions): Promise<void> {\n if (!opts.task) {\n throw new Error('--task is required');\n }\n\n const client = getClient();\n const result = await client.run(opts.task, {\n startUrl: opts.startUrl,\n maxSteps: opts.maxSteps ? Number.parseInt(opts.maxSteps, 10) : undefined,\n timeout: opts.wait === false ? 10_000 : 300_000,\n });\n\n if (opts.json) {\n console.log(JSON.stringify(result, null, 2));\n return;\n }\n\n console.log(pc.green('Browser Use task complete'));\n console.log(`${pc.dim('Task:')} ${opts.task}`);\n console.log(`${pc.dim('Status:')} ${result.status}`);\n if (result.output) {\n console.log(`${pc.dim('Output:')} ${String(result.output)}`);\n }\n}\n\nexport async function browserUseMcpSnippetCommand(opts: BrowserUseMcpSnippetOptions): Promise<void> {\n const target = opts.target || 'generic';\n\n if (target === 'generic') {\n console.log(JSON.stringify({\n name: 'browser-use',\n transport: 'streamable-http',\n url: 'https://api.browser-use.com/mcp',\n headers: {\n Authorization: 'Bearer ${BROWSER_USE_API_KEY}',\n },\n }, null, 2));\n return;\n }\n\n if (target === 'codex') {\n console.log([\n '[mcp_servers.browser_use]',\n 'url = \"https://api.browser-use.com/mcp\"',\n '',\n '[mcp_servers.browser_use.http_headers]',\n 'Authorization = \"Bearer ${BROWSER_USE_API_KEY}\"',\n ].join('\\n'));\n return;\n }\n\n if (target === 'claude-code') {\n console.log(JSON.stringify({\n mcpServers: {\n 'browser-use': {\n type: 'http',\n url: 'https://api.browser-use.com/mcp',\n headers: {\n Authorization: 'Bearer ${BROWSER_USE_API_KEY}',\n },\n },\n },\n }, null, 2));\n return;\n }\n\n throw new Error(`Unsupported target \"${target}\". Use generic, codex, or claude-code.`);\n}\n","import pc from 'picocolors';\nimport { apiRequest, getApiContext } from '../lib/api.js';\nimport { log } from '../lib/logger.js';\n\ntype ListOpts = {\n limit?: string;\n offset?: string;\n json?: boolean;\n};\n\nexport async function usersMeCommand(opts: { json?: boolean }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, { method: 'GET', path: 'users/me' });\n output(res, opts.json, (data) => {\n log.blank();\n console.log(pc.bold('User'));\n console.log(` ${pc.dim('id')}: ${data.id}`);\n console.log(` ${pc.dim('name')}: ${data.name ?? '-'}`);\n console.log(` ${pc.dim('username')}: ${data.username ?? '-'}`);\n console.log(` ${pc.dim('email')}: ${data.email ?? '-'}`);\n console.log(` ${pc.dim('followers')}: ${data.followers_count ?? 0}`);\n console.log(` ${pc.dim('following')}: ${data.following_count ?? 0}`);\n console.log(` ${pc.dim('posts')}: ${data.posts_count ?? 0}`);\n log.blank();\n });\n}\n\nexport async function communitiesListCommand(opts: ListOpts): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'communities',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Communities'));\n data.forEach((comm: any) => {\n const name = pc.bold(comm.name);\n const slug = comm.slug ? pc.dim(`/${comm.slug}`) : '';\n const members = pc.dim(`members ${comm.member_count ?? 0}`);\n console.log(` ${name} ${slug} ${members}`);\n if (comm.description) console.log(` ${pc.dim(comm.description)}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function communitiesCreateCommand(opts: {\n name?: string;\n slug?: string;\n description?: string;\n privacy?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.name || !opts.slug) {\n log.error('Missing required flags: --name and --slug');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'communities',\n body: {\n name: opts.name,\n slug: opts.slug,\n description: opts.description,\n privacy: opts.privacy ?? 'public',\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Community created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nexport async function postsListCommand(opts: ListOpts & { communityId?: string; authorId?: string }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'posts',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n community_id: opts.communityId,\n author_id: opts.authorId,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Posts'));\n data.forEach((post: any) => {\n const author = post.author?.username ? `@${post.author.username}` : 'unknown';\n const content = truncate(post.content ?? '', 100);\n console.log(` ${pc.bold(author)} ${pc.dim(post.id)}`);\n console.log(` ${content}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function postsCreateCommand(opts: {\n content?: string;\n markdown?: boolean;\n communityId?: string;\n organizationId?: string;\n replyToId?: string;\n tagIds?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.content) {\n log.error('Missing required flag: --content');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const tagIds = opts.tagIds ? opts.tagIds.split(',').map((id) => id.trim()).filter(Boolean) : undefined;\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'posts',\n body: {\n content: opts.content,\n content_format: opts.markdown ? 'markdown' : 'plain',\n community_id: opts.communityId,\n organization_id: opts.organizationId,\n reply_to_id: opts.replyToId,\n tag_ids: tagIds,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Post created: ${pc.dim(data.id)}`);\n });\n}\n\nexport async function projectsListCommand(opts: ListOpts & { organizationId?: string }): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'projects',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n organization_id: opts.organizationId,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Projects'));\n data.forEach((proj: any) => {\n const name = pc.bold(proj.name);\n const slug = proj.slug ? pc.dim(`/${proj.slug}`) : '';\n const org = proj.organization?.slug ? pc.dim(`org ${proj.organization.slug}`) : '';\n console.log(` ${name} ${slug} ${org}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function projectsCreateCommand(opts: {\n organizationId?: string;\n name?: string;\n slug?: string;\n repoUrl?: string;\n templateSource?: string;\n templateUrl?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.organizationId || !opts.name) {\n log.error('Missing required flags: --org and --name');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'projects',\n body: {\n organization_id: opts.organizationId,\n name: opts.name,\n slug: opts.slug,\n repo_url: opts.repoUrl,\n template_source: opts.templateSource ?? 'default',\n custom_template_url: opts.templateUrl,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Project created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nexport async function agentsListCommand(opts: ListOpts): Promise<void> {\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any[]; meta?: any }>(ctx, {\n method: 'GET',\n path: 'agents',\n query: {\n limit: opts.limit,\n offset: opts.offset,\n },\n });\n output(res, opts.json, (data, meta) => {\n log.blank();\n console.log(pc.bold('Agents'));\n data.forEach((agent: any) => {\n const name = pc.bold(agent.name);\n const handle = agent.username ? pc.dim(`@${agent.username}`) : '';\n const model = agent.model ? pc.dim(agent.model) : '';\n console.log(` ${name} ${handle} ${model}`);\n });\n printMeta(meta);\n });\n}\n\nexport async function agentsCreateCommand(opts: {\n name?: string;\n username?: string;\n bio?: string;\n model?: string;\n systemPrompt?: string;\n socialMode?: string;\n postFrequency?: string;\n toolMode?: string;\n dailyRequestLimit?: string;\n organizationId?: string;\n json?: boolean;\n}): Promise<void> {\n if (!opts.name || !opts.username) {\n log.error('Missing required flags: --name and --username');\n process.exit(1);\n }\n\n const ctx = await getApiContext(process.cwd());\n const res = await apiRequest<{ data: any }>(ctx, {\n method: 'POST',\n path: 'agents',\n body: {\n name: opts.name,\n username: opts.username,\n bio: opts.bio,\n model: opts.model,\n system_prompt: opts.systemPrompt,\n social_mode: opts.socialMode,\n post_frequency: opts.postFrequency,\n tool_mode: opts.toolMode,\n daily_request_limit: opts.dailyRequestLimit ? Number(opts.dailyRequestLimit) : undefined,\n organization_id: opts.organizationId,\n },\n });\n output(res, opts.json, (data) => {\n log.success(`Agent created: ${pc.bold(data.name)} (${data.id})`);\n });\n}\n\nfunction output(\n res: { data: any; meta?: any },\n json: boolean | undefined,\n render: (data: any, meta?: any) => void\n): void {\n if (json) {\n console.log(JSON.stringify(res, null, 2));\n return;\n }\n render(res.data, res.meta);\n}\n\nfunction printMeta(meta?: { limit?: number; offset?: number; has_more?: boolean }): void {\n if (!meta) return;\n log.blank();\n console.log(pc.dim(`limit ${meta.limit ?? 0} offset ${meta.offset ?? 0} has_more ${meta.has_more ?? false}`));\n log.blank();\n}\n\nfunction truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return value.slice(0, max - 1) + '…';\n}\n","import pc from 'picocolors';\nimport { readConfig } from './config.js';\nimport { readApiKeyFromEnv } from './env.js';\nimport { log } from './logger.js';\n\nexport type ApiContext = {\n baseUrl: string;\n apiKey: string;\n};\n\nexport async function getApiContext(cwd: string): Promise<ApiContext> {\n const config = await readConfig(cwd);\n const apiKey = await readApiKeyFromEnv(cwd);\n if (!apiKey) {\n log.error('No API key configured.');\n log.info(`Run ${pc.bold('recursiv auth login')} to set your key.`);\n process.exit(1);\n }\n\n return {\n baseUrl: config?.api.baseUrl ?? 'https://api.recursiv.io/api/v1',\n apiKey,\n };\n}\n\nexport async function apiRequest<T>(ctx: ApiContext, opts: {\n method: 'GET' | 'POST';\n path: string;\n query?: Record<string, string | number | undefined>;\n body?: unknown;\n}): Promise<T> {\n const url = new URL(opts.path, ctx.baseUrl.endsWith('/') ? ctx.baseUrl : ctx.baseUrl + '/');\n if (opts.query) {\n Object.entries(opts.query).forEach(([key, value]) => {\n if (value === undefined || value === null || value === '') return;\n url.searchParams.set(key, String(value));\n });\n }\n\n const res = await fetch(url, {\n method: opts.method,\n headers: {\n Authorization: `Bearer ${ctx.apiKey}`,\n Accept: 'application/json',\n ...(opts.body ? { 'Content-Type': 'application/json' } : {}),\n },\n body: opts.body ? JSON.stringify(opts.body) : undefined,\n });\n\n const text = await res.text();\n const payload = safeJson(text);\n\n if (!res.ok) {\n const message =\n payload?.error?.message ||\n payload?.message ||\n `Request failed (${res.status} ${res.statusText})`;\n throw new Error(message);\n }\n\n return (payload ?? {}) as T;\n}\n\nfunction safeJson(text: string): any {\n if (!text) return null;\n try {\n return JSON.parse(text);\n } catch {\n return null;\n }\n}\n"],"mappings":"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","names":["pc","readFile","writeFile","join","pc","readFile","writeFile","mkdir","join","readApiKeyFromEnv","readFile","writeFile","mkdir","join","resolve","homedir","pc","resolveRecursivKey","saveCredentials","getOrCreateApiKey","configPath","spawn","platform","prompts","pc","match","pc","resolve","readFile","writeFile","mkdir","join","homedir","existsSync","basename","join","execSync","InsufficientCreditsError","pc","readCredentials","saveCredentials","buildSystemPrompt","getToolDefinitions","executeTool","requiresConfirmation","describeToolAction","resolve","existsSync","readFile","writeFile","prompts","pc","ora","join","prompts","existsSync","pc","writeFile","readFile","ora","pc","pc","writeFile","resolve","pc","ora","pc","pc","pc","jsx","pc","pc","pc","pc","render","quickstartCommand","mcpInstallCommand","mcpVerifyCommand","startAgent","readConfig","resolveRecursivKey","resolveAnthropicKey","saveCredentials","getOrCreateApiKey","pc","prompts"]}