@openacp/cli 0.2.23 → 0.2.25
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/dist/autostart-YBYXQA77.js +18 -0
- package/dist/autostart-YBYXQA77.js.map +1 -0
- package/dist/{setup-XQBEZZQB.js → chunk-4BN7NSKB.js} +140 -9
- package/dist/chunk-4BN7NSKB.js.map +1 -0
- package/dist/chunk-CQMS5U7Z.js +63 -0
- package/dist/chunk-CQMS5U7Z.js.map +1 -0
- package/dist/{chunk-XOVJLTEC.js → chunk-FGXG3H3F.js} +14 -58
- package/dist/chunk-FGXG3H3F.js.map +1 -0
- package/dist/{chunk-ZATQZUJT.js → chunk-MNJDYDGH.js} +9 -1
- package/dist/{chunk-ZATQZUJT.js.map → chunk-MNJDYDGH.js.map} +1 -1
- package/dist/chunk-PQRVTUNH.js +145 -0
- package/dist/chunk-PQRVTUNH.js.map +1 -0
- package/dist/chunk-QWUJIKTX.js +527 -0
- package/dist/chunk-QWUJIKTX.js.map +1 -0
- package/dist/{chunk-EIBLQU3H.js → chunk-S5MPFOR3.js} +632 -136
- package/dist/chunk-S5MPFOR3.js.map +1 -0
- package/dist/chunk-S6O7SM6A.js +129 -0
- package/dist/chunk-S6O7SM6A.js.map +1 -0
- package/dist/chunk-WXS6ONOD.js +103 -0
- package/dist/chunk-WXS6ONOD.js.map +1 -0
- package/dist/cli.js +354 -4
- package/dist/cli.js.map +1 -1
- package/dist/config-2XALNLAA.js +14 -0
- package/dist/config-2XALNLAA.js.map +1 -0
- package/dist/config-editor-56B6YU7B.js +11 -0
- package/dist/config-editor-56B6YU7B.js.map +1 -0
- package/dist/daemon-3E5OMLT3.js +29 -0
- package/dist/daemon-3E5OMLT3.js.map +1 -0
- package/dist/index.d.ts +99 -18
- package/dist/index.js +35 -6
- package/dist/install-cloudflared-57NRTI4E.js +8 -0
- package/dist/install-cloudflared-57NRTI4E.js.map +1 -0
- package/dist/{main-VJUX7RUY.js → main-TGYT34IJ.js} +43 -11
- package/dist/main-TGYT34IJ.js.map +1 -0
- package/dist/setup-FTNJACSC.js +27 -0
- package/dist/setup-FTNJACSC.js.map +1 -0
- package/dist/{tunnel-service-I6NUMBT4.js → tunnel-service-I6WM6USB.js} +10 -10
- package/dist/tunnel-service-I6WM6USB.js.map +1 -0
- package/package.json +2 -2
- package/dist/chunk-EIBLQU3H.js.map +0 -1
- package/dist/chunk-XOVJLTEC.js.map +0 -1
- package/dist/main-VJUX7RUY.js.map +0 -1
- package/dist/setup-XQBEZZQB.js.map +0 -1
- package/dist/tunnel-service-I6NUMBT4.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -114,13 +114,13 @@ declare const LoggingSchema: z.ZodDefault<z.ZodObject<{
|
|
|
114
114
|
maxFiles: z.ZodDefault<z.ZodNumber>;
|
|
115
115
|
sessionLogRetentionDays: z.ZodDefault<z.ZodNumber>;
|
|
116
116
|
}, "strip", z.ZodTypeAny, {
|
|
117
|
-
level: "
|
|
117
|
+
level: "error" | "silent" | "debug" | "info" | "warn" | "fatal";
|
|
118
118
|
logDir: string;
|
|
119
119
|
maxFileSize: string | number;
|
|
120
120
|
maxFiles: number;
|
|
121
121
|
sessionLogRetentionDays: number;
|
|
122
122
|
}, {
|
|
123
|
-
level?: "
|
|
123
|
+
level?: "error" | "silent" | "debug" | "info" | "warn" | "fatal" | undefined;
|
|
124
124
|
logDir?: string | undefined;
|
|
125
125
|
maxFileSize?: string | number | undefined;
|
|
126
126
|
maxFiles?: number | undefined;
|
|
@@ -220,18 +220,30 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
220
220
|
maxFiles: z.ZodDefault<z.ZodNumber>;
|
|
221
221
|
sessionLogRetentionDays: z.ZodDefault<z.ZodNumber>;
|
|
222
222
|
}, "strip", z.ZodTypeAny, {
|
|
223
|
-
level: "
|
|
223
|
+
level: "error" | "silent" | "debug" | "info" | "warn" | "fatal";
|
|
224
224
|
logDir: string;
|
|
225
225
|
maxFileSize: string | number;
|
|
226
226
|
maxFiles: number;
|
|
227
227
|
sessionLogRetentionDays: number;
|
|
228
228
|
}, {
|
|
229
|
-
level?: "
|
|
229
|
+
level?: "error" | "silent" | "debug" | "info" | "warn" | "fatal" | undefined;
|
|
230
230
|
logDir?: string | undefined;
|
|
231
231
|
maxFileSize?: string | number | undefined;
|
|
232
232
|
maxFiles?: number | undefined;
|
|
233
233
|
sessionLogRetentionDays?: number | undefined;
|
|
234
234
|
}>>;
|
|
235
|
+
runMode: z.ZodDefault<z.ZodEnum<["foreground", "daemon"]>>;
|
|
236
|
+
autoStart: z.ZodDefault<z.ZodBoolean>;
|
|
237
|
+
api: z.ZodDefault<z.ZodObject<{
|
|
238
|
+
port: z.ZodDefault<z.ZodNumber>;
|
|
239
|
+
host: z.ZodDefault<z.ZodString>;
|
|
240
|
+
}, "strip", z.ZodTypeAny, {
|
|
241
|
+
port: number;
|
|
242
|
+
host: string;
|
|
243
|
+
}, {
|
|
244
|
+
port?: number | undefined;
|
|
245
|
+
host?: string | undefined;
|
|
246
|
+
}>>;
|
|
235
247
|
sessionStore: z.ZodDefault<z.ZodObject<{
|
|
236
248
|
ttlDays: z.ZodDefault<z.ZodNumber>;
|
|
237
249
|
}, "strip", z.ZodTypeAny, {
|
|
@@ -277,32 +289,38 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
277
289
|
} | undefined;
|
|
278
290
|
}>>;
|
|
279
291
|
}, "strip", z.ZodTypeAny, {
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
}, z.ZodTypeAny, "passthrough">>;
|
|
292
|
+
workspace: {
|
|
293
|
+
baseDir: string;
|
|
294
|
+
};
|
|
284
295
|
agents: Record<string, {
|
|
285
296
|
command: string;
|
|
286
297
|
args: string[];
|
|
287
298
|
env: Record<string, string>;
|
|
288
299
|
workingDirectory?: string | undefined;
|
|
289
300
|
}>;
|
|
301
|
+
channels: Record<string, z.objectOutputType<{
|
|
302
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
303
|
+
adapter: z.ZodOptional<z.ZodString>;
|
|
304
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
290
305
|
defaultAgent: string;
|
|
291
|
-
workspace: {
|
|
292
|
-
baseDir: string;
|
|
293
|
-
};
|
|
294
306
|
security: {
|
|
295
307
|
allowedUserIds: string[];
|
|
296
308
|
maxConcurrentSessions: number;
|
|
297
309
|
sessionTimeoutMinutes: number;
|
|
298
310
|
};
|
|
299
311
|
logging: {
|
|
300
|
-
level: "
|
|
312
|
+
level: "error" | "silent" | "debug" | "info" | "warn" | "fatal";
|
|
301
313
|
logDir: string;
|
|
302
314
|
maxFileSize: string | number;
|
|
303
315
|
maxFiles: number;
|
|
304
316
|
sessionLogRetentionDays: number;
|
|
305
317
|
};
|
|
318
|
+
runMode: "foreground" | "daemon";
|
|
319
|
+
autoStart: boolean;
|
|
320
|
+
api: {
|
|
321
|
+
port: number;
|
|
322
|
+
host: string;
|
|
323
|
+
};
|
|
306
324
|
sessionStore: {
|
|
307
325
|
ttlDays: number;
|
|
308
326
|
};
|
|
@@ -318,16 +336,16 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
318
336
|
};
|
|
319
337
|
};
|
|
320
338
|
}, {
|
|
321
|
-
channels: Record<string, z.objectInputType<{
|
|
322
|
-
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
323
|
-
adapter: z.ZodOptional<z.ZodString>;
|
|
324
|
-
}, z.ZodTypeAny, "passthrough">>;
|
|
325
339
|
agents: Record<string, {
|
|
326
340
|
command: string;
|
|
327
341
|
args?: string[] | undefined;
|
|
328
342
|
workingDirectory?: string | undefined;
|
|
329
343
|
env?: Record<string, string> | undefined;
|
|
330
344
|
}>;
|
|
345
|
+
channels: Record<string, z.objectInputType<{
|
|
346
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
347
|
+
adapter: z.ZodOptional<z.ZodString>;
|
|
348
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
331
349
|
defaultAgent: string;
|
|
332
350
|
workspace?: {
|
|
333
351
|
baseDir?: string | undefined;
|
|
@@ -338,12 +356,18 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
338
356
|
sessionTimeoutMinutes?: number | undefined;
|
|
339
357
|
} | undefined;
|
|
340
358
|
logging?: {
|
|
341
|
-
level?: "
|
|
359
|
+
level?: "error" | "silent" | "debug" | "info" | "warn" | "fatal" | undefined;
|
|
342
360
|
logDir?: string | undefined;
|
|
343
361
|
maxFileSize?: string | number | undefined;
|
|
344
362
|
maxFiles?: number | undefined;
|
|
345
363
|
sessionLogRetentionDays?: number | undefined;
|
|
346
364
|
} | undefined;
|
|
365
|
+
runMode?: "foreground" | "daemon" | undefined;
|
|
366
|
+
autoStart?: boolean | undefined;
|
|
367
|
+
api?: {
|
|
368
|
+
port?: number | undefined;
|
|
369
|
+
host?: string | undefined;
|
|
370
|
+
} | undefined;
|
|
347
371
|
sessionStore?: {
|
|
348
372
|
ttlDays?: number | undefined;
|
|
349
373
|
} | undefined;
|
|
@@ -592,24 +616,81 @@ declare function uninstallPlugin(packageName: string): void;
|
|
|
592
616
|
declare function listPlugins(): Record<string, string>;
|
|
593
617
|
declare function loadAdapterFactory(packageName: string): Promise<AdapterFactory | null>;
|
|
594
618
|
|
|
619
|
+
declare function getStatus(pidPath?: string): {
|
|
620
|
+
running: boolean;
|
|
621
|
+
pid?: number;
|
|
622
|
+
};
|
|
623
|
+
declare function startDaemon(pidPath?: string, logDir?: string): {
|
|
624
|
+
pid: number;
|
|
625
|
+
} | {
|
|
626
|
+
error: string;
|
|
627
|
+
};
|
|
628
|
+
declare function stopDaemon(pidPath?: string): {
|
|
629
|
+
stopped: boolean;
|
|
630
|
+
pid?: number;
|
|
631
|
+
error?: string;
|
|
632
|
+
};
|
|
633
|
+
declare function getPidPath(): string;
|
|
634
|
+
|
|
635
|
+
declare function isAutoStartSupported(): boolean;
|
|
636
|
+
declare function installAutoStart(logDir: string): {
|
|
637
|
+
success: boolean;
|
|
638
|
+
error?: string;
|
|
639
|
+
};
|
|
640
|
+
declare function uninstallAutoStart(): {
|
|
641
|
+
success: boolean;
|
|
642
|
+
error?: string;
|
|
643
|
+
};
|
|
644
|
+
declare function isAutoStartInstalled(): boolean;
|
|
645
|
+
|
|
646
|
+
declare function runConfigEditor(configManager: ConfigManager): Promise<void>;
|
|
647
|
+
|
|
648
|
+
interface ApiConfig {
|
|
649
|
+
port: number;
|
|
650
|
+
host: string;
|
|
651
|
+
}
|
|
652
|
+
declare class ApiServer {
|
|
653
|
+
private core;
|
|
654
|
+
private config;
|
|
655
|
+
private server;
|
|
656
|
+
private actualPort;
|
|
657
|
+
private portFilePath;
|
|
658
|
+
constructor(core: OpenACPCore, config: ApiConfig, portFilePath?: string);
|
|
659
|
+
start(): Promise<void>;
|
|
660
|
+
stop(): Promise<void>;
|
|
661
|
+
getPort(): number;
|
|
662
|
+
private writePortFile;
|
|
663
|
+
private removePortFile;
|
|
664
|
+
private handleRequest;
|
|
665
|
+
private handleCreateSession;
|
|
666
|
+
private handleCancelSession;
|
|
667
|
+
private handleListSessions;
|
|
668
|
+
private handleListAgents;
|
|
669
|
+
private sendJson;
|
|
670
|
+
private readBody;
|
|
671
|
+
}
|
|
672
|
+
|
|
595
673
|
interface TelegramChannelConfig {
|
|
596
674
|
enabled: boolean;
|
|
597
675
|
botToken: string;
|
|
598
676
|
chatId: number;
|
|
599
677
|
notificationTopicId: number | null;
|
|
600
678
|
assistantTopicId: number | null;
|
|
679
|
+
streamThrottleMs?: number;
|
|
601
680
|
}
|
|
602
681
|
|
|
603
682
|
declare class TelegramAdapter extends ChannelAdapter {
|
|
604
683
|
private bot;
|
|
605
684
|
private telegramConfig;
|
|
606
685
|
private sessionDrafts;
|
|
686
|
+
private sessionTextBuffers;
|
|
607
687
|
private toolCallMessages;
|
|
608
688
|
private permissionHandler;
|
|
609
689
|
private assistantSession;
|
|
610
690
|
private notificationTopicId;
|
|
611
691
|
private assistantTopicId;
|
|
612
692
|
private skillMessages;
|
|
693
|
+
private sendQueue;
|
|
613
694
|
constructor(core: OpenACPCore, config: TelegramChannelConfig);
|
|
614
695
|
start(): Promise<void>;
|
|
615
696
|
stop(): Promise<void>;
|
|
@@ -625,4 +706,4 @@ declare class TelegramAdapter extends ChannelAdapter {
|
|
|
625
706
|
private finalizeDraft;
|
|
626
707
|
}
|
|
627
708
|
|
|
628
|
-
export { type AdapterFactory, type AgentCommand, type AgentDefinition, type AgentEvent, AgentInstance, AgentManager, ChannelAdapter, type ChannelConfig, type Config, ConfigManager, type IncomingMessage, type Logger, type LoggingConfig, NotificationManager, type NotificationMessage, OpenACPCore, type OutgoingMessage, PLUGINS_DIR, type PermissionOption, type PermissionRequest, type PlanEntry, Session, SessionManager, type SessionRecord, type SessionStatus, StderrCapture, TelegramAdapter, type TelegramPlatformData, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, initLogger, installPlugin, listPlugins, loadAdapterFactory, log, nodeToWebReadable, nodeToWebWritable, shutdownLogger, uninstallPlugin };
|
|
709
|
+
export { type AdapterFactory, type AgentCommand, type AgentDefinition, type AgentEvent, AgentInstance, AgentManager, type ApiConfig, ApiServer, ChannelAdapter, type ChannelConfig, type Config, ConfigManager, type IncomingMessage, type Logger, type LoggingConfig, NotificationManager, type NotificationMessage, OpenACPCore, type OutgoingMessage, PLUGINS_DIR, type PermissionOption, type PermissionRequest, type PlanEntry, Session, SessionManager, type SessionRecord, type SessionStatus, StderrCapture, TelegramAdapter, type TelegramPlatformData, cleanupOldSessionLogs, createChildLogger, createSessionLogger, expandHome, getPidPath, getStatus, initLogger, installAutoStart, installPlugin, isAutoStartInstalled, isAutoStartSupported, listPlugins, loadAdapterFactory, log, nodeToWebReadable, nodeToWebWritable, runConfigEditor, shutdownLogger, startDaemon, stopDaemon, uninstallAutoStart, uninstallPlugin };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentInstance,
|
|
3
3
|
AgentManager,
|
|
4
|
+
ApiServer,
|
|
4
5
|
ChannelAdapter,
|
|
5
6
|
NotificationManager,
|
|
6
7
|
OpenACPCore,
|
|
@@ -10,16 +11,34 @@ import {
|
|
|
10
11
|
TelegramAdapter,
|
|
11
12
|
nodeToWebReadable,
|
|
12
13
|
nodeToWebWritable
|
|
13
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-S5MPFOR3.js";
|
|
14
15
|
import {
|
|
15
|
-
ConfigManager,
|
|
16
|
-
PLUGINS_DIR,
|
|
17
|
-
expandHome,
|
|
18
16
|
installPlugin,
|
|
19
17
|
listPlugins,
|
|
20
18
|
loadAdapterFactory,
|
|
21
19
|
uninstallPlugin
|
|
22
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-CQMS5U7Z.js";
|
|
21
|
+
import {
|
|
22
|
+
getPidPath,
|
|
23
|
+
getStatus,
|
|
24
|
+
startDaemon,
|
|
25
|
+
stopDaemon
|
|
26
|
+
} from "./chunk-S6O7SM6A.js";
|
|
27
|
+
import {
|
|
28
|
+
runConfigEditor
|
|
29
|
+
} from "./chunk-QWUJIKTX.js";
|
|
30
|
+
import {
|
|
31
|
+
installAutoStart,
|
|
32
|
+
isAutoStartInstalled,
|
|
33
|
+
isAutoStartSupported,
|
|
34
|
+
uninstallAutoStart
|
|
35
|
+
} from "./chunk-PQRVTUNH.js";
|
|
36
|
+
import "./chunk-4BN7NSKB.js";
|
|
37
|
+
import {
|
|
38
|
+
ConfigManager,
|
|
39
|
+
PLUGINS_DIR,
|
|
40
|
+
expandHome
|
|
41
|
+
} from "./chunk-FGXG3H3F.js";
|
|
23
42
|
import {
|
|
24
43
|
cleanupOldSessionLogs,
|
|
25
44
|
createChildLogger,
|
|
@@ -27,10 +46,11 @@ import {
|
|
|
27
46
|
initLogger,
|
|
28
47
|
log,
|
|
29
48
|
shutdownLogger
|
|
30
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-MNJDYDGH.js";
|
|
31
50
|
export {
|
|
32
51
|
AgentInstance,
|
|
33
52
|
AgentManager,
|
|
53
|
+
ApiServer,
|
|
34
54
|
ChannelAdapter,
|
|
35
55
|
ConfigManager,
|
|
36
56
|
NotificationManager,
|
|
@@ -44,14 +64,23 @@ export {
|
|
|
44
64
|
createChildLogger,
|
|
45
65
|
createSessionLogger,
|
|
46
66
|
expandHome,
|
|
67
|
+
getPidPath,
|
|
68
|
+
getStatus,
|
|
47
69
|
initLogger,
|
|
70
|
+
installAutoStart,
|
|
48
71
|
installPlugin,
|
|
72
|
+
isAutoStartInstalled,
|
|
73
|
+
isAutoStartSupported,
|
|
49
74
|
listPlugins,
|
|
50
75
|
loadAdapterFactory,
|
|
51
76
|
log,
|
|
52
77
|
nodeToWebReadable,
|
|
53
78
|
nodeToWebWritable,
|
|
79
|
+
runConfigEditor,
|
|
54
80
|
shutdownLogger,
|
|
81
|
+
startDaemon,
|
|
82
|
+
stopDaemon,
|
|
83
|
+
uninstallAutoStart,
|
|
55
84
|
uninstallPlugin
|
|
56
85
|
};
|
|
57
86
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,26 +1,50 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
+
ApiServer,
|
|
3
4
|
OpenACPCore,
|
|
4
5
|
TelegramAdapter
|
|
5
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-S5MPFOR3.js";
|
|
6
7
|
import {
|
|
7
|
-
ConfigManager,
|
|
8
8
|
loadAdapterFactory
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-CQMS5U7Z.js";
|
|
10
|
+
import "./chunk-S6O7SM6A.js";
|
|
11
|
+
import "./chunk-QWUJIKTX.js";
|
|
12
|
+
import "./chunk-PQRVTUNH.js";
|
|
13
|
+
import "./chunk-4BN7NSKB.js";
|
|
14
|
+
import {
|
|
15
|
+
ConfigManager
|
|
16
|
+
} from "./chunk-FGXG3H3F.js";
|
|
10
17
|
import {
|
|
11
18
|
cleanupOldSessionLogs,
|
|
12
19
|
initLogger,
|
|
13
20
|
log,
|
|
14
21
|
shutdownLogger
|
|
15
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-MNJDYDGH.js";
|
|
16
23
|
|
|
17
24
|
// src/main.ts
|
|
18
25
|
var shuttingDown = false;
|
|
19
26
|
async function startServer() {
|
|
27
|
+
if (process.argv.includes("--daemon-child")) {
|
|
28
|
+
const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import("./daemon-3E5OMLT3.js");
|
|
29
|
+
if (!shouldAutoStart()) {
|
|
30
|
+
process.exit(0);
|
|
31
|
+
}
|
|
32
|
+
const pidPath = getPidPath();
|
|
33
|
+
const existingPid = readPidFile(pidPath);
|
|
34
|
+
if (existingPid !== null && existingPid !== process.pid) {
|
|
35
|
+
try {
|
|
36
|
+
process.kill(existingPid, 0);
|
|
37
|
+
console.error(`Another OpenACP instance is already running (PID ${existingPid}). Exiting.`);
|
|
38
|
+
process.exit(1);
|
|
39
|
+
} catch {
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
writePidFile(pidPath, process.pid);
|
|
43
|
+
}
|
|
20
44
|
const configManager = new ConfigManager();
|
|
21
45
|
const configExists = await configManager.exists();
|
|
22
46
|
if (!configExists) {
|
|
23
|
-
const { runSetup } = await import("./setup-
|
|
47
|
+
const { runSetup } = await import("./setup-FTNJACSC.js");
|
|
24
48
|
const shouldStart = await runSetup(configManager);
|
|
25
49
|
if (!shouldStart) process.exit(0);
|
|
26
50
|
}
|
|
@@ -34,7 +58,7 @@ async function startServer() {
|
|
|
34
58
|
const core = new OpenACPCore(configManager);
|
|
35
59
|
let tunnelService;
|
|
36
60
|
if (config.tunnel.enabled) {
|
|
37
|
-
const { TunnelService } = await import("./tunnel-service-
|
|
61
|
+
const { TunnelService } = await import("./tunnel-service-I6WM6USB.js");
|
|
38
62
|
tunnelService = new TunnelService(config.tunnel);
|
|
39
63
|
const publicUrl = await tunnelService.start();
|
|
40
64
|
core.tunnelService = tunnelService;
|
|
@@ -64,20 +88,22 @@ async function startServer() {
|
|
|
64
88
|
log.error("No channels enabled. Enable at least one channel in config.");
|
|
65
89
|
process.exit(1);
|
|
66
90
|
}
|
|
67
|
-
|
|
68
|
-
const agents = Object.keys(config.agents);
|
|
69
|
-
log.info({ agents }, "OpenACP started");
|
|
70
|
-
log.info("Press Ctrl+C to stop");
|
|
91
|
+
let apiServer;
|
|
71
92
|
const shutdown = async (signal) => {
|
|
72
93
|
if (shuttingDown) return;
|
|
73
94
|
shuttingDown = true;
|
|
74
95
|
log.info({ signal }, "Signal received, shutting down");
|
|
75
96
|
try {
|
|
97
|
+
if (apiServer) await apiServer.stop();
|
|
76
98
|
await core.stop();
|
|
77
99
|
if (tunnelService) await tunnelService.stop();
|
|
78
100
|
} catch (err) {
|
|
79
101
|
log.error({ err }, "Error during shutdown");
|
|
80
102
|
}
|
|
103
|
+
if (process.argv.includes("--daemon-child")) {
|
|
104
|
+
const { removePidFile, getPidPath } = await import("./daemon-3E5OMLT3.js");
|
|
105
|
+
removePidFile(getPidPath());
|
|
106
|
+
}
|
|
81
107
|
await shutdownLogger();
|
|
82
108
|
process.exit(0);
|
|
83
109
|
};
|
|
@@ -89,6 +115,12 @@ async function startServer() {
|
|
|
89
115
|
process.on("unhandledRejection", (err) => {
|
|
90
116
|
log.error({ err }, "Unhandled rejection");
|
|
91
117
|
});
|
|
118
|
+
await core.start();
|
|
119
|
+
apiServer = new ApiServer(core, config.api);
|
|
120
|
+
await apiServer.start();
|
|
121
|
+
const agents = Object.keys(config.agents);
|
|
122
|
+
log.info({ agents }, "OpenACP started");
|
|
123
|
+
log.info("Press Ctrl+C to stop");
|
|
92
124
|
}
|
|
93
125
|
var isDirectExecution = process.argv[1]?.endsWith("main.js");
|
|
94
126
|
if (isDirectExecution) {
|
|
@@ -100,4 +132,4 @@ if (isDirectExecution) {
|
|
|
100
132
|
export {
|
|
101
133
|
startServer
|
|
102
134
|
};
|
|
103
|
-
//# sourceMappingURL=main-
|
|
135
|
+
//# sourceMappingURL=main-TGYT34IJ.js.map
|
|
@@ -0,0 +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'\n\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) => {\n if (shuttingDown) return\n shuttingDown = true\n log.info({ signal }, '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 // Clean up PID file if running as daemon\n if (process.argv.includes('--daemon-child')) {\n const { removePidFile, getPidPath } = await import('./core/daemon.js')\n removePidFile(getPidPath())\n }\n\n await shutdownLogger()\n process.exit(0)\n }\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 apiServer = new ApiServer(core, config.api)\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":[]}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {
|
|
2
|
+
detectAgents,
|
|
3
|
+
runSetup,
|
|
4
|
+
setupAgents,
|
|
5
|
+
setupRunMode,
|
|
6
|
+
setupTelegram,
|
|
7
|
+
setupWorkspace,
|
|
8
|
+
validateAgentCommand,
|
|
9
|
+
validateBotAdmin,
|
|
10
|
+
validateBotToken,
|
|
11
|
+
validateChatId
|
|
12
|
+
} from "./chunk-4BN7NSKB.js";
|
|
13
|
+
import "./chunk-FGXG3H3F.js";
|
|
14
|
+
import "./chunk-MNJDYDGH.js";
|
|
15
|
+
export {
|
|
16
|
+
detectAgents,
|
|
17
|
+
runSetup,
|
|
18
|
+
setupAgents,
|
|
19
|
+
setupRunMode,
|
|
20
|
+
setupTelegram,
|
|
21
|
+
setupWorkspace,
|
|
22
|
+
validateAgentCommand,
|
|
23
|
+
validateBotAdmin,
|
|
24
|
+
validateBotToken,
|
|
25
|
+
validateChatId
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=setup-FTNJACSC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ensureCloudflared
|
|
3
|
+
} from "./chunk-WXS6ONOD.js";
|
|
1
4
|
import {
|
|
2
5
|
createChildLogger
|
|
3
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-MNJDYDGH.js";
|
|
4
7
|
|
|
5
8
|
// src/tunnel/tunnel-service.ts
|
|
6
9
|
import { serve } from "@hono/node-server";
|
|
@@ -16,6 +19,7 @@ var CloudflareTunnelProvider = class {
|
|
|
16
19
|
this.options = options;
|
|
17
20
|
}
|
|
18
21
|
async start(localPort) {
|
|
22
|
+
const binaryPath = await ensureCloudflared();
|
|
19
23
|
const args = ["tunnel", "--url", `http://localhost:${localPort}`];
|
|
20
24
|
if (this.options.domain) {
|
|
21
25
|
args.push("--hostname", String(this.options.domain));
|
|
@@ -23,15 +27,13 @@ var CloudflareTunnelProvider = class {
|
|
|
23
27
|
return new Promise((resolve2, reject) => {
|
|
24
28
|
const timeout = setTimeout(() => {
|
|
25
29
|
this.stop();
|
|
26
|
-
reject(new Error("Cloudflare tunnel timed out after 30s
|
|
30
|
+
reject(new Error("Cloudflare tunnel timed out after 30s"));
|
|
27
31
|
}, 3e4);
|
|
28
32
|
try {
|
|
29
|
-
this.child = spawn(
|
|
33
|
+
this.child = spawn(binaryPath, args, { stdio: ["ignore", "pipe", "pipe"] });
|
|
30
34
|
} catch {
|
|
31
35
|
clearTimeout(timeout);
|
|
32
|
-
reject(new Error(
|
|
33
|
-
"Failed to start cloudflared. Install it from https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/"
|
|
34
|
-
));
|
|
36
|
+
reject(new Error(`Failed to start cloudflared at ${binaryPath}`));
|
|
35
37
|
return;
|
|
36
38
|
}
|
|
37
39
|
const urlPattern = /https:\/\/[a-zA-Z0-9-]+\.trycloudflare\.com/;
|
|
@@ -50,9 +52,7 @@ var CloudflareTunnelProvider = class {
|
|
|
50
52
|
this.child.stderr?.on("data", onData);
|
|
51
53
|
this.child.on("error", (err) => {
|
|
52
54
|
clearTimeout(timeout);
|
|
53
|
-
reject(new Error(
|
|
54
|
-
`cloudflared failed to start: ${err.message}. Install it from https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/`
|
|
55
|
-
));
|
|
55
|
+
reject(new Error(`cloudflared failed to start: ${err.message}`));
|
|
56
56
|
});
|
|
57
57
|
this.child.on("exit", (code) => {
|
|
58
58
|
if (!this.publicUrl) {
|
|
@@ -878,4 +878,4 @@ var TunnelService = class {
|
|
|
878
878
|
export {
|
|
879
879
|
TunnelService
|
|
880
880
|
};
|
|
881
|
-
//# sourceMappingURL=tunnel-service-
|
|
881
|
+
//# sourceMappingURL=tunnel-service-I6WM6USB.js.map
|