@openacp/cli 0.4.9 → 0.4.11

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 (63) hide show
  1. package/README.md +17 -2
  2. package/dist/api-client-UN7BXQOQ.js +11 -0
  3. package/dist/{autostart-DZ3MHHMM.js → autostart-K73RQZVV.js} +3 -3
  4. package/dist/chunk-3DIPXFZJ.js +650 -0
  5. package/dist/chunk-3DIPXFZJ.js.map +1 -0
  6. package/dist/{chunk-45DFYWJT.js → chunk-66RVSUAR.js} +1782 -1415
  7. package/dist/chunk-66RVSUAR.js.map +1 -0
  8. package/dist/chunk-BGKQHQB4.js +276 -0
  9. package/dist/chunk-BGKQHQB4.js.map +1 -0
  10. package/dist/chunk-C33LTDZV.js +97 -0
  11. package/dist/chunk-C33LTDZV.js.map +1 -0
  12. package/dist/{chunk-LYKCQTH5.js → chunk-ESOPMQAY.js} +5 -1
  13. package/dist/chunk-ESOPMQAY.js.map +1 -0
  14. package/dist/{chunk-6MJLVZXV.js → chunk-FKOARMAE.js} +58 -21
  15. package/dist/{chunk-6MJLVZXV.js.map → chunk-FKOARMAE.js.map} +1 -1
  16. package/dist/chunk-OORPX73T.js +30 -0
  17. package/dist/chunk-OORPX73T.js.map +1 -0
  18. package/dist/{chunk-V3BA2MJ6.js → chunk-RF3DUYFO.js} +2 -2
  19. package/dist/{chunk-UAUTLC4E.js → chunk-W7QQA6CW.js} +4 -4
  20. package/dist/{chunk-ZRFBLD3W.js → chunk-WYZFGHHI.js} +14 -4
  21. package/dist/chunk-WYZFGHHI.js.map +1 -0
  22. package/dist/{chunk-MRKYJ422.js → chunk-X6LLG7XN.js} +2 -2
  23. package/dist/{chunk-C6YIUTGR.js → chunk-YRJEZD7R.js} +2 -2
  24. package/dist/{chunk-HZD3CGPK.js → chunk-ZW444AQY.js} +3 -3
  25. package/dist/cli.js +141 -52
  26. package/dist/cli.js.map +1 -1
  27. package/dist/{config-H2DSEHNW.js → config-XURP6B3S.js} +3 -3
  28. package/dist/config-editor-AALY3URF.js +11 -0
  29. package/dist/config-registry-OGX4YM2U.js +17 -0
  30. package/dist/{daemon-VF6HJQXD.js → daemon-GWJM2S4A.js} +4 -4
  31. package/dist/doctor-X477CVZN.js +9 -0
  32. package/dist/doctor-X477CVZN.js.map +1 -0
  33. package/dist/index.d.ts +76 -27
  34. package/dist/index.js +33 -13
  35. package/dist/install-cloudflared-BTGUD7SW.js +8 -0
  36. package/dist/install-cloudflared-BTGUD7SW.js.map +1 -0
  37. package/dist/log-SPS2S6FO.js +19 -0
  38. package/dist/log-SPS2S6FO.js.map +1 -0
  39. package/dist/{main-7T5YHFHO.js → main-2QKD2EI2.js} +17 -14
  40. package/dist/{main-7T5YHFHO.js.map → main-2QKD2EI2.js.map} +1 -1
  41. package/dist/menu-CARRTW2F.js +17 -0
  42. package/dist/menu-CARRTW2F.js.map +1 -0
  43. package/dist/{setup-FCVL75K6.js → setup-TTOL7XAN.js} +4 -4
  44. package/dist/setup-TTOL7XAN.js.map +1 -0
  45. package/dist/{tunnel-service-DASSH7OA.js → tunnel-service-LEVPLXAZ.js} +3 -3
  46. package/package.json +1 -1
  47. package/dist/chunk-45DFYWJT.js.map +0 -1
  48. package/dist/chunk-LYKCQTH5.js.map +0 -1
  49. package/dist/chunk-ZRFBLD3W.js.map +0 -1
  50. package/dist/config-editor-SKS4LJLT.js +0 -11
  51. package/dist/install-cloudflared-ILUXKLAC.js +0 -8
  52. /package/dist/{autostart-DZ3MHHMM.js.map → api-client-UN7BXQOQ.js.map} +0 -0
  53. /package/dist/{config-H2DSEHNW.js.map → autostart-K73RQZVV.js.map} +0 -0
  54. /package/dist/{chunk-V3BA2MJ6.js.map → chunk-RF3DUYFO.js.map} +0 -0
  55. /package/dist/{chunk-UAUTLC4E.js.map → chunk-W7QQA6CW.js.map} +0 -0
  56. /package/dist/{chunk-MRKYJ422.js.map → chunk-X6LLG7XN.js.map} +0 -0
  57. /package/dist/{chunk-C6YIUTGR.js.map → chunk-YRJEZD7R.js.map} +0 -0
  58. /package/dist/{chunk-HZD3CGPK.js.map → chunk-ZW444AQY.js.map} +0 -0
  59. /package/dist/{config-editor-SKS4LJLT.js.map → config-XURP6B3S.js.map} +0 -0
  60. /package/dist/{daemon-VF6HJQXD.js.map → config-editor-AALY3URF.js.map} +0 -0
  61. /package/dist/{install-cloudflared-ILUXKLAC.js.map → config-registry-OGX4YM2U.js.map} +0 -0
  62. /package/dist/{setup-FCVL75K6.js.map → daemon-GWJM2S4A.js.map} +0 -0
  63. /package/dist/{tunnel-service-DASSH7OA.js.map → tunnel-service-LEVPLXAZ.js.map} +0 -0
