@openacp/cli 0.4.11 → 0.5.0

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 (66) hide show
  1. package/README.md +40 -2
  2. package/dist/agent-catalog-4IAJ7HEG.js +10 -0
  3. package/dist/agent-registry-B5YAMA4T.js +8 -0
  4. package/dist/agent-store-ZBXGOFPH.js +8 -0
  5. package/dist/chunk-5HGXUCMX.js +83 -0
  6. package/dist/chunk-5HGXUCMX.js.map +1 -0
  7. package/dist/{chunk-W7QQA6CW.js → chunk-D73LCTPF.js} +73 -35
  8. package/dist/chunk-D73LCTPF.js.map +1 -0
  9. package/dist/{chunk-66RVSUAR.js → chunk-FWN3UIRT.js} +465 -86
  10. package/dist/chunk-FWN3UIRT.js.map +1 -0
  11. package/dist/{chunk-3DIPXFZJ.js → chunk-IRGYTNLP.js} +2 -2
  12. package/dist/{chunk-WYZFGHHI.js → chunk-JRF4G4X7.js} +60 -24
  13. package/dist/chunk-JRF4G4X7.js.map +1 -0
  14. package/dist/{chunk-FKOARMAE.js → chunk-LAFKARV3.js} +3 -3
  15. package/dist/chunk-NAMYZIS5.js +1 -0
  16. package/dist/{chunk-ZW444AQY.js → chunk-NDR5JCS7.js} +2 -2
  17. package/dist/chunk-S3DRLJPM.js +422 -0
  18. package/dist/chunk-S3DRLJPM.js.map +1 -0
  19. package/dist/chunk-UG6X672R.js +90 -0
  20. package/dist/chunk-UG6X672R.js.map +1 -0
  21. package/dist/{chunk-YRJEZD7R.js → chunk-VBEWSWVL.js} +2 -2
  22. package/dist/chunk-XJJ7LPXP.js +85 -0
  23. package/dist/chunk-XJJ7LPXP.js.map +1 -0
  24. package/dist/{chunk-C33LTDZV.js → chunk-Z46LGZ7R.js} +21 -8
  25. package/dist/chunk-Z46LGZ7R.js.map +1 -0
  26. package/dist/cli.js +190 -18
  27. package/dist/cli.js.map +1 -1
  28. package/dist/{config-XURP6B3S.js → config-PCPIBPUA.js} +2 -2
  29. package/dist/config-editor-5L7AJ5AF.js +12 -0
  30. package/dist/{config-registry-OGX4YM2U.js → config-registry-SNKA2EH2.js} +2 -2
  31. package/dist/{daemon-GWJM2S4A.js → daemon-JZLFRUW6.js} +3 -3
  32. package/dist/data/registry-snapshot.json +876 -0
  33. package/dist/doctor-N2HKKUUQ.js +9 -0
  34. package/dist/doctor-N2HKKUUQ.js.map +1 -0
  35. package/dist/index.d.ts +137 -17
  36. package/dist/index.js +19 -10
  37. package/dist/{main-2QKD2EI2.js → main-37GLOJ7G.js} +18 -15
  38. package/dist/{main-2QKD2EI2.js.map → main-37GLOJ7G.js.map} +1 -1
  39. package/dist/{menu-CARRTW2F.js → menu-6RCPBVGQ.js} +2 -4
  40. package/dist/menu-6RCPBVGQ.js.map +1 -0
  41. package/dist/{setup-TTOL7XAN.js → setup-QAS3QW3M.js} +4 -3
  42. package/dist/setup-QAS3QW3M.js.map +1 -0
  43. package/package.json +10 -2
  44. package/dist/agent-registry-7HC6D4CH.js +0 -7
  45. package/dist/chunk-66RVSUAR.js.map +0 -1
  46. package/dist/chunk-BGKQHQB4.js +0 -276
  47. package/dist/chunk-BGKQHQB4.js.map +0 -1
  48. package/dist/chunk-C33LTDZV.js.map +0 -1
  49. package/dist/chunk-VA2M52CM.js +0 -15
  50. package/dist/chunk-VA2M52CM.js.map +0 -1
  51. package/dist/chunk-W7QQA6CW.js.map +0 -1
  52. package/dist/chunk-WYZFGHHI.js.map +0 -1
  53. package/dist/config-editor-AALY3URF.js +0 -11
  54. package/dist/doctor-X477CVZN.js +0 -9
  55. /package/dist/{agent-registry-7HC6D4CH.js.map → agent-catalog-4IAJ7HEG.js.map} +0 -0
  56. /package/dist/{config-XURP6B3S.js.map → agent-registry-B5YAMA4T.js.map} +0 -0
  57. /package/dist/{config-editor-AALY3URF.js.map → agent-store-ZBXGOFPH.js.map} +0 -0
  58. /package/dist/{chunk-3DIPXFZJ.js.map → chunk-IRGYTNLP.js.map} +0 -0
  59. /package/dist/{chunk-FKOARMAE.js.map → chunk-LAFKARV3.js.map} +0 -0
  60. /package/dist/{config-registry-OGX4YM2U.js.map → chunk-NAMYZIS5.js.map} +0 -0
  61. /package/dist/{chunk-ZW444AQY.js.map → chunk-NDR5JCS7.js.map} +0 -0
  62. /package/dist/{chunk-YRJEZD7R.js.map → chunk-VBEWSWVL.js.map} +0 -0
  63. /package/dist/{daemon-GWJM2S4A.js.map → config-PCPIBPUA.js.map} +0 -0
  64. /package/dist/{doctor-X477CVZN.js.map → config-editor-5L7AJ5AF.js.map} +0 -0
  65. /package/dist/{menu-CARRTW2F.js.map → config-registry-SNKA2EH2.js.map} +0 -0
  66. /package/dist/{setup-TTOL7XAN.js.map → daemon-JZLFRUW6.js.map} +0 -0
