@openacp/cli 0.5.2 → 0.5.3

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.
Files changed (40) hide show
  1. package/dist/{chunk-JRF4G4X7.js → chunk-2Z2XPUD5.js} +2 -1
  2. package/dist/chunk-2Z2XPUD5.js.map +1 -0
  3. package/dist/{chunk-VBEWSWVL.js → chunk-5KYLXEG3.js} +2 -2
  4. package/dist/{chunk-NDR5JCS7.js → chunk-6DAZSKE5.js} +2 -2
  5. package/dist/{chunk-4ZGMSNRP.js → chunk-ECBD5I5R.js} +4 -3
  6. package/dist/{chunk-4ZGMSNRP.js.map → chunk-ECBD5I5R.js.map} +1 -1
  7. package/dist/{chunk-F4TB4UBK.js → chunk-IQIPQTQT.js} +3 -3
  8. package/dist/{chunk-IRGYTNLP.js → chunk-K53OZH5Y.js} +2 -2
  9. package/dist/{chunk-65XE66HK.js → chunk-LCJIPE5S.js} +335 -69
  10. package/dist/chunk-LCJIPE5S.js.map +1 -0
  11. package/dist/cli.js +110 -22
  12. package/dist/cli.js.map +1 -1
  13. package/dist/{config-PCPIBPUA.js → config-OH26EIWN.js} +2 -2
  14. package/dist/{config-editor-DDF3ZFJK.js → config-editor-5TICUK3K.js} +4 -4
  15. package/dist/{daemon-JZLFRUW6.js → daemon-VKCONJUY.js} +3 -3
  16. package/dist/doctor-X6UCE7GQ.js +9 -0
  17. package/dist/index.d.ts +35 -3
  18. package/dist/index.js +7 -7
  19. package/dist/{integrate-BLETI3UO.js → integrate-VOUYBPPZ.js} +106 -3
  20. package/dist/integrate-VOUYBPPZ.js.map +1 -0
  21. package/dist/{main-AH3NCVM3.js → main-NEYPQHB4.js} +13 -13
  22. package/dist/{setup-7JINXQOA.js → setup-ZCWGOEAH.js} +3 -3
  23. package/dist/{tunnel-service-LEVPLXAZ.js → tunnel-service-U6V4HQOO.js} +263 -47
  24. package/dist/tunnel-service-U6V4HQOO.js.map +1 -0
  25. package/package.json +1 -1
  26. package/dist/chunk-65XE66HK.js.map +0 -1
  27. package/dist/chunk-JRF4G4X7.js.map +0 -1
  28. package/dist/doctor-N2HKKUUQ.js +0 -9
  29. package/dist/integrate-BLETI3UO.js.map +0 -1
  30. package/dist/tunnel-service-LEVPLXAZ.js.map +0 -1
  31. /package/dist/{chunk-VBEWSWVL.js.map → chunk-5KYLXEG3.js.map} +0 -0
  32. /package/dist/{chunk-NDR5JCS7.js.map → chunk-6DAZSKE5.js.map} +0 -0
  33. /package/dist/{chunk-F4TB4UBK.js.map → chunk-IQIPQTQT.js.map} +0 -0
  34. /package/dist/{chunk-IRGYTNLP.js.map → chunk-K53OZH5Y.js.map} +0 -0
  35. /package/dist/{config-PCPIBPUA.js.map → config-OH26EIWN.js.map} +0 -0
  36. /package/dist/{config-editor-DDF3ZFJK.js.map → config-editor-5TICUK3K.js.map} +0 -0
  37. /package/dist/{daemon-JZLFRUW6.js.map → daemon-VKCONJUY.js.map} +0 -0
  38. /package/dist/{doctor-N2HKKUUQ.js.map → doctor-X6UCE7GQ.js.map} +0 -0
  39. /package/dist/{main-AH3NCVM3.js.map → main-NEYPQHB4.js.map} +0 -0
  40. /package/dist/{setup-7JINXQOA.js.map → setup-ZCWGOEAH.js.map} +0 -0
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli.ts","../../src/cli/commands.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { setDefaultAutoSelectFamily } from \"node:net\";\nsetDefaultAutoSelectFamily(false);\n\nimport {\n printHelp,\n cmdVersion,\n cmdInstall,\n cmdUninstall,\n cmdPlugins,\n cmdApi,\n cmdStart,\n cmdStop,\n cmdStatus,\n cmdLogs,\n cmdConfig,\n cmdReset,\n cmdUpdate,\n cmdDefault,\n cmdAdopt,\n cmdIntegrate,\n cmdDoctor,\n cmdAgents,\n} from './cli/commands.js'\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nconst commands: Record<string, () => Promise<void>> = {\n '--help': async () => printHelp(),\n '-h': async () => printHelp(),\n '--version': () => cmdVersion(),\n '-v': () => cmdVersion(),\n 'install': () => cmdInstall(args),\n 'uninstall': () => cmdUninstall(args),\n 'plugins': () => cmdPlugins(args),\n 'api': () => cmdApi(args),\n 'start': () => cmdStart(args),\n 'stop': () => cmdStop(args),\n 'status': () => cmdStatus(args),\n 'logs': () => cmdLogs(args),\n 'config': () => cmdConfig(args),\n 'reset': () => cmdReset(args),\n 'update': () => cmdUpdate(args),\n 'adopt': () => cmdAdopt(args),\n 'integrate': () => cmdIntegrate(args),\n 'doctor': () => cmdDoctor(args),\n 'agents': () => cmdAgents(args),\n '--daemon-child': async () => {\n const { startServer } = await import('./main.js')\n await startServer()\n },\n}\n\nasync function main() {\n const handler = command ? commands[command] : undefined\n if (handler) {\n await handler()\n } else {\n await cmdDefault(command)\n }\n}\n\nmain().catch((err) => {\n console.error(\"Fatal:\", err);\n process.exit(1);\n});\n","import { installPlugin, uninstallPlugin, listPlugins } from '../core/plugin-manager.js'\nimport { readApiPort, removeStalePortFile, apiCall } from '../core/api-client.js'\nimport { getCurrentVersion, getLatestVersion, compareVersions, runUpdate, checkAndPromptUpdate } from './version.js'\n\nfunction wantsHelp(args: string[]): boolean {\n return args.includes('--help') || args.includes('-h')\n}\n\nexport function printHelp(): void {\n console.log(`\n\\x1b[1mOpenACP\\x1b[0m — Self-hosted bridge for AI coding agents\nConnect Telegram (and more) to 28+ AI coding agents via ACP protocol.\n\n\\x1b[1mGetting Started:\\x1b[0m\n openacp First run launches setup wizard\n openacp After setup, starts the server\n\n\\x1b[1mServer:\\x1b[0m\n openacp Start (mode from config)\n openacp start Start as background daemon\n openacp stop Stop background daemon\n openacp status Show daemon status\n openacp logs Tail daemon log file\n openacp --foreground Force foreground mode\n\n\\x1b[1mAgent Management:\\x1b[0m\n openacp agents Browse all agents (installed + available)\n openacp agents install <name> Install an agent from the ACP Registry\n openacp agents uninstall <name> Remove an installed agent\n openacp agents info <name> Show details, dependencies & setup guide\n openacp agents run <name> [-- args] Run agent CLI directly (login, config...)\n openacp agents refresh Force-refresh agent list from registry\n\n \\x1b[2mExamples:\\x1b[0m\n openacp agents install gemini Install Gemini CLI\n openacp agents run gemini Login to Google (first run)\n openacp agents info cursor See setup instructions\n\n\\x1b[1mConfiguration:\\x1b[0m\n openacp config Interactive config editor\n openacp config set <key> <value> Set a config value\n openacp reset Re-run setup wizard\n openacp update Update to latest version\n openacp doctor Run system diagnostics\n openacp doctor --dry-run Check only, don't fix\n\n\\x1b[1mPlugins:\\x1b[0m\n openacp install <package> Install adapter (e.g. @openacp/adapter-discord)\n openacp uninstall <package> Remove adapter\n openacp plugins List installed plugins\n\n\\x1b[1mSession Transfer:\\x1b[0m\n openacp integrate <agent> Install handoff integration\n openacp integrate <agent> --uninstall\n openacp adopt <agent> <id> Adopt an external session\n\n\\x1b[1mDaemon API:\\x1b[0m \\x1b[2m(requires running daemon)\\x1b[0m\n openacp api status Active sessions\n openacp api session <id> Session details\n openacp api new [agent] [workspace] Create session\n openacp api send <id> <prompt> Send prompt\n openacp api cancel <id> Cancel session\n openacp api dangerous <id> on|off Toggle dangerous mode\n openacp api topics [--status ...] List topics\n openacp api cleanup [--status ...] Cleanup old topics\n openacp api health System health check\n openacp api restart Restart daemon\n\n\\x1b[2mMore info: https://github.com/Open-ACP/OpenACP\\x1b[0m\n`)\n}\n\nexport async function cmdVersion(): Promise<void> {\n const { getCurrentVersion } = await import(\"./version.js\")\n console.log(`openacp v${getCurrentVersion()}`)\n}\n\nexport async function cmdInstall(args: string[]): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp install\\x1b[0m — Install a plugin adapter\n\n\\x1b[1mUsage:\\x1b[0m\n openacp install <package>\n\n\\x1b[1mArguments:\\x1b[0m\n <package> npm package name (e.g. @openacp/adapter-discord)\n\nInstalls the plugin to ~/.openacp/plugins/.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp install @openacp/adapter-discord\n`)\n return\n }\n const pkg = args[1]\n if (!pkg) {\n console.error(\"Usage: openacp install <package>\")\n process.exit(1)\n }\n installPlugin(pkg)\n}\n\nexport async function cmdUninstall(args: string[]): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp uninstall\\x1b[0m — Remove a plugin adapter\n\n\\x1b[1mUsage:\\x1b[0m\n openacp uninstall <package>\n\n\\x1b[1mArguments:\\x1b[0m\n <package> npm package name to remove\n\n\\x1b[1mExamples:\\x1b[0m\n openacp uninstall @openacp/adapter-discord\n`)\n return\n }\n const pkg = args[1]\n if (!pkg) {\n console.error(\"Usage: openacp uninstall <package>\")\n process.exit(1)\n }\n uninstallPlugin(pkg)\n}\n\nexport async function cmdPlugins(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp plugins\\x1b[0m — List installed plugins\n\n\\x1b[1mUsage:\\x1b[0m\n openacp plugins\n\nShows all plugins installed in ~/.openacp/plugins/.\n`)\n return\n }\n const plugins = listPlugins()\n const entries = Object.entries(plugins)\n if (entries.length === 0) {\n console.log(\"No plugins installed.\")\n } else {\n console.log(\"Installed plugins:\")\n for (const [name, version] of entries) {\n console.log(` ${name}@${version}`)\n }\n }\n}\n\nfunction printApiHelp(): void {\n console.log(`\n\\x1b[1mopenacp api\\x1b[0m — Interact with the running OpenACP daemon\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api <command> [options]\n\n\\x1b[1mRequires a running daemon.\\x1b[0m Start with: openacp start\n\n\\x1b[1mSession Commands:\\x1b[0m\n openacp api status Show active sessions\n openacp api session <id> Show session details\n openacp api new [agent] [workspace] Create a new session\n openacp api send <id> <prompt> Send prompt to session\n openacp api cancel <id> Cancel a session\n openacp api dangerous <id> on|off Toggle dangerous mode\n\n\\x1b[1mTopic Commands:\\x1b[0m\n openacp api topics [--status s1,s2] List topics\n openacp api delete-topic <id> [--force] Delete a topic\n openacp api cleanup [--status s1,s2] Cleanup finished topics\n\n\\x1b[1mSystem Commands:\\x1b[0m\n openacp api health Show system health\n openacp api agents List available agents\n openacp api adapters List registered adapters\n openacp api tunnel Show tunnel status\n openacp api config Show runtime config\n openacp api config set <key> <value> Update config value\n openacp api notify <message> Send notification to all channels\n openacp api restart Restart daemon\n openacp api version Show daemon version\n\n\\x1b[1mOptions:\\x1b[0m\n -h, --help Show this help message\n`)\n}\n\nexport async function cmdApi(args: string[]): Promise<void> {\n const subCmd = args[1]\n\n if (wantsHelp(args) && (!subCmd || subCmd === '--help' || subCmd === '-h')) {\n printApiHelp()\n return\n }\n\n // Handle --help for individual api subcommands (before port check)\n if (wantsHelp(args) && subCmd) {\n const apiSubHelp: Record<string, string> = {\n 'status': `\n\\x1b[1mopenacp api status\\x1b[0m — Show active sessions\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api status\n\nLists all active sessions with their ID, agent, status, and name.\n`,\n 'session': `\n\\x1b[1mopenacp api session\\x1b[0m — Show session details\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api session <id>\n\n\\x1b[1mArguments:\\x1b[0m\n <id> Session ID\n\nShows detailed info: agent, status, name, workspace, creation time,\ndangerous mode, queue depth, and channel/thread IDs.\n`,\n 'new': `\n\\x1b[1mopenacp api new\\x1b[0m — Create a new session\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api new [agent] [workspace]\n openacp api new [agent] --workspace <path>\n\n\\x1b[1mArguments:\\x1b[0m\n [agent] Agent name (uses default if omitted)\n [workspace] Working directory for the session\n\n\\x1b[1mExamples:\\x1b[0m\n openacp api new\n openacp api new claude /path/to/project\n openacp api new gemini --workspace /path/to/project\n`,\n 'send': `\n\\x1b[1mopenacp api send\\x1b[0m — Send prompt to a session\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api send <id> <prompt>\n\n\\x1b[1mArguments:\\x1b[0m\n <id> Session ID\n <prompt> Prompt text (all remaining arguments are joined)\n\n\\x1b[1mExamples:\\x1b[0m\n openacp api send abc123 \"Fix the login bug\"\n openacp api send abc123 refactor the auth module\n`,\n 'cancel': `\n\\x1b[1mopenacp api cancel\\x1b[0m — Cancel a session\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api cancel <id>\n\n\\x1b[1mArguments:\\x1b[0m\n <id> Session ID to cancel\n`,\n 'dangerous': `\n\\x1b[1mopenacp api dangerous\\x1b[0m — Toggle dangerous mode for a session\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api dangerous <id> on|off\n\n\\x1b[1mArguments:\\x1b[0m\n <id> Session ID\n on|off Enable or disable dangerous mode\n\nDangerous mode allows the agent to run destructive commands\nwithout confirmation prompts.\n`,\n 'topics': `\n\\x1b[1mopenacp api topics\\x1b[0m — List topics\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api topics [--status <statuses>]\n\n\\x1b[1mOptions:\\x1b[0m\n --status <s1,s2> Filter by status (comma-separated)\n\n\\x1b[1mExamples:\\x1b[0m\n openacp api topics\n openacp api topics --status active,finished\n`,\n 'delete-topic': `\n\\x1b[1mopenacp api delete-topic\\x1b[0m — Delete a topic\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api delete-topic <id> [--force]\n\n\\x1b[1mArguments:\\x1b[0m\n <id> Session ID of the topic to delete\n\n\\x1b[1mOptions:\\x1b[0m\n --force Delete even if session is active\n`,\n 'cleanup': `\n\\x1b[1mopenacp api cleanup\\x1b[0m — Cleanup finished topics\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api cleanup [--status <statuses>]\n\n\\x1b[1mOptions:\\x1b[0m\n --status <s1,s2> Filter by status (comma-separated, default: finished topics)\n\n\\x1b[1mExamples:\\x1b[0m\n openacp api cleanup\n openacp api cleanup --status finished,error\n`,\n 'health': `\n\\x1b[1mopenacp api health\\x1b[0m — Show system health\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api health\n\nShows status, uptime, version, memory usage, session counts,\nregistered adapters, and tunnel status.\n`,\n 'agents': `\n\\x1b[1mopenacp api agents\\x1b[0m — List available agents from running daemon\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api agents\n\nLists agents configured in the running daemon with their names\nand which one is the default.\n`,\n 'adapters': `\n\\x1b[1mopenacp api adapters\\x1b[0m — List registered adapters\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api adapters\n\nShows all channel adapters registered with the running daemon.\n`,\n 'tunnel': `\n\\x1b[1mopenacp api tunnel\\x1b[0m — Show tunnel status\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api tunnel\n\nShows whether a tunnel is enabled, the provider, and the URL.\n`,\n 'config': `\n\\x1b[1mopenacp api config\\x1b[0m — Show or update runtime config\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api config Show current runtime config\n openacp api config set <key> <value> Update a config value\n\n\\x1b[2mNote: Prefer 'openacp config' instead — it works whether daemon is running or not.\\x1b[0m\n`,\n 'restart': `\n\\x1b[1mopenacp api restart\\x1b[0m — Restart the daemon\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api restart\n\nSends a restart signal to the running daemon.\n`,\n 'notify': `\n\\x1b[1mopenacp api notify\\x1b[0m — Send notification to all channels\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api notify <message>\n\n\\x1b[1mArguments:\\x1b[0m\n <message> Notification text (all remaining arguments are joined)\n\n\\x1b[1mExamples:\\x1b[0m\n openacp api notify \"Deployment complete\"\n`,\n 'version': `\n\\x1b[1mopenacp api version\\x1b[0m — Show daemon version\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api version\n\nShows the version of the currently running daemon process.\n`,\n }\n const help = apiSubHelp[subCmd]\n if (help) {\n console.log(help)\n return\n }\n // Unknown subcommand with --help, show general help\n printApiHelp()\n return\n }\n\n const port = readApiPort()\n if (port === null) {\n console.error('OpenACP is not running. Start with `openacp start`')\n process.exit(1)\n }\n\n try {\n if (subCmd === 'new') {\n const agent = args[2]\n const workspaceIdx = args.indexOf('--workspace')\n const workspace = workspaceIdx !== -1 ? args[workspaceIdx + 1] : args[3]\n const body: Record<string, string> = {}\n if (agent) body.agent = agent\n if (workspace) body.workspace = workspace\n\n const res = await apiCall(port, '/api/sessions', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log('Session created')\n console.log(` ID : ${data.sessionId}`)\n console.log(` Agent : ${data.agent}`)\n console.log(` Workspace : ${data.workspace}`)\n console.log(` Status : ${data.status}`)\n\n } else if (subCmd === 'cancel') {\n const sessionId = args[2]\n if (!sessionId) {\n console.error('Usage: openacp api cancel <session-id>')\n process.exit(1)\n }\n const res = await apiCall(port, `/api/sessions/${encodeURIComponent(sessionId)}`, {\n method: 'DELETE',\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Session ${sessionId} cancelled`)\n\n } else if (subCmd === 'status') {\n const res = await apiCall(port, '/api/sessions')\n const data = await res.json() as { sessions: Array<{ id: string; agent: string; status: string; name: string | null }> }\n if (data.sessions.length === 0) {\n console.log('No active sessions.')\n } else {\n console.log(`Active sessions: ${data.sessions.length}\\n`)\n for (const s of data.sessions) {\n const name = s.name ? ` \"${s.name}\"` : ''\n console.log(` ${s.id} ${s.agent} ${s.status}${name}`)\n }\n }\n\n } else if (subCmd === 'agents') {\n const res = await apiCall(port, '/api/agents')\n const data = await res.json() as { agents: Array<{ name: string; command: string; args: string[] }>; default: string }\n console.log('Available agents:')\n for (const a of data.agents) {\n const isDefault = a.name === data.default ? ' (default)' : ''\n console.log(` ${a.name}${isDefault}`)\n }\n\n } else if (subCmd === 'topics') {\n const statusIdx = args.indexOf('--status')\n const statusParam = statusIdx !== -1 ? args[statusIdx + 1] : undefined\n const query = statusParam ? `?status=${encodeURIComponent(statusParam)}` : ''\n const res = await apiCall(port, `/api/topics${query}`)\n const data = await res.json() as { topics: Array<{ sessionId: string; topicId: number | null; name: string | null; status: string; agentName: string; lastActiveAt: string }> }\n if (data.topics.length === 0) {\n console.log('No topics found.')\n } else {\n console.log(`Topics: ${data.topics.length}\\n`)\n for (const t of data.topics) {\n const name = t.name ? ` \"${t.name}\"` : ''\n const topic = t.topicId ? `Topic #${t.topicId}` : 'headless'\n console.log(` ${t.sessionId} ${t.agentName} ${t.status}${name} ${topic}`)\n }\n }\n\n } else if (subCmd === 'delete-topic') {\n const sessionId = args[2]\n if (!sessionId) {\n console.error('Usage: openacp api delete-topic <session-id> [--force]')\n process.exit(1)\n }\n const force = args.includes('--force')\n const query = force ? '?force=true' : ''\n const res = await apiCall(port, `/api/topics/${encodeURIComponent(sessionId)}${query}`, { method: 'DELETE' })\n const data = await res.json() as Record<string, unknown>\n if (res.status === 409) {\n console.error(`Session \"${sessionId}\" is active (${(data.session as any)?.status}). Use --force to delete.`)\n process.exit(1)\n }\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n const topicLabel = data.topicId ? `Topic #${data.topicId}` : 'headless session'\n console.log(`${topicLabel} deleted (session ${sessionId})`)\n\n } else if (subCmd === 'cleanup') {\n const statusIdx = args.indexOf('--status')\n const statusParam = statusIdx !== -1 ? args[statusIdx + 1] : undefined\n const body: Record<string, unknown> = {}\n if (statusParam) body.statuses = statusParam.split(',')\n const res = await apiCall(port, '/api/topics/cleanup', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n const data = await res.json() as { deleted: string[]; failed: Array<{ sessionId: string; error: string }> }\n if (data.deleted.length === 0 && data.failed.length === 0) {\n console.log('Nothing to clean up.')\n } else {\n console.log(`Cleaned up ${data.deleted.length} topics${data.deleted.length ? ': ' + data.deleted.join(', ') : ''} (${data.failed.length} failed)`)\n for (const f of data.failed) {\n console.error(` Failed: ${f.sessionId} — ${f.error}`)\n }\n }\n\n } else if (subCmd === 'send') {\n const sessionId = args[2]\n if (!sessionId) {\n console.error('Usage: openacp api send <session-id> <prompt>')\n process.exit(1)\n }\n const prompt = args.slice(3).join(' ')\n if (!prompt) {\n console.error('Usage: openacp api send <session-id> <prompt>')\n process.exit(1)\n }\n const res = await apiCall(port, `/api/sessions/${encodeURIComponent(sessionId)}/prompt`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ prompt }),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Prompt sent to session ${sessionId} (queue depth: ${data.queueDepth})`)\n\n } else if (subCmd === 'session') {\n const sessionId = args[2]\n if (!sessionId) {\n console.error('Usage: openacp api session <session-id>')\n process.exit(1)\n }\n const res = await apiCall(port, `/api/sessions/${encodeURIComponent(sessionId)}`)\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Session details:`)\n console.log(` ID : ${data.id}`)\n console.log(` Agent : ${data.agent}`)\n console.log(` Status : ${data.status}`)\n console.log(` Name : ${data.name ?? '(none)'}`)\n console.log(` Workspace : ${data.workspace}`)\n console.log(` Created : ${data.createdAt}`)\n console.log(` Dangerous : ${data.dangerous}`)\n console.log(` Queue depth : ${data.queueDepth}`)\n console.log(` Prompt active : ${data.promptActive}`)\n console.log(` Channel : ${data.channelId ?? '(none)'}`)\n console.log(` Thread : ${data.threadId ?? '(none)'}`)\n\n } else if (subCmd === 'dangerous') {\n const sessionId = args[2]\n if (!sessionId) {\n console.error('Usage: openacp api dangerous <session-id> [on|off]')\n process.exit(1)\n }\n const toggle = args[3]\n if (!toggle || (toggle !== 'on' && toggle !== 'off')) {\n console.error('Usage: openacp api dangerous <session-id> [on|off]')\n process.exit(1)\n }\n const res = await apiCall(port, `/api/sessions/${encodeURIComponent(sessionId)}/dangerous`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ enabled: toggle === 'on' }),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n const state = toggle === 'on' ? 'enabled' : 'disabled'\n console.log(`Dangerous mode ${state} for session ${sessionId}`)\n\n } else if (subCmd === 'health') {\n const res = await apiCall(port, '/api/health')\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n const uptimeSeconds = typeof data.uptimeSeconds === 'number' ? data.uptimeSeconds : 0\n const hours = Math.floor(uptimeSeconds / 3600)\n const minutes = Math.floor((uptimeSeconds % 3600) / 60)\n const memoryBytes = typeof data.memoryUsage === 'number' ? data.memoryUsage : 0\n const memoryMB = (memoryBytes / 1024 / 1024).toFixed(1)\n const sessions = data.sessions as Record<string, unknown> ?? {}\n console.log(`Status : ${data.status}`)\n console.log(`Uptime : ${hours}h ${minutes}m`)\n console.log(`Version : ${data.version}`)\n console.log(`Memory : ${memoryMB} MB`)\n console.log(`Sessions : ${sessions.active ?? 0} active / ${sessions.total ?? 0} total`)\n console.log(`Adapters : ${data.adapters}`)\n console.log(`Tunnel : ${data.tunnel}`)\n\n } else if (subCmd === 'restart') {\n const res = await apiCall(port, '/api/restart', { method: 'POST' })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log('Restart signal sent. OpenACP is restarting...')\n\n } else if (subCmd === 'config') {\n console.warn('⚠️ Deprecated: use \"openacp config\" or \"openacp config set\" instead.')\n const subSubCmd = args[2]\n if (!subSubCmd) {\n const res = await apiCall(port, '/api/config')\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(JSON.stringify(data.config, null, 2))\n } else if (subSubCmd === 'set') {\n const configPath = args[3]\n const configValue = args[4]\n if (!configPath || configValue === undefined) {\n console.error('Usage: openacp api config set <path> <value>')\n process.exit(1)\n }\n let value: unknown = configValue\n try {\n value = JSON.parse(configValue)\n } catch {\n // keep as string\n }\n const res = await apiCall(port, '/api/config', {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: configPath, value }),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Config updated: ${configPath} = ${JSON.stringify(value)}`)\n if (data.needsRestart) {\n console.log('Note: restart required for this change to take effect.')\n }\n } else {\n console.error(`Unknown config subcommand: ${subSubCmd}`)\n console.log(' openacp api config Show runtime config')\n console.log(' openacp api config set <key> <value> Update config value')\n process.exit(1)\n }\n\n } else if (subCmd === 'adapters') {\n const res = await apiCall(port, '/api/adapters')\n const data = await res.json() as { adapters: Array<{ name: string; type: string }> }\n if (!res.ok) {\n console.error(`Error: ${(data as any).error}`)\n process.exit(1)\n }\n console.log('Registered adapters:')\n for (const a of data.adapters) {\n console.log(` ${a.name} (${a.type})`)\n }\n\n } else if (subCmd === 'tunnel') {\n const res = await apiCall(port, '/api/tunnel')\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n if (data.enabled) {\n console.log(`Tunnel provider : ${data.provider}`)\n console.log(`Tunnel URL : ${data.url}`)\n } else {\n console.log('Tunnel: not enabled')\n }\n\n } else if (subCmd === 'notify') {\n const message = args.slice(2).join(' ')\n if (!message) {\n console.error('Usage: openacp api notify <message>')\n process.exit(1)\n }\n const res = await apiCall(port, '/api/notify', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message }),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log('Notification sent to all channels.')\n\n } else if (subCmd === 'version') {\n const res = await apiCall(port, '/api/version')\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Daemon version: ${data.version}`)\n\n } else {\n const { suggestMatch } = await import('./suggest.js')\n const apiSubcommands = [\n 'new', 'cancel', 'status', 'agents', 'topics', 'delete-topic',\n 'cleanup', 'send', 'session', 'dangerous', 'health', 'restart',\n 'config', 'adapters', 'tunnel', 'notify', 'version',\n ]\n const suggestion = suggestMatch(subCmd ?? '', apiSubcommands)\n console.error(`Unknown api command: ${subCmd || '(none)'}\\n`)\n if (suggestion) console.error(`Did you mean: ${suggestion}?\\n`)\n printApiHelp()\n process.exit(1)\n }\n } catch (err) {\n if (err instanceof TypeError && (err as any).cause?.code === 'ECONNREFUSED') {\n console.error('OpenACP is not running (stale port file)')\n removeStalePortFile()\n process.exit(1)\n }\n throw err\n }\n}\n\nexport async function cmdStart(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp start\\x1b[0m — Start OpenACP as a background daemon\n\n\\x1b[1mUsage:\\x1b[0m\n openacp start\n\nStarts the server as a background process (daemon mode).\nRequires an existing config — run 'openacp' first to set up.\n\n\\x1b[1mSee also:\\x1b[0m\n openacp stop Stop the daemon\n openacp status Check if daemon is running\n openacp logs Tail daemon log file\n`)\n return\n }\n await checkAndPromptUpdate()\n const { startDaemon, getPidPath } = await import('../core/daemon.js')\n const { ConfigManager } = await import('../core/config.js')\n const cm = new ConfigManager()\n if (await cm.exists()) {\n await cm.load()\n const config = cm.get()\n const result = startDaemon(getPidPath(), config.logging.logDir)\n if ('error' in result) {\n console.error(result.error)\n process.exit(1)\n }\n console.log(`OpenACP daemon started (PID ${result.pid})`)\n } else {\n console.error('No config found. Run \"openacp\" first to set up.')\n process.exit(1)\n }\n}\n\nexport async function cmdStop(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp stop\\x1b[0m — Stop the background daemon\n\n\\x1b[1mUsage:\\x1b[0m\n openacp stop\n\nSends a stop signal to the running OpenACP daemon process.\n`)\n return\n }\n const { stopDaemon } = await import('../core/daemon.js')\n const result = stopDaemon()\n if (result.stopped) {\n console.log(`OpenACP daemon stopped (was PID ${result.pid})`)\n } else {\n console.error(result.error)\n process.exit(1)\n }\n}\n\nexport async function cmdStatus(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp status\\x1b[0m — Show daemon status\n\n\\x1b[1mUsage:\\x1b[0m\n openacp status\n\nShows whether the OpenACP daemon is running and its PID.\n`)\n return\n }\n const { getStatus } = await import('../core/daemon.js')\n const status = getStatus()\n if (status.running) {\n console.log(`OpenACP is running (PID ${status.pid})`)\n } else {\n console.log('OpenACP is not running')\n }\n}\n\nexport async function cmdLogs(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp logs\\x1b[0m — Tail daemon log file\n\n\\x1b[1mUsage:\\x1b[0m\n openacp logs\n\nStreams the last 50 lines of the OpenACP log file and\nfollows new output (like tail -f). Press Ctrl+C to stop.\n\nLog file location is configured in config (default: ~/.openacp/logs/).\n`)\n return\n }\n const { spawn } = await import('node:child_process')\n const { ConfigManager, expandHome } = await import('../core/config.js')\n const pathMod = await import('node:path')\n const cm = new ConfigManager()\n let logDir = '~/.openacp/logs'\n if (await cm.exists()) {\n await cm.load()\n logDir = cm.get().logging.logDir\n }\n const logFile = pathMod.join(expandHome(logDir), 'openacp.log')\n const tail = spawn('tail', ['-f', '-n', '50', logFile], { stdio: 'inherit' })\n tail.on('error', (err: Error) => {\n console.error(`Cannot tail log file: ${err.message}`)\n process.exit(1)\n })\n}\n\nexport async function cmdConfig(args: string[] = []): Promise<void> {\n const subCmd = args[1] // 'set' or undefined\n\n if (wantsHelp(args) && subCmd === 'set') {\n console.log(`\n\\x1b[1mopenacp config set\\x1b[0m — Set a config value directly\n\n\\x1b[1mUsage:\\x1b[0m\n openacp config set <key> <value>\n\n\\x1b[1mArguments:\\x1b[0m\n <key> Dot-notation config path (e.g. telegram.botToken)\n <value> New value (JSON-parsed if possible, otherwise string)\n\n\\x1b[1mOptions:\\x1b[0m\n -h, --help Show this help message\n\nWorks with both running and stopped daemon. When running, uses\nthe API for live updates. When stopped, edits config file directly.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp config set defaultAgent claude\n openacp config set security.maxConcurrentSessions 5\n openacp config set telegram.botToken \"123:ABC\"\n`)\n return\n }\n\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp config\\x1b[0m — View and edit configuration\n\n\\x1b[1mUsage:\\x1b[0m\n openacp config Open interactive config editor\n openacp config set <key> <value> Set a config value directly\n\n\\x1b[1mOptions:\\x1b[0m\n -h, --help Show this help message\n\nWorks with both running and stopped daemon. When running, uses\nthe API for live updates. When stopped, edits config file directly.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp config\n openacp config set defaultAgent claude\n\n\\x1b[2mRun 'openacp config set --help' for more info on the set subcommand.\\x1b[0m\n`)\n return\n }\n\n if (subCmd === 'set') {\n // Non-interactive: openacp config set <key> <value>\n const configPath = args[2]\n const configValue = args[3]\n if (!configPath || configValue === undefined) {\n console.error('Usage: openacp config set <path> <value>')\n process.exit(1)\n }\n\n // Validate top-level config key\n const { ConfigSchema } = await import('../core/config.js')\n const topLevelKey = configPath.split('.')[0]\n const validConfigKeys = Object.keys(ConfigSchema.shape)\n if (!validConfigKeys.includes(topLevelKey)) {\n const { suggestMatch } = await import('./suggest.js')\n const suggestion = suggestMatch(topLevelKey, validConfigKeys)\n console.error(`Unknown config key: ${topLevelKey}`)\n if (suggestion) console.error(`Did you mean: ${suggestion}?`)\n process.exit(1)\n }\n\n let value: unknown = configValue\n try { value = JSON.parse(configValue) } catch { /* keep as string */ }\n\n const port = readApiPort()\n if (port !== null) {\n // Server running — use API\n const res = await apiCall(port, '/api/config', {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: configPath, value }),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Config updated: ${configPath} = ${JSON.stringify(value)}`)\n if (data.needsRestart) {\n console.log('Note: restart required for this change to take effect.')\n }\n } else {\n // Server not running — update file directly\n const { ConfigManager } = await import('../core/config.js')\n const cm = new ConfigManager()\n if (!(await cm.exists())) {\n console.error('No config found. Run \"openacp\" first to set up.')\n process.exit(1)\n }\n await cm.load()\n const updates = buildNestedUpdateFromPath(configPath, value)\n await cm.save(updates)\n console.log(`Config updated: ${configPath} = ${JSON.stringify(value)}`)\n }\n return\n }\n\n // Interactive editor\n const { runConfigEditor } = await import('../core/config-editor.js')\n const { ConfigManager } = await import('../core/config.js')\n const cm = new ConfigManager()\n if (!(await cm.exists())) {\n console.error('No config found. Run \"openacp\" first to set up.')\n process.exit(1)\n }\n\n const port = readApiPort()\n if (port !== null) {\n await runConfigEditor(cm, 'api', port)\n } else {\n await runConfigEditor(cm, 'file')\n }\n}\n\nfunction buildNestedUpdateFromPath(dotPath: string, value: unknown): Record<string, unknown> {\n const parts = dotPath.split('.')\n const result: Record<string, unknown> = {}\n let target = result\n for (let i = 0; i < parts.length - 1; i++) {\n target[parts[i]] = {}\n target = target[parts[i]] as Record<string, unknown>\n }\n target[parts[parts.length - 1]] = value\n return result\n}\n\nexport async function cmdReset(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp reset\\x1b[0m — Re-run setup wizard\n\n\\x1b[1mUsage:\\x1b[0m\n openacp reset\n\nDeletes all OpenACP data (~/.openacp) and allows you to\nstart fresh with the setup wizard. The daemon must be stopped first.\n\n\\x1b[1m\\x1b[31mThis is destructive\\x1b[0m — config, plugins, agent data will be removed.\n`)\n return\n }\n const { getStatus } = await import('../core/daemon.js')\n const status = getStatus()\n if (status.running) {\n console.error('OpenACP is running. Stop it first: openacp stop')\n process.exit(1)\n }\n\n const { confirm } = await import('@inquirer/prompts')\n const yes = await confirm({\n message: 'This will delete all OpenACP data (~/.openacp). You will need to set up again. Continue?',\n default: false,\n })\n if (!yes) {\n console.log('Aborted.')\n return\n }\n\n const { uninstallAutoStart } = await import('../core/autostart.js')\n uninstallAutoStart()\n\n const fs = await import('node:fs')\n const os = await import('node:os')\n const path = await import('node:path')\n const openacpDir = path.join(os.homedir(), '.openacp')\n fs.rmSync(openacpDir, { recursive: true, force: true })\n\n console.log('Reset complete. Run `openacp` to set up again.')\n}\n\nexport async function cmdUpdate(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp update\\x1b[0m — Update to latest version\n\n\\x1b[1mUsage:\\x1b[0m\n openacp update\n\nChecks npm for the latest version of @openacp/cli and\ninstalls it globally if an update is available.\n`)\n return\n }\n const current = getCurrentVersion()\n const latest = await getLatestVersion()\n if (!latest) {\n console.error('Could not check for updates. Check your internet connection.')\n process.exit(1)\n }\n if (compareVersions(current, latest) >= 0) {\n console.log(`Already up to date (v${current})`)\n return\n }\n console.log(`Update available: v${current} → v${latest}`)\n const ok = await runUpdate()\n if (ok) {\n console.log(`\\x1b[32m✓ Updated to v${latest}\\x1b[0m`)\n } else {\n console.error('Update failed. Try manually: npm install -g @openacp/cli@latest')\n process.exit(1)\n }\n}\n\nexport async function cmdAdopt(args: string[]): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp adopt\\x1b[0m — Adopt an external agent session\n\n\\x1b[1mUsage:\\x1b[0m\n openacp adopt <agent> <session_id> [--cwd <path>]\n\n\\x1b[1mArguments:\\x1b[0m\n <agent> Agent name (e.g. claude)\n <session_id> External session ID to adopt\n\n\\x1b[1mOptions:\\x1b[0m\n --cwd <path> Working directory for the session (default: current dir)\n -h, --help Show this help message\n\nTransfers an existing agent session into OpenACP so it appears\nas a Telegram topic. Requires a running daemon.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp adopt claude abc123-def456\n openacp adopt claude abc123 --cwd /path/to/project\n`)\n return\n }\n\n const agent = args[1];\n const sessionId = args[2];\n\n if (!agent || !sessionId) {\n console.log(\"Usage: openacp adopt <agent> <session_id> [--cwd <path>]\");\n console.log(\"Example: openacp adopt claude abc123-def456 --cwd /path/to/project\");\n process.exit(1);\n }\n\n const cwdIdx = args.indexOf(\"--cwd\");\n const cwd = cwdIdx !== -1 && args[cwdIdx + 1] ? args[cwdIdx + 1] : process.cwd();\n\n const port = readApiPort();\n if (!port) {\n console.log(\"OpenACP is not running. Start it with: openacp start\");\n process.exit(1);\n }\n\n try {\n const res = await fetch(`http://127.0.0.1:${port}/api/sessions/adopt`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ agent, agentSessionId: sessionId, cwd }),\n });\n const data = await res.json() as Record<string, unknown>;\n\n if (data.ok) {\n if (data.status === \"existing\") {\n console.log(`Session already on Telegram. Topic pinged.`);\n } else {\n console.log(`Session transferred to Telegram.`);\n }\n console.log(` Session ID: ${data.sessionId}`);\n console.log(` Thread ID: ${data.threadId}`);\n } else {\n console.log(`Error: ${(data.message as string) || (data.error as string)}`);\n process.exit(1);\n }\n } catch (err) {\n console.log(`Failed to connect to OpenACP: ${err instanceof Error ? err.message : err}`);\n process.exit(1);\n }\n}\n\nexport async function cmdIntegrate(args: string[]): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp integrate\\x1b[0m — Manage agent integrations\n\n\\x1b[1mUsage:\\x1b[0m\n openacp integrate <agent> Install integration for an agent\n openacp integrate <agent> --uninstall Remove integration\n\n\\x1b[1mArguments:\\x1b[0m\n <agent> Agent name (e.g. claude)\n\n\\x1b[1mOptions:\\x1b[0m\n --uninstall Remove the integration instead of installing\n -h, --help Show this help message\n\nIntegrations enable features like session handoff from an agent\nto OpenACP (Telegram). For example, the Claude integration adds\na \"Handoff\" slash command to Claude Code.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp integrate claude\n openacp integrate claude --uninstall\n`)\n return\n }\n\n const { getIntegration, listIntegrations } = await import(\"./integrate.js\");\n\n const agent = args[1];\n const uninstall = args.includes(\"--uninstall\");\n\n if (!agent) {\n console.log(\"Usage: openacp integrate <agent> [--uninstall]\");\n console.log(`Available integrations: ${listIntegrations().join(\", \")}`);\n process.exit(1);\n }\n\n const integration = getIntegration(agent);\n if (!integration) {\n const { suggestMatch } = await import('./suggest.js');\n const available = listIntegrations();\n const suggestion = suggestMatch(agent, available);\n console.log(`No integration available for '${agent}'.`);\n if (suggestion) console.log(`Did you mean: ${suggestion}?`);\n console.log(`Available: ${available.join(\", \")}`);\n process.exit(1);\n }\n\n for (const item of integration.items) {\n if (uninstall) {\n console.log(`Removing ${agent}/${item.id}...`);\n const result = await item.uninstall();\n for (const log of result.logs) console.log(` ${log}`);\n if (result.success) {\n console.log(` ${item.name} removed.`);\n } else {\n console.log(` Failed to remove ${item.name}.`);\n process.exit(1);\n }\n } else {\n console.log(`Installing ${agent}/${item.id}...`);\n const result = await item.install();\n for (const log of result.logs) console.log(` ${log}`);\n if (result.success) {\n console.log(` ${item.name} installed.`);\n } else {\n console.log(` Failed to install ${item.name}.`);\n process.exit(1);\n }\n }\n }\n}\n\nexport async function cmdDoctor(args: string[]): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp doctor\\x1b[0m — Run system diagnostics\n\n\\x1b[1mUsage:\\x1b[0m\n openacp doctor [--dry-run]\n\n\\x1b[1mOptions:\\x1b[0m\n --dry-run Check only, don't apply any fixes\n -h, --help Show this help message\n\nChecks your OpenACP installation for common issues including\nconfig validity, agent availability, dependencies, and connectivity.\nFixable issues can be auto-repaired when not using --dry-run.\n`)\n return\n }\n\n const knownFlags = [\"--dry-run\"];\n const unknownFlags = args.slice(1).filter(\n (a) => a.startsWith(\"--\") && !knownFlags.includes(a),\n );\n if (unknownFlags.length > 0) {\n const { suggestMatch } = await import('./suggest.js');\n for (const flag of unknownFlags) {\n const suggestion = suggestMatch(flag, knownFlags);\n console.error(`Unknown flag: ${flag}`);\n if (suggestion) console.error(`Did you mean: ${suggestion}?`);\n }\n process.exit(1);\n }\n\n const dryRun = args.includes(\"--dry-run\");\n const { DoctorEngine } = await import(\"../core/doctor/index.js\");\n const engine = new DoctorEngine({ dryRun });\n\n console.log(\"\\n🩺 OpenACP Doctor\\n\");\n\n const report = await engine.runAll();\n\n // Render results\n const icons = { pass: \"\\x1b[32m✅\\x1b[0m\", warn: \"\\x1b[33m⚠️\\x1b[0m\", fail: \"\\x1b[31m❌\\x1b[0m\" };\n\n for (const category of report.categories) {\n console.log(`\\x1b[1m\\x1b[36m${category.name}\\x1b[0m`);\n for (const result of category.results) {\n console.log(` ${icons[result.status]} ${result.message}`);\n }\n console.log();\n }\n\n // Handle risky fixes\n if (report.pendingFixes.length > 0) {\n console.log(\"\\x1b[1mFixable issues:\\x1b[0m\\n\");\n for (const pending of report.pendingFixes) {\n if (dryRun) {\n console.log(` 🔧 ${pending.message} (use without --dry-run to fix)`);\n } else {\n const { confirm } = await import(\"@inquirer/prompts\");\n const shouldFix = await confirm({\n message: `Fix: ${pending.message}?`,\n default: false,\n });\n if (shouldFix) {\n const fixResult = await pending.fix();\n if (fixResult.success) {\n console.log(` \\x1b[32m✓ ${fixResult.message}\\x1b[0m`);\n } else {\n console.log(` \\x1b[31m✗ Fix failed: ${fixResult.message}\\x1b[0m`);\n }\n }\n }\n }\n console.log();\n }\n\n // Summary\n const { passed, warnings, failed, fixed } = report.summary;\n const fixedStr = fixed > 0 ? `, ${fixed} fixed` : \"\";\n console.log(`Result: ${passed} passed, ${warnings} warnings, ${failed} failed${fixedStr}`);\n\n if (failed > 0) {\n process.exit(1);\n }\n}\n\nexport async function cmdAgents(args: string[]): Promise<void> {\n const subcommand = args[1];\n\n if (wantsHelp(args) && (!subcommand || subcommand === '--help' || subcommand === '-h')) {\n console.log(`\n\\x1b[1mopenacp agents\\x1b[0m — Manage AI coding agents\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents Browse all agents (installed + available)\n openacp agents install <name> Install an agent from the ACP Registry\n openacp agents uninstall <name> Remove an installed agent\n openacp agents info <name> Show details, dependencies & setup guide\n openacp agents run <name> [-- args] Run agent CLI directly (login, config...)\n openacp agents refresh Force-refresh agent list from registry\n\n\\x1b[1mOptions:\\x1b[0m\n -h, --help Show this help message\n\n\\x1b[1mExamples:\\x1b[0m\n openacp agents install gemini Install Gemini CLI\n openacp agents run gemini Login to Google (first run)\n openacp agents info cursor See setup instructions\n\n\\x1b[2mRun 'openacp agents <command> --help' for more info on a subcommand.\\x1b[0m\n`)\n return;\n }\n\n switch (subcommand) {\n case \"install\":\n return agentsInstall(args[2], args.includes(\"--force\"), wantsHelp(args));\n case \"uninstall\":\n return agentsUninstall(args[2], wantsHelp(args));\n case \"refresh\":\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp agents refresh\\x1b[0m — Force-refresh agent list from registry\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents refresh\n\nFetches the latest agent catalog from the ACP Registry,\nbypassing the normal staleness check.\n`)\n return;\n }\n return agentsRefresh();\n case \"info\":\n return agentsInfo(args[2], wantsHelp(args));\n case \"run\":\n return agentsRun(args[2], args.slice(3), wantsHelp(args));\n case \"list\":\n case undefined:\n return agentsList();\n default: {\n const { suggestMatch } = await import('./suggest.js');\n const agentSubcommands = [\"install\", \"uninstall\", \"refresh\", \"info\", \"run\", \"list\"];\n const suggestion = suggestMatch(subcommand, agentSubcommands);\n console.error(`Unknown agents command: ${subcommand}`);\n if (suggestion) console.error(`Did you mean: ${suggestion}?`);\n console.error(`\\nRun 'openacp agents' to see available agents.`);\n process.exit(1);\n }\n }\n}\n\nasync function agentsList(): Promise<void> {\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n await catalog.refreshRegistryIfStale();\n\n const items = catalog.getAvailable();\n const installed = items.filter((i) => i.installed);\n const available = items.filter((i) => !i.installed);\n\n console.log(\"\");\n if (installed.length > 0) {\n console.log(\" \\x1b[1mInstalled agents:\\x1b[0m\\n\");\n for (const item of installed) {\n const deps = item.missingDeps?.length\n ? ` \\x1b[33m(needs: ${item.missingDeps.join(\", \")})\\x1b[0m`\n : \"\";\n console.log(\n ` \\x1b[32m✓\\x1b[0m ${item.key.padEnd(18)} ${item.name.padEnd(22)} v${item.version.padEnd(10)} ${item.distribution}${deps}`,\n );\n if (item.description) {\n console.log(` \\x1b[2m${item.description}\\x1b[0m`);\n }\n }\n console.log(\"\");\n }\n\n if (available.length > 0) {\n console.log(\" \\x1b[1mAvailable to install:\\x1b[0m\\n\");\n for (const item of available) {\n const icon = item.available ? \"\\x1b[2m⬇\\x1b[0m\" : \"\\x1b[33m⚠\\x1b[0m\";\n const deps = item.missingDeps?.length\n ? ` \\x1b[33m(needs: ${item.missingDeps.join(\", \")})\\x1b[0m`\n : \"\";\n console.log(\n ` ${icon} ${item.key.padEnd(18)} ${item.name.padEnd(22)} v${item.version.padEnd(10)} ${item.distribution}${deps}`,\n );\n if (item.description) {\n console.log(` \\x1b[2m${item.description}\\x1b[0m`);\n }\n }\n console.log(\"\");\n }\n\n console.log(\n ` \\x1b[2mInstall an agent: openacp agents install <name>\\x1b[0m`,\n );\n console.log(\"\");\n}\n\nasync function agentsInstall(nameOrId: string | undefined, force: boolean, help = false): Promise<void> {\n if (help || !nameOrId) {\n console.log(`\n\\x1b[1mopenacp agents install\\x1b[0m — Install an agent from the ACP Registry\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents install <name> [--force]\n\n\\x1b[1mArguments:\\x1b[0m\n <name> Agent name or ID (e.g. claude, gemini, copilot)\n\n\\x1b[1mOptions:\\x1b[0m\n --force Reinstall even if already installed\n -h, --help Show this help message\n\n\\x1b[1mExamples:\\x1b[0m\n openacp agents install claude\n openacp agents install gemini --force\n\nRun 'openacp agents' to see available agents.\n`)\n return;\n }\n\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n await catalog.refreshRegistryIfStale();\n\n const progress: import(\"../core/types.js\").InstallProgress = {\n onStart(_id, name) {\n process.stdout.write(`\\n ⏳ Installing ${name}...\\n`);\n },\n onStep(step) {\n process.stdout.write(` \\x1b[32m✓\\x1b[0m ${step}\\n`);\n },\n onDownloadProgress(percent) {\n const filled = Math.round(percent / 5);\n const empty = 20 - filled;\n const bar = \"█\".repeat(filled) + \"░\".repeat(empty);\n process.stdout.write(`\\r ${bar} ${String(percent).padStart(3)}%`);\n if (percent >= 100) process.stdout.write(\"\\n\");\n },\n onSuccess(name) {\n console.log(`\\n \\x1b[32m✓ ${name} installed successfully!\\x1b[0m\\n`);\n },\n onError(error) {\n console.log(`\\n \\x1b[31m✗ ${error}\\x1b[0m\\n`);\n },\n };\n\n const result = await catalog.install(nameOrId, progress, force);\n if (!result.ok) {\n if (result.error?.includes('not found')) {\n const { suggestMatch } = await import('./suggest.js');\n const allKeys = catalog.getAvailable().map((a) => a.key);\n const suggestion = suggestMatch(nameOrId, allKeys);\n if (suggestion) console.log(` Did you mean: ${suggestion}?`);\n }\n process.exit(1);\n }\n\n // Auto-integrate handoff if agent supports it\n const { getAgentCapabilities } = await import(\"../core/agent-dependencies.js\");\n const caps = getAgentCapabilities(result.agentKey);\n if (caps.integration) {\n const { installIntegration } = await import(\"./integrate.js\");\n const intResult = await installIntegration(result.agentKey, caps.integration);\n if (intResult.success) {\n console.log(` \\x1b[32m✓\\x1b[0m Handoff integration installed for ${result.agentKey}`);\n } else {\n console.log(` \\x1b[33m⚠ Handoff integration failed: ${intResult.logs[intResult.logs.length - 1] ?? \"unknown error\"}\\x1b[0m`);\n }\n }\n\n // Show setup steps if any\n if (result.setupSteps?.length) {\n console.log(\" \\x1b[1mNext steps to get started:\\x1b[0m\\n\");\n for (const step of result.setupSteps) {\n console.log(` → ${step}`);\n }\n console.log(`\\n \\x1b[2mRun 'openacp agents info ${result.agentKey}' for more details.\\x1b[0m\\n`);\n }\n}\n\nasync function agentsUninstall(name: string | undefined, help = false): Promise<void> {\n if (help || !name) {\n console.log(`\n\\x1b[1mopenacp agents uninstall\\x1b[0m — Remove an installed agent\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents uninstall <name>\n\n\\x1b[1mArguments:\\x1b[0m\n <name> Agent name to remove\n\n\\x1b[1mExamples:\\x1b[0m\n openacp agents uninstall gemini\n`)\n return;\n }\n\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n\n const result = await catalog.uninstall(name);\n if (result.ok) {\n // Auto-uninstall handoff integration if exists\n const { getAgentCapabilities } = await import(\"../core/agent-dependencies.js\");\n const caps = getAgentCapabilities(name);\n if (caps.integration) {\n const { uninstallIntegration } = await import(\"./integrate.js\");\n await uninstallIntegration(name, caps.integration);\n console.log(` \\x1b[32m✓\\x1b[0m Handoff integration removed for ${name}`);\n }\n console.log(`\\n \\x1b[32m✓ ${name} removed.\\x1b[0m\\n`);\n } else {\n console.log(`\\n \\x1b[31m✗ ${result.error}\\x1b[0m`);\n if (result.error?.includes('not installed')) {\n const { suggestMatch } = await import('./suggest.js');\n const installedKeys = Object.keys(catalog.getInstalledEntries());\n const suggestion = suggestMatch(name, installedKeys);\n if (suggestion) console.log(` Did you mean: ${suggestion}?`);\n }\n console.log();\n }\n}\n\nasync function agentsRefresh(): Promise<void> {\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n console.log(\"\\n Updating agent list...\");\n await catalog.fetchRegistry();\n console.log(\" \\x1b[32m✓ Agent list updated.\\x1b[0m\\n\");\n}\n\nasync function agentsInfo(nameOrId: string | undefined, help = false): Promise<void> {\n if (help || !nameOrId) {\n console.log(`\n\\x1b[1mopenacp agents info\\x1b[0m — Show agent details, dependencies & setup guide\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents info <name>\n\n\\x1b[1mArguments:\\x1b[0m\n <name> Agent name or ID\n\nShows version, distribution type, command, setup steps, and\nwhether the agent is installed or available from the registry.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp agents info claude\n openacp agents info cursor\n`)\n return;\n }\n\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n\n const { getAgentSetup } = await import(\"../core/agent-dependencies.js\");\n\n const installed = catalog.getInstalledAgent(nameOrId);\n if (installed) {\n console.log(`\\n \\x1b[1m${installed.name}\\x1b[0m`);\n console.log(` Version: ${installed.version}`);\n console.log(` Type: ${installed.distribution}`);\n console.log(` Command: ${installed.command} ${installed.args.join(\" \")}`);\n console.log(` Installed: ${new Date(installed.installedAt).toLocaleDateString()}`);\n if (installed.binaryPath) console.log(` Binary path: ${installed.binaryPath}`);\n\n const setup = installed.registryId ? getAgentSetup(installed.registryId) : undefined;\n if (setup) {\n console.log(`\\n \\x1b[1mSetup:\\x1b[0m`);\n for (const step of setup.setupSteps) {\n console.log(` → ${step}`);\n }\n }\n\n console.log(`\\n Run agent CLI: openacp agents run ${nameOrId} -- <args>`);\n console.log(\"\");\n return;\n }\n\n const regAgent = catalog.findRegistryAgent(nameOrId);\n if (regAgent) {\n const availability = catalog.checkAvailability(nameOrId);\n console.log(`\\n \\x1b[1m${regAgent.name}\\x1b[0m \\x1b[2m(not installed)\\x1b[0m`);\n console.log(` ${regAgent.description}`);\n console.log(` Version: ${regAgent.version}`);\n console.log(` License: ${regAgent.license ?? \"unknown\"}`);\n if (regAgent.website) console.log(` Website: ${regAgent.website}`);\n if (regAgent.repository) console.log(` Source: ${regAgent.repository}`);\n console.log(` Available: ${availability.available ? \"\\x1b[32mYes\\x1b[0m\" : `\\x1b[33mNo\\x1b[0m — ${availability.reason}`}`);\n\n const setup = getAgentSetup(regAgent.id);\n if (setup) {\n console.log(`\\n \\x1b[1mSetup after install:\\x1b[0m`);\n for (const step of setup.setupSteps) {\n console.log(` → ${step}`);\n }\n }\n\n console.log(`\\n Install: openacp agents install ${nameOrId}\\n`);\n return;\n }\n\n const { suggestMatch } = await import('./suggest.js');\n const allKeys = catalog.getAvailable().map((a) => a.key);\n const suggestion = suggestMatch(nameOrId, allKeys);\n console.log(`\\n \\x1b[31m\"${nameOrId}\" not found.\\x1b[0m`);\n if (suggestion) console.log(` Did you mean: ${suggestion}?`);\n console.log(` Run 'openacp agents' to see available agents.\\n`);\n}\n\nasync function agentsRun(nameOrId: string | undefined, extraArgs: string[], help = false): Promise<void> {\n if (help || !nameOrId) {\n console.log(`\n\\x1b[1mopenacp agents run\\x1b[0m — Run agent CLI directly\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents run <name> [-- <args>]\n\n\\x1b[1mArguments:\\x1b[0m\n <name> Installed agent name\n <args> Arguments to pass to the agent CLI\n\nUse \\x1b[1m--\\x1b[0m to separate OpenACP flags from agent arguments.\nACP-specific flags are automatically stripped.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp agents run gemini Login to Google (first run)\n openacp agents run copilot Login to GitHub Copilot (first run)\n openacp agents run cline Setup API keys (first run)\n`)\n return;\n }\n\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n\n const installed = catalog.getInstalledAgent(nameOrId);\n if (!installed) {\n const { suggestMatch } = await import('./suggest.js');\n const installedKeys = Object.keys(catalog.getInstalledEntries());\n const suggestion = suggestMatch(nameOrId, installedKeys);\n console.log(`\\n \\x1b[31m\"${nameOrId}\" is not installed.\\x1b[0m`);\n if (suggestion) {\n console.log(` Did you mean: ${suggestion}?`);\n console.log(` Install first: openacp agents install ${suggestion}\\n`);\n } else {\n console.log(` Install first: openacp agents install ${nameOrId}\\n`);\n }\n return;\n }\n\n // Strip leading \"--\" separator if present\n const userArgs = extraArgs[0] === \"--\" ? extraArgs.slice(1) : extraArgs;\n\n const { spawnSync } = await import(\"node:child_process\");\n const command = installed.command;\n\n // Include agent's base args (e.g., package name for npx) but strip ACP-specific flags\n const acpFlags = new Set([\"--acp\", \"acp\", \"--acp=true\", \"--experimental-skills\"]);\n const baseArgs: string[] = [];\n for (let i = 0; i < installed.args.length; i++) {\n const arg = installed.args[i]!;\n // Skip standalone ACP flags\n if (acpFlags.has(arg)) continue;\n // Skip \"--output-format acp\" pair (factory-droid pattern)\n if (arg === \"--output-format\" && installed.args[i + 1] === \"acp\") { i++; continue; }\n // Skip \"exec\" subcommand used only in ACP mode (factory-droid)\n if (arg === \"exec\" && installed.args[i + 1] === \"--output-format\") continue;\n baseArgs.push(arg);\n }\n const fullArgs = [...baseArgs, ...userArgs];\n\n console.log(`\\n Running: ${command} ${fullArgs.join(\" \")}\\n`);\n\n const result = spawnSync(command, fullArgs, {\n stdio: \"inherit\",\n env: { ...process.env, ...installed.env },\n cwd: process.cwd(),\n });\n\n if (result.status !== null && result.status !== 0) {\n process.exit(result.status);\n }\n}\n\nexport async function cmdDefault(command: string | undefined): Promise<void> {\n const forceForeground = command === '--foreground'\n\n // Reject unknown commands\n if (command && !command.startsWith('-')) {\n const { suggestMatch } = await import('./suggest.js')\n const topLevelCommands = [\n 'start', 'stop', 'status', 'logs', 'config', 'reset', 'update',\n 'install', 'uninstall', 'plugins', 'api', 'adopt', 'integrate', 'doctor', 'agents',\n ]\n const suggestion = suggestMatch(command, topLevelCommands)\n console.error(`Unknown command: ${command}`)\n if (suggestion) console.error(`Did you mean: ${suggestion}?`)\n printHelp()\n process.exit(1)\n }\n\n await checkAndPromptUpdate()\n\n const { ConfigManager } = await import('../core/config.js')\n const cm = new ConfigManager()\n\n // If no config, run setup first\n if (!(await cm.exists())) {\n const { runSetup } = await import('../core/setup.js')\n const shouldStart = await runSetup(cm)\n if (!shouldStart) process.exit(0)\n }\n\n await cm.load()\n const config = cm.get()\n\n if (!forceForeground && config.runMode === 'daemon') {\n const { startDaemon, getPidPath } = await import('../core/daemon.js')\n const result = startDaemon(getPidPath(), config.logging.logDir)\n if ('error' in result) {\n console.error(result.error)\n process.exit(1)\n }\n console.log(`OpenACP daemon started (PID ${result.pid})`)\n return\n }\n\n const { markRunning } = await import('../core/daemon.js')\n markRunning()\n const { startServer } = await import('../main.js')\n await startServer()\n}\n"],"mappings":"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","names":["args","getCurrentVersion","port","ConfigManager","cm","command"]}
1
+ {"version":3,"sources":["../../src/cli.ts","../../src/cli/commands.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { setDefaultAutoSelectFamily } from \"node:net\";\nsetDefaultAutoSelectFamily(false);\n\nimport {\n printHelp,\n cmdVersion,\n cmdInstall,\n cmdUninstall,\n cmdPlugins,\n cmdApi,\n cmdStart,\n cmdStop,\n cmdStatus,\n cmdLogs,\n cmdConfig,\n cmdReset,\n cmdUpdate,\n cmdDefault,\n cmdAdopt,\n cmdIntegrate,\n cmdDoctor,\n cmdAgents,\n cmdTunnel,\n} from './cli/commands.js'\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nconst commands: Record<string, () => Promise<void>> = {\n '--help': async () => printHelp(),\n '-h': async () => printHelp(),\n '--version': () => cmdVersion(),\n '-v': () => cmdVersion(),\n 'install': () => cmdInstall(args),\n 'uninstall': () => cmdUninstall(args),\n 'plugins': () => cmdPlugins(args),\n 'api': () => cmdApi(args),\n 'start': () => cmdStart(args),\n 'stop': () => cmdStop(args),\n 'status': () => cmdStatus(args),\n 'logs': () => cmdLogs(args),\n 'config': () => cmdConfig(args),\n 'reset': () => cmdReset(args),\n 'update': () => cmdUpdate(args),\n 'adopt': () => cmdAdopt(args),\n 'integrate': () => cmdIntegrate(args),\n 'doctor': () => cmdDoctor(args),\n 'agents': () => cmdAgents(args),\n 'tunnel': () => cmdTunnel(args),\n '--daemon-child': async () => {\n const { startServer } = await import('./main.js')\n await startServer()\n },\n}\n\nasync function main() {\n const handler = command ? commands[command] : undefined\n if (handler) {\n await handler()\n } else {\n await cmdDefault(command)\n }\n}\n\nmain().catch((err) => {\n console.error(\"Fatal:\", err);\n process.exit(1);\n});\n","import { installPlugin, uninstallPlugin, listPlugins } from '../core/plugin-manager.js'\nimport { readApiPort, removeStalePortFile, apiCall } from '../core/api-client.js'\nimport { getCurrentVersion, getLatestVersion, compareVersions, runUpdate, checkAndPromptUpdate } from './version.js'\n\nfunction wantsHelp(args: string[]): boolean {\n return args.includes('--help') || args.includes('-h')\n}\n\nexport function printHelp(): void {\n console.log(`\n\\x1b[1mOpenACP\\x1b[0m — Self-hosted bridge for AI coding agents\nConnect Telegram (and more) to 28+ AI coding agents via ACP protocol.\n\n\\x1b[1mGetting Started:\\x1b[0m\n openacp First run launches setup wizard\n openacp After setup, starts the server\n\n\\x1b[1mServer:\\x1b[0m\n openacp Start (mode from config)\n openacp start Start as background daemon\n openacp stop Stop background daemon\n openacp status Show daemon status\n openacp logs Tail daemon log file\n openacp --foreground Force foreground mode\n\n\\x1b[1mAgent Management:\\x1b[0m\n openacp agents Browse all agents (installed + available)\n openacp agents install <name> Install an agent from the ACP Registry\n openacp agents uninstall <name> Remove an installed agent\n openacp agents info <name> Show details, dependencies & setup guide\n openacp agents run <name> [-- args] Run agent CLI directly (login, config...)\n openacp agents refresh Force-refresh agent list from registry\n\n \\x1b[2mExamples:\\x1b[0m\n openacp agents install gemini Install Gemini CLI\n openacp agents run gemini Login to Google (first run)\n openacp agents info cursor See setup instructions\n\n\\x1b[1mConfiguration:\\x1b[0m\n openacp config Interactive config editor\n openacp config set <key> <value> Set a config value\n openacp reset Re-run setup wizard\n openacp update Update to latest version\n openacp doctor Run system diagnostics\n openacp doctor --dry-run Check only, don't fix\n\n\\x1b[1mPlugins:\\x1b[0m\n openacp install <package> Install adapter (e.g. @openacp/adapter-discord)\n openacp uninstall <package> Remove adapter\n openacp plugins List installed plugins\n\n\\x1b[1mSession Transfer:\\x1b[0m\n openacp integrate <agent> Install handoff integration\n openacp integrate <agent> --uninstall\n openacp adopt <agent> <id> Adopt an external session\n\n\\x1b[1mTunnels:\\x1b[0m\n openacp tunnel add <port> [--label name] Create tunnel to local port\n openacp tunnel list List active tunnels\n openacp tunnel stop <port> Stop a tunnel\n openacp tunnel stop-all Stop all user tunnels\n\n\\x1b[1mDaemon API:\\x1b[0m \\x1b[2m(requires running daemon)\\x1b[0m\n openacp api status Active sessions\n openacp api session <id> Session details\n openacp api new [agent] [workspace] Create session\n openacp api send <id> <prompt> Send prompt\n openacp api cancel <id> Cancel session\n openacp api dangerous <id> on|off Toggle dangerous mode\n openacp api topics [--status ...] List topics\n openacp api cleanup [--status ...] Cleanup old topics\n openacp api health System health check\n openacp api restart Restart daemon\n\n\\x1b[2mMore info: https://github.com/Open-ACP/OpenACP\\x1b[0m\n`)\n}\n\nexport async function cmdVersion(): Promise<void> {\n const { getCurrentVersion } = await import(\"./version.js\")\n console.log(`openacp v${getCurrentVersion()}`)\n}\n\nexport async function cmdInstall(args: string[]): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp install\\x1b[0m — Install a plugin adapter\n\n\\x1b[1mUsage:\\x1b[0m\n openacp install <package>\n\n\\x1b[1mArguments:\\x1b[0m\n <package> npm package name (e.g. @openacp/adapter-discord)\n\nInstalls the plugin to ~/.openacp/plugins/.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp install @openacp/adapter-discord\n`)\n return\n }\n const pkg = args[1]\n if (!pkg) {\n console.error(\"Usage: openacp install <package>\")\n process.exit(1)\n }\n installPlugin(pkg)\n}\n\nexport async function cmdUninstall(args: string[]): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp uninstall\\x1b[0m — Remove a plugin adapter\n\n\\x1b[1mUsage:\\x1b[0m\n openacp uninstall <package>\n\n\\x1b[1mArguments:\\x1b[0m\n <package> npm package name to remove\n\n\\x1b[1mExamples:\\x1b[0m\n openacp uninstall @openacp/adapter-discord\n`)\n return\n }\n const pkg = args[1]\n if (!pkg) {\n console.error(\"Usage: openacp uninstall <package>\")\n process.exit(1)\n }\n uninstallPlugin(pkg)\n}\n\nexport async function cmdPlugins(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp plugins\\x1b[0m — List installed plugins\n\n\\x1b[1mUsage:\\x1b[0m\n openacp plugins\n\nShows all plugins installed in ~/.openacp/plugins/.\n`)\n return\n }\n const plugins = listPlugins()\n const entries = Object.entries(plugins)\n if (entries.length === 0) {\n console.log(\"No plugins installed.\")\n } else {\n console.log(\"Installed plugins:\")\n for (const [name, version] of entries) {\n console.log(` ${name}@${version}`)\n }\n }\n}\n\nfunction printApiHelp(): void {\n console.log(`\n\\x1b[1mopenacp api\\x1b[0m — Interact with the running OpenACP daemon\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api <command> [options]\n\n\\x1b[1mRequires a running daemon.\\x1b[0m Start with: openacp start\n\n\\x1b[1mSession Commands:\\x1b[0m\n openacp api status Show active sessions\n openacp api session <id> Show session details\n openacp api new [agent] [workspace] Create a new session\n openacp api send <id> <prompt> Send prompt to session\n openacp api cancel <id> Cancel a session\n openacp api dangerous <id> on|off Toggle dangerous mode\n\n\\x1b[1mTopic Commands:\\x1b[0m\n openacp api topics [--status s1,s2] List topics\n openacp api delete-topic <id> [--force] Delete a topic\n openacp api cleanup [--status s1,s2] Cleanup finished topics\n\n\\x1b[1mSystem Commands:\\x1b[0m\n openacp api health Show system health\n openacp api agents List available agents\n openacp api adapters List registered adapters\n openacp api tunnel Show tunnel status\n openacp api config Show runtime config\n openacp api config set <key> <value> Update config value\n openacp api notify <message> Send notification to all channels\n openacp api restart Restart daemon\n openacp api version Show daemon version\n\n\\x1b[1mOptions:\\x1b[0m\n -h, --help Show this help message\n`)\n}\n\nexport async function cmdApi(args: string[]): Promise<void> {\n const subCmd = args[1]\n\n if (wantsHelp(args) && (!subCmd || subCmd === '--help' || subCmd === '-h')) {\n printApiHelp()\n return\n }\n\n // Handle --help for individual api subcommands (before port check)\n if (wantsHelp(args) && subCmd) {\n const apiSubHelp: Record<string, string> = {\n 'status': `\n\\x1b[1mopenacp api status\\x1b[0m — Show active sessions\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api status\n\nLists all active sessions with their ID, agent, status, and name.\n`,\n 'session': `\n\\x1b[1mopenacp api session\\x1b[0m — Show session details\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api session <id>\n\n\\x1b[1mArguments:\\x1b[0m\n <id> Session ID\n\nShows detailed info: agent, status, name, workspace, creation time,\ndangerous mode, queue depth, and channel/thread IDs.\n`,\n 'new': `\n\\x1b[1mopenacp api new\\x1b[0m — Create a new session\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api new [agent] [workspace]\n openacp api new [agent] --workspace <path>\n\n\\x1b[1mArguments:\\x1b[0m\n [agent] Agent name (uses default if omitted)\n [workspace] Working directory for the session\n\n\\x1b[1mExamples:\\x1b[0m\n openacp api new\n openacp api new claude /path/to/project\n openacp api new gemini --workspace /path/to/project\n`,\n 'send': `\n\\x1b[1mopenacp api send\\x1b[0m — Send prompt to a session\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api send <id> <prompt>\n\n\\x1b[1mArguments:\\x1b[0m\n <id> Session ID\n <prompt> Prompt text (all remaining arguments are joined)\n\n\\x1b[1mExamples:\\x1b[0m\n openacp api send abc123 \"Fix the login bug\"\n openacp api send abc123 refactor the auth module\n`,\n 'cancel': `\n\\x1b[1mopenacp api cancel\\x1b[0m — Cancel a session\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api cancel <id>\n\n\\x1b[1mArguments:\\x1b[0m\n <id> Session ID to cancel\n`,\n 'dangerous': `\n\\x1b[1mopenacp api dangerous\\x1b[0m — Toggle dangerous mode for a session\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api dangerous <id> on|off\n\n\\x1b[1mArguments:\\x1b[0m\n <id> Session ID\n on|off Enable or disable dangerous mode\n\nDangerous mode allows the agent to run destructive commands\nwithout confirmation prompts.\n`,\n 'topics': `\n\\x1b[1mopenacp api topics\\x1b[0m — List topics\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api topics [--status <statuses>]\n\n\\x1b[1mOptions:\\x1b[0m\n --status <s1,s2> Filter by status (comma-separated)\n\n\\x1b[1mExamples:\\x1b[0m\n openacp api topics\n openacp api topics --status active,finished\n`,\n 'delete-topic': `\n\\x1b[1mopenacp api delete-topic\\x1b[0m — Delete a topic\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api delete-topic <id> [--force]\n\n\\x1b[1mArguments:\\x1b[0m\n <id> Session ID of the topic to delete\n\n\\x1b[1mOptions:\\x1b[0m\n --force Delete even if session is active\n`,\n 'cleanup': `\n\\x1b[1mopenacp api cleanup\\x1b[0m — Cleanup finished topics\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api cleanup [--status <statuses>]\n\n\\x1b[1mOptions:\\x1b[0m\n --status <s1,s2> Filter by status (comma-separated, default: finished topics)\n\n\\x1b[1mExamples:\\x1b[0m\n openacp api cleanup\n openacp api cleanup --status finished,error\n`,\n 'health': `\n\\x1b[1mopenacp api health\\x1b[0m — Show system health\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api health\n\nShows status, uptime, version, memory usage, session counts,\nregistered adapters, and tunnel status.\n`,\n 'agents': `\n\\x1b[1mopenacp api agents\\x1b[0m — List available agents from running daemon\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api agents\n\nLists agents configured in the running daemon with their names\nand which one is the default.\n`,\n 'adapters': `\n\\x1b[1mopenacp api adapters\\x1b[0m — List registered adapters\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api adapters\n\nShows all channel adapters registered with the running daemon.\n`,\n 'tunnel': `\n\\x1b[1mopenacp api tunnel\\x1b[0m — Show tunnel status\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api tunnel\n\nShows whether a tunnel is enabled, the provider, and the URL.\n`,\n 'config': `\n\\x1b[1mopenacp api config\\x1b[0m — Show or update runtime config\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api config Show current runtime config\n openacp api config set <key> <value> Update a config value\n\n\\x1b[2mNote: Prefer 'openacp config' instead — it works whether daemon is running or not.\\x1b[0m\n`,\n 'restart': `\n\\x1b[1mopenacp api restart\\x1b[0m — Restart the daemon\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api restart\n\nSends a restart signal to the running daemon.\n`,\n 'notify': `\n\\x1b[1mopenacp api notify\\x1b[0m — Send notification to all channels\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api notify <message>\n\n\\x1b[1mArguments:\\x1b[0m\n <message> Notification text (all remaining arguments are joined)\n\n\\x1b[1mExamples:\\x1b[0m\n openacp api notify \"Deployment complete\"\n`,\n 'version': `\n\\x1b[1mopenacp api version\\x1b[0m — Show daemon version\n\n\\x1b[1mUsage:\\x1b[0m\n openacp api version\n\nShows the version of the currently running daemon process.\n`,\n }\n const help = apiSubHelp[subCmd]\n if (help) {\n console.log(help)\n return\n }\n // Unknown subcommand with --help, show general help\n printApiHelp()\n return\n }\n\n const port = readApiPort()\n if (port === null) {\n console.error('OpenACP is not running. Start with `openacp start`')\n process.exit(1)\n }\n\n try {\n if (subCmd === 'new') {\n const agent = args[2]\n const workspaceIdx = args.indexOf('--workspace')\n const workspace = workspaceIdx !== -1 ? args[workspaceIdx + 1] : args[3]\n const body: Record<string, string> = {}\n if (agent) body.agent = agent\n if (workspace) body.workspace = workspace\n\n const res = await apiCall(port, '/api/sessions', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log('Session created')\n console.log(` ID : ${data.sessionId}`)\n console.log(` Agent : ${data.agent}`)\n console.log(` Workspace : ${data.workspace}`)\n console.log(` Status : ${data.status}`)\n\n } else if (subCmd === 'cancel') {\n const sessionId = args[2]\n if (!sessionId) {\n console.error('Usage: openacp api cancel <session-id>')\n process.exit(1)\n }\n const res = await apiCall(port, `/api/sessions/${encodeURIComponent(sessionId)}`, {\n method: 'DELETE',\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Session ${sessionId} cancelled`)\n\n } else if (subCmd === 'status') {\n const res = await apiCall(port, '/api/sessions')\n const data = await res.json() as { sessions: Array<{ id: string; agent: string; status: string; name: string | null }> }\n if (data.sessions.length === 0) {\n console.log('No active sessions.')\n } else {\n console.log(`Active sessions: ${data.sessions.length}\\n`)\n for (const s of data.sessions) {\n const name = s.name ? ` \"${s.name}\"` : ''\n console.log(` ${s.id} ${s.agent} ${s.status}${name}`)\n }\n }\n\n } else if (subCmd === 'agents') {\n const res = await apiCall(port, '/api/agents')\n const data = await res.json() as { agents: Array<{ name: string; command: string; args: string[] }>; default: string }\n console.log('Available agents:')\n for (const a of data.agents) {\n const isDefault = a.name === data.default ? ' (default)' : ''\n console.log(` ${a.name}${isDefault}`)\n }\n\n } else if (subCmd === 'topics') {\n const statusIdx = args.indexOf('--status')\n const statusParam = statusIdx !== -1 ? args[statusIdx + 1] : undefined\n const query = statusParam ? `?status=${encodeURIComponent(statusParam)}` : ''\n const res = await apiCall(port, `/api/topics${query}`)\n const data = await res.json() as { topics: Array<{ sessionId: string; topicId: number | null; name: string | null; status: string; agentName: string; lastActiveAt: string }> }\n if (data.topics.length === 0) {\n console.log('No topics found.')\n } else {\n console.log(`Topics: ${data.topics.length}\\n`)\n for (const t of data.topics) {\n const name = t.name ? ` \"${t.name}\"` : ''\n const topic = t.topicId ? `Topic #${t.topicId}` : 'headless'\n console.log(` ${t.sessionId} ${t.agentName} ${t.status}${name} ${topic}`)\n }\n }\n\n } else if (subCmd === 'delete-topic') {\n const sessionId = args[2]\n if (!sessionId) {\n console.error('Usage: openacp api delete-topic <session-id> [--force]')\n process.exit(1)\n }\n const force = args.includes('--force')\n const query = force ? '?force=true' : ''\n const res = await apiCall(port, `/api/topics/${encodeURIComponent(sessionId)}${query}`, { method: 'DELETE' })\n const data = await res.json() as Record<string, unknown>\n if (res.status === 409) {\n console.error(`Session \"${sessionId}\" is active (${(data.session as any)?.status}). Use --force to delete.`)\n process.exit(1)\n }\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n const topicLabel = data.topicId ? `Topic #${data.topicId}` : 'headless session'\n console.log(`${topicLabel} deleted (session ${sessionId})`)\n\n } else if (subCmd === 'cleanup') {\n const statusIdx = args.indexOf('--status')\n const statusParam = statusIdx !== -1 ? args[statusIdx + 1] : undefined\n const body: Record<string, unknown> = {}\n if (statusParam) body.statuses = statusParam.split(',')\n const res = await apiCall(port, '/api/topics/cleanup', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n const data = await res.json() as { deleted: string[]; failed: Array<{ sessionId: string; error: string }> }\n if (data.deleted.length === 0 && data.failed.length === 0) {\n console.log('Nothing to clean up.')\n } else {\n console.log(`Cleaned up ${data.deleted.length} topics${data.deleted.length ? ': ' + data.deleted.join(', ') : ''} (${data.failed.length} failed)`)\n for (const f of data.failed) {\n console.error(` Failed: ${f.sessionId} — ${f.error}`)\n }\n }\n\n } else if (subCmd === 'send') {\n const sessionId = args[2]\n if (!sessionId) {\n console.error('Usage: openacp api send <session-id> <prompt>')\n process.exit(1)\n }\n const prompt = args.slice(3).join(' ')\n if (!prompt) {\n console.error('Usage: openacp api send <session-id> <prompt>')\n process.exit(1)\n }\n const res = await apiCall(port, `/api/sessions/${encodeURIComponent(sessionId)}/prompt`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ prompt }),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Prompt sent to session ${sessionId} (queue depth: ${data.queueDepth})`)\n\n } else if (subCmd === 'session') {\n const sessionId = args[2]\n if (!sessionId) {\n console.error('Usage: openacp api session <session-id>')\n process.exit(1)\n }\n const res = await apiCall(port, `/api/sessions/${encodeURIComponent(sessionId)}`)\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Session details:`)\n console.log(` ID : ${data.id}`)\n console.log(` Agent : ${data.agent}`)\n console.log(` Status : ${data.status}`)\n console.log(` Name : ${data.name ?? '(none)'}`)\n console.log(` Workspace : ${data.workspace}`)\n console.log(` Created : ${data.createdAt}`)\n console.log(` Dangerous : ${data.dangerous}`)\n console.log(` Queue depth : ${data.queueDepth}`)\n console.log(` Prompt active : ${data.promptActive}`)\n console.log(` Channel : ${data.channelId ?? '(none)'}`)\n console.log(` Thread : ${data.threadId ?? '(none)'}`)\n\n } else if (subCmd === 'dangerous') {\n const sessionId = args[2]\n if (!sessionId) {\n console.error('Usage: openacp api dangerous <session-id> [on|off]')\n process.exit(1)\n }\n const toggle = args[3]\n if (!toggle || (toggle !== 'on' && toggle !== 'off')) {\n console.error('Usage: openacp api dangerous <session-id> [on|off]')\n process.exit(1)\n }\n const res = await apiCall(port, `/api/sessions/${encodeURIComponent(sessionId)}/dangerous`, {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ enabled: toggle === 'on' }),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n const state = toggle === 'on' ? 'enabled' : 'disabled'\n console.log(`Dangerous mode ${state} for session ${sessionId}`)\n\n } else if (subCmd === 'health') {\n const res = await apiCall(port, '/api/health')\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n const uptimeSeconds = typeof data.uptimeSeconds === 'number' ? data.uptimeSeconds : 0\n const hours = Math.floor(uptimeSeconds / 3600)\n const minutes = Math.floor((uptimeSeconds % 3600) / 60)\n const memoryBytes = typeof data.memoryUsage === 'number' ? data.memoryUsage : 0\n const memoryMB = (memoryBytes / 1024 / 1024).toFixed(1)\n const sessions = data.sessions as Record<string, unknown> ?? {}\n console.log(`Status : ${data.status}`)\n console.log(`Uptime : ${hours}h ${minutes}m`)\n console.log(`Version : ${data.version}`)\n console.log(`Memory : ${memoryMB} MB`)\n console.log(`Sessions : ${sessions.active ?? 0} active / ${sessions.total ?? 0} total`)\n console.log(`Adapters : ${data.adapters}`)\n console.log(`Tunnel : ${data.tunnel}`)\n\n } else if (subCmd === 'restart') {\n const res = await apiCall(port, '/api/restart', { method: 'POST' })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log('Restart signal sent. OpenACP is restarting...')\n\n } else if (subCmd === 'config') {\n console.warn('⚠️ Deprecated: use \"openacp config\" or \"openacp config set\" instead.')\n const subSubCmd = args[2]\n if (!subSubCmd) {\n const res = await apiCall(port, '/api/config')\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(JSON.stringify(data.config, null, 2))\n } else if (subSubCmd === 'set') {\n const configPath = args[3]\n const configValue = args[4]\n if (!configPath || configValue === undefined) {\n console.error('Usage: openacp api config set <path> <value>')\n process.exit(1)\n }\n let value: unknown = configValue\n try {\n value = JSON.parse(configValue)\n } catch {\n // keep as string\n }\n const res = await apiCall(port, '/api/config', {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: configPath, value }),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Config updated: ${configPath} = ${JSON.stringify(value)}`)\n if (data.needsRestart) {\n console.log('Note: restart required for this change to take effect.')\n }\n } else {\n console.error(`Unknown config subcommand: ${subSubCmd}`)\n console.log(' openacp api config Show runtime config')\n console.log(' openacp api config set <key> <value> Update config value')\n process.exit(1)\n }\n\n } else if (subCmd === 'adapters') {\n const res = await apiCall(port, '/api/adapters')\n const data = await res.json() as { adapters: Array<{ name: string; type: string }> }\n if (!res.ok) {\n console.error(`Error: ${(data as any).error}`)\n process.exit(1)\n }\n console.log('Registered adapters:')\n for (const a of data.adapters) {\n console.log(` ${a.name} (${a.type})`)\n }\n\n } else if (subCmd === 'tunnel') {\n const res = await apiCall(port, '/api/tunnel')\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n if (data.enabled) {\n console.log(`Tunnel provider : ${data.provider}`)\n console.log(`Tunnel URL : ${data.url}`)\n } else {\n console.log('Tunnel: not enabled')\n }\n\n } else if (subCmd === 'notify') {\n const message = args.slice(2).join(' ')\n if (!message) {\n console.error('Usage: openacp api notify <message>')\n process.exit(1)\n }\n const res = await apiCall(port, '/api/notify', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ message }),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log('Notification sent to all channels.')\n\n } else if (subCmd === 'version') {\n const res = await apiCall(port, '/api/version')\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Daemon version: ${data.version}`)\n\n } else {\n const { suggestMatch } = await import('./suggest.js')\n const apiSubcommands = [\n 'new', 'cancel', 'status', 'agents', 'topics', 'delete-topic',\n 'cleanup', 'send', 'session', 'dangerous', 'health', 'restart',\n 'config', 'adapters', 'tunnel', 'notify', 'version',\n ]\n const suggestion = suggestMatch(subCmd ?? '', apiSubcommands)\n console.error(`Unknown api command: ${subCmd || '(none)'}\\n`)\n if (suggestion) console.error(`Did you mean: ${suggestion}?\\n`)\n printApiHelp()\n process.exit(1)\n }\n } catch (err) {\n if (err instanceof TypeError && (err as any).cause?.code === 'ECONNREFUSED') {\n console.error('OpenACP is not running (stale port file)')\n removeStalePortFile()\n process.exit(1)\n }\n throw err\n }\n}\n\nexport async function cmdStart(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp start\\x1b[0m — Start OpenACP as a background daemon\n\n\\x1b[1mUsage:\\x1b[0m\n openacp start\n\nStarts the server as a background process (daemon mode).\nRequires an existing config — run 'openacp' first to set up.\n\n\\x1b[1mSee also:\\x1b[0m\n openacp stop Stop the daemon\n openacp status Check if daemon is running\n openacp logs Tail daemon log file\n`)\n return\n }\n await checkAndPromptUpdate()\n const { startDaemon, getPidPath } = await import('../core/daemon.js')\n const { ConfigManager } = await import('../core/config.js')\n const cm = new ConfigManager()\n if (await cm.exists()) {\n await cm.load()\n const config = cm.get()\n const result = startDaemon(getPidPath(), config.logging.logDir)\n if ('error' in result) {\n console.error(result.error)\n process.exit(1)\n }\n console.log(`OpenACP daemon started (PID ${result.pid})`)\n } else {\n console.error('No config found. Run \"openacp\" first to set up.')\n process.exit(1)\n }\n}\n\nexport async function cmdStop(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp stop\\x1b[0m — Stop the background daemon\n\n\\x1b[1mUsage:\\x1b[0m\n openacp stop\n\nSends a stop signal to the running OpenACP daemon process.\n`)\n return\n }\n const { stopDaemon } = await import('../core/daemon.js')\n const result = stopDaemon()\n if (result.stopped) {\n console.log(`OpenACP daemon stopped (was PID ${result.pid})`)\n } else {\n console.error(result.error)\n process.exit(1)\n }\n}\n\nexport async function cmdStatus(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp status\\x1b[0m — Show daemon status\n\n\\x1b[1mUsage:\\x1b[0m\n openacp status\n\nShows whether the OpenACP daemon is running and its PID.\n`)\n return\n }\n const { getStatus } = await import('../core/daemon.js')\n const status = getStatus()\n if (status.running) {\n console.log(`OpenACP is running (PID ${status.pid})`)\n } else {\n console.log('OpenACP is not running')\n }\n}\n\nexport async function cmdLogs(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp logs\\x1b[0m — Tail daemon log file\n\n\\x1b[1mUsage:\\x1b[0m\n openacp logs\n\nStreams the last 50 lines of the OpenACP log file and\nfollows new output (like tail -f). Press Ctrl+C to stop.\n\nLog file location is configured in config (default: ~/.openacp/logs/).\n`)\n return\n }\n const { spawn } = await import('node:child_process')\n const { ConfigManager, expandHome } = await import('../core/config.js')\n const pathMod = await import('node:path')\n const cm = new ConfigManager()\n let logDir = '~/.openacp/logs'\n if (await cm.exists()) {\n await cm.load()\n logDir = cm.get().logging.logDir\n }\n const logFile = pathMod.join(expandHome(logDir), 'openacp.log')\n const tail = spawn('tail', ['-f', '-n', '50', logFile], { stdio: 'inherit' })\n tail.on('error', (err: Error) => {\n console.error(`Cannot tail log file: ${err.message}`)\n process.exit(1)\n })\n}\n\nexport async function cmdConfig(args: string[] = []): Promise<void> {\n const subCmd = args[1] // 'set' or undefined\n\n if (wantsHelp(args) && subCmd === 'set') {\n console.log(`\n\\x1b[1mopenacp config set\\x1b[0m — Set a config value directly\n\n\\x1b[1mUsage:\\x1b[0m\n openacp config set <key> <value>\n\n\\x1b[1mArguments:\\x1b[0m\n <key> Dot-notation config path (e.g. telegram.botToken)\n <value> New value (JSON-parsed if possible, otherwise string)\n\n\\x1b[1mOptions:\\x1b[0m\n -h, --help Show this help message\n\nWorks with both running and stopped daemon. When running, uses\nthe API for live updates. When stopped, edits config file directly.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp config set defaultAgent claude\n openacp config set security.maxConcurrentSessions 5\n openacp config set telegram.botToken \"123:ABC\"\n`)\n return\n }\n\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp config\\x1b[0m — View and edit configuration\n\n\\x1b[1mUsage:\\x1b[0m\n openacp config Open interactive config editor\n openacp config set <key> <value> Set a config value directly\n\n\\x1b[1mOptions:\\x1b[0m\n -h, --help Show this help message\n\nWorks with both running and stopped daemon. When running, uses\nthe API for live updates. When stopped, edits config file directly.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp config\n openacp config set defaultAgent claude\n\n\\x1b[2mRun 'openacp config set --help' for more info on the set subcommand.\\x1b[0m\n`)\n return\n }\n\n if (subCmd === 'set') {\n // Non-interactive: openacp config set <key> <value>\n const configPath = args[2]\n const configValue = args[3]\n if (!configPath || configValue === undefined) {\n console.error('Usage: openacp config set <path> <value>')\n process.exit(1)\n }\n\n // Validate top-level config key\n const { ConfigSchema } = await import('../core/config.js')\n const topLevelKey = configPath.split('.')[0]\n const validConfigKeys = Object.keys(ConfigSchema.shape)\n if (!validConfigKeys.includes(topLevelKey)) {\n const { suggestMatch } = await import('./suggest.js')\n const suggestion = suggestMatch(topLevelKey, validConfigKeys)\n console.error(`Unknown config key: ${topLevelKey}`)\n if (suggestion) console.error(`Did you mean: ${suggestion}?`)\n process.exit(1)\n }\n\n let value: unknown = configValue\n try { value = JSON.parse(configValue) } catch { /* keep as string */ }\n\n const port = readApiPort()\n if (port !== null) {\n // Server running — use API\n const res = await apiCall(port, '/api/config', {\n method: 'PATCH',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path: configPath, value }),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Config updated: ${configPath} = ${JSON.stringify(value)}`)\n if (data.needsRestart) {\n console.log('Note: restart required for this change to take effect.')\n }\n } else {\n // Server not running — update file directly\n const { ConfigManager } = await import('../core/config.js')\n const cm = new ConfigManager()\n if (!(await cm.exists())) {\n console.error('No config found. Run \"openacp\" first to set up.')\n process.exit(1)\n }\n await cm.load()\n const updates = buildNestedUpdateFromPath(configPath, value)\n await cm.save(updates)\n console.log(`Config updated: ${configPath} = ${JSON.stringify(value)}`)\n }\n return\n }\n\n // Interactive editor\n const { runConfigEditor } = await import('../core/config-editor.js')\n const { ConfigManager } = await import('../core/config.js')\n const cm = new ConfigManager()\n if (!(await cm.exists())) {\n console.error('No config found. Run \"openacp\" first to set up.')\n process.exit(1)\n }\n\n const port = readApiPort()\n if (port !== null) {\n await runConfigEditor(cm, 'api', port)\n } else {\n await runConfigEditor(cm, 'file')\n }\n}\n\nfunction buildNestedUpdateFromPath(dotPath: string, value: unknown): Record<string, unknown> {\n const parts = dotPath.split('.')\n const result: Record<string, unknown> = {}\n let target = result\n for (let i = 0; i < parts.length - 1; i++) {\n target[parts[i]] = {}\n target = target[parts[i]] as Record<string, unknown>\n }\n target[parts[parts.length - 1]] = value\n return result\n}\n\nexport async function cmdReset(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp reset\\x1b[0m — Re-run setup wizard\n\n\\x1b[1mUsage:\\x1b[0m\n openacp reset\n\nDeletes all OpenACP data (~/.openacp) and allows you to\nstart fresh with the setup wizard. The daemon must be stopped first.\n\n\\x1b[1m\\x1b[31mThis is destructive\\x1b[0m — config, plugins, agent data will be removed.\n`)\n return\n }\n const { getStatus } = await import('../core/daemon.js')\n const status = getStatus()\n if (status.running) {\n console.error('OpenACP is running. Stop it first: openacp stop')\n process.exit(1)\n }\n\n const { confirm } = await import('@inquirer/prompts')\n const yes = await confirm({\n message: 'This will delete all OpenACP data (~/.openacp). You will need to set up again. Continue?',\n default: false,\n })\n if (!yes) {\n console.log('Aborted.')\n return\n }\n\n const { uninstallAutoStart } = await import('../core/autostart.js')\n uninstallAutoStart()\n\n const fs = await import('node:fs')\n const os = await import('node:os')\n const path = await import('node:path')\n const openacpDir = path.join(os.homedir(), '.openacp')\n fs.rmSync(openacpDir, { recursive: true, force: true })\n\n console.log('Reset complete. Run `openacp` to set up again.')\n}\n\nexport async function cmdUpdate(args: string[] = []): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp update\\x1b[0m — Update to latest version\n\n\\x1b[1mUsage:\\x1b[0m\n openacp update\n\nChecks npm for the latest version of @openacp/cli and\ninstalls it globally if an update is available.\n`)\n return\n }\n const current = getCurrentVersion()\n const latest = await getLatestVersion()\n if (!latest) {\n console.error('Could not check for updates. Check your internet connection.')\n process.exit(1)\n }\n if (compareVersions(current, latest) >= 0) {\n console.log(`Already up to date (v${current})`)\n return\n }\n console.log(`Update available: v${current} → v${latest}`)\n const ok = await runUpdate()\n if (ok) {\n console.log(`\\x1b[32m✓ Updated to v${latest}\\x1b[0m`)\n } else {\n console.error('Update failed. Try manually: npm install -g @openacp/cli@latest')\n process.exit(1)\n }\n}\n\nexport async function cmdAdopt(args: string[]): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp adopt\\x1b[0m — Adopt an external agent session\n\n\\x1b[1mUsage:\\x1b[0m\n openacp adopt <agent> <session_id> [--cwd <path>]\n\n\\x1b[1mArguments:\\x1b[0m\n <agent> Agent name (e.g. claude)\n <session_id> External session ID to adopt\n\n\\x1b[1mOptions:\\x1b[0m\n --cwd <path> Working directory for the session (default: current dir)\n -h, --help Show this help message\n\nTransfers an existing agent session into OpenACP so it appears\nas a Telegram topic. Requires a running daemon.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp adopt claude abc123-def456\n openacp adopt claude abc123 --cwd /path/to/project\n`)\n return\n }\n\n const agent = args[1];\n const sessionId = args[2];\n\n if (!agent || !sessionId) {\n console.log(\"Usage: openacp adopt <agent> <session_id> [--cwd <path>]\");\n console.log(\"Example: openacp adopt claude abc123-def456 --cwd /path/to/project\");\n process.exit(1);\n }\n\n const cwdIdx = args.indexOf(\"--cwd\");\n const cwd = cwdIdx !== -1 && args[cwdIdx + 1] ? args[cwdIdx + 1] : process.cwd();\n\n const port = readApiPort();\n if (!port) {\n console.log(\"OpenACP is not running. Start it with: openacp start\");\n process.exit(1);\n }\n\n try {\n const res = await fetch(`http://127.0.0.1:${port}/api/sessions/adopt`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ agent, agentSessionId: sessionId, cwd }),\n });\n const data = await res.json() as Record<string, unknown>;\n\n if (data.ok) {\n if (data.status === \"existing\") {\n console.log(`Session already on Telegram. Topic pinged.`);\n } else {\n console.log(`Session transferred to Telegram.`);\n }\n console.log(` Session ID: ${data.sessionId}`);\n console.log(` Thread ID: ${data.threadId}`);\n } else {\n console.log(`Error: ${(data.message as string) || (data.error as string)}`);\n process.exit(1);\n }\n } catch (err) {\n console.log(`Failed to connect to OpenACP: ${err instanceof Error ? err.message : err}`);\n process.exit(1);\n }\n}\n\nexport async function cmdIntegrate(args: string[]): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp integrate\\x1b[0m — Manage agent integrations\n\n\\x1b[1mUsage:\\x1b[0m\n openacp integrate <agent> Install integration for an agent\n openacp integrate <agent> --uninstall Remove integration\n\n\\x1b[1mArguments:\\x1b[0m\n <agent> Agent name (e.g. claude)\n\n\\x1b[1mOptions:\\x1b[0m\n --uninstall Remove the integration instead of installing\n -h, --help Show this help message\n\nIntegrations enable features like session handoff from an agent\nto OpenACP (Telegram). For example, the Claude integration adds\na \"Handoff\" slash command to Claude Code.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp integrate claude\n openacp integrate claude --uninstall\n`)\n return\n }\n\n const { getIntegration, listIntegrations } = await import(\"./integrate.js\");\n\n const agent = args[1];\n const uninstall = args.includes(\"--uninstall\");\n\n if (!agent) {\n console.log(\"Usage: openacp integrate <agent> [--uninstall]\");\n console.log(`Available integrations: ${listIntegrations().join(\", \")}`);\n process.exit(1);\n }\n\n const integration = getIntegration(agent);\n if (!integration) {\n const { suggestMatch } = await import('./suggest.js');\n const available = listIntegrations();\n const suggestion = suggestMatch(agent, available);\n console.log(`No integration available for '${agent}'.`);\n if (suggestion) console.log(`Did you mean: ${suggestion}?`);\n console.log(`Available: ${available.join(\", \")}`);\n process.exit(1);\n }\n\n for (const item of integration.items) {\n if (uninstall) {\n console.log(`Removing ${agent}/${item.id}...`);\n const result = await item.uninstall();\n for (const log of result.logs) console.log(` ${log}`);\n if (result.success) {\n console.log(` ${item.name} removed.`);\n } else {\n console.log(` Failed to remove ${item.name}.`);\n process.exit(1);\n }\n } else {\n console.log(`Installing ${agent}/${item.id}...`);\n const result = await item.install();\n for (const log of result.logs) console.log(` ${log}`);\n if (result.success) {\n console.log(` ${item.name} installed.`);\n } else {\n console.log(` Failed to install ${item.name}.`);\n process.exit(1);\n }\n }\n }\n}\n\nexport async function cmdDoctor(args: string[]): Promise<void> {\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp doctor\\x1b[0m — Run system diagnostics\n\n\\x1b[1mUsage:\\x1b[0m\n openacp doctor [--dry-run]\n\n\\x1b[1mOptions:\\x1b[0m\n --dry-run Check only, don't apply any fixes\n -h, --help Show this help message\n\nChecks your OpenACP installation for common issues including\nconfig validity, agent availability, dependencies, and connectivity.\nFixable issues can be auto-repaired when not using --dry-run.\n`)\n return\n }\n\n const knownFlags = [\"--dry-run\"];\n const unknownFlags = args.slice(1).filter(\n (a) => a.startsWith(\"--\") && !knownFlags.includes(a),\n );\n if (unknownFlags.length > 0) {\n const { suggestMatch } = await import('./suggest.js');\n for (const flag of unknownFlags) {\n const suggestion = suggestMatch(flag, knownFlags);\n console.error(`Unknown flag: ${flag}`);\n if (suggestion) console.error(`Did you mean: ${suggestion}?`);\n }\n process.exit(1);\n }\n\n const dryRun = args.includes(\"--dry-run\");\n const { DoctorEngine } = await import(\"../core/doctor/index.js\");\n const engine = new DoctorEngine({ dryRun });\n\n console.log(\"\\n🩺 OpenACP Doctor\\n\");\n\n const report = await engine.runAll();\n\n // Render results\n const icons = { pass: \"\\x1b[32m✅\\x1b[0m\", warn: \"\\x1b[33m⚠️\\x1b[0m\", fail: \"\\x1b[31m❌\\x1b[0m\" };\n\n for (const category of report.categories) {\n console.log(`\\x1b[1m\\x1b[36m${category.name}\\x1b[0m`);\n for (const result of category.results) {\n console.log(` ${icons[result.status]} ${result.message}`);\n }\n console.log();\n }\n\n // Handle risky fixes\n if (report.pendingFixes.length > 0) {\n console.log(\"\\x1b[1mFixable issues:\\x1b[0m\\n\");\n for (const pending of report.pendingFixes) {\n if (dryRun) {\n console.log(` 🔧 ${pending.message} (use without --dry-run to fix)`);\n } else {\n const { confirm } = await import(\"@inquirer/prompts\");\n const shouldFix = await confirm({\n message: `Fix: ${pending.message}?`,\n default: false,\n });\n if (shouldFix) {\n const fixResult = await pending.fix();\n if (fixResult.success) {\n console.log(` \\x1b[32m✓ ${fixResult.message}\\x1b[0m`);\n } else {\n console.log(` \\x1b[31m✗ Fix failed: ${fixResult.message}\\x1b[0m`);\n }\n }\n }\n }\n console.log();\n }\n\n // Summary\n const { passed, warnings, failed, fixed } = report.summary;\n const fixedStr = fixed > 0 ? `, ${fixed} fixed` : \"\";\n console.log(`Result: ${passed} passed, ${warnings} warnings, ${failed} failed${fixedStr}`);\n\n if (failed > 0) {\n process.exit(1);\n }\n}\n\nexport async function cmdTunnel(args: string[]): Promise<void> {\n const subCmd = args[1]\n const port = readApiPort()\n if (port === null) {\n console.error('OpenACP is not running. Start with `openacp start`')\n process.exit(1)\n }\n\n try {\n if (subCmd === 'add') {\n const tunnelPort = args[2]\n if (!tunnelPort) {\n console.error('Usage: openacp tunnel add <port> [--label name] [--session id]')\n process.exit(1)\n }\n const labelIdx = args.indexOf('--label')\n const label = labelIdx !== -1 ? args[labelIdx + 1] : undefined\n const sessionIdx = args.indexOf('--session')\n const sessionId = sessionIdx !== -1 ? args[sessionIdx + 1] : undefined\n\n const body: Record<string, unknown> = { port: parseInt(tunnelPort, 10) }\n if (label) body.label = label\n if (sessionId) body.sessionId = sessionId\n\n const res = await apiCall(port, '/api/tunnel', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Tunnel active: port ${data.port} → ${data.publicUrl}`)\n\n } else if (subCmd === 'list') {\n const res = await apiCall(port, '/api/tunnel/list')\n const data = await res.json() as Array<Record<string, unknown>>\n if (data.length === 0) {\n console.log('No active tunnels.')\n return\n }\n console.log('Active tunnels:\\n')\n for (const t of data) {\n const label = t.label ? ` (${t.label})` : ''\n const status = t.status === 'active' ? '✅' : t.status === 'starting' ? '⏳' : '❌'\n console.log(` ${status} Port ${t.port}${label}`)\n if (t.publicUrl) console.log(` → ${t.publicUrl}`)\n }\n\n } else if (subCmd === 'stop') {\n const tunnelPort = args[2]\n if (!tunnelPort) {\n console.error('Usage: openacp tunnel stop <port>')\n process.exit(1)\n }\n const res = await apiCall(port, `/api/tunnel/${tunnelPort}`, { method: 'DELETE' })\n if (!res.ok) {\n const data = await res.json() as Record<string, unknown>\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log(`Tunnel stopped: port ${tunnelPort}`)\n\n } else if (subCmd === 'stop-all') {\n const res = await apiCall(port, '/api/tunnel', { method: 'DELETE' })\n if (!res.ok) {\n const data = await res.json() as Record<string, unknown>\n console.error(`Error: ${data.error}`)\n process.exit(1)\n }\n console.log('All user tunnels stopped.')\n\n } else {\n console.log(`\nTunnel Management:\n openacp tunnel add <port> [--label name] [--session id]\n openacp tunnel list\n openacp tunnel stop <port>\n openacp tunnel stop-all\n`)\n }\n } catch (err) {\n console.error(`Failed to connect to daemon: ${(err as Error).message}`)\n process.exit(1)\n }\n}\n\nexport async function cmdAgents(args: string[]): Promise<void> {\n const subcommand = args[1];\n\n if (wantsHelp(args) && (!subcommand || subcommand === '--help' || subcommand === '-h')) {\n console.log(`\n\\x1b[1mopenacp agents\\x1b[0m — Manage AI coding agents\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents Browse all agents (installed + available)\n openacp agents install <name> Install an agent from the ACP Registry\n openacp agents uninstall <name> Remove an installed agent\n openacp agents info <name> Show details, dependencies & setup guide\n openacp agents run <name> [-- args] Run agent CLI directly (login, config...)\n openacp agents refresh Force-refresh agent list from registry\n\n\\x1b[1mOptions:\\x1b[0m\n -h, --help Show this help message\n\n\\x1b[1mExamples:\\x1b[0m\n openacp agents install gemini Install Gemini CLI\n openacp agents run gemini Login to Google (first run)\n openacp agents info cursor See setup instructions\n\n\\x1b[2mRun 'openacp agents <command> --help' for more info on a subcommand.\\x1b[0m\n`)\n return;\n }\n\n switch (subcommand) {\n case \"install\":\n return agentsInstall(args[2], args.includes(\"--force\"), wantsHelp(args));\n case \"uninstall\":\n return agentsUninstall(args[2], wantsHelp(args));\n case \"refresh\":\n if (wantsHelp(args)) {\n console.log(`\n\\x1b[1mopenacp agents refresh\\x1b[0m — Force-refresh agent list from registry\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents refresh\n\nFetches the latest agent catalog from the ACP Registry,\nbypassing the normal staleness check.\n`)\n return;\n }\n return agentsRefresh();\n case \"info\":\n return agentsInfo(args[2], wantsHelp(args));\n case \"run\":\n return agentsRun(args[2], args.slice(3), wantsHelp(args));\n case \"list\":\n case undefined:\n return agentsList();\n default: {\n const { suggestMatch } = await import('./suggest.js');\n const agentSubcommands = [\"install\", \"uninstall\", \"refresh\", \"info\", \"run\", \"list\"];\n const suggestion = suggestMatch(subcommand, agentSubcommands);\n console.error(`Unknown agents command: ${subcommand}`);\n if (suggestion) console.error(`Did you mean: ${suggestion}?`);\n console.error(`\\nRun 'openacp agents' to see available agents.`);\n process.exit(1);\n }\n }\n}\n\nasync function agentsList(): Promise<void> {\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n await catalog.refreshRegistryIfStale();\n\n const items = catalog.getAvailable();\n const installed = items.filter((i) => i.installed);\n const available = items.filter((i) => !i.installed);\n\n console.log(\"\");\n if (installed.length > 0) {\n console.log(\" \\x1b[1mInstalled agents:\\x1b[0m\\n\");\n for (const item of installed) {\n const deps = item.missingDeps?.length\n ? ` \\x1b[33m(needs: ${item.missingDeps.join(\", \")})\\x1b[0m`\n : \"\";\n console.log(\n ` \\x1b[32m✓\\x1b[0m ${item.key.padEnd(18)} ${item.name.padEnd(22)} v${item.version.padEnd(10)} ${item.distribution}${deps}`,\n );\n if (item.description) {\n console.log(` \\x1b[2m${item.description}\\x1b[0m`);\n }\n }\n console.log(\"\");\n }\n\n if (available.length > 0) {\n console.log(\" \\x1b[1mAvailable to install:\\x1b[0m\\n\");\n for (const item of available) {\n const icon = item.available ? \"\\x1b[2m⬇\\x1b[0m\" : \"\\x1b[33m⚠\\x1b[0m\";\n const deps = item.missingDeps?.length\n ? ` \\x1b[33m(needs: ${item.missingDeps.join(\", \")})\\x1b[0m`\n : \"\";\n console.log(\n ` ${icon} ${item.key.padEnd(18)} ${item.name.padEnd(22)} v${item.version.padEnd(10)} ${item.distribution}${deps}`,\n );\n if (item.description) {\n console.log(` \\x1b[2m${item.description}\\x1b[0m`);\n }\n }\n console.log(\"\");\n }\n\n console.log(\n ` \\x1b[2mInstall an agent: openacp agents install <name>\\x1b[0m`,\n );\n console.log(\"\");\n}\n\nasync function agentsInstall(nameOrId: string | undefined, force: boolean, help = false): Promise<void> {\n if (help || !nameOrId) {\n console.log(`\n\\x1b[1mopenacp agents install\\x1b[0m — Install an agent from the ACP Registry\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents install <name> [--force]\n\n\\x1b[1mArguments:\\x1b[0m\n <name> Agent name or ID (e.g. claude, gemini, copilot)\n\n\\x1b[1mOptions:\\x1b[0m\n --force Reinstall even if already installed\n -h, --help Show this help message\n\n\\x1b[1mExamples:\\x1b[0m\n openacp agents install claude\n openacp agents install gemini --force\n\nRun 'openacp agents' to see available agents.\n`)\n return;\n }\n\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n await catalog.refreshRegistryIfStale();\n\n const progress: import(\"../core/types.js\").InstallProgress = {\n onStart(_id, name) {\n process.stdout.write(`\\n ⏳ Installing ${name}...\\n`);\n },\n onStep(step) {\n process.stdout.write(` \\x1b[32m✓\\x1b[0m ${step}\\n`);\n },\n onDownloadProgress(percent) {\n const filled = Math.round(percent / 5);\n const empty = 20 - filled;\n const bar = \"█\".repeat(filled) + \"░\".repeat(empty);\n process.stdout.write(`\\r ${bar} ${String(percent).padStart(3)}%`);\n if (percent >= 100) process.stdout.write(\"\\n\");\n },\n onSuccess(name) {\n console.log(`\\n \\x1b[32m✓ ${name} installed successfully!\\x1b[0m\\n`);\n },\n onError(error) {\n console.log(`\\n \\x1b[31m✗ ${error}\\x1b[0m\\n`);\n },\n };\n\n const result = await catalog.install(nameOrId, progress, force);\n if (!result.ok) {\n if (result.error?.includes('not found')) {\n const { suggestMatch } = await import('./suggest.js');\n const allKeys = catalog.getAvailable().map((a) => a.key);\n const suggestion = suggestMatch(nameOrId, allKeys);\n if (suggestion) console.log(` Did you mean: ${suggestion}?`);\n }\n process.exit(1);\n }\n\n // Auto-integrate handoff if agent supports it\n const { getAgentCapabilities } = await import(\"../core/agent-dependencies.js\");\n const caps = getAgentCapabilities(result.agentKey);\n if (caps.integration) {\n const { installIntegration } = await import(\"./integrate.js\");\n const intResult = await installIntegration(result.agentKey, caps.integration);\n if (intResult.success) {\n console.log(` \\x1b[32m✓\\x1b[0m Handoff integration installed for ${result.agentKey}`);\n } else {\n console.log(` \\x1b[33m⚠ Handoff integration failed: ${intResult.logs[intResult.logs.length - 1] ?? \"unknown error\"}\\x1b[0m`);\n }\n }\n\n // Show setup steps if any\n if (result.setupSteps?.length) {\n console.log(\" \\x1b[1mNext steps to get started:\\x1b[0m\\n\");\n for (const step of result.setupSteps) {\n console.log(` → ${step}`);\n }\n console.log(`\\n \\x1b[2mRun 'openacp agents info ${result.agentKey}' for more details.\\x1b[0m\\n`);\n }\n}\n\nasync function agentsUninstall(name: string | undefined, help = false): Promise<void> {\n if (help || !name) {\n console.log(`\n\\x1b[1mopenacp agents uninstall\\x1b[0m — Remove an installed agent\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents uninstall <name>\n\n\\x1b[1mArguments:\\x1b[0m\n <name> Agent name to remove\n\n\\x1b[1mExamples:\\x1b[0m\n openacp agents uninstall gemini\n`)\n return;\n }\n\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n\n const result = await catalog.uninstall(name);\n if (result.ok) {\n // Auto-uninstall handoff integration if exists\n const { getAgentCapabilities } = await import(\"../core/agent-dependencies.js\");\n const caps = getAgentCapabilities(name);\n if (caps.integration) {\n const { uninstallIntegration } = await import(\"./integrate.js\");\n await uninstallIntegration(name, caps.integration);\n console.log(` \\x1b[32m✓\\x1b[0m Handoff integration removed for ${name}`);\n }\n console.log(`\\n \\x1b[32m✓ ${name} removed.\\x1b[0m\\n`);\n } else {\n console.log(`\\n \\x1b[31m✗ ${result.error}\\x1b[0m`);\n if (result.error?.includes('not installed')) {\n const { suggestMatch } = await import('./suggest.js');\n const installedKeys = Object.keys(catalog.getInstalledEntries());\n const suggestion = suggestMatch(name, installedKeys);\n if (suggestion) console.log(` Did you mean: ${suggestion}?`);\n }\n console.log();\n }\n}\n\nasync function agentsRefresh(): Promise<void> {\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n console.log(\"\\n Updating agent list...\");\n await catalog.fetchRegistry();\n console.log(\" \\x1b[32m✓ Agent list updated.\\x1b[0m\\n\");\n}\n\nasync function agentsInfo(nameOrId: string | undefined, help = false): Promise<void> {\n if (help || !nameOrId) {\n console.log(`\n\\x1b[1mopenacp agents info\\x1b[0m — Show agent details, dependencies & setup guide\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents info <name>\n\n\\x1b[1mArguments:\\x1b[0m\n <name> Agent name or ID\n\nShows version, distribution type, command, setup steps, and\nwhether the agent is installed or available from the registry.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp agents info claude\n openacp agents info cursor\n`)\n return;\n }\n\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n\n const { getAgentSetup } = await import(\"../core/agent-dependencies.js\");\n\n const installed = catalog.getInstalledAgent(nameOrId);\n if (installed) {\n console.log(`\\n \\x1b[1m${installed.name}\\x1b[0m`);\n console.log(` Version: ${installed.version}`);\n console.log(` Type: ${installed.distribution}`);\n console.log(` Command: ${installed.command} ${installed.args.join(\" \")}`);\n console.log(` Installed: ${new Date(installed.installedAt).toLocaleDateString()}`);\n if (installed.binaryPath) console.log(` Binary path: ${installed.binaryPath}`);\n\n const setup = installed.registryId ? getAgentSetup(installed.registryId) : undefined;\n if (setup) {\n console.log(`\\n \\x1b[1mSetup:\\x1b[0m`);\n for (const step of setup.setupSteps) {\n console.log(` → ${step}`);\n }\n }\n\n console.log(`\\n Run agent CLI: openacp agents run ${nameOrId} -- <args>`);\n console.log(\"\");\n return;\n }\n\n const regAgent = catalog.findRegistryAgent(nameOrId);\n if (regAgent) {\n const availability = catalog.checkAvailability(nameOrId);\n console.log(`\\n \\x1b[1m${regAgent.name}\\x1b[0m \\x1b[2m(not installed)\\x1b[0m`);\n console.log(` ${regAgent.description}`);\n console.log(` Version: ${regAgent.version}`);\n console.log(` License: ${regAgent.license ?? \"unknown\"}`);\n if (regAgent.website) console.log(` Website: ${regAgent.website}`);\n if (regAgent.repository) console.log(` Source: ${regAgent.repository}`);\n console.log(` Available: ${availability.available ? \"\\x1b[32mYes\\x1b[0m\" : `\\x1b[33mNo\\x1b[0m — ${availability.reason}`}`);\n\n const setup = getAgentSetup(regAgent.id);\n if (setup) {\n console.log(`\\n \\x1b[1mSetup after install:\\x1b[0m`);\n for (const step of setup.setupSteps) {\n console.log(` → ${step}`);\n }\n }\n\n console.log(`\\n Install: openacp agents install ${nameOrId}\\n`);\n return;\n }\n\n const { suggestMatch } = await import('./suggest.js');\n const allKeys = catalog.getAvailable().map((a) => a.key);\n const suggestion = suggestMatch(nameOrId, allKeys);\n console.log(`\\n \\x1b[31m\"${nameOrId}\" not found.\\x1b[0m`);\n if (suggestion) console.log(` Did you mean: ${suggestion}?`);\n console.log(` Run 'openacp agents' to see available agents.\\n`);\n}\n\nasync function agentsRun(nameOrId: string | undefined, extraArgs: string[], help = false): Promise<void> {\n if (help || !nameOrId) {\n console.log(`\n\\x1b[1mopenacp agents run\\x1b[0m — Run agent CLI directly\n\n\\x1b[1mUsage:\\x1b[0m\n openacp agents run <name> [-- <args>]\n\n\\x1b[1mArguments:\\x1b[0m\n <name> Installed agent name\n <args> Arguments to pass to the agent CLI\n\nUse \\x1b[1m--\\x1b[0m to separate OpenACP flags from agent arguments.\nACP-specific flags are automatically stripped.\n\n\\x1b[1mExamples:\\x1b[0m\n openacp agents run gemini Login to Google (first run)\n openacp agents run copilot Login to GitHub Copilot (first run)\n openacp agents run cline Setup API keys (first run)\n`)\n return;\n }\n\n const { AgentCatalog } = await import(\"../core/agent-catalog.js\");\n const catalog = new AgentCatalog();\n catalog.load();\n\n const installed = catalog.getInstalledAgent(nameOrId);\n if (!installed) {\n const { suggestMatch } = await import('./suggest.js');\n const installedKeys = Object.keys(catalog.getInstalledEntries());\n const suggestion = suggestMatch(nameOrId, installedKeys);\n console.log(`\\n \\x1b[31m\"${nameOrId}\" is not installed.\\x1b[0m`);\n if (suggestion) {\n console.log(` Did you mean: ${suggestion}?`);\n console.log(` Install first: openacp agents install ${suggestion}\\n`);\n } else {\n console.log(` Install first: openacp agents install ${nameOrId}\\n`);\n }\n return;\n }\n\n // Strip leading \"--\" separator if present\n const userArgs = extraArgs[0] === \"--\" ? extraArgs.slice(1) : extraArgs;\n\n const { spawnSync } = await import(\"node:child_process\");\n const command = installed.command;\n\n // Include agent's base args (e.g., package name for npx) but strip ACP-specific flags\n const acpFlags = new Set([\"--acp\", \"acp\", \"--acp=true\", \"--experimental-skills\"]);\n const baseArgs: string[] = [];\n for (let i = 0; i < installed.args.length; i++) {\n const arg = installed.args[i]!;\n // Skip standalone ACP flags\n if (acpFlags.has(arg)) continue;\n // Skip \"--output-format acp\" pair (factory-droid pattern)\n if (arg === \"--output-format\" && installed.args[i + 1] === \"acp\") { i++; continue; }\n // Skip \"exec\" subcommand used only in ACP mode (factory-droid)\n if (arg === \"exec\" && installed.args[i + 1] === \"--output-format\") continue;\n baseArgs.push(arg);\n }\n const fullArgs = [...baseArgs, ...userArgs];\n\n console.log(`\\n Running: ${command} ${fullArgs.join(\" \")}\\n`);\n\n const result = spawnSync(command, fullArgs, {\n stdio: \"inherit\",\n env: { ...process.env, ...installed.env },\n cwd: process.cwd(),\n });\n\n if (result.status !== null && result.status !== 0) {\n process.exit(result.status);\n }\n}\n\nexport async function cmdDefault(command: string | undefined): Promise<void> {\n const forceForeground = command === '--foreground'\n\n // Reject unknown commands\n if (command && !command.startsWith('-')) {\n const { suggestMatch } = await import('./suggest.js')\n const topLevelCommands = [\n 'start', 'stop', 'status', 'logs', 'config', 'reset', 'update',\n 'install', 'uninstall', 'plugins', 'api', 'adopt', 'integrate', 'doctor', 'agents',\n ]\n const suggestion = suggestMatch(command, topLevelCommands)\n console.error(`Unknown command: ${command}`)\n if (suggestion) console.error(`Did you mean: ${suggestion}?`)\n printHelp()\n process.exit(1)\n }\n\n await checkAndPromptUpdate()\n\n const { ConfigManager } = await import('../core/config.js')\n const cm = new ConfigManager()\n\n // If no config, run setup first\n if (!(await cm.exists())) {\n const { runSetup } = await import('../core/setup.js')\n const shouldStart = await runSetup(cm)\n if (!shouldStart) process.exit(0)\n }\n\n await cm.load()\n const config = cm.get()\n\n if (!forceForeground && config.runMode === 'daemon') {\n const { startDaemon, getPidPath } = await import('../core/daemon.js')\n const result = startDaemon(getPidPath(), config.logging.logDir)\n if ('error' in result) {\n console.error(result.error)\n process.exit(1)\n }\n console.log(`OpenACP daemon started (PID ${result.pid})`)\n return\n }\n\n const { markRunning } = await import('../core/daemon.js')\n markRunning()\n const { startServer } = await import('../main.js')\n await startServer()\n}\n"],"mappings":"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","names":["args","getCurrentVersion","port","ConfigManager","cm","command"]}
@@ -3,7 +3,7 @@ import {
3
3
  ConfigSchema,
4
4
  PLUGINS_DIR,
5
5
  expandHome
6
- } from "./chunk-JRF4G4X7.js";
6
+ } from "./chunk-2Z2XPUD5.js";
7
7
  import "./chunk-ESOPMQAY.js";
