@openacp/cli 0.2.23 → 0.2.24

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 (44) hide show
  1. package/dist/autostart-YBYXQA77.js +18 -0
  2. package/dist/autostart-YBYXQA77.js.map +1 -0
  3. package/dist/{setup-XQBEZZQB.js → chunk-4BN7NSKB.js} +140 -9
  4. package/dist/chunk-4BN7NSKB.js.map +1 -0
  5. package/dist/chunk-CQMS5U7Z.js +63 -0
  6. package/dist/chunk-CQMS5U7Z.js.map +1 -0
  7. package/dist/{chunk-XOVJLTEC.js → chunk-FGXG3H3F.js} +14 -58
  8. package/dist/chunk-FGXG3H3F.js.map +1 -0
  9. package/dist/{chunk-EIBLQU3H.js → chunk-IX63F4JG.js} +449 -43
  10. package/dist/chunk-IX63F4JG.js.map +1 -0
  11. package/dist/{chunk-ZATQZUJT.js → chunk-MNJDYDGH.js} +9 -1
  12. package/dist/{chunk-ZATQZUJT.js.map → chunk-MNJDYDGH.js.map} +1 -1
  13. package/dist/chunk-PQRVTUNH.js +145 -0
  14. package/dist/chunk-PQRVTUNH.js.map +1 -0
  15. package/dist/chunk-QWUJIKTX.js +527 -0
  16. package/dist/chunk-QWUJIKTX.js.map +1 -0
  17. package/dist/chunk-S6O7SM6A.js +129 -0
  18. package/dist/chunk-S6O7SM6A.js.map +1 -0
  19. package/dist/chunk-WXS6ONOD.js +103 -0
  20. package/dist/chunk-WXS6ONOD.js.map +1 -0
  21. package/dist/cli.js +354 -4
  22. package/dist/cli.js.map +1 -1
  23. package/dist/config-2XALNLAA.js +14 -0
  24. package/dist/config-2XALNLAA.js.map +1 -0
  25. package/dist/config-editor-56B6YU7B.js +11 -0
  26. package/dist/config-editor-56B6YU7B.js.map +1 -0
  27. package/dist/daemon-3E5OMLT3.js +29 -0
  28. package/dist/daemon-3E5OMLT3.js.map +1 -0
  29. package/dist/index.d.ts +96 -18
  30. package/dist/index.js +35 -6
  31. package/dist/install-cloudflared-57NRTI4E.js +8 -0
  32. package/dist/install-cloudflared-57NRTI4E.js.map +1 -0
  33. package/dist/{main-VJUX7RUY.js → main-YNCSLYVV.js} +43 -11
  34. package/dist/main-YNCSLYVV.js.map +1 -0
  35. package/dist/setup-FTNJACSC.js +27 -0
  36. package/dist/setup-FTNJACSC.js.map +1 -0
  37. package/dist/{tunnel-service-I6NUMBT4.js → tunnel-service-I6WM6USB.js} +10 -10
  38. package/dist/tunnel-service-I6WM6USB.js.map +1 -0
  39. package/package.json +2 -2
  40. package/dist/chunk-EIBLQU3H.js.map +0 -1
  41. package/dist/chunk-XOVJLTEC.js.map +0 -1
  42. package/dist/main-VJUX7RUY.js.map +0 -1
  43. package/dist/setup-XQBEZZQB.js.map +0 -1
  44. package/dist/tunnel-service-I6NUMBT4.js.map +0 -1
package/dist/cli.js CHANGED
@@ -3,26 +3,145 @@ import {
3
3
  installPlugin,
4
4
  listPlugins,
5
5
  uninstallPlugin
6
- } from "./chunk-XOVJLTEC.js";
7
- import "./chunk-ZATQZUJT.js";
6
+ } from "./chunk-CQMS5U7Z.js";
7
+ import "./chunk-FGXG3H3F.js";
8
+ import {
9
+ __require
10
+ } from "./chunk-MNJDYDGH.js";
8
11
 
9
12
  // src/cli.ts
10
13
  import { setDefaultAutoSelectFamily } from "net";
