@openacp/cli 0.3.2 → 0.4.2
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.
- package/README.md +1 -1
- package/dist/{autostart-N4HIL6C3.js → autostart-DZ3MHHMM.js} +3 -3
- package/dist/{chunk-LVSQQRCF.js → chunk-2SY7Y2VB.js} +3 -3
- package/dist/{chunk-7W5SOJPD.js → chunk-3QACY5E3.js} +2 -2
- package/dist/{chunk-CA6FXPLH.js → chunk-BLVZFCKN.js} +4 -4
- package/dist/chunk-KSIQZC3J.js +98 -0
- package/dist/chunk-KSIQZC3J.js.map +1 -0
- package/dist/{chunk-JOSJGZGF.js → chunk-LYKCQTH5.js} +1 -9
- package/dist/{chunk-JOSJGZGF.js.map → chunk-LYKCQTH5.js.map} +1 -1
- package/dist/{chunk-5E6ZXCNN.js → chunk-MRKYJ422.js} +2 -2
- package/dist/{chunk-RBDPCHGD.js → chunk-V3BA2MJ6.js} +2 -2
- package/dist/{chunk-YXMRR2E3.js → chunk-WF5XDN4D.js} +65 -40
- package/dist/chunk-WF5XDN4D.js.map +1 -0
- package/dist/{chunk-NS2L445T.js → chunk-WHKLPZGK.js} +4 -4
- package/dist/{chunk-66PHSLNS.js → chunk-WXPN5UOT.js} +599 -323
- package/dist/chunk-WXPN5UOT.js.map +1 -0
- package/dist/cli.js +258 -316
- package/dist/cli.js.map +1 -1
- package/dist/{config-2CBRLF3R.js → config-J5YQOMDU.js} +3 -3
- package/dist/config-editor-IXL4BFG3.js +11 -0
- package/dist/{daemon-UXC7PB4P.js → daemon-SLGQGRKO.js} +4 -4
- package/dist/index.d.ts +184 -71
- package/dist/index.js +18 -10
- package/dist/install-cloudflared-ILUXKLAC.js +8 -0
- package/dist/{main-P3OUOY7X.js → main-5QGMP7VG.js} +53 -17
- package/dist/main-5QGMP7VG.js.map +1 -0
- package/dist/{setup-UKWBLJIT.js → setup-JQZBPXWS.js} +4 -4
- package/dist/{tunnel-service-4GISQZNP.js → tunnel-service-DASSH7OA.js} +3 -3
- package/dist/version-VC5CPXBX.js +15 -0
- package/dist/version-VC5CPXBX.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-66PHSLNS.js.map +0 -1
- package/dist/chunk-YXMRR2E3.js.map +0 -1
- package/dist/config-editor-UN56HQCW.js +0 -11
- package/dist/install-cloudflared-LMM7MFQX.js +0 -8
- package/dist/main-P3OUOY7X.js.map +0 -1
- /package/dist/{autostart-N4HIL6C3.js.map → autostart-DZ3MHHMM.js.map} +0 -0
- /package/dist/{chunk-LVSQQRCF.js.map → chunk-2SY7Y2VB.js.map} +0 -0
- /package/dist/{chunk-7W5SOJPD.js.map → chunk-3QACY5E3.js.map} +0 -0
- /package/dist/{chunk-CA6FXPLH.js.map → chunk-BLVZFCKN.js.map} +0 -0
- /package/dist/{chunk-5E6ZXCNN.js.map → chunk-MRKYJ422.js.map} +0 -0
- /package/dist/{chunk-RBDPCHGD.js.map → chunk-V3BA2MJ6.js.map} +0 -0
- /package/dist/{chunk-NS2L445T.js.map → chunk-WHKLPZGK.js.map} +0 -0
- /package/dist/{config-2CBRLF3R.js.map → config-J5YQOMDU.js.map} +0 -0
- /package/dist/{config-editor-UN56HQCW.js.map → config-editor-IXL4BFG3.js.map} +0 -0
- /package/dist/{daemon-UXC7PB4P.js.map → daemon-SLGQGRKO.js.map} +0 -0
- /package/dist/{install-cloudflared-LMM7MFQX.js.map → install-cloudflared-ILUXKLAC.js.map} +0 -0
- /package/dist/{setup-UKWBLJIT.js.map → setup-JQZBPXWS.js.map} +0 -0
- /package/dist/{tunnel-service-4GISQZNP.js.map → tunnel-service-DASSH7OA.js.map} +0 -0
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli.ts","../../src/core/api-client.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { setDefaultAutoSelectFamily } from \"node:net\";\nsetDefaultAutoSelectFamily(false);\n\nimport { installPlugin, uninstallPlugin, listPlugins } from './core/plugin-manager.js'\nimport { readApiPort, removeStalePortFile, apiCall } from './core/api-client.js'\n\nconst NPM_PACKAGE = '@openacp/cli'\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nfunction getCurrentVersion(): string {\n try {\n const { createRequire } = require('node:module') as typeof import('node:module')\n const req = createRequire(import.meta.url)\n const pkg = req('../package.json')\n return pkg.version as string\n } catch {\n return '0.0.0-dev'\n }\n}\n\nasync function getLatestVersion(): Promise<string | null> {\n try {\n const res = await fetch(`https://registry.npmjs.org/${NPM_PACKAGE}/latest`, {\n signal: AbortSignal.timeout(5000),\n })\n if (!res.ok) return null\n const data = (await res.json()) as { version?: string }\n return data.version ?? null\n } catch {\n return null\n }\n}\n\nfunction compareVersions(current: string, latest: string): -1 | 0 | 1 {\n const a = current.split('.').map(Number)\n const b = latest.split('.').map(Number)\n for (let i = 0; i < 3; i++) {\n if ((a[i] ?? 0) < (b[i] ?? 0)) return -1\n if ((a[i] ?? 0) > (b[i] ?? 0)) return 1\n }\n return 0\n}\n\nasync function runUpdate(): Promise<boolean> {\n const { spawn } = await import('node:child_process')\n return new Promise((resolve) => {\n const child = spawn('npm', ['install', '-g', `${NPM_PACKAGE}@latest`], {\n stdio: 'inherit',\n shell: true,\n })\n const onSignal = () => {\n child.kill('SIGTERM')\n resolve(false)\n }\n process.on('SIGINT', onSignal)\n process.on('SIGTERM', onSignal)\n child.on('close', (code) => {\n process.off('SIGINT', onSignal)\n process.off('SIGTERM', onSignal)\n resolve(code === 0)\n })\n })\n}\n\nasync function checkAndPromptUpdate(): Promise<void> {\n const current = getCurrentVersion()\n if (current === '0.0.0-dev') return\n\n const latest = await getLatestVersion()\n if (!latest || compareVersions(current, latest) >= 0) return\n\n console.log(`\\x1b[33mUpdate available: v${current} → v${latest}\\x1b[0m`)\n const { confirm } = await import('@inquirer/prompts')\n const yes = await confirm({\n message: 'Update now before starting?',\n default: true,\n })\n if (yes) {\n const ok = await runUpdate()\n if (ok) {\n console.log(`\\x1b[32m✓ Updated to v${latest}. Please re-run your command.\\x1b[0m`)\n process.exit(0)\n } else {\n console.error('\\x1b[31mUpdate failed. Continuing with current version.\\x1b[0m')\n }\n }\n}\n\nfunction printHelp(): void {\n console.log(`\nOpenACP - Self-hosted bridge for AI coding agents\n\nUsage:\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 config Edit configuration\n openacp reset Delete all data and start fresh\n openacp update Update to latest version\n openacp install <package> Install a plugin adapter\n openacp uninstall <package> Uninstall a plugin adapter\n openacp plugins List installed plugins\n openacp --foreground Force foreground mode\n openacp --version Show version\n openacp --help Show this help\n\nRuntime (requires running daemon):\n openacp runtime new [agent] [workspace] Create a new session\n openacp runtime cancel <id> Cancel a session\n openacp runtime status Show active sessions\n openacp runtime agents List available agents\n\nNote: \"openacp status\" shows daemon process health.\n \"openacp runtime status\" shows active agent sessions.\n\nInstall:\n npm install -g @openacp/cli\n\nExamples:\n openacp\n openacp install @openacp/adapter-discord\n openacp uninstall @openacp/adapter-discord\n`)\n}\n\nasync function main() {\n if (command === \"--help\" || command === \"-h\") {\n printHelp();\n return;\n }\n\n if (command === \"--version\" || command === \"-v\") {\n // In published build: read version from own package.json via createRequire\n // In dev: fallback to 'dev'\n try {\n const { createRequire } = await import(\"node:module\");\n const require = createRequire(import.meta.url);\n const pkg = require(\"../package.json\");\n console.log(`openacp v${pkg.version}`);\n } catch {\n console.log(\"openacp v0.0.0-dev\");\n }\n return;\n }\n\n if (command === \"install\") {\n const pkg = args[1];\n if (!pkg) {\n console.error(\"Usage: openacp install <package>\");\n process.exit(1);\n }\n installPlugin(pkg);\n return;\n }\n\n if (command === \"uninstall\") {\n const pkg = args[1];\n if (!pkg) {\n console.error(\"Usage: openacp uninstall <package>\");\n process.exit(1);\n }\n uninstallPlugin(pkg);\n return;\n }\n\n if (command === \"plugins\") {\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 return;\n }\n\n if (command === 'runtime') {\n const subCmd = args[1]\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 runtime 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 {\n console.error(`Unknown runtime command: ${subCmd || '(none)'}\\n`)\n console.log('Usage:')\n console.log(' openacp runtime new [agent] [workspace] Create a new session')\n console.log(' openacp runtime cancel <id> Cancel a session')\n console.log(' openacp runtime status Show active sessions')\n console.log(' openacp runtime agents List available agents')\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 return\n }\n\n if (command === 'start') {\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 return\n }\n\n if (command === 'stop') {\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 return\n }\n\n if (command === 'status') {\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 return\n }\n\n if (command === 'logs') {\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 return\n }\n\n if (command === 'config') {\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 await runConfigEditor(cm)\n return\n }\n\n if (command === 'reset') {\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 return\n }\n\n if (command === 'update') {\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 return\n }\n\n // Handle --daemon-child (internal flag for background server)\n if (command === '--daemon-child') {\n const { startServer } = await import('./main.js')\n await startServer()\n return\n }\n\n // Handle --foreground flag\n const forceForeground = command === '--foreground'\n\n // Reject unknown commands\n if (command && !command.startsWith('-')) {\n console.error(`Unknown command: ${command}`)\n printHelp()\n process.exit(1)\n }\n\n // Check for updates before starting\n await checkAndPromptUpdate()\n\n // Default: start server based on config runMode\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 // Config now exists — fall through to read runMode and start accordingly\n }\n\n await cm.load()\n const config = cm.get()\n\n if (!forceForeground && config.runMode === 'daemon') {\n // Daemon mode: spawn background process\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 // Foreground mode — mark as running so auto-start works on next boot\n const { markRunning } = await import('./core/daemon.js')\n markRunning()\n const { startServer } = await import('./main.js')\n await startServer()\n}\n\nmain().catch((err) => {\n console.error(\"Fatal:\", err);\n process.exit(1);\n});\n","import * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport * as os from 'node:os'\n\nconst DEFAULT_PORT_FILE = path.join(os.homedir(), '.openacp', 'api.port')\n\nexport function readApiPort(portFilePath: string = DEFAULT_PORT_FILE): number | null {\n try {\n const content = fs.readFileSync(portFilePath, 'utf-8').trim()\n const port = parseInt(content, 10)\n return isNaN(port) ? null : port\n } catch {\n return null\n }\n}\n\nexport function removeStalePortFile(portFilePath: string = DEFAULT_PORT_FILE): void {\n try {\n fs.unlinkSync(portFilePath)\n } catch {\n // ignore\n }\n}\n\nexport async function apiCall(\n port: number,\n urlPath: string,\n options?: RequestInit,\n): Promise<Response> {\n return fetch(`http://127.0.0.1:${port}${urlPath}`, options)\n}\n"],"mappings":"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","names":["require","ConfigManager","cm","config","fs","os","path","startServer"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli.ts","../../src/core/api-client.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 cmdRuntime,\n cmdStart,\n cmdStop,\n cmdStatus,\n cmdLogs,\n cmdConfig,\n cmdReset,\n cmdUpdate,\n cmdDefault,\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(),\n 'runtime': () => cmdRuntime(args),\n 'start': () => cmdStart(),\n 'stop': () => cmdStop(),\n 'status': () => cmdStatus(),\n 'logs': () => cmdLogs(),\n 'config': () => cmdConfig(),\n 'reset': () => cmdReset(),\n 'update': () => cmdUpdate(),\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 * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport * as os from 'node:os'\n\nconst DEFAULT_PORT_FILE = path.join(os.homedir(), '.openacp', 'api.port')\n\nexport function readApiPort(portFilePath: string = DEFAULT_PORT_FILE): number | null {\n try {\n const content = fs.readFileSync(portFilePath, 'utf-8').trim()\n const port = parseInt(content, 10)\n return isNaN(port) ? null : port\n } catch {\n return null\n }\n}\n\nexport function removeStalePortFile(portFilePath: string = DEFAULT_PORT_FILE): void {\n try {\n fs.unlinkSync(portFilePath)\n } catch {\n // ignore\n }\n}\n\nexport async function apiCall(\n port: number,\n urlPath: string,\n options?: RequestInit,\n): Promise<Response> {\n return fetch(`http://127.0.0.1:${port}${urlPath}`, options)\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\nexport function printHelp(): void {\n console.log(`\nOpenACP - Self-hosted bridge for AI coding agents\n\nUsage:\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 config Edit configuration\n openacp reset Delete all data and start fresh\n openacp update Update to latest version\n openacp install <package> Install a plugin adapter\n openacp uninstall <package> Uninstall a plugin adapter\n openacp plugins List installed plugins\n openacp --foreground Force foreground mode\n openacp --version Show version\n openacp --help Show this help\n\nRuntime (requires running daemon):\n openacp runtime new [agent] [workspace] Create a new session\n openacp runtime cancel <id> Cancel a session\n openacp runtime status Show active sessions\n openacp runtime agents List available agents\n\nNote: \"openacp status\" shows daemon process health.\n \"openacp runtime status\" shows active agent sessions.\n\nInstall:\n npm install -g @openacp/cli\n\nExamples:\n openacp\n openacp install @openacp/adapter-discord\n openacp uninstall @openacp/adapter-discord\n`)\n}\n\nexport async function cmdVersion(): Promise<void> {\n try {\n const { createRequire } = await import(\"node:module\")\n const require = createRequire(import.meta.url)\n const pkg = require(\"../../package.json\")\n console.log(`openacp v${pkg.version}`)\n } catch {\n console.log(\"openacp v0.0.0-dev\")\n }\n}\n\nexport async function cmdInstall(args: string[]): Promise<void> {\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 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(): Promise<void> {\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\nexport async function cmdRuntime(args: string[]): Promise<void> {\n const subCmd = args[1]\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 runtime 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 {\n console.error(`Unknown runtime command: ${subCmd || '(none)'}\\n`)\n console.log('Usage:')\n console.log(' openacp runtime new [agent] [workspace] Create a new session')\n console.log(' openacp runtime cancel <id> Cancel a session')\n console.log(' openacp runtime status Show active sessions')\n console.log(' openacp runtime agents List available agents')\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(): Promise<void> {\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(): Promise<void> {\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(): Promise<void> {\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(): Promise<void> {\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(): Promise<void> {\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 await runConfigEditor(cm)\n}\n\nexport async function cmdReset(): Promise<void> {\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(): Promise<void> {\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 cmdDefault(command: string | undefined): Promise<void> {\n const forceForeground = command === '--foreground'\n\n // Reject unknown commands\n if (command && !command.startsWith('-')) {\n console.error(`Unknown command: ${command}`)\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":";;;;;;;;;;;;;;;;;AAEA,SAAS,kCAAkC;;;ACF3C,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,YAAY,QAAQ;AAEpB,IAAM,oBAAyB,UAAQ,WAAQ,GAAG,YAAY,UAAU;AAEjE,SAAS,YAAY,eAAuB,mBAAkC;AACnF,MAAI;AACF,UAAM,UAAa,gBAAa,cAAc,OAAO,EAAE,KAAK;AAC5D,UAAM,OAAO,SAAS,SAAS,EAAE;AACjC,WAAO,MAAM,IAAI,IAAI,OAAO;AAAA,EAC9B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,oBAAoB,eAAuB,mBAAyB;AAClF,MAAI;AACF,IAAG,cAAW,YAAY;AAAA,EAC5B,QAAQ;AAAA,EAER;AACF;AAEA,eAAsB,QACpB,MACA,SACA,SACmB;AACnB,SAAO,MAAM,oBAAoB,IAAI,GAAG,OAAO,IAAI,OAAO;AAC5D;;;AC1BO,SAAS,YAAkB;AAChC,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAmCb;AACD;AAEA,eAAsB,aAA4B;AAChD,MAAI;AACF,UAAM,EAAE,cAAc,IAAI,MAAM,OAAO,QAAa;AACpD,UAAMA,WAAU,cAAc,YAAY,GAAG;AAC7C,UAAM,MAAMA,SAAQ,oBAAoB;AACxC,YAAQ,IAAI,YAAY,IAAI,OAAO,EAAE;AAAA,EACvC,QAAQ;AACN,YAAQ,IAAI,oBAAoB;AAAA,EAClC;AACF;AAEA,eAAsB,WAAWC,OAA+B;AAC9D,QAAM,MAAMA,MAAK,CAAC;AAClB,MAAI,CAAC,KAAK;AACR,YAAQ,MAAM,kCAAkC;AAChD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,gBAAc,GAAG;AACnB;AAEA,eAAsB,aAAaA,OAA+B;AAChE,QAAM,MAAMA,MAAK,CAAC;AAClB,MAAI,CAAC,KAAK;AACR,YAAQ,MAAM,oCAAoC;AAClD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,kBAAgB,GAAG;AACrB;AAEA,eAAsB,aAA4B;AAChD,QAAM,UAAU,YAAY;AAC5B,QAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,MAAI,QAAQ,WAAW,GAAG;AACxB,YAAQ,IAAI,uBAAuB;AAAA,EACrC,OAAO;AACL,YAAQ,IAAI,oBAAoB;AAChC,eAAW,CAAC,MAAM,OAAO,KAAK,SAAS;AACrC,cAAQ,IAAI,KAAK,IAAI,IAAI,OAAO,EAAE;AAAA,IACpC;AAAA,EACF;AACF;AAEA,eAAsB,WAAWA,OAA+B;AAC9D,QAAM,SAASA,MAAK,CAAC;AAErB,QAAM,OAAO,YAAY;AACzB,MAAI,SAAS,MAAM;AACjB,YAAQ,MAAM,oDAAoD;AAClE,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,MAAI;AACF,QAAI,WAAW,OAAO;AACpB,YAAM,QAAQA,MAAK,CAAC;AACpB,YAAM,eAAeA,MAAK,QAAQ,aAAa;AAC/C,YAAM,YAAY,iBAAiB,KAAKA,MAAK,eAAe,CAAC,IAAIA,MAAK,CAAC;AACvE,YAAM,OAA+B,CAAC;AACtC,UAAI,MAAO,MAAK,QAAQ;AACxB,UAAI,UAAW,MAAK,YAAY;AAEhC,YAAM,MAAM,MAAM,QAAQ,MAAM,iBAAiB;AAAA,QAC/C,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU,IAAI;AAAA,MAC3B,CAAC;AACD,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAI,CAAC,IAAI,IAAI;AACX,gBAAQ,MAAM,UAAU,KAAK,KAAK,EAAE;AACpC,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,cAAQ,IAAI,iBAAiB;AAC7B,cAAQ,IAAI,iBAAiB,KAAK,SAAS,EAAE;AAC7C,cAAQ,IAAI,iBAAiB,KAAK,KAAK,EAAE;AACzC,cAAQ,IAAI,iBAAiB,KAAK,SAAS,EAAE;AAC7C,cAAQ,IAAI,iBAAiB,KAAK,MAAM,EAAE;AAAA,IAE5C,WAAW,WAAW,UAAU;AAC9B,YAAM,YAAYA,MAAK,CAAC;AACxB,UAAI,CAAC,WAAW;AACd,gBAAQ,MAAM,4CAA4C;AAC1D,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,YAAM,MAAM,MAAM,QAAQ,MAAM,iBAAiB,mBAAmB,SAAS,CAAC,IAAI;AAAA,QAChF,QAAQ;AAAA,MACV,CAAC;AACD,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAI,CAAC,IAAI,IAAI;AACX,gBAAQ,MAAM,UAAU,KAAK,KAAK,EAAE;AACpC,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,cAAQ,IAAI,WAAW,SAAS,YAAY;AAAA,IAE9C,WAAW,WAAW,UAAU;AAC9B,YAAM,MAAM,MAAM,QAAQ,MAAM,eAAe;AAC/C,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAI,KAAK,SAAS,WAAW,GAAG;AAC9B,gBAAQ,IAAI,qBAAqB;AAAA,MACnC,OAAO;AACL,gBAAQ,IAAI,oBAAoB,KAAK,SAAS,MAAM;AAAA,CAAI;AACxD,mBAAW,KAAK,KAAK,UAAU;AAC7B,gBAAM,OAAO,EAAE,OAAO,MAAM,EAAE,IAAI,MAAM;AACxC,kBAAQ,IAAI,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,GAAG,IAAI,EAAE;AAAA,QACzD;AAAA,MACF;AAAA,IAEF,WAAW,WAAW,UAAU;AAC9B,YAAM,MAAM,MAAM,QAAQ,MAAM,aAAa;AAC7C,YAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,cAAQ,IAAI,mBAAmB;AAC/B,iBAAW,KAAK,KAAK,QAAQ;AAC3B,cAAM,YAAY,EAAE,SAAS,KAAK,UAAU,eAAe;AAC3D,gBAAQ,IAAI,KAAK,EAAE,IAAI,GAAG,SAAS,EAAE;AAAA,MACvC;AAAA,IAEF,OAAO;AACL,cAAQ,MAAM,4BAA4B,UAAU,QAAQ;AAAA,CAAI;AAChE,cAAQ,IAAI,QAAQ;AACpB,cAAQ,IAAI,iEAAiE;AAC7E,cAAQ,IAAI,wDAAwD;AACpE,cAAQ,IAAI,4DAA4D;AACxE,cAAQ,IAAI,6DAA6D;AACzE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,SAAS,KAAK;AACZ,QAAI,eAAe,aAAc,IAAY,OAAO,SAAS,gBAAgB;AAC3E,cAAQ,MAAM,0CAA0C;AACxD,0BAAoB;AACpB,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,UAAM;AAAA,EACR;AACF;AAEA,eAAsB,WAA0B;AAC9C,QAAM,qBAAqB;AAC3B,QAAM,EAAE,aAAa,WAAW,IAAI,MAAM,OAAO,sBAAmB;AACpE,QAAM,EAAE,cAAc,IAAI,MAAM,OAAO,sBAAmB;AAC1D,QAAM,KAAK,IAAI,cAAc;AAC7B,MAAI,MAAM,GAAG,OAAO,GAAG;AACrB,UAAM,GAAG,KAAK;AACd,UAAM,SAAS,GAAG,IAAI;AACtB,UAAM,SAAS,YAAY,WAAW,GAAG,OAAO,QAAQ,MAAM;AAC9D,QAAI,WAAW,QAAQ;AACrB,cAAQ,MAAM,OAAO,KAAK;AAC1B,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,IAAI,+BAA+B,OAAO,GAAG,GAAG;AAAA,EAC1D,OAAO;AACL,YAAQ,MAAM,iDAAiD;AAC/D,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,eAAsB,UAAyB;AAC7C,QAAM,EAAE,WAAW,IAAI,MAAM,OAAO,sBAAmB;AACvD,QAAM,SAAS,WAAW;AAC1B,MAAI,OAAO,SAAS;AAClB,YAAQ,IAAI,mCAAmC,OAAO,GAAG,GAAG;AAAA,EAC9D,OAAO;AACL,YAAQ,MAAM,OAAO,KAAK;AAC1B,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,eAAsB,YAA2B;AAC/C,QAAM,EAAE,UAAU,IAAI,MAAM,OAAO,sBAAmB;AACtD,QAAM,SAAS,UAAU;AACzB,MAAI,OAAO,SAAS;AAClB,YAAQ,IAAI,2BAA2B,OAAO,GAAG,GAAG;AAAA,EACtD,OAAO;AACL,YAAQ,IAAI,wBAAwB;AAAA,EACtC;AACF;AAEA,eAAsB,UAAyB;AAC7C,QAAM,EAAE,MAAM,IAAI,MAAM,OAAO,eAAoB;AACnD,QAAM,EAAE,eAAe,WAAW,IAAI,MAAM,OAAO,sBAAmB;AACtE,QAAM,UAAU,MAAM,OAAO,MAAW;AACxC,QAAM,KAAK,IAAI,cAAc;AAC7B,MAAI,SAAS;AACb,MAAI,MAAM,GAAG,OAAO,GAAG;AACrB,UAAM,GAAG,KAAK;AACd,aAAS,GAAG,IAAI,EAAE,QAAQ;AAAA,EAC5B;AACA,QAAM,UAAU,QAAQ,KAAK,WAAW,MAAM,GAAG,aAAa;AAC9D,QAAM,OAAO,MAAM,QAAQ,CAAC,MAAM,MAAM,MAAM,OAAO,GAAG,EAAE,OAAO,UAAU,CAAC;AAC5E,OAAK,GAAG,SAAS,CAAC,QAAe;AAC/B,YAAQ,MAAM,yBAAyB,IAAI,OAAO,EAAE;AACpD,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AACH;AAEA,eAAsB,YAA2B;AAC/C,QAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,6BAA0B;AACnE,QAAM,EAAE,cAAc,IAAI,MAAM,OAAO,sBAAmB;AAC1D,QAAM,KAAK,IAAI,cAAc;AAC7B,MAAI,CAAE,MAAM,GAAG,OAAO,GAAI;AACxB,YAAQ,MAAM,iDAAiD;AAC/D,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,QAAM,gBAAgB,EAAE;AAC1B;AAEA,eAAsB,WAA0B;AAC9C,QAAM,EAAE,UAAU,IAAI,MAAM,OAAO,sBAAmB;AACtD,QAAM,SAAS,UAAU;AACzB,MAAI,OAAO,SAAS;AAClB,YAAQ,MAAM,iDAAiD;AAC/D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,mBAAmB;AACpD,QAAM,MAAM,MAAM,QAAQ;AAAA,IACxB,SAAS;AAAA,IACT,SAAS;AAAA,EACX,CAAC;AACD,MAAI,CAAC,KAAK;AACR,YAAQ,IAAI,UAAU;AACtB;AAAA,EACF;AAEA,QAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,yBAAsB;AAClE,qBAAmB;AAEnB,QAAMC,MAAK,MAAM,OAAO,IAAS;AACjC,QAAMC,MAAK,MAAM,OAAO,IAAS;AACjC,QAAMC,QAAO,MAAM,OAAO,MAAW;AACrC,QAAM,aAAaA,MAAK,KAAKD,IAAG,QAAQ,GAAG,UAAU;AACrD,EAAAD,IAAG,OAAO,YAAY,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAEtD,UAAQ,IAAI,gDAAgD;AAC9D;AAEA,eAAsB,YAA2B;AAC/C,QAAM,UAAU,kBAAkB;AAClC,QAAM,SAAS,MAAM,iBAAiB;AACtC,MAAI,CAAC,QAAQ;AACX,YAAQ,MAAM,8DAA8D;AAC5E,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,MAAI,gBAAgB,SAAS,MAAM,KAAK,GAAG;AACzC,YAAQ,IAAI,wBAAwB,OAAO,GAAG;AAC9C;AAAA,EACF;AACA,UAAQ,IAAI,sBAAsB,OAAO,YAAO,MAAM,EAAE;AACxD,QAAM,KAAK,MAAM,UAAU;AAC3B,MAAI,IAAI;AACN,YAAQ,IAAI,8BAAyB,MAAM,SAAS;AAAA,EACtD,OAAO;AACL,YAAQ,MAAM,iEAAiE;AAC/E,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,eAAsB,WAAWG,UAA4C;AAC3E,QAAM,kBAAkBA,aAAY;AAGpC,MAAIA,YAAW,CAACA,SAAQ,WAAW,GAAG,GAAG;AACvC,YAAQ,MAAM,oBAAoBA,QAAO,EAAE;AAC3C,cAAU;AACV,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,qBAAqB;AAE3B,QAAM,EAAE,cAAc,IAAI,MAAM,OAAO,sBAAmB;AAC1D,QAAM,KAAK,IAAI,cAAc;AAG7B,MAAI,CAAE,MAAM,GAAG,OAAO,GAAI;AACxB,UAAM,EAAE,SAAS,IAAI,MAAM,OAAO,qBAAkB;AACpD,UAAM,cAAc,MAAM,SAAS,EAAE;AACrC,QAAI,CAAC,YAAa,SAAQ,KAAK,CAAC;AAAA,EAClC;AAEA,QAAM,GAAG,KAAK;AACd,QAAM,SAAS,GAAG,IAAI;AAEtB,MAAI,CAAC,mBAAmB,OAAO,YAAY,UAAU;AACnD,UAAM,EAAE,aAAa,WAAW,IAAI,MAAM,OAAO,sBAAmB;AACpE,UAAM,SAAS,YAAY,WAAW,GAAG,OAAO,QAAQ,MAAM;AAC9D,QAAI,WAAW,QAAQ;AACrB,cAAQ,MAAM,OAAO,KAAK;AAC1B,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,YAAQ,IAAI,+BAA+B,OAAO,GAAG,GAAG;AACxD;AAAA,EACF;AAEA,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,sBAAmB;AACxD,cAAY;AACZ,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,oBAAY;AACjD,QAAM,YAAY;AACpB;;;AF9UA,2BAA2B,KAAK;AAmBhC,IAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,IAAM,UAAU,KAAK,CAAC;AAEtB,IAAM,WAAgD;AAAA,EACpD,UAAU,YAAY,UAAU;AAAA,EAChC,MAAM,YAAY,UAAU;AAAA,EAC5B,aAAa,MAAM,WAAW;AAAA,EAC9B,MAAM,MAAM,WAAW;AAAA,EACvB,WAAW,MAAM,WAAW,IAAI;AAAA,EAChC,aAAa,MAAM,aAAa,IAAI;AAAA,EACpC,WAAW,MAAM,WAAW;AAAA,EAC5B,WAAW,MAAM,WAAW,IAAI;AAAA,EAChC,SAAS,MAAM,SAAS;AAAA,EACxB,QAAQ,MAAM,QAAQ;AAAA,EACtB,UAAU,MAAM,UAAU;AAAA,EAC1B,QAAQ,MAAM,QAAQ;AAAA,EACtB,UAAU,MAAM,UAAU;AAAA,EAC1B,SAAS,MAAM,SAAS;AAAA,EACxB,UAAU,MAAM,UAAU;AAAA,EAC1B,kBAAkB,YAAY;AAC5B,UAAM,EAAE,YAAY,IAAI,MAAM,OAAO,oBAAW;AAChD,UAAM,YAAY;AAAA,EACpB;AACF;AAEA,eAAe,OAAO;AACpB,QAAM,UAAU,UAAU,SAAS,OAAO,IAAI;AAC9C,MAAI,SAAS;AACX,UAAM,QAAQ;AAAA,EAChB,OAAO;AACL,UAAM,WAAW,OAAO;AAAA,EAC1B;AACF;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,MAAM,UAAU,GAAG;AAC3B,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":["require","args","fs","os","path","command"]}
|
|
@@ -3,12 +3,12 @@ import {
|
|
|
3
3
|
ConfigSchema,
|
|
4
4
|
PLUGINS_DIR,
|
|
5
5
|
expandHome
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-WF5XDN4D.js";
|
|
7
|
+
import "./chunk-LYKCQTH5.js";
|
|
8
8
|
export {
|
|
9
9
|
ConfigManager,
|
|
10
10
|
ConfigSchema,
|
|
11
11
|
PLUGINS_DIR,
|
|
12
12
|
expandHome
|
|
13
13
|
};
|
|
14
|
-
//# sourceMappingURL=config-
|
|
14
|
+
//# sourceMappingURL=config-J5YQOMDU.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
runConfigEditor
|
|
3
|
+
} from "./chunk-WHKLPZGK.js";
|
|
4
|
+
import "./chunk-MRKYJ422.js";
|
|
5
|
+
import "./chunk-BLVZFCKN.js";
|
|
6
|
+
import "./chunk-WF5XDN4D.js";
|
|
7
|
+
import "./chunk-LYKCQTH5.js";
|
|
8
|
+
export {
|
|
9
|
+
runConfigEditor
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=config-editor-IXL4BFG3.js.map
|
|
@@ -10,9 +10,9 @@ import {
|
|
|
10
10
|
startDaemon,
|
|
11
11
|
stopDaemon,
|
|
12
12
|
writePidFile
|
|
13
|
-
} from "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-3QACY5E3.js";
|
|
14
|
+
import "./chunk-WF5XDN4D.js";
|
|
15
|
+
import "./chunk-LYKCQTH5.js";
|
|
16
16
|
export {
|
|
17
17
|
clearRunning,
|
|
18
18
|
getPidPath,
|
|
@@ -26,4 +26,4 @@ export {
|
|
|
26
26
|
stopDaemon,
|
|
27
27
|
writePidFile
|
|
28
28
|
};
|
|
29
|
-
//# sourceMappingURL=daemon-
|
|
29
|
+
//# sourceMappingURL=daemon-SLGQGRKO.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -121,13 +121,13 @@ declare const LoggingSchema: z.ZodDefault<z.ZodObject<{
|
|
|
121
121
|
maxFiles: z.ZodDefault<z.ZodNumber>;
|
|
122
122
|
sessionLogRetentionDays: z.ZodDefault<z.ZodNumber>;
|
|
123
123
|
}, "strip", z.ZodTypeAny, {
|
|
124
|
-
level: "
|
|
124
|
+
level: "fatal" | "error" | "warn" | "info" | "debug" | "silent";
|
|
125
125
|
logDir: string;
|
|
126
126
|
maxFileSize: string | number;
|
|
127
127
|
maxFiles: number;
|
|
128
128
|
sessionLogRetentionDays: number;
|
|
129
129
|
}, {
|
|
130
|
-
level?: "
|
|
130
|
+
level?: "fatal" | "error" | "warn" | "info" | "debug" | "silent" | undefined;
|
|
131
131
|
logDir?: string | undefined;
|
|
132
132
|
maxFileSize?: string | number | undefined;
|
|
133
133
|
maxFiles?: number | undefined;
|
|
@@ -227,13 +227,13 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
227
227
|
maxFiles: z.ZodDefault<z.ZodNumber>;
|
|
228
228
|
sessionLogRetentionDays: z.ZodDefault<z.ZodNumber>;
|
|
229
229
|
}, "strip", z.ZodTypeAny, {
|
|
230
|
-
level: "
|
|
230
|
+
level: "fatal" | "error" | "warn" | "info" | "debug" | "silent";
|
|
231
231
|
logDir: string;
|
|
232
232
|
maxFileSize: string | number;
|
|
233
233
|
maxFiles: number;
|
|
234
234
|
sessionLogRetentionDays: number;
|
|
235
235
|
}, {
|
|
236
|
-
level?: "
|
|
236
|
+
level?: "fatal" | "error" | "warn" | "info" | "debug" | "silent" | undefined;
|
|
237
237
|
logDir?: string | undefined;
|
|
238
238
|
maxFileSize?: string | number | undefined;
|
|
239
239
|
maxFiles?: number | undefined;
|
|
@@ -296,8 +296,16 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
296
296
|
} | undefined;
|
|
297
297
|
}>>;
|
|
298
298
|
}, "strip", z.ZodTypeAny, {
|
|
299
|
-
|
|
300
|
-
|
|
299
|
+
tunnel: {
|
|
300
|
+
options: Record<string, unknown>;
|
|
301
|
+
enabled: boolean;
|
|
302
|
+
port: number;
|
|
303
|
+
provider: "cloudflare" | "ngrok" | "bore" | "tailscale";
|
|
304
|
+
storeTtlMinutes: number;
|
|
305
|
+
auth: {
|
|
306
|
+
enabled: boolean;
|
|
307
|
+
token?: string | undefined;
|
|
308
|
+
};
|
|
301
309
|
};
|
|
302
310
|
agents: Record<string, {
|
|
303
311
|
command: string;
|
|
@@ -310,13 +318,16 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
310
318
|
adapter: z.ZodOptional<z.ZodString>;
|
|
311
319
|
}, z.ZodTypeAny, "passthrough">>;
|
|
312
320
|
defaultAgent: string;
|
|
321
|
+
workspace: {
|
|
322
|
+
baseDir: string;
|
|
323
|
+
};
|
|
313
324
|
security: {
|
|
314
325
|
allowedUserIds: string[];
|
|
315
326
|
maxConcurrentSessions: number;
|
|
316
327
|
sessionTimeoutMinutes: number;
|
|
317
328
|
};
|
|
318
329
|
logging: {
|
|
319
|
-
level: "
|
|
330
|
+
level: "fatal" | "error" | "warn" | "info" | "debug" | "silent";
|
|
320
331
|
logDir: string;
|
|
321
332
|
maxFileSize: string | number;
|
|
322
333
|
maxFiles: number;
|
|
@@ -331,17 +342,6 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
331
342
|
sessionStore: {
|
|
332
343
|
ttlDays: number;
|
|
333
344
|
};
|
|
334
|
-
tunnel: {
|
|
335
|
-
options: Record<string, unknown>;
|
|
336
|
-
enabled: boolean;
|
|
337
|
-
port: number;
|
|
338
|
-
provider: "cloudflare" | "ngrok" | "bore" | "tailscale";
|
|
339
|
-
storeTtlMinutes: number;
|
|
340
|
-
auth: {
|
|
341
|
-
enabled: boolean;
|
|
342
|
-
token?: string | undefined;
|
|
343
|
-
};
|
|
344
|
-
};
|
|
345
345
|
}, {
|
|
346
346
|
agents: Record<string, {
|
|
347
347
|
command: string;
|
|
@@ -354,6 +354,17 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
354
354
|
adapter: z.ZodOptional<z.ZodString>;
|
|
355
355
|
}, z.ZodTypeAny, "passthrough">>;
|
|
356
356
|
defaultAgent: string;
|
|
357
|
+
tunnel?: {
|
|
358
|
+
options?: Record<string, unknown> | undefined;
|
|
359
|
+
enabled?: boolean | undefined;
|
|
360
|
+
port?: number | undefined;
|
|
361
|
+
provider?: "cloudflare" | "ngrok" | "bore" | "tailscale" | undefined;
|
|
362
|
+
storeTtlMinutes?: number | undefined;
|
|
363
|
+
auth?: {
|
|
364
|
+
enabled?: boolean | undefined;
|
|
365
|
+
token?: string | undefined;
|
|
366
|
+
} | undefined;
|
|
367
|
+
} | undefined;
|
|
357
368
|
workspace?: {
|
|
358
369
|
baseDir?: string | undefined;
|
|
359
370
|
} | undefined;
|
|
@@ -363,7 +374,7 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
363
374
|
sessionTimeoutMinutes?: number | undefined;
|
|
364
375
|
} | undefined;
|
|
365
376
|
logging?: {
|
|
366
|
-
level?: "
|
|
377
|
+
level?: "fatal" | "error" | "warn" | "info" | "debug" | "silent" | undefined;
|
|
367
378
|
logDir?: string | undefined;
|
|
368
379
|
maxFileSize?: string | number | undefined;
|
|
369
380
|
maxFiles?: number | undefined;
|
|
@@ -378,17 +389,6 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
378
389
|
sessionStore?: {
|
|
379
390
|
ttlDays?: number | undefined;
|
|
380
391
|
} | undefined;
|
|
381
|
-
tunnel?: {
|
|
382
|
-
options?: Record<string, unknown> | undefined;
|
|
383
|
-
enabled?: boolean | undefined;
|
|
384
|
-
port?: number | undefined;
|
|
385
|
-
provider?: "cloudflare" | "ngrok" | "bore" | "tailscale" | undefined;
|
|
386
|
-
storeTtlMinutes?: number | undefined;
|
|
387
|
-
auth?: {
|
|
388
|
-
enabled?: boolean | undefined;
|
|
389
|
-
token?: string | undefined;
|
|
390
|
-
} | undefined;
|
|
391
|
-
} | undefined;
|
|
392
392
|
}>;
|
|
393
393
|
type Config = z.infer<typeof ConfigSchema>;
|
|
394
394
|
declare function expandHome(p: string): string;
|
|
@@ -429,10 +429,25 @@ interface ChannelConfig {
|
|
|
429
429
|
enabled: boolean;
|
|
430
430
|
[key: string]: unknown;
|
|
431
431
|
}
|
|
432
|
-
|
|
433
|
-
|
|
432
|
+
interface IChannelAdapter {
|
|
433
|
+
start(): Promise<void>;
|
|
434
|
+
stop(): Promise<void>;
|
|
435
|
+
sendMessage(sessionId: string, content: OutgoingMessage): Promise<void>;
|
|
436
|
+
sendPermissionRequest(sessionId: string, request: PermissionRequest): Promise<void>;
|
|
437
|
+
sendNotification(notification: NotificationMessage): Promise<void>;
|
|
438
|
+
createSessionThread(sessionId: string, name: string): Promise<string>;
|
|
439
|
+
renameSessionThread(sessionId: string, newName: string): Promise<void>;
|
|
440
|
+
sendSkillCommands(sessionId: string, commands: AgentCommand[]): Promise<void>;
|
|
441
|
+
cleanupSkillCommands(sessionId: string): Promise<void>;
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Base class providing default no-op implementations for optional methods.
|
|
445
|
+
* Adapters can extend this or implement IChannelAdapter directly.
|
|
446
|
+
*/
|
|
447
|
+
declare abstract class ChannelAdapter<TCore = unknown> implements IChannelAdapter {
|
|
448
|
+
protected core: TCore;
|
|
434
449
|
protected config: ChannelConfig;
|
|
435
|
-
constructor(core:
|
|
450
|
+
constructor(core: TCore, config: ChannelConfig);
|
|
436
451
|
abstract start(): Promise<void>;
|
|
437
452
|
abstract stop(): Promise<void>;
|
|
438
453
|
abstract sendMessage(sessionId: string, content: OutgoingMessage): Promise<void>;
|
|
@@ -491,7 +506,66 @@ declare class AgentManager {
|
|
|
491
506
|
resume(agentName: string, workingDirectory: string, agentSessionId: string): Promise<AgentInstance>;
|
|
492
507
|
}
|
|
493
508
|
|
|
494
|
-
|
|
509
|
+
/**
|
|
510
|
+
* A minimal, generic typed event emitter.
|
|
511
|
+
*
|
|
512
|
+
* Usage:
|
|
513
|
+
* interface MyEvents {
|
|
514
|
+
* data: (payload: string) => void
|
|
515
|
+
* error: (err: Error) => void
|
|
516
|
+
* }
|
|
517
|
+
* const emitter = new TypedEmitter<MyEvents>()
|
|
518
|
+
* emitter.on('data', (payload) => { ... })
|
|
519
|
+
* emitter.emit('data', 'hello')
|
|
520
|
+
*/
|
|
521
|
+
declare class TypedEmitter<T extends Record<string & keyof T, (...args: any[]) => void>> {
|
|
522
|
+
private listeners;
|
|
523
|
+
private paused;
|
|
524
|
+
private buffer;
|
|
525
|
+
on<K extends keyof T>(event: K, listener: T[K]): this;
|
|
526
|
+
off<K extends keyof T>(event: K, listener: T[K]): this;
|
|
527
|
+
emit<K extends keyof T>(event: K, ...args: Parameters<T[K]>): void;
|
|
528
|
+
/**
|
|
529
|
+
* Pause event delivery. Events emitted while paused are buffered.
|
|
530
|
+
* Optionally pass a filter to allow specific events through even while paused.
|
|
531
|
+
*/
|
|
532
|
+
pause(passthrough?: (event: keyof T, args: unknown[]) => boolean): void;
|
|
533
|
+
private passthroughFn?;
|
|
534
|
+
/** Resume event delivery and replay buffered events in order. */
|
|
535
|
+
resume(): void;
|
|
536
|
+
/** Discard all buffered events without delivering them. */
|
|
537
|
+
clearBuffer(): void;
|
|
538
|
+
get isPaused(): boolean;
|
|
539
|
+
get bufferSize(): number;
|
|
540
|
+
removeAllListeners(event?: keyof T): void;
|
|
541
|
+
private deliver;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
* Encapsulates pending permission state with a typed Promise API.
|
|
546
|
+
*/
|
|
547
|
+
declare class PermissionGate {
|
|
548
|
+
private request?;
|
|
549
|
+
private resolveFn?;
|
|
550
|
+
private rejectFn?;
|
|
551
|
+
private settled;
|
|
552
|
+
setPending(request: PermissionRequest): Promise<string>;
|
|
553
|
+
resolve(optionId: string): void;
|
|
554
|
+
reject(reason?: string): void;
|
|
555
|
+
get isPending(): boolean;
|
|
556
|
+
get currentRequest(): PermissionRequest | undefined;
|
|
557
|
+
/** The request ID of the current pending request, undefined after settlement */
|
|
558
|
+
get requestId(): string | undefined;
|
|
559
|
+
private cleanup;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
interface SessionEvents {
|
|
563
|
+
agent_event: (event: AgentEvent) => void;
|
|
564
|
+
permission_request: (request: PermissionRequest) => void;
|
|
565
|
+
session_end: (reason: string) => void;
|
|
566
|
+
error: (error: Error) => void;
|
|
567
|
+
}
|
|
568
|
+
declare class Session extends TypedEmitter<SessionEvents> {
|
|
495
569
|
id: string;
|
|
496
570
|
channelId: string;
|
|
497
571
|
threadId: string;
|
|
@@ -501,16 +575,12 @@ declare class Session {
|
|
|
501
575
|
agentSessionId: string;
|
|
502
576
|
status: SessionStatus;
|
|
503
577
|
name?: string;
|
|
504
|
-
promptQueue: string[];
|
|
505
|
-
promptRunning: boolean;
|
|
506
578
|
createdAt: Date;
|
|
507
579
|
adapter?: ChannelAdapter;
|
|
508
|
-
pendingPermission?: {
|
|
509
|
-
requestId: string;
|
|
510
|
-
resolve: (optionId: string) => void;
|
|
511
|
-
};
|
|
512
580
|
dangerousMode: boolean;
|
|
513
581
|
log: Logger;
|
|
582
|
+
readonly permissionGate: PermissionGate;
|
|
583
|
+
private readonly queue;
|
|
514
584
|
constructor(opts: {
|
|
515
585
|
id?: string;
|
|
516
586
|
channelId: string;
|
|
@@ -518,40 +588,43 @@ declare class Session {
|
|
|
518
588
|
workingDirectory: string;
|
|
519
589
|
agentInstance: AgentInstance;
|
|
520
590
|
});
|
|
591
|
+
/** @deprecated Use permissionGate directly */
|
|
592
|
+
get pendingPermission(): {
|
|
593
|
+
requestId: string;
|
|
594
|
+
resolve: (optionId: string) => void;
|
|
595
|
+
} | undefined;
|
|
596
|
+
set pendingPermission(val: {
|
|
597
|
+
requestId: string;
|
|
598
|
+
resolve: (optionId: string) => void;
|
|
599
|
+
} | undefined);
|
|
600
|
+
/** Number of prompts waiting in queue */
|
|
601
|
+
get queueDepth(): number;
|
|
602
|
+
get promptRunning(): boolean;
|
|
521
603
|
enqueuePrompt(text: string): Promise<void>;
|
|
522
|
-
private
|
|
604
|
+
private processPrompt;
|
|
523
605
|
private autoName;
|
|
524
606
|
/** Fire-and-forget warm-up: primes model cache while user types their first message */
|
|
525
607
|
warmup(): Promise<void>;
|
|
608
|
+
private runWarmup;
|
|
526
609
|
cancel(): Promise<void>;
|
|
527
610
|
destroy(): Promise<void>;
|
|
528
611
|
}
|
|
529
612
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
private
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
getRecordByThread(channelId: string, threadId: string): SessionRecord | undefined;
|
|
546
|
-
registerSession(session: Session): void;
|
|
547
|
-
updateSessionPlatform(sessionId: string, platform: Record<string, unknown>): Promise<void>;
|
|
548
|
-
updateSessionActivity(sessionId: string): Promise<void>;
|
|
549
|
-
updateSessionStatus(sessionId: string, status: SessionStatus): Promise<void>;
|
|
550
|
-
updateSessionName(sessionId: string, name: string): Promise<void>;
|
|
551
|
-
getSessionRecord(sessionId: string): SessionRecord | undefined;
|
|
552
|
-
cancelSession(sessionId: string): Promise<void>;
|
|
553
|
-
listSessions(channelId?: string): Session[];
|
|
554
|
-
destroyAll(): Promise<void>;
|
|
613
|
+
/**
|
|
614
|
+
* Serial prompt queue — ensures prompts are processed one at a time.
|
|
615
|
+
*/
|
|
616
|
+
declare class PromptQueue {
|
|
617
|
+
private processor;
|
|
618
|
+
private onError?;
|
|
619
|
+
private queue;
|
|
620
|
+
private processing;
|
|
621
|
+
constructor(processor: (text: string) => Promise<void>, onError?: ((err: unknown) => void) | undefined);
|
|
622
|
+
enqueue(text: string): Promise<void>;
|
|
623
|
+
private process;
|
|
624
|
+
private drainNext;
|
|
625
|
+
clear(): void;
|
|
626
|
+
get pending(): number;
|
|
627
|
+
get isProcessing(): boolean;
|
|
555
628
|
}
|
|
556
629
|
|
|
557
630
|
interface ViewerEntry {
|
|
@@ -596,16 +669,58 @@ declare class TunnelService {
|
|
|
596
669
|
private createProvider;
|
|
597
670
|
}
|
|
598
671
|
|
|
672
|
+
declare class MessageTransformer {
|
|
673
|
+
private tunnelService?;
|
|
674
|
+
constructor(tunnelService?: TunnelService | undefined);
|
|
675
|
+
transform(event: AgentEvent, sessionContext?: {
|
|
676
|
+
id: string;
|
|
677
|
+
workingDirectory: string;
|
|
678
|
+
}): OutgoingMessage;
|
|
679
|
+
private enrichWithViewerLinks;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
interface SessionStore {
|
|
683
|
+
save(record: SessionRecord): Promise<void>;
|
|
684
|
+
get(sessionId: string): SessionRecord | undefined;
|
|
685
|
+
findByPlatform(channelId: string, predicate: (platform: Record<string, unknown>) => boolean): SessionRecord | undefined;
|
|
686
|
+
list(channelId?: string): SessionRecord[];
|
|
687
|
+
remove(sessionId: string): Promise<void>;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
declare class SessionManager {
|
|
691
|
+
private sessions;
|
|
692
|
+
private store;
|
|
693
|
+
constructor(store?: SessionStore | null);
|
|
694
|
+
createSession(channelId: string, agentName: string, workingDirectory: string, agentManager: AgentManager): Promise<Session>;
|
|
695
|
+
getSession(sessionId: string): Session | undefined;
|
|
696
|
+
getSessionByThread(channelId: string, threadId: string): Session | undefined;
|
|
697
|
+
getRecordByThread(channelId: string, threadId: string): SessionRecord | undefined;
|
|
698
|
+
registerSession(session: Session): void;
|
|
699
|
+
updateSessionPlatform(sessionId: string, platform: Record<string, unknown>): Promise<void>;
|
|
700
|
+
updateSessionActivity(sessionId: string): Promise<void>;
|
|
701
|
+
updateSessionStatus(sessionId: string, status: SessionStatus): Promise<void>;
|
|
702
|
+
updateSessionName(sessionId: string, name: string): Promise<void>;
|
|
703
|
+
getSessionRecord(sessionId: string): SessionRecord | undefined;
|
|
704
|
+
cancelSession(sessionId: string): Promise<void>;
|
|
705
|
+
listSessions(channelId?: string): Session[];
|
|
706
|
+
destroyAll(): Promise<void>;
|
|
707
|
+
}
|
|
708
|
+
|
|
599
709
|
declare class OpenACPCore {
|
|
600
710
|
configManager: ConfigManager;
|
|
601
711
|
agentManager: AgentManager;
|
|
602
712
|
sessionManager: SessionManager;
|
|
603
713
|
notificationManager: NotificationManager;
|
|
714
|
+
messageTransformer: MessageTransformer;
|
|
604
715
|
adapters: Map<string, ChannelAdapter>;
|
|
605
|
-
|
|
716
|
+
/** Set by main.ts — triggers graceful shutdown with restart exit code */
|
|
717
|
+
requestRestart: (() => Promise<void>) | null;
|
|
718
|
+
private _tunnelService?;
|
|
606
719
|
private sessionStore;
|
|
607
720
|
private resumeLocks;
|
|
608
721
|
constructor(configManager: ConfigManager);
|
|
722
|
+
get tunnelService(): TunnelService | undefined;
|
|
723
|
+
set tunnelService(service: TunnelService | undefined);
|
|
609
724
|
registerAdapter(name: string, adapter: ChannelAdapter): void;
|
|
610
725
|
start(): Promise<void>;
|
|
611
726
|
stop(): Promise<void>;
|
|
@@ -613,8 +728,6 @@ declare class OpenACPCore {
|
|
|
613
728
|
handleNewSession(channelId: string, agentName?: string, workspacePath?: string): Promise<Session>;
|
|
614
729
|
handleNewChat(channelId: string, currentThreadId: string): Promise<Session | null>;
|
|
615
730
|
private lazyResume;
|
|
616
|
-
private toOutgoingMessage;
|
|
617
|
-
private enrichWithViewerLinks;
|
|
618
731
|
wireSessionEvents(session: Session, adapter: ChannelAdapter): void;
|
|
619
732
|
}
|
|
620
733
|
|
|
@@ -689,7 +802,7 @@ interface TelegramChannelConfig {
|
|
|
689
802
|
assistantTopicId: number | null;
|
|
690
803
|
}
|
|
691
804
|
|
|
692
|
-
declare class TelegramAdapter extends ChannelAdapter {
|
|
805
|
+
declare class TelegramAdapter extends ChannelAdapter<OpenACPCore> {
|
|
693
806
|
private bot;
|
|
694
807
|
private telegramConfig;
|
|
695
808
|
private sessionDrafts;
|
|
@@ -719,4 +832,4 @@ declare class TelegramAdapter extends ChannelAdapter {
|
|
|
719
832
|
private finalizeDraft;
|
|
720
833
|
}
|
|
721
834
|
|
|
722
|
-
export { type AdapterFactory, type AgentCommand, type AgentDefinition, type AgentEvent, AgentInstance, AgentManager, type ApiConfig, ApiServer, ChannelAdapter, type ChannelConfig, type Config, ConfigManager, type IncomingMessage, type Logger, type LoggingConfig, NotificationManager, type NotificationMessage, OpenACPCore, type OutgoingMessage, PLUGINS_DIR, type PermissionOption, type PermissionRequest, type PlanEntry, Session, SessionManager, type SessionRecord, type SessionStatus, StderrCapture, TelegramAdapter, type TelegramPlatformData, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, getPidPath, getStatus, initLogger, installAutoStart, installPlugin, isAutoStartInstalled, isAutoStartSupported, listPlugins, loadAdapterFactory, log, nodeToWebReadable, nodeToWebWritable, runConfigEditor, shutdownLogger, startDaemon, stopDaemon, uninstallAutoStart, uninstallPlugin };
|
|
835
|
+
export { type AdapterFactory, type AgentCommand, type AgentDefinition, type AgentEvent, AgentInstance, AgentManager, type ApiConfig, ApiServer, ChannelAdapter, type ChannelConfig, type Config, ConfigManager, type IChannelAdapter, type IncomingMessage, type Logger, type LoggingConfig, MessageTransformer, NotificationManager, type NotificationMessage, OpenACPCore, type OutgoingMessage, PLUGINS_DIR, PermissionGate, type PermissionOption, type PermissionRequest, type PlanEntry, PromptQueue, Session, type SessionEvents, SessionManager, type SessionRecord, type SessionStatus, StderrCapture, TelegramAdapter, type TelegramPlatformData, TypedEmitter, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, getPidPath, getStatus, initLogger, installAutoStart, installPlugin, isAutoStartInstalled, isAutoStartSupported, listPlugins, loadAdapterFactory, log, nodeToWebReadable, nodeToWebWritable, runConfigEditor, shutdownLogger, startDaemon, stopDaemon, uninstallAutoStart, uninstallPlugin };
|
package/dist/index.js
CHANGED
|
@@ -3,42 +3,46 @@ import {
|
|
|
3
3
|
AgentManager,
|
|
4
4
|
ApiServer,
|
|
5
5
|
ChannelAdapter,
|
|
6
|
+
MessageTransformer,
|
|
6
7
|
NotificationManager,
|
|
7
8
|
OpenACPCore,
|
|
9
|
+
PermissionGate,
|
|
10
|
+
PromptQueue,
|
|
8
11
|
Session,
|
|
9
12
|
SessionManager,
|
|
10
13
|
StderrCapture,
|
|
11
14
|
TelegramAdapter,
|
|
15
|
+
TypedEmitter,
|
|
12
16
|
nodeToWebReadable,
|
|
13
17
|
nodeToWebWritable
|
|
14
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-WXPN5UOT.js";
|
|
19
|
+
import {
|
|
20
|
+
runConfigEditor
|
|
21
|
+
} from "./chunk-WHKLPZGK.js";
|
|
15
22
|
import {
|
|
16
23
|
installPlugin,
|
|
17
24
|
listPlugins,
|
|
18
25
|
loadAdapterFactory,
|
|
19
26
|
uninstallPlugin
|
|
20
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-2SY7Y2VB.js";
|
|
21
28
|
import {
|
|
22
29
|
getPidPath,
|
|
23
30
|
getStatus,
|
|
24
31
|
startDaemon,
|
|
25
32
|
stopDaemon
|
|
26
|
-
} from "./chunk-
|
|
27
|
-
import {
|
|
28
|
-
runConfigEditor
|
|
29
|
-
} from "./chunk-NS2L445T.js";
|
|
33
|
+
} from "./chunk-3QACY5E3.js";
|
|
30
34
|
import {
|
|
31
35
|
installAutoStart,
|
|
32
36
|
isAutoStartInstalled,
|
|
33
37
|
isAutoStartSupported,
|
|
34
38
|
uninstallAutoStart
|
|
35
|
-
} from "./chunk-
|
|
36
|
-
import "./chunk-
|
|
39
|
+
} from "./chunk-MRKYJ422.js";
|
|
40
|
+
import "./chunk-BLVZFCKN.js";
|
|
37
41
|
import {
|
|
38
42
|
ConfigManager,
|
|
39
43
|
PLUGINS_DIR,
|
|
40
44
|
expandHome
|
|
41
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-WF5XDN4D.js";
|
|
42
46
|
import {
|
|
43
47
|
cleanupOldSessionLogs,
|
|
44
48
|
createChildLogger,
|
|
@@ -46,20 +50,24 @@ import {
|
|
|
46
50
|
initLogger,
|
|
47
51
|
log,
|
|
48
52
|
shutdownLogger
|
|
49
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-LYKCQTH5.js";
|
|
50
54
|
export {
|
|
51
55
|
AgentInstance,
|
|
52
56
|
AgentManager,
|
|
53
57
|
ApiServer,
|
|
54
58
|
ChannelAdapter,
|
|
55
59
|
ConfigManager,
|
|
60
|
+
MessageTransformer,
|
|
56
61
|
NotificationManager,
|
|
57
62
|
OpenACPCore,
|
|
58
63
|
PLUGINS_DIR,
|
|
64
|
+
PermissionGate,
|
|
65
|
+
PromptQueue,
|
|
59
66
|
Session,
|
|
60
67
|
SessionManager,
|
|
61
68
|
StderrCapture,
|
|
62
69
|
TelegramAdapter,
|
|
70
|
+
TypedEmitter,
|
|
63
71
|
cleanupOldSessionLogs,
|
|
64
72
|
createChildLogger,
|
|
65
73
|
createSessionLogger,
|