8
8
  export {
9
9
  ConfigManager,
@@ -11,4 +11,4 @@ export {
11
11
  PLUGINS_DIR,
12
12
  expandHome
13
13
  };
14
- //# sourceMappingURL=config-PCPIBPUA.js.map
14
+ //# sourceMappingURL=config-OH26EIWN.js.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  runConfigEditor
3
- } from "./chunk-F4TB4UBK.js";
3
+ } from "./chunk-IQIPQTQT.js";
4
4
  import "./chunk-X6LLG7XN.js";
5
- import "./chunk-4ZGMSNRP.js";
5
+ import "./chunk-ECBD5I5R.js";
6
6
  import "./chunk-JKBFUAJK.js";
7
- import "./chunk-JRF4G4X7.js";
7
+ import "./chunk-2Z2XPUD5.js";
8
8
  import "./chunk-ESOPMQAY.js";
9
9
  export {
10
10
  runConfigEditor
11
11
  };
12
- //# sourceMappingURL=config-editor-DDF3ZFJK.js.map
12
+ //# sourceMappingURL=config-editor-5TICUK3K.js.map
@@ -10,8 +10,8 @@ import {
10
10
  startDaemon,
11
11
  stopDaemon,
12
12
  writePidFile
13
- } from "./chunk-VBEWSWVL.js";
14
- import "./chunk-JRF4G4X7.js";
13
+ } from "./chunk-5KYLXEG3.js";
14
+ import "./chunk-2Z2XPUD5.js";
15
15
  import "./chunk-ESOPMQAY.js";
16
16
  export {
17
17
  clearRunning,
@@ -26,4 +26,4 @@ export {
26
26
  stopDaemon,
27
27
  writePidFile
28
28
  };
29
- //# sourceMappingURL=daemon-JZLFRUW6.js.map
29
+ //# sourceMappingURL=daemon-VKCONJUY.js.map
@@ -0,0 +1,9 @@
1
+ import {
2
+ DoctorEngine
3
+ } from "./chunk-K53OZH5Y.js";
4
+ import "./chunk-2Z2XPUD5.js";
5
+ import "./chunk-ESOPMQAY.js";
6
+ export {
7
+ DoctorEngine
8
+ };
9
+ //# sourceMappingURL=doctor-X6UCE7GQ.js.map