package/dist/cli.js CHANGED
@@ -3,7 +3,12 @@ import {
3
3
  installPlugin,
4
4
  listPlugins,
5
5
  uninstallPlugin
6
- } from "./chunk-HZD3CGPK.js";
6
+ } from "./chunk-ZW444AQY.js";
7
+ import {
8
+ apiCall,
9
+ readApiPort,
10
+ removeStalePortFile
11
+ } from "./chunk-OORPX73T.js";
7
12
  import {
8
13
  checkAndPromptUpdate,
9
14
  compareVersions,
@@ -11,36 +16,12 @@ import {
11
16
  getLatestVersion,
12
17
  runUpdate
13
18
  } from "./chunk-KSIQZC3J.js";
14
- import "./chunk-ZRFBLD3W.js";
15
- import "./chunk-LYKCQTH5.js";
19
+ import "./chunk-WYZFGHHI.js";
20
+ import "./chunk-ESOPMQAY.js";
16
21
 
17
22
  // src/cli.ts
18
23
  import { setDefaultAutoSelectFamily } from "net";
19
24
 
20
- // src/core/api-client.ts
21
- import * as fs from "fs";
22
- import * as path from "path";
23
- import * as os from "os";
24
- var DEFAULT_PORT_FILE = path.join(os.homedir(), ".openacp", "api.port");
25
- function readApiPort(portFilePath = DEFAULT_PORT_FILE) {
26
- try {
27
- const content = fs.readFileSync(portFilePath, "utf-8").trim();
28
- const port = parseInt(content, 10);
29
- return isNaN(port) ? null : port;
30
- } catch {
31
- return null;
32
- }
33
- }
34
- function removeStalePortFile(portFilePath = DEFAULT_PORT_FILE) {
35
- try {
36
- fs.unlinkSync(portFilePath);
37
- } catch {
38
- }
39
- }
40
- async function apiCall(port, urlPath, options) {
41
- return fetch(`http://127.0.0.1:${port}${urlPath}`, options);
42
- }
43
-
44
25
  // src/cli/commands.ts
45
26
  function printHelp() {
46
27
  console.log(`
@@ -53,8 +34,11 @@ Usage:
53
34
  openacp status Show daemon status
54
35
  openacp logs Tail daemon log file
55
36
  openacp config Edit configuration
37
+ openacp config set <key> <value> Set a config value
56
38
  openacp reset Delete all data and start fresh
57
39
  openacp update Update to latest version
40
+ openacp doctor Run system diagnostics
41
+ openacp doctor --dry-run Check only, don't fix
58
42
  openacp install <package> Install a plugin adapter
59
43
  openacp uninstall <package> Uninstall a plugin adapter
60
44
  openacp plugins List installed plugins
@@ -78,8 +62,8 @@ API (requires running daemon):
78
62
  openacp api health Show system health
79
63
  openacp api adapters List registered adapters
80
64
  openacp api tunnel Show tunnel status
81
- openacp api config Show runtime config
82
- openacp api config set <key> <value> Update config value
65
+ openacp api config Show runtime config (deprecated)
66
+ openacp api config set <key> <value> Update config value (deprecated)
83
67
  openacp api restart Restart daemon
84
68
  openacp api notify <message> Send notification to all channels
85
69
  openacp api version Show daemon version
@@ -350,6 +334,7 @@ async function cmdApi(args2) {
350
334
  }
351
335
  console.log("Restart signal sent. OpenACP is restarting...");
352
336
  } else if (subCmd === "config") {
337
+ console.warn('\u26A0\uFE0F Deprecated: use "openacp config" or "openacp config set" instead.');
353
338
  const subSubCmd = args2[2];
354
339
  if (!subSubCmd) {
355
340
  const res = await apiCall(port, "/api/config");
@@ -475,8 +460,8 @@ async function cmdApi(args2) {
475
460
  }
476
461
  async function cmdStart() {
477
462
  await checkAndPromptUpdate();
478
- const { startDaemon, getPidPath } = await import("./daemon-VF6HJQXD.js");
479
- const { ConfigManager } = await import("./config-H2DSEHNW.js");
463
+ const { startDaemon, getPidPath } = await import("./daemon-GWJM2S4A.js");
464
+ const { ConfigManager } = await import("./config-XURP6B3S.js");
480
465
  const cm = new ConfigManager();
481
466
  if (await cm.exists()) {
482
467
  await cm.load();
@@ -493,7 +478,7 @@ async function cmdStart() {
493
478
  }
494
479
  }
495
480
  async function cmdStop() {
496
- const { stopDaemon } = await import("./daemon-VF6HJQXD.js");
481
+ const { stopDaemon } = await import("./daemon-GWJM2S4A.js");
497
482
  const result = stopDaemon();
498
483
  if (result.stopped) {
499
484
  console.log(`OpenACP daemon stopped (was PID ${result.pid})`);
@@ -503,7 +488,7 @@ async function cmdStop() {
503
488
  }
504
489
  }
505
490
  async function cmdStatus() {
506
- const { getStatus } = await import("./daemon-VF6HJQXD.js");
491
+ const { getStatus } = await import("./daemon-GWJM2S4A.js");
507
492
  const status = getStatus();
508
493
  if (status.running) {
509
494
  console.log(`OpenACP is running (PID ${status.pid})`);
@@ -513,7 +498,7 @@ async function cmdStatus() {
513
498
  }
514
499
  async function cmdLogs() {
515
500
  const { spawn } = await import("child_process");
516
- const { ConfigManager, expandHome } = await import("./config-H2DSEHNW.js");
501
+ const { ConfigManager, expandHome } = await import("./config-XURP6B3S.js");
517
502
  const pathMod = await import("path");
518
503
  const cm = new ConfigManager();
519
504
  let logDir = "~/.openacp/logs";
@@ -528,18 +513,77 @@ async function cmdLogs() {
528
513
  process.exit(1);
529
514
  });
530
515
  }
531
- async function cmdConfig() {
532
- const { runConfigEditor } = await import("./config-editor-SKS4LJLT.js");
533
- const { ConfigManager } = await import("./config-H2DSEHNW.js");
516
+ async function cmdConfig(args2 = []) {
517
+ const subCmd = args2[1];
518
+ if (subCmd === "set") {
519
+ const configPath = args2[2];
520
+ const configValue = args2[3];
521
+ if (!configPath || configValue === void 0) {
522
+ console.error("Usage: openacp config set <path> <value>");
523
+ process.exit(1);
524
+ }
525
+ let value = configValue;
526
+ try {
527
+ value = JSON.parse(configValue);
528
+ } catch {
529
+ }
530
+ const port2 = readApiPort();
531
+ if (port2 !== null) {
532
+ const res = await apiCall(port2, "/api/config", {
533
+ method: "PATCH",
534
+ headers: { "Content-Type": "application/json" },
535
+ body: JSON.stringify({ path: configPath, value })
536
+ });
537
+ const data = await res.json();
538
+ if (!res.ok) {
539
+ console.error(`Error: ${data.error}`);
540
+ process.exit(1);
541
+ }
542
+ console.log(`Config updated: ${configPath} = ${JSON.stringify(value)}`);
543
+ if (data.needsRestart) {
544
+ console.log("Note: restart required for this change to take effect.");
545
+ }
546
+ } else {
547
+ const { ConfigManager: ConfigManager2 } = await import("./config-XURP6B3S.js");
548
+ const cm2 = new ConfigManager2();
549
+ if (!await cm2.exists()) {
550
+ console.error('No config found. Run "openacp" first to set up.');
551
+ process.exit(1);
552
+ }
553
+ await cm2.load();
554
+ const updates = buildNestedUpdateFromPath(configPath, value);
555
+ await cm2.save(updates);
556
+ console.log(`Config updated: ${configPath} = ${JSON.stringify(value)}`);
557
+ }
558
+ return;
559
+ }
560
+ const { runConfigEditor } = await import("./config-editor-AALY3URF.js");
561
+ const { ConfigManager } = await import("./config-XURP6B3S.js");
534
562
  const cm = new ConfigManager();
535
563
  if (!await cm.exists()) {
536
564
  console.error('No config found. Run "openacp" first to set up.');
537
565
  process.exit(1);
538
566
  }
539
- await runConfigEditor(cm);
567
+ const port = readApiPort();
568
+ if (port !== null) {
569
+ await runConfigEditor(cm, "api", port);
570
+ } else {
571
+ await runConfigEditor(cm, "file");
572
+ }
573
+ }
574
+ function buildNestedUpdateFromPath(dotPath, value) {
575
+ const parts = dotPath.split(".");
576
+ const result = {};
577
+ let target = result;
578
+ for (let i = 0; i < parts.length - 1; i++) {
579
+ target[parts[i]] = {};
580
+ target = target[parts[i]];
581
+ }
582
+ target[parts[parts.length - 1]] = value;
583
+ return result;
540
584
  }
541
585
  async function cmdReset() {
542
- const { getStatus } = await import("./daemon-VF6HJQXD.js");
586
+ const { getStatus } = await import("./daemon-GWJM2S4A.js");
543
587
  const status = getStatus();
544
588
  if (status.running) {
545
589
  console.error("OpenACP is running. Stop it first: openacp stop");
@@ -554,13 +598,13 @@ async function cmdReset() {
554
598
  console.log("Aborted.");
555
599
  return;
556
600
  }
557
- const { uninstallAutoStart } = await import("./autostart-DZ3MHHMM.js");
601
+ const { uninstallAutoStart } = await import("./autostart-K73RQZVV.js");
558
602
  uninstallAutoStart();
559
- const fs2 = await import("fs");
560
- const os2 = await import("os");
561
- const path2 = await import("path");
562
- const openacpDir = path2.join(os2.homedir(), ".openacp");
563
- fs2.rmSync(openacpDir, { recursive: true, force: true });
603
+ const fs = await import("fs");
604
+ const os = await import("os");
605
+ const path = await import("path");
606
+ const openacpDir = path.join(os.homedir(), ".openacp");
607
+ fs.rmSync(openacpDir, { recursive: true, force: true });
564
608
  console.log("Reset complete. Run `openacp` to set up again.");
565
609
  }
566
610
  async function cmdUpdate() {
@@ -661,6 +705,50 @@ async function cmdIntegrate(args2) {
661
705
  }
662
706
  }
663
707
  }
708
+ async function cmdDoctor(args2) {
709
+ const dryRun = args2.includes("--dry-run");
710
+ const { DoctorEngine } = await import("./doctor-X477CVZN.js");
711
+ const engine = new DoctorEngine({ dryRun });
712
+ console.log("\n\u{1FA7A} OpenACP Doctor\n");
713
+ const report = await engine.runAll();
714
+ const icons = { pass: "\x1B[32m\u2705\x1B[0m", warn: "\x1B[33m\u26A0\uFE0F\x1B[0m", fail: "\x1B[31m\u274C\x1B[0m" };
715
+ for (const category of report.categories) {
716
+ console.log(`\x1B[1m\x1B[36m${category.name}\x1B[0m`);
717
+ for (const result of category.results) {
718
+ console.log(` ${icons[result.status]} ${result.message}`);
719
+ }
720
+ console.log();
721
+ }
722
+ if (report.pendingFixes.length > 0) {
723
+ console.log("\x1B[1mFixable issues:\x1B[0m\n");
724
+ for (const pending of report.pendingFixes) {
725
+ if (dryRun) {
726
+ console.log(` \u{1F527} ${pending.message} (use without --dry-run to fix)`);
727
+ } else {
728
+ const { confirm } = await import("@inquirer/prompts");
729
+ const shouldFix = await confirm({
730
+ message: `Fix: ${pending.message}?`,
731
+ default: false
732
+ });
733
+ if (shouldFix) {
734
+ const fixResult = await pending.fix();
735
+ if (fixResult.success) {
736
+ console.log(` \x1B[32m\u2713 ${fixResult.message}\x1B[0m`);
737
+ } else {
738
+ console.log(` \x1B[31m\u2717 Fix failed: ${fixResult.message}\x1B[0m`);
739
+ }
740
+ }
741
+ }
742
+ }
743
+ console.log();
744
+ }
745
+ const { passed, warnings, failed, fixed } = report.summary;
746
+ const fixedStr = fixed > 0 ? `, ${fixed} fixed` : "";
747
+ console.log(`Result: ${passed} passed, ${warnings} warnings, ${failed} failed${fixedStr}`);
748
+ if (failed > 0) {
749
+ process.exit(1);
750
+ }
751
+ }
664
752
  async function cmdDefault(command2) {
665
753
  const forceForeground = command2 === "--foreground";
666
754
  if (command2 && !command2.startsWith("-")) {
@@ -669,17 +757,17 @@ async function cmdDefault(command2) {
669
757
  process.exit(1);
670
758
  }
671
759
  await checkAndPromptUpdate();
672
- const { ConfigManager } = await import("./config-H2DSEHNW.js");
760
+ const { ConfigManager } = await import("./config-XURP6B3S.js");
673
761
  const cm = new ConfigManager();
674
762
  if (!await cm.exists()) {
675
- const { runSetup } = await import("./setup-FCVL75K6.js");
763
+ const { runSetup } = await import("./setup-TTOL7XAN.js");
676
764
  const shouldStart = await runSetup(cm);
677
765
  if (!shouldStart) process.exit(0);
678
766
  }
679
767
  await cm.load();
680
768
  const config = cm.get();
681
769
  if (!forceForeground && config.runMode === "daemon") {
682
- const { startDaemon, getPidPath } = await import("./daemon-VF6HJQXD.js");
770
+ const { startDaemon, getPidPath } = await import("./daemon-GWJM2S4A.js");
683
771
  const result = startDaemon(getPidPath(), config.logging.logDir);
684
772
  if ("error" in result) {
685
773
  console.error(result.error);
@@ -688,9 +776,9 @@ async function cmdDefault(command2) {
688
776
  console.log(`OpenACP daemon started (PID ${result.pid})`);
689
777
  return;
690
778
  }
691
- const { markRunning } = await import("./daemon-VF6HJQXD.js");
779
+ const { markRunning } = await import("./daemon-GWJM2S4A.js");
692
780
  markRunning();
693
- const { startServer } = await import("./main-7T5YHFHO.js");
781
+ const { startServer } = await import("./main-2QKD2EI2.js");
694
782
  await startServer();
695
783
  }
696
784
 
@@ -711,13 +799,14 @@ var commands = {
711
799
  "stop": () => cmdStop(),
712
800
  "status": () => cmdStatus(),
713
801
  "logs": () => cmdLogs(),
714
- "config": () => cmdConfig(),
802
+ "config": () => cmdConfig(args),
715
803
  "reset": () => cmdReset(),
716
804
  "update": () => cmdUpdate(),
717
805
  "adopt": () => cmdAdopt(args),
718
806
  "integrate": () => cmdIntegrate(args),
807
+ "doctor": () => cmdDoctor(args),
719
808
  "--daemon-child": async () => {
720
- const { startServer } = await import("./main-7T5YHFHO.js");
809
+ const { startServer } = await import("./main-2QKD2EI2.js");
721
810
  await startServer();
722
811
  }
723
812
  };
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
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 cmdApi,\n cmdStart,\n cmdStop,\n cmdStatus,\n cmdLogs,\n cmdConfig,\n cmdReset,\n cmdUpdate,\n cmdDefault,\n cmdAdopt,\n cmdIntegrate,\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 'api': () => cmdApi(args),\n 'start': () => cmdStart(),\n 'stop': () => cmdStop(),\n 'status': () => cmdStatus(),\n 'logs': () => cmdLogs(),\n 'config': () => cmdConfig(),\n 'reset': () => cmdReset(),\n 'update': () => cmdUpdate(),\n 'adopt': () => cmdAdopt(args),\n 'integrate': () => cmdIntegrate(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 * 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 adopt <agent> <id> Adopt an external agent session into OpenACP\n integrate <agent> Install/uninstall agent integration for session transfer\n\nAPI (requires running daemon):\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 openacp api agents List available agents\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 openacp api health Show system health\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 restart Restart daemon\n openacp api notify <message> Send notification to all channels\n openacp api version Show daemon version\n\nNote: \"openacp status\" shows daemon process health.\n \"openacp api status\" shows active agent sessions.\n \"openacp --version\" shows CLI version.\n \"openacp api version\" shows running daemon version.\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 const { getCurrentVersion } = await import(\"./version.js\")\n console.log(`openacp v${getCurrentVersion()}`)\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 cmdApi(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 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 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 console.error(`Unknown api command: ${subCmd || '(none)'}\\n`)\n console.log('Usage:')\n console.log(' openacp api status Show active sessions')\n console.log(' openacp api session <id> Show session details')\n console.log(' openacp api new [agent] [workspace] Create a new session')\n console.log(' openacp api send <id> <prompt> Send prompt to session')\n console.log(' openacp api cancel <id> Cancel a session')\n console.log(' openacp api dangerous <id> [on|off] Toggle dangerous mode')\n console.log(' openacp api agents List available agents')\n console.log(' openacp api topics [--status s1,s2] List topics')\n console.log(' openacp api delete-topic <id> [--force] Delete a topic')\n console.log(' openacp api cleanup [--status s1,s2] Cleanup finished topics')\n console.log(' openacp api health Show system health')\n console.log(' openacp api adapters List registered adapters')\n console.log(' openacp api tunnel Show tunnel status')\n console.log(' openacp api config Show runtime config')\n console.log(' openacp api config set <key> <value> Update config value')\n console.log(' openacp api restart Restart daemon')\n console.log(' openacp api notify <message> Send notification to all channels')\n console.log(' openacp api version Show daemon version')\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 cmdAdopt(args: string[]): Promise<void> {\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 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 console.log(`No integration available for '${agent}'.`);\n console.log(`Available: ${listIntegrations().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 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":"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","names":["getCurrentVersion","args","fs","os","path","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} 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 'api': () => cmdApi(args),\n 'start': () => cmdStart(),\n 'stop': () => cmdStop(),\n 'status': () => cmdStatus(),\n 'logs': () => cmdLogs(),\n 'config': () => cmdConfig(args),\n 'reset': () => cmdReset(),\n 'update': () => cmdUpdate(),\n 'adopt': () => cmdAdopt(args),\n 'integrate': () => cmdIntegrate(args),\n 'doctor': () => cmdDoctor(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\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 config set <key> <value> Set a config value\n openacp reset Delete all data and start fresh\n openacp update Update to latest version\n openacp doctor Run system diagnostics\n openacp doctor --dry-run Check only, don't fix\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 adopt <agent> <id> Adopt an external agent session into OpenACP\n integrate <agent> Install/uninstall agent integration for session transfer\n\nAPI (requires running daemon):\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 openacp api agents List available agents\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 openacp api health Show system health\n openacp api adapters List registered adapters\n openacp api tunnel Show tunnel status\n openacp api config Show runtime config (deprecated)\n openacp api config set <key> <value> Update config value (deprecated)\n openacp api restart Restart daemon\n openacp api notify <message> Send notification to all channels\n openacp api version Show daemon version\n\nNote: \"openacp status\" shows daemon process health.\n \"openacp api status\" shows active agent sessions.\n \"openacp --version\" shows CLI version.\n \"openacp api version\" shows running daemon version.\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 const { getCurrentVersion } = await import(\"./version.js\")\n console.log(`openacp v${getCurrentVersion()}`)\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 cmdApi(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 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 console.error(`Unknown api command: ${subCmd || '(none)'}\\n`)\n console.log('Usage:')\n console.log(' openacp api status Show active sessions')\n console.log(' openacp api session <id> Show session details')\n console.log(' openacp api new [agent] [workspace] Create a new session')\n console.log(' openacp api send <id> <prompt> Send prompt to session')\n console.log(' openacp api cancel <id> Cancel a session')\n console.log(' openacp api dangerous <id> [on|off] Toggle dangerous mode')\n console.log(' openacp api agents List available agents')\n console.log(' openacp api topics [--status s1,s2] List topics')\n console.log(' openacp api delete-topic <id> [--force] Delete a topic')\n console.log(' openacp api cleanup [--status s1,s2] Cleanup finished topics')\n console.log(' openacp api health Show system health')\n console.log(' openacp api adapters List registered adapters')\n console.log(' openacp api tunnel Show tunnel status')\n console.log(' openacp api config Show runtime config')\n console.log(' openacp api config set <key> <value> Update config value')\n console.log(' openacp api restart Restart daemon')\n console.log(' openacp api notify <message> Send notification to all channels')\n console.log(' openacp api version Show daemon version')\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(args: string[] = []): Promise<void> {\n const subCmd = args[1] // 'set' or undefined\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 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(): 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 cmdAdopt(args: string[]): Promise<void> {\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 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 console.log(`No integration available for '${agent}'.`);\n console.log(`Available: ${listIntegrations().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 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 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":"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","names":["getCurrentVersion","args","port","ConfigManager","cm","command"]}
@@ -3,12 +3,12 @@ import {
3
3
  ConfigSchema,
4
4
  PLUGINS_DIR,
5
5
  expandHome
6
- } from "./chunk-ZRFBLD3W.js";
7
- import "./chunk-LYKCQTH5.js";
6
+ } from "./chunk-WYZFGHHI.js";
7
+ import "./chunk-ESOPMQAY.js";
8
8
  export {
9
9
  ConfigManager,
10
10
  ConfigSchema,
11
11
  PLUGINS_DIR,
12
12
  expandHome
13
13
  };
14
- //# sourceMappingURL=config-H2DSEHNW.js.map
14
+ //# sourceMappingURL=config-XURP6B3S.js.map
@@ -0,0 +1,11 @@
1
+ import {
2
+ runConfigEditor
3
+ } from "./chunk-FKOARMAE.js";
4
+ import "./chunk-X6LLG7XN.js";
5
+ import "./chunk-W7QQA6CW.js";
6
+ import "./chunk-WYZFGHHI.js";
7
+ import "./chunk-ESOPMQAY.js";
8
+ export {
9
+ runConfigEditor
10
+ };
11
+ //# sourceMappingURL=config-editor-AALY3URF.js.map
@@ -0,0 +1,17 @@
1
+ import {
2
+ CONFIG_REGISTRY,
3
+ getConfigValue,
4
+ getFieldDef,
5
+ getSafeFields,
6
+ isHotReloadable,
7
+ resolveOptions
8
+ } from "./chunk-C33LTDZV.js";
9
+ export {
10
+ CONFIG_REGISTRY,
11
+ getConfigValue,
12
+ getFieldDef,
13
+ getSafeFields,
14
+ isHotReloadable,
15
+ resolveOptions
16
+ };
17
+ //# sourceMappingURL=config-registry-OGX4YM2U.js.map
@@ -10,9 +10,9 @@ import {
10
10
  startDaemon,
11
11
  stopDaemon,
12
12
  writePidFile
13
- } from "./chunk-C6YIUTGR.js";
14
- import "./chunk-ZRFBLD3W.js";
15
- import "./chunk-LYKCQTH5.js";
13
+ } from "./chunk-YRJEZD7R.js";
14
+ import "./chunk-WYZFGHHI.js";
15
+ import "./chunk-ESOPMQAY.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-VF6HJQXD.js.map
29
+ //# sourceMappingURL=daemon-GWJM2S4A.js.map