@@ -0,0 +1,9 @@
1
+ import {
2
+ DoctorEngine
3
+ } from "./chunk-IRGYTNLP.js";
4
+ import "./chunk-JRF4G4X7.js";
5
+ import "./chunk-ESOPMQAY.js";
6
+ export {
7
+ DoctorEngine
8
+ };
9
+ //# sourceMappingURL=doctor-N2HKKUUQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/index.d.ts CHANGED
@@ -96,6 +96,82 @@ interface AgentDefinition {
96
96
  workingDirectory?: string;
97
97
  env?: Record<string, string>;
98
98
  }
99
+ type AgentDistribution = "npx" | "uvx" | "binary" | "custom";
100
+ interface InstalledAgent {
101
+ registryId: string | null;
102
+ name: string;
103
+ version: string;
104
+ distribution: AgentDistribution;
105
+ command: string;
106
+ args: string[];
107
+ env: Record<string, string>;
108
+ workingDirectory?: string;
109
+ installedAt: string;
110
+ binaryPath: string | null;
111
+ }
112
+ interface RegistryBinaryTarget {
113
+ archive: string;
114
+ cmd: string;
115
+ args?: string[];
116
+ env?: Record<string, string>;
117
+ }
118
+ interface RegistryDistribution {
119
+ npx?: {
120
+ package: string;
121
+ args?: string[];
122
+ env?: Record<string, string>;
123
+ };
124
+ uvx?: {
125
+ package: string;
126
+ args?: string[];
127
+ env?: Record<string, string>;
128
+ };
129
+ binary?: Record<string, RegistryBinaryTarget>;
130
+ }
131
+ interface RegistryAgent {
132
+ id: string;
133
+ name: string;
134
+ version: string;
135
+ description: string;
136
+ repository?: string;
137
+ website?: string;
138
+ authors?: string[];
139
+ license?: string;
140
+ icon?: string;
141
+ distribution: RegistryDistribution;
142
+ }
143
+ interface AgentListItem {
144
+ key: string;
145
+ registryId: string;
146
+ name: string;
147
+ version: string;
148
+ description?: string;
149
+ distribution: AgentDistribution;
150
+ installed: boolean;
151
+ available: boolean;
152
+ missingDeps?: string[];
153
+ }
154
+ interface AvailabilityResult {
155
+ available: boolean;
156
+ reason?: string;
157
+ missing?: Array<{
158
+ label: string;
159
+ installHint: string;
160
+ }>;
161
+ }
162
+ interface InstallProgress {
163
+ onStart(agentId: string, agentName: string): void | Promise<void>;
164
+ onStep(step: string): void | Promise<void>;
165
+ onDownloadProgress(percent: number): void | Promise<void>;
166
+ onSuccess(agentName: string): void | Promise<void>;
167
+ onError(error: string, hint?: string): void | Promise<void>;
168
+ }
169
+ interface InstallResult {
170
+ ok: boolean;
171
+ agentKey: string;
172
+ error?: string;
173
+ hint?: string;
174
+ }
99
175
  type SessionStatus = "initializing" | "active" | "cancelled" | "finished" | "error";