14
+
15
+ // src/core/api-client.ts
16
+ import * as fs from "fs";
17
+ import * as path from "path";
18
+ import * as os from "os";
19
+ var DEFAULT_PORT_FILE = path.join(os.homedir(), ".openacp", "api.port");
20
+ function readApiPort(portFilePath = DEFAULT_PORT_FILE) {
21
+ try {
22
+ const content = fs.readFileSync(portFilePath, "utf-8").trim();
23
+ const port = parseInt(content, 10);
24
+ return isNaN(port) ? null : port;
25
+ } catch {
26
+ return null;
27
+ }
28
+ }
29
+ function removeStalePortFile(portFilePath = DEFAULT_PORT_FILE) {
30
+ try {
31
+ fs.unlinkSync(portFilePath);
32
+ } catch {
33
+ }
34
+ }
35
+ async function apiCall(port, urlPath, options) {
36
+ return fetch(`http://127.0.0.1:${port}${urlPath}`, options);
37
+ }
38
+
39
+ // src/cli.ts
11
40
  setDefaultAutoSelectFamily(false);
41
+ var NPM_PACKAGE = "@openacp/cli";
12
42
  var args = process.argv.slice(2);
13
43
  var command = args[0];
44
+ function getCurrentVersion() {
45
+ try {
46
+ const { createRequire } = __require("module");
47
+ const req = createRequire(import.meta.url);
48
+ const pkg = req("../package.json");
49
+ return pkg.version;
50
+ } catch {
51
+ return "0.0.0-dev";
52
+ }
53
+ }
54
+ async function getLatestVersion() {
55
+ try {
56
+ const res = await fetch(`https://registry.npmjs.org/${NPM_PACKAGE}/latest`, {
57
+ signal: AbortSignal.timeout(5e3)
58
+ });
59
+ if (!res.ok) return null;
60
+ const data = await res.json();
61
+ return data.version ?? null;
62
+ } catch {
63
+ return null;
64
+ }
65
+ }
66
+ function compareVersions(current, latest) {
67
+ const a = current.split(".").map(Number);
68
+ const b = latest.split(".").map(Number);
69
+ for (let i = 0; i < 3; i++) {
70
+ if ((a[i] ?? 0) < (b[i] ?? 0)) return -1;
71
+ if ((a[i] ?? 0) > (b[i] ?? 0)) return 1;
72
+ }
73
+ return 0;
74
+ }
75
+ async function runUpdate() {
76
+ const { spawn } = await import("child_process");
77
+ return new Promise((resolve) => {
78
+ const child = spawn("npm", ["install", "-g", `${NPM_PACKAGE}@latest`], {
79
+ stdio: "inherit",
80
+ shell: true
81
+ });
82
+ const onSignal = () => {
83
+ child.kill("SIGTERM");
84
+ resolve(false);
85
+ };
86
+ process.on("SIGINT", onSignal);
87
+ process.on("SIGTERM", onSignal);
88
+ child.on("close", (code) => {
89
+ process.off("SIGINT", onSignal);
90
+ process.off("SIGTERM", onSignal);
91
+ resolve(code === 0);
92
+ });
93
+ });
94
+ }
95
+ async function checkAndPromptUpdate() {
96
+ const current = getCurrentVersion();
97
+ if (current === "0.0.0-dev") return;
98
+ const latest = await getLatestVersion();
99
+ if (!latest || compareVersions(current, latest) >= 0) return;
100
+ console.log(`\x1B[33mUpdate available: v${current} \u2192 v${latest}\x1B[0m`);
101
+ const { confirm } = await import("@inquirer/prompts");
102
+ const yes = await confirm({
103
+ message: "Update now before starting?",
104
+ default: true
105
+ });
106
+ if (yes) {
107
+ const ok = await runUpdate();
108
+ if (ok) {
109
+ console.log(`\x1B[32m\u2713 Updated to v${latest}. Please re-run your command.\x1B[0m`);
110
+ process.exit(0);
111
+ } else {
112
+ console.error("\x1B[31mUpdate failed. Continuing with current version.\x1B[0m");
113
+ }
114
+ }
115
+ }
14
116
  function printHelp() {
15
117
  console.log(`
16
118
  OpenACP - Self-hosted bridge for AI coding agents
17
119
 
18
120
  Usage:
19
- openacp Start the server
121
+ openacp Start (mode from config)
122
+ openacp start Start as background daemon
123
+ openacp stop Stop background daemon
124
+ openacp status Show daemon status
125
+ openacp logs Tail daemon log file
126
+ openacp config Edit configuration
127
+ openacp reset Delete all data and start fresh
128
+ openacp update Update to latest version
20
129
  openacp install <package> Install a plugin adapter
21
130
  openacp uninstall <package> Uninstall a plugin adapter
22
131
  openacp plugins List installed plugins
132
+ openacp --foreground Force foreground mode
23
133
  openacp --version Show version
24
134
  openacp --help Show this help
25
135
 
136
+ Runtime (requires running daemon):
137
+ openacp runtime new [agent] [workspace] Create a new session
138
+ openacp runtime cancel <id> Cancel a session
139
+ openacp runtime status Show active sessions
140
+ openacp runtime agents List available agents
141
+
142
+ Note: "openacp status" shows daemon process health.
143
+ "openacp runtime status" shows active agent sessions.
144
+
26
145
  Install:
27
146
  npm install -g @openacp/cli
28
147
 
@@ -79,12 +198,243 @@ async function main() {
79
198
  }
80
199
  return;
81
200
  }
201
+ if (command === "runtime") {
202
+ const subCmd = args[1];
203
+ const port = readApiPort();
204
+ if (port === null) {
205
+ console.error("OpenACP is not running. Start with `openacp start`");
206
+ process.exit(1);
207
+ }
208
+ try {
209
+ if (subCmd === "new") {
210
+ const agent = args[2];
211
+ const workspaceIdx = args.indexOf("--workspace");
212
+ const workspace = workspaceIdx !== -1 ? args[workspaceIdx + 1] : args[3];
213
+ const body = {};
214
+ if (agent) body.agent = agent;
215
+ if (workspace) body.workspace = workspace;
216
+ const res = await apiCall(port, "/api/sessions", {
217
+ method: "POST",
218
+ headers: { "Content-Type": "application/json" },
219
+ body: JSON.stringify(body)
220
+ });
221
+ const data = await res.json();
222
+ if (!res.ok) {
223
+ console.error(`Error: ${data.error}`);
224
+ process.exit(1);
225
+ }
226
+ console.log("Session created");
227
+ console.log(` ID : ${data.sessionId}`);
228
+ console.log(` Agent : ${data.agent}`);
229
+ console.log(` Workspace : ${data.workspace}`);
230
+ console.log(` Status : ${data.status}`);
231
+ } else if (subCmd === "cancel") {
232
+ const sessionId = args[2];
233
+ if (!sessionId) {
234
+ console.error("Usage: openacp runtime cancel <session-id>");
235
+ process.exit(1);
236
+ }
237
+ const res = await apiCall(port, `/api/sessions/${encodeURIComponent(sessionId)}`, {
238
+ method: "DELETE"
239
+ });
240
+ const data = await res.json();
241
+ if (!res.ok) {
242
+ console.error(`Error: ${data.error}`);
243
+ process.exit(1);
244
+ }
245
+ console.log(`Session ${sessionId} cancelled`);
246
+ } else if (subCmd === "status") {
247
+ const res = await apiCall(port, "/api/sessions");
248
+ const data = await res.json();
249
+ if (data.sessions.length === 0) {
250
+ console.log("No active sessions.");
251
+ } else {
252
+ console.log(`Active sessions: ${data.sessions.length}
253
+ `);
254
+ for (const s of data.sessions) {
255
+ const name = s.name ? ` "${s.name}"` : "";
256
+ console.log(` ${s.id} ${s.agent} ${s.status}${name}`);
257
+ }
258
+ }
259
+ } else if (subCmd === "agents") {
260
+ const res = await apiCall(port, "/api/agents");
261
+ const data = await res.json();
262
+ console.log("Available agents:");
263
+ for (const a of data.agents) {
264
+ const isDefault = a.name === data.default ? " (default)" : "";
265
+ console.log(` ${a.name}${isDefault}`);
266
+ }
267
+ } else {
268
+ console.error(`Unknown runtime command: ${subCmd || "(none)"}
269
+ `);
270
+ console.log("Usage:");
271
+ console.log(" openacp runtime new [agent] [workspace] Create a new session");
272
+ console.log(" openacp runtime cancel <id> Cancel a session");
273
+ console.log(" openacp runtime status Show active sessions");
274
+ console.log(" openacp runtime agents List available agents");
275
+ process.exit(1);
276
+ }
277
+ } catch (err) {
278
+ if (err instanceof TypeError && err.cause?.code === "ECONNREFUSED") {
279
+ console.error("OpenACP is not running (stale port file)");
280
+ removeStalePortFile();
281
+ process.exit(1);
282
+ }
283
+ throw err;
284
+ }
285
+ return;
286
+ }
287
+ if (command === "start") {
288
+ await checkAndPromptUpdate();
289
+ const { startDaemon, getPidPath } = await import("./daemon-3E5OMLT3.js");
290
+ const { ConfigManager: ConfigManager2 } = await import("./config-2XALNLAA.js");
291
+ const cm2 = new ConfigManager2();
292
+ if (await cm2.exists()) {
293
+ await cm2.load();
294
+ const config2 = cm2.get();
295
+ const result = startDaemon(getPidPath(), config2.logging.logDir);
296
+ if ("error" in result) {
297
+ console.error(result.error);
298
+ process.exit(1);
299
+ }
300
+ console.log(`OpenACP daemon started (PID ${result.pid})`);
301
+ } else {
302
+ console.error('No config found. Run "openacp" first to set up.');
303
+ process.exit(1);
304
+ }
305
+ return;
306
+ }
307
+ if (command === "stop") {
308
+ const { stopDaemon } = await import("./daemon-3E5OMLT3.js");
309
+ const result = stopDaemon();
310
+ if (result.stopped) {
311
+ console.log(`OpenACP daemon stopped (was PID ${result.pid})`);
312
+ } else {
313
+ console.error(result.error);
314
+ process.exit(1);
315
+ }
316
+ return;
317
+ }
318
+ if (command === "status") {
319
+ const { getStatus } = await import("./daemon-3E5OMLT3.js");
320
+ const status = getStatus();
321
+ if (status.running) {
322
+ console.log(`OpenACP is running (PID ${status.pid})`);
323
+ } else {
324
+ console.log("OpenACP is not running");
325
+ }
326
+ return;
327
+ }
328
+ if (command === "logs") {
329
+ const { spawn } = await import("child_process");
330
+ const { ConfigManager: ConfigManager2, expandHome } = await import("./config-2XALNLAA.js");
331
+ const pathMod = await import("path");
332
+ const cm2 = new ConfigManager2();
333
+ let logDir = "~/.openacp/logs";
334
+ if (await cm2.exists()) {
335
+ await cm2.load();
336
+ logDir = cm2.get().logging.logDir;
337
+ }
338
+ const logFile = pathMod.join(expandHome(logDir), "openacp.log");
339
+ const tail = spawn("tail", ["-f", "-n", "50", logFile], { stdio: "inherit" });
340
+ tail.on("error", (err) => {
341
+ console.error(`Cannot tail log file: ${err.message}`);
342
+ process.exit(1);
343
+ });
344
+ return;
345
+ }
346
+ if (command === "config") {
347
+ const { runConfigEditor } = await import("./config-editor-56B6YU7B.js");
348
+ const { ConfigManager: ConfigManager2 } = await import("./config-2XALNLAA.js");
349
+ const cm2 = new ConfigManager2();
350
+ if (!await cm2.exists()) {
351
+ console.error('No config found. Run "openacp" first to set up.');
352
+ process.exit(1);
353
+ }
354
+ await runConfigEditor(cm2);
355
+ return;
356
+ }
357
+ if (command === "reset") {
358
+ const { getStatus } = await import("./daemon-3E5OMLT3.js");
359
+ const status = getStatus();
360
+ if (status.running) {
361
+ console.error("OpenACP is running. Stop it first: openacp stop");
362
+ process.exit(1);
363
+ }
364
+ const { confirm } = await import("@inquirer/prompts");
365
+ const yes = await confirm({
366
+ message: "This will delete all OpenACP data (~/.openacp). You will need to set up again. Continue?",
367
+ default: false
368
+ });
369
+ if (!yes) {
370
+ console.log("Aborted.");
371
+ return;
372
+ }
373
+ const { uninstallAutoStart } = await import("./autostart-YBYXQA77.js");
374
+ uninstallAutoStart();
375
+ const fs2 = await import("fs");
376
+ const os2 = await import("os");
377
+ const path2 = await import("path");
378
+ const openacpDir = path2.join(os2.homedir(), ".openacp");
379
+ fs2.rmSync(openacpDir, { recursive: true, force: true });
380
+ console.log("Reset complete. Run `openacp` to set up again.");
381
+ return;
382
+ }
383
+ if (command === "update") {
384
+ const current = getCurrentVersion();
385
+ const latest = await getLatestVersion();
386
+ if (!latest) {
387
+ console.error("Could not check for updates. Check your internet connection.");
388
+ process.exit(1);
389
+ }
390
+ if (compareVersions(current, latest) >= 0) {
391
+ console.log(`Already up to date (v${current})`);
392
+ return;
393
+ }
394
+ console.log(`Update available: v${current} \u2192 v${latest}`);
395
+ const ok = await runUpdate();
396
+ if (ok) {
397
+ console.log(`\x1B[32m\u2713 Updated to v${latest}\x1B[0m`);
398
+ } else {
399
+ console.error("Update failed. Try manually: npm install -g @openacp/cli@latest");
400
+ process.exit(1);
401
+ }
402
+ return;
403
+ }
404
+ if (command === "--daemon-child") {
405
+ const { startServer: startServer2 } = await import("./main-YNCSLYVV.js");
406
+ await startServer2();
407
+ return;
408
+ }
409
+ const forceForeground = command === "--foreground";
82
410
  if (command && !command.startsWith("-")) {
83
411
  console.error(`Unknown command: ${command}`);
84
412
  printHelp();
85
413
  process.exit(1);
86
414
  }
87
- const { startServer } = await import("./main-VJUX7RUY.js");
415
+ await checkAndPromptUpdate();
416
+ const { ConfigManager } = await import("./config-2XALNLAA.js");
417
+ const cm = new ConfigManager();
418
+ if (!await cm.exists()) {
419
+ const { runSetup } = await import("./setup-FTNJACSC.js");
420
+ const shouldStart = await runSetup(cm);
421
+ if (!shouldStart) process.exit(0);
422
+ }
423
+ await cm.load();
424
+ const config = cm.get();
425
+ if (!forceForeground && config.runMode === "daemon") {
426
+ const { startDaemon, getPidPath } = await import("./daemon-3E5OMLT3.js");
427
+ const result = startDaemon(getPidPath(), config.logging.logDir);
428
+ if ("error" in result) {
429
+ console.error(result.error);
430
+ process.exit(1);
431
+ }
432
+ console.log(`OpenACP daemon started (PID ${result.pid})`);
433
+ return;
434
+ }
435
+ const { markRunning } = await import("./daemon-3E5OMLT3.js");
436
+ markRunning();
437
+ const { startServer } = await import("./main-YNCSLYVV.js");
88
438
  await startServer();
89
439
  }
90
440
  main().catch((err) => {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { setDefaultAutoSelectFamily } from \"node:net\";\nsetDefaultAutoSelectFamily(false);\n\nimport {\n installPlugin,\n uninstallPlugin,\n listPlugins,\n} from \"./core/plugin-manager.js\";\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nfunction printHelp(): void {\n console.log(`\nOpenACP - Self-hosted bridge for AI coding agents\n\nUsage:\n openacp Start the server\n openacp install <package> Install a plugin adapter\n openacp uninstall <package> Uninstall a plugin adapter\n openacp plugins List installed plugins\n openacp --version Show version\n openacp --help Show this help\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 // Default: start server\n if (command && !command.startsWith(\"-\")) {\n console.error(`Unknown command: ${command}`);\n printHelp();\n process.exit(1);\n }\n\n // Import and run server start\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"],"mappings":";;;;;;;;;AAEA,SAAS,kCAAkC;AAC3C,2BAA2B,KAAK;AAQhC,IAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AACjC,IAAM,UAAU,KAAK,CAAC;AAEtB,SAAS,YAAkB;AACzB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAkBb;AACD;AAEA,eAAe,OAAO;AACpB,MAAI,YAAY,YAAY,YAAY,MAAM;AAC5C,cAAU;AACV;AAAA,EACF;AAEA,MAAI,YAAY,eAAe,YAAY,MAAM;AAG/C,QAAI;AACF,YAAM,EAAE,cAAc,IAAI,MAAM,OAAO,QAAa;AACpD,YAAMA,WAAU,cAAc,YAAY,GAAG;AAC7C,YAAM,MAAMA,SAAQ,iBAAiB;AACrC,cAAQ,IAAI,YAAY,IAAI,OAAO,EAAE;AAAA,IACvC,QAAQ;AACN,cAAQ,IAAI,oBAAoB;AAAA,IAClC;AACA;AAAA,EACF;AAEA,MAAI,YAAY,WAAW;AACzB,UAAM,MAAM,KAAK,CAAC;AAClB,QAAI,CAAC,KAAK;AACR,cAAQ,MAAM,kCAAkC;AAChD,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,kBAAc,GAAG;AACjB;AAAA,EACF;AAEA,MAAI,YAAY,aAAa;AAC3B,UAAM,MAAM,KAAK,CAAC;AAClB,QAAI,CAAC,KAAK;AACR,cAAQ,MAAM,oCAAoC;AAClD,cAAQ,KAAK,CAAC;AAAA,IAChB;AACA,oBAAgB,GAAG;AACnB;AAAA,EACF;AAEA,MAAI,YAAY,WAAW;AACzB,UAAM,UAAU,YAAY;AAC5B,UAAM,UAAU,OAAO,QAAQ,OAAO;AACtC,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAI,uBAAuB;AAAA,IACrC,OAAO;AACL,cAAQ,IAAI,oBAAoB;AAChC,iBAAW,CAAC,MAAM,OAAO,KAAK,SAAS;AACrC,gBAAQ,IAAI,KAAK,IAAI,IAAI,OAAO,EAAE;AAAA,MACpC;AAAA,IACF;AACA;AAAA,EACF;AAGA,MAAI,WAAW,CAAC,QAAQ,WAAW,GAAG,GAAG;AACvC,YAAQ,MAAM,oBAAoB,OAAO,EAAE;AAC3C,cAAU;AACV,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,EAAE,YAAY,IAAI,MAAM,OAAO,oBAAW;AAChD,QAAM,YAAY;AACpB;AAEA,KAAK,EAAE,MAAM,CAAC,QAAQ;AACpB,UAAQ,MAAM,UAAU,GAAG;AAC3B,UAAQ,KAAK,CAAC;AAChB,CAAC;","names":["require"]}
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"]}
@@ -0,0 +1,14 @@
1
+ import {
2
+ ConfigManager,
3
+ ConfigSchema,
4
+ PLUGINS_DIR,
5
+ expandHome
6
+ } from "./chunk-FGXG3H3F.js";
7
+ import "./chunk-MNJDYDGH.js";
8
+ export {
9
+ ConfigManager,
10
+ ConfigSchema,
11
+ PLUGINS_DIR,
12
+ expandHome
13
+ };
14
+ //# sourceMappingURL=config-2XALNLAA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,11 @@
1
+ import {
2
+ runConfigEditor
3
+ } from "./chunk-QWUJIKTX.js";
4
+ import "./chunk-PQRVTUNH.js";
5
+ import "./chunk-4BN7NSKB.js";
6
+ import "./chunk-FGXG3H3F.js";
7
+ import "./chunk-MNJDYDGH.js";
8
+ export {
9
+ runConfigEditor
10
+ };
11
+ //# sourceMappingURL=config-editor-56B6YU7B.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,29 @@
1
+ import {
2
+ clearRunning,
3
+ getPidPath,
4
+ getStatus,
5
+ isProcessRunning,
6
+ markRunning,
7
+ readPidFile,
8
+ removePidFile,
9
+ shouldAutoStart,
10
+ startDaemon,
11
+ stopDaemon,
12
+ writePidFile
13
+ } from "./chunk-S6O7SM6A.js";
14
+ import "./chunk-FGXG3H3F.js";
15
+ import "./chunk-MNJDYDGH.js";
16
+ export {
17
+ clearRunning,
18
+ getPidPath,
19
+ getStatus,
20
+ isProcessRunning,
21
+ markRunning,
22
+ readPidFile,
23
+ removePidFile,
24
+ shouldAutoStart,
25
+ startDaemon,
26
+ stopDaemon,
27
+ writePidFile
28
+ };
29
+ //# sourceMappingURL=daemon-3E5OMLT3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}