@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.
- package/README.md +40 -2
- package/dist/agent-catalog-4IAJ7HEG.js +10 -0
- package/dist/agent-registry-B5YAMA4T.js +8 -0
- package/dist/agent-store-ZBXGOFPH.js +8 -0
- package/dist/chunk-5HGXUCMX.js +83 -0
- package/dist/chunk-5HGXUCMX.js.map +1 -0
- package/dist/{chunk-W7QQA6CW.js → chunk-D73LCTPF.js} +73 -35
- package/dist/chunk-D73LCTPF.js.map +1 -0
- package/dist/{chunk-66RVSUAR.js → chunk-FWN3UIRT.js} +465 -86
- package/dist/chunk-FWN3UIRT.js.map +1 -0
- package/dist/{chunk-3DIPXFZJ.js → chunk-IRGYTNLP.js} +2 -2
- package/dist/{chunk-WYZFGHHI.js → chunk-JRF4G4X7.js} +60 -24
- package/dist/chunk-JRF4G4X7.js.map +1 -0
- package/dist/{chunk-FKOARMAE.js → chunk-LAFKARV3.js} +3 -3
- package/dist/chunk-NAMYZIS5.js +1 -0
- package/dist/{chunk-ZW444AQY.js → chunk-NDR5JCS7.js} +2 -2
- package/dist/chunk-S3DRLJPM.js +422 -0
- package/dist/chunk-S3DRLJPM.js.map +1 -0
- package/dist/chunk-UG6X672R.js +90 -0
- package/dist/chunk-UG6X672R.js.map +1 -0
- package/dist/{chunk-YRJEZD7R.js → chunk-VBEWSWVL.js} +2 -2
- package/dist/chunk-XJJ7LPXP.js +85 -0
- package/dist/chunk-XJJ7LPXP.js.map +1 -0
- package/dist/{chunk-C33LTDZV.js → chunk-Z46LGZ7R.js} +21 -8
- package/dist/chunk-Z46LGZ7R.js.map +1 -0
- package/dist/cli.js +190 -18
- package/dist/cli.js.map +1 -1
- package/dist/{config-XURP6B3S.js → config-PCPIBPUA.js} +2 -2
- package/dist/config-editor-5L7AJ5AF.js +12 -0
- package/dist/{config-registry-OGX4YM2U.js → config-registry-SNKA2EH2.js} +2 -2
- package/dist/{daemon-GWJM2S4A.js → daemon-JZLFRUW6.js} +3 -3
- package/dist/data/registry-snapshot.json +876 -0
- package/dist/doctor-N2HKKUUQ.js +9 -0
- package/dist/doctor-N2HKKUUQ.js.map +1 -0
- package/dist/index.d.ts +137 -17
- package/dist/index.js +19 -10
- package/dist/{main-2QKD2EI2.js → main-37GLOJ7G.js} +18 -15
- package/dist/{main-2QKD2EI2.js.map → main-37GLOJ7G.js.map} +1 -1
- package/dist/{menu-CARRTW2F.js → menu-6RCPBVGQ.js} +2 -4
- package/dist/menu-6RCPBVGQ.js.map +1 -0
- package/dist/{setup-TTOL7XAN.js → setup-QAS3QW3M.js} +4 -3
- package/dist/setup-QAS3QW3M.js.map +1 -0
- package/package.json +10 -2
- package/dist/agent-registry-7HC6D4CH.js +0 -7
- package/dist/chunk-66RVSUAR.js.map +0 -1
- package/dist/chunk-BGKQHQB4.js +0 -276
- package/dist/chunk-BGKQHQB4.js.map +0 -1
- package/dist/chunk-C33LTDZV.js.map +0 -1
- package/dist/chunk-VA2M52CM.js +0 -15
- package/dist/chunk-VA2M52CM.js.map +0 -1
- package/dist/chunk-W7QQA6CW.js.map +0 -1
- package/dist/chunk-WYZFGHHI.js.map +0 -1
- package/dist/config-editor-AALY3URF.js +0 -11
- package/dist/doctor-X477CVZN.js +0 -9
- /package/dist/{agent-registry-7HC6D4CH.js.map → agent-catalog-4IAJ7HEG.js.map} +0 -0
- /package/dist/{config-XURP6B3S.js.map → agent-registry-B5YAMA4T.js.map} +0 -0
- /package/dist/{config-editor-AALY3URF.js.map → agent-store-ZBXGOFPH.js.map} +0 -0
- /package/dist/{chunk-3DIPXFZJ.js.map → chunk-IRGYTNLP.js.map} +0 -0
- /package/dist/{chunk-FKOARMAE.js.map → chunk-LAFKARV3.js.map} +0 -0
- /package/dist/{config-registry-OGX4YM2U.js.map → chunk-NAMYZIS5.js.map} +0 -0
- /package/dist/{chunk-ZW444AQY.js.map → chunk-NDR5JCS7.js.map} +0 -0
- /package/dist/{chunk-YRJEZD7R.js.map → chunk-VBEWSWVL.js.map} +0 -0
- /package/dist/{daemon-GWJM2S4A.js.map → config-PCPIBPUA.js.map} +0 -0
- /package/dist/{doctor-X477CVZN.js.map → config-editor-5L7AJ5AF.js.map} +0 -0
- /package/dist/{menu-CARRTW2F.js.map → config-registry-SNKA2EH2.js.map} +0 -0
- /package/dist/{setup-TTOL7XAN.js.map → daemon-JZLFRUW6.js.map} +0 -0
|
@@ -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
|
|
527
|
-
constructor(
|
|
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-
|
|
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-
|
|
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-
|
|
31
|
-
import "./chunk-
|
|
32
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
54
|
+
} from "./chunk-Z46LGZ7R.js";
|
|
48
55
|
import {
|
|
49
56
|
getPidPath,
|
|
50
57
|
getStatus,
|
|
51
58
|
startDaemon,
|
|
52
59
|
stopDaemon
|
|
53
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-VBEWSWVL.js";
|
|
54
61
|
import {
|
|
55
62
|
ConfigManager,
|
|
56
63
|
PLUGINS_DIR,
|
|
57
64
|
expandHome
|
|
58
|
-
} from "./chunk-
|
|
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-
|
|
8
|
-
import "./chunk-
|
|
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-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
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-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
+
} from "./chunk-NDR5JCS7.js";
|
|
20
|
+
import "./chunk-Z46LGZ7R.js";
|
|
21
|
+
import "./chunk-VBEWSWVL.js";
|
|
19
22
|
import {
|
|
20
23
|
ConfigManager
|
|
21
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
13
|
-
import "./chunk-
|
|
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-
|
|
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.
|
|
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
|
}
|