100
176
  interface SessionRecord<P = Record<string, unknown>> {
101
177
  sessionId: string;
@@ -186,7 +262,7 @@ declare const ConfigSchema: z.ZodObject<{
186
262
  enabled: z.ZodDefault<z.ZodBoolean>;
187
263
  adapter: z.ZodOptional<z.ZodString>;
188
264
  }, z.ZodTypeAny, "passthrough">>>;
189
- agents: z.ZodRecord<z.ZodString, z.ZodObject<{
265
+ agents: z.ZodDefault<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
190
266
  command: z.ZodString;
191
267
  args: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
192
268
  workingDirectory: z.ZodOptional<z.ZodString>;
@@ -201,7 +277,7 @@ declare const ConfigSchema: z.ZodObject<{
201
277
  args?: string[] | undefined;
202
278
  workingDirectory?: string | undefined;
203
279
  env?: Record<string, string> | undefined;
204
- }>>;
280
+ }>>>>;
205
281
  defaultAgent: z.ZodString;
206
282
  workspace: z.ZodDefault<z.ZodObject<{
207
283
  baseDir: z.ZodDefault<z.ZodString>;
@@ -313,6 +389,12 @@ declare const ConfigSchema: z.ZodObject<{
313
389
  port: number;
314
390
  host: string;
315
391
  };
392
+ agents: Record<string, {
393
+ command: string;
394
+ args: string[];
395
+ env: Record<string, string>;
396
+ workingDirectory?: string | undefined;
397
+ }>;
316
398
  tunnel: {
317
399
  options: Record<string, unknown>;
318
400
  enabled: boolean;
@@ -324,12 +406,6 @@ declare const ConfigSchema: z.ZodObject<{
324
406
  token?: string | undefined;
325
407
  };
326
408
  };
327
- agents: Record<string, {
328
- command: string;
329
- args: string[];
330
- env: Record<string, string>;
331
- workingDirectory?: string | undefined;
332
- }>;
333
409
  channels: Record<string, z.objectOutputType<{
334
410
  enabled: z.ZodDefault<z.ZodBoolean>;
335
411
  adapter: z.ZodOptional<z.ZodString>;
@@ -360,12 +436,6 @@ declare const ConfigSchema: z.ZodObject<{
360
436
  installedAt?: string | undefined;
361
437
  }>;
362
438
  }, {
363
- agents: Record<string, {
364
- command: string;
365
- args?: string[] | undefined;
366
- workingDirectory?: string | undefined;
367
- env?: Record<string, string> | undefined;
368
- }>;
369
439
  channels: Record<string, z.objectInputType<{
370
440
  enabled: z.ZodDefault<z.ZodBoolean>;
371
441
  adapter: z.ZodOptional<z.ZodString>;
@@ -375,6 +445,12 @@ declare const ConfigSchema: z.ZodObject<{
375
445
  port?: number | undefined;
376
446
  host?: string | undefined;
377
447
  } | undefined;
448
+ agents?: Record<string, {
449
+ command: string;
450
+ args?: string[] | undefined;
451
+ workingDirectory?: string | undefined;
452
+ env?: Record<string, string> | undefined;
453
+ }> | undefined;
378
454
  tunnel?: {
379
455
  options?: Record<string, unknown> | undefined;
380
456
  enabled?: boolean | undefined;
@@ -522,9 +598,48 @@ declare class AgentInstance {
522
598
  destroy(): Promise<void>;
523
599
  }
524
600
 
601
+ declare class AgentStore {
602
+ private data;
603
+ private filePath;
604
+ constructor(filePath?: string);
605
+ load(): void;
606
+ exists(): boolean;
607
+ getInstalled(): Record<string, InstalledAgent>;
608
+ getAgent(key: string): InstalledAgent | undefined;
609
+ addAgent(key: string, agent: InstalledAgent): void;
610
+ removeAgent(key: string): void;
611
+ hasAgent(key: string): boolean;
612
+ private save;
613
+ }
614
+
615
+ declare class AgentCatalog {
616
+ private store;
617
+ private registryAgents;
618
+ constructor(store?: AgentStore);
619
+ load(): void;
620
+ fetchRegistry(): Promise<void>;
621
+ refreshRegistryIfStale(): Promise<void>;
622
+ getRegistryAgents(): RegistryAgent[];
623
+ getRegistryAgent(registryId: string): RegistryAgent | undefined;
624
+ findRegistryAgent(keyOrId: string): RegistryAgent | undefined;
625
+ getInstalled(): InstalledAgent[];
626
+ getInstalledEntries(): Record<string, InstalledAgent>;
627
+ getInstalledAgent(key: string): InstalledAgent | undefined;
628
+ getAvailable(): AgentListItem[];
629
+ checkAvailability(keyOrId: string): AvailabilityResult;
630
+ install(keyOrId: string, progress?: InstallProgress, force?: boolean): Promise<InstallResult>;
631
+ uninstall(key: string): Promise<{
632
+ ok: boolean;
633
+ error?: string;
634
+ }>;
635
+ resolve(key: string): AgentDefinition | undefined;
636
+ private isCacheStale;
637
+ private loadRegistryFromCacheOrSnapshot;
638
+ }
639
+
525
640
  declare class AgentManager {
526
- private config;
527
- constructor(config: Config);
641
+ private catalog;
642
+ constructor(catalog: AgentCatalog);
528
643
  getAvailableAgents(): AgentDefinition[];
529
644
  getAgent(name: string): AgentDefinition | undefined;
530
645
  spawn(agentName: string, workingDirectory: string): Promise<AgentInstance>;
@@ -574,6 +689,9 @@ declare class PermissionGate {
574
689
  private resolveFn?;
575
690
  private rejectFn?;
576
691
  private settled;
692
+ private timeoutTimer?;
693
+ private timeoutMs;
694
+ constructor(timeoutMs?: number);
577
695
  setPending(request: PermissionRequest): Promise<string>;
578
696
  resolve(optionId: string): void;
579
697
  reject(reason?: string): void;
@@ -581,6 +699,7 @@ declare class PermissionGate {
581
699
  get currentRequest(): PermissionRequest | undefined;
582
700
  /** The request ID of the current pending request, undefined after settlement */
583
701
  get requestId(): string | undefined;
702
+ private clearTimeout;
584
703
  private cleanup;
585
704
  }
586
705
 
@@ -762,6 +881,7 @@ declare class SessionBridge {
762
881
 
763
882
  declare class OpenACPCore {
764
883
  configManager: ConfigManager;
884
+ agentCatalog: AgentCatalog;
765
885
  agentManager: AgentManager;
766
886
  sessionManager: SessionManager;
767
887
  notificationManager: NotificationManager;
@@ -983,4 +1103,4 @@ declare class TelegramAdapter extends ChannelAdapter<OpenACPCore> {
983
1103
  cleanupSkillCommands(sessionId: string): Promise<void>;
984
1104
  }
985
1105
 
986
- export { type AdapterFactory, type AgentCommand, type AgentDefinition, type AgentEvent, AgentInstance, AgentManager, type ApiConfig, ApiServer, type BridgeDeps, CONFIG_REGISTRY, ChannelAdapter, type ChannelConfig, type CleanupResult, type Config, type ConfigFieldDef, ConfigManager, type DeleteTopicResult, type IChannelAdapter, type IncomingMessage, type Logger, type LoggingConfig, MessageTransformer, NotificationManager, type NotificationMessage, OpenACPCore, type OutgoingMessage, PLUGINS_DIR, PermissionGate, type PermissionOption, type PermissionRequest, type PlanEntry, PromptQueue, Session, SessionBridge, type SessionEvents, SessionManager, type SessionRecord, type SessionStatus, StderrCapture, TelegramAdapter, type TelegramPlatformData, type TopicInfo, TopicManager, TypedEmitter, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, getConfigValue, getFieldDef, getPidPath, getSafeFields, getStatus, initLogger, installAutoStart, installPlugin, isAutoStartInstalled, isAutoStartSupported, isHotReloadable, listPlugins, loadAdapterFactory, log, nodeToWebReadable, nodeToWebWritable, resolveOptions, runConfigEditor, setLogLevel, shutdownLogger, startDaemon, stopDaemon, uninstallAutoStart, uninstallPlugin };
1106
+ export { type AdapterFactory, AgentCatalog, type AgentCommand, type AgentDefinition, type AgentDistribution, type AgentEvent, AgentInstance, type AgentListItem, AgentManager, AgentStore, type ApiConfig, ApiServer, type AvailabilityResult, type BridgeDeps, CONFIG_REGISTRY, ChannelAdapter, type ChannelConfig, type CleanupResult, type Config, type ConfigFieldDef, ConfigManager, type DeleteTopicResult, type IChannelAdapter, type IncomingMessage, type InstallProgress, type InstallResult, type InstalledAgent, type Logger, type LoggingConfig, MessageTransformer, NotificationManager, type NotificationMessage, OpenACPCore, type OutgoingMessage, PLUGINS_DIR, PermissionGate, type PermissionOption, type PermissionRequest, type PlanEntry, PromptQueue, type RegistryAgent, type RegistryBinaryTarget, type RegistryDistribution, Session, SessionBridge, type SessionEvents, SessionManager, type SessionRecord, type SessionStatus, StderrCapture, TelegramAdapter, type TelegramPlatformData, type TopicInfo, TopicManager, TypedEmitter, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, getConfigValue, getFieldDef, getPidPath, getSafeFields, getStatus, initLogger, installAutoStart, installPlugin, isAutoStartInstalled, isAutoStartSupported, isHotReloadable, listPlugins, loadAdapterFactory, log, nodeToWebReadable, nodeToWebWritable, resolveOptions, runConfigEditor, setLogLevel, shutdownLogger, startDaemon, stopDaemon, uninstallAutoStart, uninstallPlugin };
package/dist/index.js CHANGED
@@ -17,26 +17,33 @@ import {
17
17
  TypedEmitter,
18
18
  nodeToWebReadable,
19
19
  nodeToWebWritable
20
- } from "./chunk-66RVSUAR.js";
20
+ } from "./chunk-FWN3UIRT.js";
21
+ import "./chunk-NAMYZIS5.js";
22
+ import "./chunk-UG6X672R.js";
23
+ import {
24
+ AgentCatalog
25
+ } from "./chunk-S3DRLJPM.js";
26
+ import {
27
+ AgentStore
28
+ } from "./chunk-5HGXUCMX.js";
21
29
  import {
22
30
  runConfigEditor
23
- } from "./chunk-FKOARMAE.js";
31
+ } from "./chunk-LAFKARV3.js";
24
32
  import {
25
33
  installAutoStart,
26
34
  isAutoStartInstalled,
27
35
  isAutoStartSupported,
28
36
  uninstallAutoStart
29
37
  } from "./chunk-X6LLG7XN.js";
30
- import "./chunk-W7QQA6CW.js";
31
- import "./chunk-3DIPXFZJ.js";
32
- import "./chunk-VA2M52CM.js";
33
- import "./chunk-BGKQHQB4.js";
38
+ import "./chunk-D73LCTPF.js";
39
+ import "./chunk-XJJ7LPXP.js";
40
+ import "./chunk-IRGYTNLP.js";
34
41
  import {
35
42
  installPlugin,
36
43
  listPlugins,
37
44
  loadAdapterFactory,
38
45
  uninstallPlugin
39
- } from "./chunk-ZW444AQY.js";
46
+ } from "./chunk-NDR5JCS7.js";
40
47
  import {
41
48
  CONFIG_REGISTRY,
42
49
  getConfigValue,
@@ -44,18 +51,18 @@ import {
44
51
  getSafeFields,
45
52
  isHotReloadable,
46
53
  resolveOptions
47
- } from "./chunk-C33LTDZV.js";
54
+ } from "./chunk-Z46LGZ7R.js";
48
55
  import {
49
56
  getPidPath,
50
57
  getStatus,
51
58
  startDaemon,
52
59
  stopDaemon
53
- } from "./chunk-YRJEZD7R.js";
60
+ } from "./chunk-VBEWSWVL.js";
54
61
  import {
55
62
  ConfigManager,
56
63
  PLUGINS_DIR,
57
64
  expandHome
58
- } from "./chunk-WYZFGHHI.js";
65
+ } from "./chunk-JRF4G4X7.js";
59
66
  import {
60
67
  cleanupOldSessionLogs,
61
68
  createChildLogger,
@@ -66,8 +73,10 @@ import {
66
73
  shutdownLogger
67
74
  } from "./chunk-ESOPMQAY.js";
68
75
  export {
76
+ AgentCatalog,
69
77
  AgentInstance,
70
78
  AgentManager,
79
+ AgentStore,
71
80
  ApiServer,
72
81
  CONFIG_REGISTRY,
73
82
  ChannelAdapter,
@@ -4,21 +4,24 @@ import {
4
4
  OpenACPCore,
5
5
  TelegramAdapter,
6
6
  TopicManager
7
- } from "./chunk-66RVSUAR.js";
8
- import "./chunk-FKOARMAE.js";
7
+ } from "./chunk-FWN3UIRT.js";
8
+ import "./chunk-NAMYZIS5.js";
9
+ import "./chunk-UG6X672R.js";
10
+ import "./chunk-S3DRLJPM.js";
11
+ import "./chunk-5HGXUCMX.js";
12
+ import "./chunk-LAFKARV3.js";
9
13
  import "./chunk-X6LLG7XN.js";
10
- import "./chunk-W7QQA6CW.js";
11
- import "./chunk-3DIPXFZJ.js";
12
- import "./chunk-VA2M52CM.js";
13
- import "./chunk-BGKQHQB4.js";
14
+ import "./chunk-D73LCTPF.js";
15
+ import "./chunk-XJJ7LPXP.js";
16
+ import "./chunk-IRGYTNLP.js";
14
17
  import {
15
18
  loadAdapterFactory
16
- } from "./chunk-ZW444AQY.js";
17
- import "./chunk-C33LTDZV.js";
18
- import "./chunk-YRJEZD7R.js";
19
+ } from "./chunk-NDR5JCS7.js";
20
+ import "./chunk-Z46LGZ7R.js";
21
+ import "./chunk-VBEWSWVL.js";
19
22
  import {
20
23
  ConfigManager
21
- } from "./chunk-WYZFGHHI.js";
24
+ } from "./chunk-JRF4G4X7.js";
22
25
  import {
23
26
  cleanupOldSessionLogs,
24
27
  initLogger,
@@ -31,7 +34,7 @@ var RESTART_EXIT_CODE = 75;
31
34
  var shuttingDown = false;
32
35
  async function startServer() {
33
36
  if (process.argv.includes("--daemon-child")) {
34
- const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import("./daemon-GWJM2S4A.js");
37
+ const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import("./daemon-JZLFRUW6.js");
35
38
  if (!shouldAutoStart()) {
36
39
  process.exit(0);
37
40
  }
@@ -50,7 +53,7 @@ async function startServer() {
50
53
  const configManager = new ConfigManager();
51
54
  const configExists = await configManager.exists();
52
55
  if (!configExists) {
53
- const { runSetup } = await import("./setup-TTOL7XAN.js");
56
+ const { runSetup } = await import("./setup-QAS3QW3M.js");
54
57
  const shouldStart = await runSetup(configManager);
55
58
  if (!shouldStart) process.exit(0);
56
59
  }
@@ -108,13 +111,13 @@ async function startServer() {
108
111
  }
109
112
  const isDaemon = process.argv.includes("--daemon-child");
110
113
  if (isDaemon) {
111
- const { removePidFile, getPidPath } = await import("./daemon-GWJM2S4A.js");
114
+ const { removePidFile, getPidPath } = await import("./daemon-JZLFRUW6.js");
112
115
  removePidFile(getPidPath());
113
116
  }
114
117
  if (exitCode === RESTART_EXIT_CODE) {
115
118
  if (isDaemon) {
116
119
  const { spawn: spawnChild } = await import("child_process");
117
- const { expandHome } = await import("./config-XURP6B3S.js");
120
+ const { expandHome } = await import("./config-PCPIBPUA.js");
118
121
  const fs = await import("fs");
119
122
  const pathMod = await import("path");
120
123
  const cliPath = pathMod.resolve(process.argv[1]);
@@ -184,4 +187,4 @@ export {
184
187
  RESTART_EXIT_CODE,
185
188
  startServer
186
189
  };
187
- //# sourceMappingURL=main-2QKD2EI2.js.map
190
+ //# sourceMappingURL=main-37GLOJ7G.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/main.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { ConfigManager } from './core/config.js'\nimport { OpenACPCore } from './core/core.js'\nimport { loadAdapterFactory } from './core/plugin-manager.js'\nimport { initLogger, shutdownLogger, cleanupOldSessionLogs, log } from './core/log.js'\nimport { TelegramAdapter } from './adapters/telegram/index.js'\nimport { ApiServer } from './core/api-server.js'\nimport { TopicManager } from './core/topic-manager.js'\n\nexport const RESTART_EXIT_CODE = 75\nlet shuttingDown = false\n\nexport async function startServer() {\n // 0. If running as daemon child, check state and write PID file\n if (process.argv.includes('--daemon-child')) {\n const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import('./core/daemon.js')\n\n // Only auto-start if the daemon was previously running (user started it)\n if (!shouldAutoStart()) {\n process.exit(0)\n }\n\n const pidPath = getPidPath()\n const existingPid = readPidFile(pidPath)\n if (existingPid !== null && existingPid !== process.pid) {\n try {\n process.kill(existingPid, 0)\n console.error(`Another OpenACP instance is already running (PID ${existingPid}). Exiting.`)\n process.exit(1)\n } catch {\n // Stale PID file — safe to overwrite\n }\n }\n writePidFile(pidPath, process.pid)\n }\n\n // 1. Check config exists, run setup if not\n const configManager = new ConfigManager()\n const configExists = await configManager.exists()\n\n if (!configExists) {\n const { runSetup } = await import('./core/setup.js')\n const shouldStart = await runSetup(configManager)\n if (!shouldStart) process.exit(0)\n }\n\n // 2. Load config (validates with Zod)\n await configManager.load()\n const config = configManager.get()\n initLogger(config.logging)\n log.info({ configPath: configManager.getConfigPath() }, 'Config loaded')\n\n // Async cleanup of old session logs (non-blocking)\n cleanupOldSessionLogs(config.logging.sessionLogRetentionDays).catch(err =>\n log.warn({ err }, 'Session log cleanup failed')\n )\n\n // 3. Create core\n const core = new OpenACPCore(configManager)\n\n // 3.5 Start tunnel if configured\n let tunnelService: import('./tunnel/tunnel-service.js').TunnelService | undefined\n if (config.tunnel.enabled) {\n const { TunnelService } = await import('./tunnel/tunnel-service.js')\n tunnelService = new TunnelService(config.tunnel)\n const publicUrl = await tunnelService.start()\n core.tunnelService = tunnelService\n log.info({ publicUrl }, 'Tunnel started')\n }\n\n // 4. Register adapters from config\n for (const [channelName, channelConfig] of Object.entries(config.channels)) {\n if (!channelConfig.enabled) continue\n\n if (channelName === 'telegram') {\n core.registerAdapter('telegram', new TelegramAdapter(core, channelConfig as any))\n log.info({ adapter: 'telegram' }, 'Adapter registered')\n } else if (channelConfig.adapter) {\n // Plugin adapter\n const factory = await loadAdapterFactory(channelConfig.adapter)\n if (factory) {\n const adapter = factory.createAdapter(core, channelConfig)\n core.registerAdapter(channelName, adapter)\n log.info({ adapter: channelName, plugin: channelConfig.adapter }, 'Adapter registered')\n } else {\n const name = channelName\n const err = channelConfig.adapter\n log.error({ adapter: name, err }, 'Failed to load adapter')\n }\n } else {\n log.error({ adapter: channelName }, 'Channel has no built-in adapter; set \"adapter\" field to a plugin package')\n }\n }\n\n if (core.adapters.size === 0) {\n log.error('No channels enabled. Enable at least one channel in config.')\n process.exit(1)\n }\n\n // 5. Start\n let apiServer: ApiServer | undefined\n\n const shutdown = async (signal: string, exitCode = 0) => {\n if (shuttingDown) return\n shuttingDown = true\n log.info({ signal, exitCode }, 'Signal received, shutting down')\n\n try {\n if (apiServer) await apiServer.stop()\n await core.stop()\n if (tunnelService) await tunnelService.stop()\n } catch (err) {\n log.error({ err }, 'Error during shutdown')\n }\n\n const isDaemon = process.argv.includes('--daemon-child')\n\n // Clean up PID file if running as daemon\n if (isDaemon) {\n const { removePidFile, getPidPath } = await import('./core/daemon.js')\n removePidFile(getPidPath())\n }\n\n // Self-respawn on restart\n if (exitCode === RESTART_EXIT_CODE) {\n if (isDaemon) {\n // Daemon mode: spawn detached child writing to log file\n const { spawn: spawnChild } = await import('node:child_process')\n const { expandHome } = await import('./core/config.js')\n const fs = await import('node:fs')\n const pathMod = await import('node:path')\n\n const cliPath = pathMod.resolve(process.argv[1])\n const resolvedLogDir = expandHome(config.logging.logDir)\n fs.mkdirSync(resolvedLogDir, { recursive: true })\n const logFile = pathMod.join(resolvedLogDir, 'openacp.log')\n const out = fs.openSync(logFile, 'a')\n const err = fs.openSync(logFile, 'a')\n\n const child = spawnChild(process.execPath, [cliPath, '--daemon-child'], {\n detached: true,\n stdio: ['ignore', out, err],\n env: { ...process.env, OPENACP_SKIP_UPDATE_CHECK: '1' },\n })\n fs.closeSync(out)\n fs.closeSync(err)\n child.unref()\n log.info({ newPid: child.pid }, 'Respawned daemon for restart')\n } else if (!process.env.OPENACP_DEV_LOOP) {\n // Foreground production mode: spawn replacement process with inherited stdio\n const { spawn: spawnChild } = await import('node:child_process')\n const child = spawnChild(process.execPath, process.argv.slice(1), {\n stdio: 'inherit',\n env: { ...process.env, OPENACP_SKIP_UPDATE_CHECK: '1' },\n })\n await shutdownLogger()\n child.on('exit', (code) => process.exit(code ?? 0))\n return\n }\n }\n\n await shutdownLogger()\n process.exit(exitCode)\n }\n\n // Expose restart trigger for adapters (e.g. /restart command)\n core.requestRestart = () => shutdown('restart', RESTART_EXIT_CODE)\n\n process.on('SIGINT', () => shutdown('SIGINT'))\n process.on('SIGTERM', () => shutdown('SIGTERM'))\n\n process.on('uncaughtException', (err) => {\n log.error({ err }, 'Uncaught exception')\n })\n\n process.on('unhandledRejection', (err) => {\n log.error({ err }, 'Unhandled rejection')\n })\n\n await core.start()\n\n const updatedConfig = core.configManager.get()\n const telegramAdapter = core.adapters.get('telegram') ?? null\n const telegramCfg = updatedConfig.channels?.telegram as any\n const topicManager = new TopicManager(\n core.sessionManager,\n telegramAdapter,\n {\n notificationTopicId: telegramCfg?.notificationTopicId ?? null,\n assistantTopicId: telegramCfg?.assistantTopicId ?? null,\n },\n )\n\n apiServer = new ApiServer(core, config.api, undefined, topicManager)\n await apiServer.start()\n\n // 6. Log ready\n const agents = Object.keys(config.agents)\n log.info({ agents }, 'OpenACP started')\n log.info('Press Ctrl+C to stop')\n}\n\n// Direct execution for dev (node dist/main.js)\nconst isDirectExecution = process.argv[1]?.endsWith('main.js')\nif (isDirectExecution) {\n startServer().catch((err) => {\n log.error({ err }, 'Fatal error')\n process.exit(1)\n })\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/main.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { ConfigManager } from './core/config.js'\nimport { OpenACPCore } from './core/core.js'\nimport { loadAdapterFactory } from './core/plugin-manager.js'\nimport { initLogger, shutdownLogger, cleanupOldSessionLogs, log } from './core/log.js'\nimport { TelegramAdapter } from './adapters/telegram/index.js'\nimport { ApiServer } from './core/api-server.js'\nimport { TopicManager } from './core/topic-manager.js'\n\nexport const RESTART_EXIT_CODE = 75\nlet shuttingDown = false\n\nexport async function startServer() {\n // 0. If running as daemon child, check state and write PID file\n if (process.argv.includes('--daemon-child')) {\n const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import('./core/daemon.js')\n\n // Only auto-start if the daemon was previously running (user started it)\n if (!shouldAutoStart()) {\n process.exit(0)\n }\n\n const pidPath = getPidPath()\n const existingPid = readPidFile(pidPath)\n if (existingPid !== null && existingPid !== process.pid) {\n try {\n process.kill(existingPid, 0)\n console.error(`Another OpenACP instance is already running (PID ${existingPid}). Exiting.`)\n process.exit(1)\n } catch {\n // Stale PID file — safe to overwrite\n }\n }\n writePidFile(pidPath, process.pid)\n }\n\n // 1. Check config exists, run setup if not\n const configManager = new ConfigManager()\n const configExists = await configManager.exists()\n\n if (!configExists) {\n const { runSetup } = await import('./core/setup.js')\n const shouldStart = await runSetup(configManager)\n if (!shouldStart) process.exit(0)\n }\n\n // 2. Load config (validates with Zod)\n await configManager.load()\n const config = configManager.get()\n initLogger(config.logging)\n log.info({ configPath: configManager.getConfigPath() }, 'Config loaded')\n\n // Async cleanup of old session logs (non-blocking)\n cleanupOldSessionLogs(config.logging.sessionLogRetentionDays).catch(err =>\n log.warn({ err }, 'Session log cleanup failed')\n )\n\n // 3. Create core\n const core = new OpenACPCore(configManager)\n\n // 3.5 Start tunnel if configured\n let tunnelService: import('./tunnel/tunnel-service.js').TunnelService | undefined\n if (config.tunnel.enabled) {\n const { TunnelService } = await import('./tunnel/tunnel-service.js')\n tunnelService = new TunnelService(config.tunnel)\n const publicUrl = await tunnelService.start()\n core.tunnelService = tunnelService\n log.info({ publicUrl }, 'Tunnel started')\n }\n\n // 4. Register adapters from config\n for (const [channelName, channelConfig] of Object.entries(config.channels)) {\n if (!channelConfig.enabled) continue\n\n if (channelName === 'telegram') {\n core.registerAdapter('telegram', new TelegramAdapter(core, channelConfig as any))\n log.info({ adapter: 'telegram' }, 'Adapter registered')\n } else if (channelConfig.adapter) {\n // Plugin adapter\n const factory = await loadAdapterFactory(channelConfig.adapter)\n if (factory) {\n const adapter = factory.createAdapter(core, channelConfig)\n core.registerAdapter(channelName, adapter)\n log.info({ adapter: channelName, plugin: channelConfig.adapter }, 'Adapter registered')\n } else {\n const name = channelName\n const err = channelConfig.adapter\n log.error({ adapter: name, err }, 'Failed to load adapter')\n }\n } else {\n log.error({ adapter: channelName }, 'Channel has no built-in adapter; set \"adapter\" field to a plugin package')\n }\n }\n\n if (core.adapters.size === 0) {\n log.error('No channels enabled. Enable at least one channel in config.')\n process.exit(1)\n }\n\n // 5. Start\n let apiServer: ApiServer | undefined\n\n const shutdown = async (signal: string, exitCode = 0) => {\n if (shuttingDown) return\n shuttingDown = true\n log.info({ signal, exitCode }, 'Signal received, shutting down')\n\n try {\n if (apiServer) await apiServer.stop()\n await core.stop()\n if (tunnelService) await tunnelService.stop()\n } catch (err) {\n log.error({ err }, 'Error during shutdown')\n }\n\n const isDaemon = process.argv.includes('--daemon-child')\n\n // Clean up PID file if running as daemon\n if (isDaemon) {\n const { removePidFile, getPidPath } = await import('./core/daemon.js')\n removePidFile(getPidPath())\n }\n\n // Self-respawn on restart\n if (exitCode === RESTART_EXIT_CODE) {\n if (isDaemon) {\n // Daemon mode: spawn detached child writing to log file\n const { spawn: spawnChild } = await import('node:child_process')\n const { expandHome } = await import('./core/config.js')\n const fs = await import('node:fs')\n const pathMod = await import('node:path')\n\n const cliPath = pathMod.resolve(process.argv[1])\n const resolvedLogDir = expandHome(config.logging.logDir)\n fs.mkdirSync(resolvedLogDir, { recursive: true })\n const logFile = pathMod.join(resolvedLogDir, 'openacp.log')\n const out = fs.openSync(logFile, 'a')\n const err = fs.openSync(logFile, 'a')\n\n const child = spawnChild(process.execPath, [cliPath, '--daemon-child'], {\n detached: true,\n stdio: ['ignore', out, err],\n env: { ...process.env, OPENACP_SKIP_UPDATE_CHECK: '1' },\n })\n fs.closeSync(out)\n fs.closeSync(err)\n child.unref()\n log.info({ newPid: child.pid }, 'Respawned daemon for restart')\n } else if (!process.env.OPENACP_DEV_LOOP) {\n // Foreground production mode: spawn replacement process with inherited stdio\n const { spawn: spawnChild } = await import('node:child_process')\n const child = spawnChild(process.execPath, process.argv.slice(1), {\n stdio: 'inherit',\n env: { ...process.env, OPENACP_SKIP_UPDATE_CHECK: '1' },\n })\n await shutdownLogger()\n child.on('exit', (code) => process.exit(code ?? 0))\n return\n }\n }\n\n await shutdownLogger()\n process.exit(exitCode)\n }\n\n // Expose restart trigger for adapters (e.g. /restart command)\n core.requestRestart = () => shutdown('restart', RESTART_EXIT_CODE)\n\n process.on('SIGINT', () => shutdown('SIGINT'))\n process.on('SIGTERM', () => shutdown('SIGTERM'))\n\n process.on('uncaughtException', (err) => {\n log.error({ err }, 'Uncaught exception')\n })\n\n process.on('unhandledRejection', (err) => {\n log.error({ err }, 'Unhandled rejection')\n })\n\n await core.start()\n\n const updatedConfig = core.configManager.get()\n const telegramAdapter = core.adapters.get('telegram') ?? null\n const telegramCfg = updatedConfig.channels?.telegram as any\n const topicManager = new TopicManager(\n core.sessionManager,\n telegramAdapter,\n {\n notificationTopicId: telegramCfg?.notificationTopicId ?? null,\n assistantTopicId: telegramCfg?.assistantTopicId ?? null,\n },\n )\n\n apiServer = new ApiServer(core, config.api, undefined, topicManager)\n await apiServer.start()\n\n // 6. Log ready\n const agents = Object.keys(config.agents)\n log.info({ agents }, 'OpenACP started')\n log.info('Press Ctrl+C to stop')\n}\n\n// Direct execution for dev (node dist/main.js)\nconst isDirectExecution = process.argv[1]?.endsWith('main.js')\nif (isDirectExecution) {\n startServer().catch((err) => {\n log.error({ err }, 'Fatal error')\n process.exit(1)\n })\n}\n"],"mappings":"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","names":[]}
@@ -1,17 +1,15 @@
1
1
  import {
2
2
  buildMenuKeyboard,
3
3
  buildSkillMessages,
4
- handleAgents,
5
4
  handleClear,
6
5
  handleHelp,
7
6
  handleMenu
8
- } from "./chunk-BGKQHQB4.js";
7
+ } from "./chunk-UG6X672R.js";
9
8
  export {
10
9
  buildMenuKeyboard,
11
10
  buildSkillMessages,
12
- handleAgents,
13
11
  handleClear,
14
12
  handleHelp,
15
13
  handleMenu
16
14
  };
17
- //# sourceMappingURL=menu-CARRTW2F.js.map
15
+ //# sourceMappingURL=menu-6RCPBVGQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -9,8 +9,9 @@ import {
9
9
  validateBotAdmin,
10
10
  validateBotToken,
11
11
  validateChatId
12
- } from "./chunk-W7QQA6CW.js";
13
- import "./chunk-WYZFGHHI.js";
12
+ } from "./chunk-D73LCTPF.js";
13
+ import "./chunk-XJJ7LPXP.js";
14
+ import "./chunk-JRF4G4X7.js";
14
15
  import "./chunk-ESOPMQAY.js";
15
16
  export {
16
17
  detectAgents,
@@ -24,4 +25,4 @@ export {
24
25
  validateBotToken,
25
26
  validateChatId
26
27
  };
27
- //# sourceMappingURL=setup-TTOL7XAN.js.map
28
+ //# sourceMappingURL=setup-QAS3QW3M.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openacp/cli",
3
- "version": "0.4.11",
3
+ "version": "0.5.0",
4
4
  "description": "Self-hosted bridge for AI coding agents via ACP protocol",
5
5
  "type": "module",
6
6
  "bin": {
@@ -40,6 +40,11 @@
40
40
  "type": "git",
41
41
  "url": "https://github.com/Open-ACP/OpenACP"
42
42
  },
43
+ "homepage": "https://github.com/Open-ACP/OpenACP",
44
+ "author": {
45
+ "name": "OpenACP",
46
+ "url": "https://x.com/Open_ACP"
47
+ },
43
48
  "license": "AGPL-3.0",
44
49
  "keywords": [
45
50
  "acp",
@@ -47,6 +52,9 @@
47
52
  "coding-agent",
48
53
  "telegram",
49
54
  "claude",
50
- "codex"
55
+ "codex",
56
+ "gemini",
57
+ "cursor",
58
+ "agent-client-protocol"
51
59
  ]
52
60
  }
@@ -1,7 +0,0 @@
1
- import {
2
- getAgentCapabilities
3
- } from "./chunk-VA2M52CM.js";
4
- export {
5
- getAgentCapabilities
6
- };
7
- //# sourceMappingURL=agent-registry-7HC6D4CH.js.map