@openacp/cli 2026.327.5 → 2026.330.2
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 +13 -13
- package/dist/adapter-4U6MC5ZS.js +13 -0
- package/dist/agent-catalog-SZQQERV7.js +10 -0
- package/dist/{agent-dependencies-WS7Z2DFW.js → agent-dependencies-ED2ZTUHG.js} +1 -2
- package/dist/{agent-registry-5LZT7CUB.js → agent-registry-YOGP656W.js} +1 -2
- package/dist/agent-store-5UHZH2XI.js +8 -0
- package/dist/{api-client-AQPNKXI2.js → api-client-XTLRRFPX.js} +1 -2
- package/dist/api-server-5VNYFWJE.js +7 -0
- package/dist/api-server-JLBDKCU4.js +10 -0
- package/dist/{autostart-6JS565RY.js → autostart-CUPZMKKC.js} +3 -4
- package/dist/{chunk-WIIZNPCR.js → chunk-2KT6TROD.js} +12 -33
- package/dist/chunk-2KT6TROD.js.map +1 -0
- package/dist/{chunk-PPSMUECX.js → chunk-2R5XM3ES.js} +2 -2
- package/dist/{chunk-SNPYTMPR.js → chunk-3EWTPOF7.js} +2 -2
- package/dist/{chunk-YEULD3SG.js → chunk-3NAFXVQM.js} +7 -2
- package/dist/{chunk-YEULD3SG.js.map → chunk-3NAFXVQM.js.map} +1 -1
- package/dist/{chunk-A6Y4GZM3.js → chunk-566W6INH.js} +2 -2
- package/dist/{chunk-ODUM3D6X.js → chunk-5HKQCYOI.js} +1 -39
- package/dist/chunk-5HKQCYOI.js.map +1 -0
- package/dist/{plugin-installer-QVJP6VKV.js → chunk-5WGVYX3C.js} +18 -5
- package/dist/chunk-5WGVYX3C.js.map +1 -0
- package/dist/{chunk-XWDW3XBE.js → chunk-5ZNBNIK3.js} +1331 -237
- package/dist/chunk-5ZNBNIK3.js.map +1 -0
- package/dist/{chunk-XIBG7LSL.js → chunk-7RKPIM3E.js} +482 -175
- package/dist/chunk-7RKPIM3E.js.map +1 -0
- package/dist/{chunk-WXVT3AOY.js → chunk-7ZCQF6QM.js} +8 -3
- package/dist/chunk-7ZCQF6QM.js.map +1 -0
- package/dist/{chunk-2YCW3QDV.js → chunk-BTJHGSLM.js} +8 -7
- package/dist/chunk-BTJHGSLM.js.map +1 -0
- package/dist/{chunk-P2G275VD.js → chunk-CFUJGWOP.js} +3 -3
- package/dist/{chunk-RBYBSSGO.js → chunk-FCTC7KDT.js} +2 -2
- package/dist/{chunk-QAQDGPB4.js → chunk-GEOXPGCO.js} +3 -3
- package/dist/{chunk-BLQUXO7S.js → chunk-IZ5UEZF7.js} +27 -2
- package/dist/chunk-IZ5UEZF7.js.map +1 -0
- package/dist/{chunk-4GMLGCF2.js → chunk-KDU3ZEWT.js} +2 -2
- package/dist/{chunk-QWP76EBW.js → chunk-MITTQMGZ.js} +16 -9
- package/dist/chunk-MITTQMGZ.js.map +1 -0
- package/dist/{chunk-HRKAXFWR.js → chunk-MPGEHTGE.js} +9 -9
- package/dist/{chunk-KMMEFXIE.js → chunk-PA6MNBG4.js} +41 -9
- package/dist/chunk-PA6MNBG4.js.map +1 -0
- package/dist/{chunk-BQ6FR32N.js → chunk-QWVHCTCA.js} +2 -2
- package/dist/{chunk-XMMAGAT4.js → chunk-R6KZYF7D.js} +8 -1
- package/dist/{chunk-XMMAGAT4.js.map → chunk-R6KZYF7D.js.map} +1 -1
- package/dist/{chunk-AD3X6DGK.js → chunk-TMVTSWVH.js} +75 -13
- package/dist/chunk-TMVTSWVH.js.map +1 -0
- package/dist/chunk-UWH7KIAA.js +701 -0
- package/dist/chunk-UWH7KIAA.js.map +1 -0
- package/dist/{chunk-SHTGQGAU.js → chunk-V2YZWYXT.js} +3 -3
- package/dist/{chunk-QVMEF6FB.js → chunk-W4LK6WJP.js} +38 -27
- package/dist/chunk-W4LK6WJP.js.map +1 -0
- package/dist/{chunk-S3ZGPPXY.js → chunk-YIGBJFJL.js} +9 -13
- package/dist/{chunk-S3ZGPPXY.js.map → chunk-YIGBJFJL.js.map} +1 -1
- package/dist/cli.js +133 -132
- package/dist/cli.js.map +1 -1
- package/dist/config-KN6NKKPF.js +20 -0
- package/dist/config-editor-76RVZS4B.js +10 -0
- package/dist/{config-registry-CUMNXFGK.js → config-registry-ZXAIJNYB.js} +2 -3
- package/dist/context-NXXW62NJ.js +9 -0
- package/dist/core-plugins-OCHKGCIZ.js +22 -0
- package/dist/{daemon-PXO5QPCR.js → daemon-XFEMMJSZ.js} +4 -5
- package/dist/{dev-loader-DRU3R7ZM.js → dev-loader-7P3HZCIA.js} +1 -3
- package/dist/{dev-loader-DRU3R7ZM.js.map → dev-loader-7P3HZCIA.js.map} +1 -1
- package/dist/doctor-AV6AUO22.js +9 -0
- package/dist/file-service-HHB3JQIO.js +8 -0
- package/dist/index.d.ts +141 -187
- package/dist/index.js +33 -29
- package/dist/index.js.map +1 -1
- package/dist/{install-cloudflared-AN24L4DP.js → install-cloudflared-JRJ4BSOM.js} +3 -4
- package/dist/{install-cloudflared-AN24L4DP.js.map → install-cloudflared-JRJ4BSOM.js.map} +1 -1
- package/dist/{install-context-XPWTFT3J.js → install-context-EHYV5WRY.js} +2 -3
- package/dist/{install-context-XPWTFT3J.js.map → install-context-EHYV5WRY.js.map} +1 -1
- package/dist/{install-jq-CRVDJGF3.js → install-jq-ISTGT263.js} +3 -4
- package/dist/{install-jq-CRVDJGF3.js.map → install-jq-ISTGT263.js.map} +1 -1
- package/dist/{integrate-G6CVXTGT.js → integrate-JIEZYDOR.js} +1 -2
- package/dist/{integrate-G6CVXTGT.js.map → integrate-JIEZYDOR.js.map} +1 -1
- package/dist/{log-LZ7FTRKG.js → log-YZ243M5G.js} +4 -3
- package/dist/{main-3GF3EQTE.js → main-L2M4NTJY.js} +135 -50
- package/dist/main-L2M4NTJY.js.map +1 -0
- package/dist/{menu-YDQ2LWAR.js → menu-ALFN37IR.js} +1 -2
- package/dist/notifications-MO23S7S3.js +8 -0
- package/dist/{plugin-create-5HQRF2ID.js → plugin-create-EHL76ZZG.js} +1 -2
- package/dist/{plugin-create-5HQRF2ID.js.map → plugin-create-EHL76ZZG.js.map} +1 -1
- package/dist/plugin-installer-VSTYZSXC.js +9 -0
- package/dist/{plugin-registry-WB3DR67H.js → plugin-registry-6J3YSFHF.js} +1 -2
- package/dist/{plugin-search-HQ4WQKOF.js → plugin-search-MGKAL5JM.js} +1 -2
- package/dist/{plugin-search-HQ4WQKOF.js.map → plugin-search-MGKAL5JM.js.map} +1 -1
- package/dist/{post-upgrade-3ADZRMYJ.js → post-upgrade-Y26S2ZQ7.js} +6 -7
- package/dist/{post-upgrade-3ADZRMYJ.js.map → post-upgrade-Y26S2ZQ7.js.map} +1 -1
- package/dist/{read-text-file-IRZM3QLM.js → read-text-file-DJBTITIB.js} +1 -2
- package/dist/{registry-client-AVGRE4CF.js → registry-client-GTBWLXYU.js} +1 -2
- package/dist/{security-YNRBW6S7.js → security-2BA265LN.js} +1 -2
- package/dist/{settings-manager-MD2U4ZV2.js → settings-manager-B4UN2LAC.js} +1 -2
- package/dist/{setup-A7VPW46C.js → setup-E6BNEYCS.js} +109 -83
- package/dist/setup-E6BNEYCS.js.map +1 -0
- package/dist/speech-SG62JYIF.js +9 -0
- package/dist/{suggest-7D6B542M.js → suggest-RST5VOHB.js} +1 -3
- package/dist/{suggest-7D6B542M.js.map → suggest-RST5VOHB.js.map} +1 -1
- package/dist/telegram-EAVRDNFU.js +7 -0
- package/dist/tunnel-HWJ27WDH.js +7 -0
- package/dist/{tunnel-service-QJPUYEKU.js → tunnel-service-ZMO4THKE.js} +90 -11
- package/dist/tunnel-service-ZMO4THKE.js.map +1 -0
- package/dist/{validators-WSTBNKRW.js → validators-GITLOFXC.js} +1 -2
- package/dist/{version-NQZBM5M7.js → version-AXXV6IV2.js} +1 -2
- package/package.json +1 -3
- package/dist/adapter-JQFQ3JAO.js +0 -15
- package/dist/adapter-UORRGHNH.js +0 -1030
- package/dist/adapter-UORRGHNH.js.map +0 -1
- package/dist/agent-catalog-YHBFERYO.js +0 -11
- package/dist/agent-store-VSHNY5GT.js +0 -9
- package/dist/api-server-7G3ZUZRM.js +0 -8
- package/dist/api-server-CAYNPUF2.js +0 -11
- package/dist/chunk-2YCW3QDV.js.map +0 -1
- package/dist/chunk-32LVIEPW.js +0 -477
- package/dist/chunk-32LVIEPW.js.map +0 -1
- package/dist/chunk-AD3X6DGK.js.map +0 -1
- package/dist/chunk-BLQUXO7S.js.map +0 -1
- package/dist/chunk-KMMEFXIE.js.map +0 -1
- package/dist/chunk-ODUM3D6X.js.map +0 -1
- package/dist/chunk-QVMEF6FB.js.map +0 -1
- package/dist/chunk-QWP76EBW.js.map +0 -1
- package/dist/chunk-VUNV25KB.js +0 -16
- package/dist/chunk-WIIZNPCR.js.map +0 -1
- package/dist/chunk-WXVT3AOY.js.map +0 -1
- package/dist/chunk-XIBG7LSL.js.map +0 -1
- package/dist/chunk-XWDW3XBE.js.map +0 -1
- package/dist/chunk-ZHGPZBS4.js +0 -49
- package/dist/chunk-ZHGPZBS4.js.map +0 -1
- package/dist/chunk-ZNSO2QVC.js +0 -124
- package/dist/chunk-ZNSO2QVC.js.map +0 -1
- package/dist/config-I4FMCJGZ.js +0 -15
- package/dist/config-editor-7PKW42GZ.js +0 -11
- package/dist/context-XM6E22LM.js +0 -10
- package/dist/core-plugins-Y5US6RED.js +0 -23
- package/dist/dist-UHQK5CXN.js +0 -21151
- package/dist/dist-UHQK5CXN.js.map +0 -1
- package/dist/doctor-QZQAP46W.js +0 -10
- package/dist/file-service-EUODJAIT.js +0 -9
- package/dist/main-3GF3EQTE.js.map +0 -1
- package/dist/notifications-D5BRDNSU.js +0 -9
- package/dist/plugin-installer-QVJP6VKV.js.map +0 -1
- package/dist/setup-A7VPW46C.js.map +0 -1
- package/dist/slack-2XNWBOWH.js +0 -8
- package/dist/speech-2GHQNRIO.js +0 -9
- package/dist/telegram-E65IWFBW.js +0 -8
- package/dist/tunnel-45HA72MB.js +0 -8
- package/dist/tunnel-service-QJPUYEKU.js.map +0 -1
- package/dist/version-NQZBM5M7.js.map +0 -1
- /package/dist/{adapter-JQFQ3JAO.js.map → adapter-4U6MC5ZS.js.map} +0 -0
- /package/dist/{agent-catalog-YHBFERYO.js.map → agent-catalog-SZQQERV7.js.map} +0 -0
- /package/dist/{agent-dependencies-WS7Z2DFW.js.map → agent-dependencies-ED2ZTUHG.js.map} +0 -0
- /package/dist/{agent-registry-5LZT7CUB.js.map → agent-registry-YOGP656W.js.map} +0 -0
- /package/dist/{agent-store-VSHNY5GT.js.map → agent-store-5UHZH2XI.js.map} +0 -0
- /package/dist/{api-client-AQPNKXI2.js.map → api-client-XTLRRFPX.js.map} +0 -0
- /package/dist/{api-server-7G3ZUZRM.js.map → api-server-5VNYFWJE.js.map} +0 -0
- /package/dist/{api-server-CAYNPUF2.js.map → api-server-JLBDKCU4.js.map} +0 -0
- /package/dist/{autostart-6JS565RY.js.map → autostart-CUPZMKKC.js.map} +0 -0
- /package/dist/{chunk-PPSMUECX.js.map → chunk-2R5XM3ES.js.map} +0 -0
- /package/dist/{chunk-SNPYTMPR.js.map → chunk-3EWTPOF7.js.map} +0 -0
- /package/dist/{chunk-A6Y4GZM3.js.map → chunk-566W6INH.js.map} +0 -0
- /package/dist/{chunk-P2G275VD.js.map → chunk-CFUJGWOP.js.map} +0 -0
- /package/dist/{chunk-RBYBSSGO.js.map → chunk-FCTC7KDT.js.map} +0 -0
- /package/dist/{chunk-QAQDGPB4.js.map → chunk-GEOXPGCO.js.map} +0 -0
- /package/dist/{chunk-4GMLGCF2.js.map → chunk-KDU3ZEWT.js.map} +0 -0
- /package/dist/{chunk-HRKAXFWR.js.map → chunk-MPGEHTGE.js.map} +0 -0
- /package/dist/{chunk-BQ6FR32N.js.map → chunk-QWVHCTCA.js.map} +0 -0
- /package/dist/{chunk-SHTGQGAU.js.map → chunk-V2YZWYXT.js.map} +0 -0
- /package/dist/{chunk-VUNV25KB.js.map → config-KN6NKKPF.js.map} +0 -0
- /package/dist/{config-I4FMCJGZ.js.map → config-editor-76RVZS4B.js.map} +0 -0
- /package/dist/{config-editor-7PKW42GZ.js.map → config-registry-ZXAIJNYB.js.map} +0 -0
- /package/dist/{config-registry-CUMNXFGK.js.map → context-NXXW62NJ.js.map} +0 -0
- /package/dist/{context-XM6E22LM.js.map → core-plugins-OCHKGCIZ.js.map} +0 -0
- /package/dist/{core-plugins-Y5US6RED.js.map → daemon-XFEMMJSZ.js.map} +0 -0
- /package/dist/{daemon-PXO5QPCR.js.map → doctor-AV6AUO22.js.map} +0 -0
- /package/dist/{doctor-QZQAP46W.js.map → file-service-HHB3JQIO.js.map} +0 -0
- /package/dist/{file-service-EUODJAIT.js.map → log-YZ243M5G.js.map} +0 -0
- /package/dist/{log-LZ7FTRKG.js.map → menu-ALFN37IR.js.map} +0 -0
- /package/dist/{menu-YDQ2LWAR.js.map → notifications-MO23S7S3.js.map} +0 -0
- /package/dist/{notifications-D5BRDNSU.js.map → plugin-installer-VSTYZSXC.js.map} +0 -0
- /package/dist/{plugin-registry-WB3DR67H.js.map → plugin-registry-6J3YSFHF.js.map} +0 -0
- /package/dist/{read-text-file-IRZM3QLM.js.map → read-text-file-DJBTITIB.js.map} +0 -0
- /package/dist/{registry-client-AVGRE4CF.js.map → registry-client-GTBWLXYU.js.map} +0 -0
- /package/dist/{security-YNRBW6S7.js.map → security-2BA265LN.js.map} +0 -0
- /package/dist/{settings-manager-MD2U4ZV2.js.map → settings-manager-B4UN2LAC.js.map} +0 -0
- /package/dist/{slack-2XNWBOWH.js.map → speech-SG62JYIF.js.map} +0 -0
- /package/dist/{speech-2GHQNRIO.js.map → telegram-EAVRDNFU.js.map} +0 -0
- /package/dist/{telegram-E65IWFBW.js.map → tunnel-HWJ27WDH.js.map} +0 -0
- /package/dist/{tunnel-45HA72MB.js.map → validators-GITLOFXC.js.map} +0 -0
- /package/dist/{validators-WSTBNKRW.js.map → version-AXXV6IV2.js.map} +0 -0
|
@@ -1,37 +1,40 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
corePlugins
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YIGBJFJL.js";
|
|
5
|
+
import "./chunk-CFUJGWOP.js";
|
|
5
6
|
import {
|
|
6
7
|
SettingsManager
|
|
7
8
|
} from "./chunk-MLF4W5R6.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-KMMEFXIE.js";
|
|
12
|
-
import "./chunk-4GMLGCF2.js";
|
|
9
|
+
import "./chunk-3EWTPOF7.js";
|
|
10
|
+
import "./chunk-PA6MNBG4.js";
|
|
11
|
+
import "./chunk-KDU3ZEWT.js";
|
|
13
12
|
import "./chunk-5OCGO27U.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-3NAFXVQM.js";
|
|
14
|
+
import "./chunk-UWH7KIAA.js";
|
|
15
|
+
import "./chunk-TMVTSWVH.js";
|
|
16
|
+
import "./chunk-5WGVYX3C.js";
|
|
17
17
|
import {
|
|
18
18
|
CommandRegistry,
|
|
19
19
|
OpenACPCore
|
|
20
|
-
} from "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
23
|
-
import "./chunk-
|
|
20
|
+
} from "./chunk-7RKPIM3E.js";
|
|
21
|
+
import "./chunk-V2YZWYXT.js";
|
|
22
|
+
import "./chunk-566W6INH.js";
|
|
23
|
+
import "./chunk-7ZCQF6QM.js";
|
|
24
24
|
import "./chunk-FNRSWA2K.js";
|
|
25
25
|
import "./chunk-ZSLHHQPQ.js";
|
|
26
26
|
import "./chunk-LGFWH3AE.js";
|
|
27
27
|
import "./chunk-OYSAN7UX.js";
|
|
28
|
-
import "./chunk-
|
|
29
|
-
import "./chunk-
|
|
28
|
+
import "./chunk-IZ5UEZF7.js";
|
|
29
|
+
import "./chunk-MITTQMGZ.js";
|
|
30
30
|
import "./chunk-APS6UEFU.js";
|
|
31
|
-
import "./chunk-
|
|
31
|
+
import "./chunk-2KT6TROD.js";
|
|
32
32
|
import {
|
|
33
|
-
ConfigManager
|
|
34
|
-
|
|
33
|
+
ConfigManager,
|
|
34
|
+
OPENACP_DIR,
|
|
35
|
+
PLUGINS_DATA_DIR,
|
|
36
|
+
REGISTRY_PATH
|
|
37
|
+
} from "./chunk-W4LK6WJP.js";
|
|
35
38
|
import {
|
|
36
39
|
cleanupOldSessionLogs,
|
|
37
40
|
initLogger,
|
|
@@ -39,11 +42,13 @@ import {
|
|
|
39
42
|
muteLogger,
|
|
40
43
|
shutdownLogger,
|
|
41
44
|
unmuteLogger
|
|
42
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-R6KZYF7D.js";
|
|
43
46
|
import {
|
|
44
47
|
PluginRegistry
|
|
45
48
|
} from "./chunk-W26AUH5B.js";
|
|
46
|
-
|
|
49
|
+
|
|
50
|
+
// src/main.ts
|
|
51
|
+
import path from "path";
|
|
47
52
|
|
|
48
53
|
// src/core/commands/session.ts
|
|
49
54
|
function registerSessionCommands(registry, _core) {
|
|
@@ -180,8 +185,7 @@ function registerAdminCommands(registry, _core) {
|
|
|
180
185
|
title: "Available Integrations",
|
|
181
186
|
options: [
|
|
182
187
|
{ label: "Telegram", command: "/integrate telegram" },
|
|
183
|
-
{ label: "Discord", command: "/integrate discord" }
|
|
184
|
-
{ label: "Slack", command: "/integrate slack" }
|
|
188
|
+
{ label: "Discord", command: "/integrate discord" }
|
|
185
189
|
]
|
|
186
190
|
};
|
|
187
191
|
}
|
|
@@ -269,16 +273,11 @@ function registerSystemCommands(registry, core) {
|
|
|
269
273
|
|
|
270
274
|
// src/main.ts
|
|
271
275
|
import fs from "fs";
|
|
272
|
-
import path from "path";
|
|
273
|
-
import os from "os";
|
|
274
276
|
var RESTART_EXIT_CODE = 75;
|
|
275
277
|
var shuttingDown = false;
|
|
276
|
-
var OPENACP_DIR = path.join(os.homedir(), ".openacp");
|
|
277
|
-
var PLUGINS_DATA_DIR = path.join(OPENACP_DIR, "plugins", "data");
|
|
278
|
-
var REGISTRY_PATH = path.join(OPENACP_DIR, "plugins.json");
|
|
279
278
|
async function startServer(opts) {
|
|
280
279
|
if (process.argv.includes("--daemon-child")) {
|
|
281
|
-
const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import("./daemon-
|
|
280
|
+
const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import("./daemon-XFEMMJSZ.js");
|
|
282
281
|
if (!shouldAutoStart()) {
|
|
283
282
|
process.exit(0);
|
|
284
283
|
}
|
|
@@ -300,7 +299,7 @@ async function startServer(opts) {
|
|
|
300
299
|
const configManager = new ConfigManager();
|
|
301
300
|
const configExists = await configManager.exists();
|
|
302
301
|
if (!configExists) {
|
|
303
|
-
const { runSetup } = await import("./setup-
|
|
302
|
+
const { runSetup } = await import("./setup-E6BNEYCS.js");
|
|
304
303
|
const shouldStart = await runSetup(configManager, { settingsManager, pluginRegistry });
|
|
305
304
|
if (!shouldStart) process.exit(0);
|
|
306
305
|
}
|
|
@@ -313,7 +312,7 @@ async function startServer(opts) {
|
|
|
313
312
|
}
|
|
314
313
|
const isForegroundTTY = !!(process.stdout.isTTY && !process.env.NO_COLOR && config.runMode !== "daemon");
|
|
315
314
|
if (isForegroundTTY) {
|
|
316
|
-
const { printStartBanner } = await import("./setup-
|
|
315
|
+
const { printStartBanner } = await import("./setup-E6BNEYCS.js");
|
|
317
316
|
await printStartBanner();
|
|
318
317
|
}
|
|
319
318
|
let spinner;
|
|
@@ -323,7 +322,7 @@ async function startServer(opts) {
|
|
|
323
322
|
spinner = ora({ text: "Starting OpenACP...", spinner: "dots" }).start();
|
|
324
323
|
}
|
|
325
324
|
try {
|
|
326
|
-
const { runPostUpgradeChecks } = await import("./post-upgrade-
|
|
325
|
+
const { runPostUpgradeChecks } = await import("./post-upgrade-Y26S2ZQ7.js");
|
|
327
326
|
await runPostUpgradeChecks(config);
|
|
328
327
|
} catch (err) {
|
|
329
328
|
log.warn({ err }, "Post-upgrade check failed");
|
|
@@ -341,8 +340,73 @@ async function startServer(opts) {
|
|
|
341
340
|
core.lifecycleManager.settingsManager = settingsManager;
|
|
342
341
|
core.lifecycleManager.pluginRegistry = pluginRegistry;
|
|
343
342
|
await core.lifecycleManager.boot(corePlugins);
|
|
343
|
+
try {
|
|
344
|
+
const communityPlugins = [];
|
|
345
|
+
const npmPlugins = pluginRegistry.listBySource("npm");
|
|
346
|
+
const localPlugins = pluginRegistry.listBySource("local");
|
|
347
|
+
const allCommunityEntries = new Map([...npmPlugins, ...localPlugins]);
|
|
348
|
+
for (const [name, entry] of allCommunityEntries) {
|
|
349
|
+
if (!entry.enabled) continue;
|
|
350
|
+
try {
|
|
351
|
+
let modulePath;
|
|
352
|
+
if (name.startsWith("/") || name.startsWith(".")) {
|
|
353
|
+
const resolved = path.resolve(name);
|
|
354
|
+
const pkgPath = path.join(resolved, "package.json");
|
|
355
|
+
const pkg = JSON.parse(await fs.promises.readFile(pkgPath, "utf-8"));
|
|
356
|
+
modulePath = path.join(resolved, pkg.main || "dist/index.js");
|
|
357
|
+
} else {
|
|
358
|
+
const nodeModulesDir = path.join(OPENACP_DIR, "plugins", "node_modules");
|
|
359
|
+
let pkgDir = path.join(nodeModulesDir, name);
|
|
360
|
+
if (!fs.existsSync(path.join(pkgDir, "package.json"))) {
|
|
361
|
+
let found = false;
|
|
362
|
+
const scopes = fs.existsSync(nodeModulesDir) ? fs.readdirSync(nodeModulesDir).filter((d) => d.startsWith("@")) : [];
|
|
363
|
+
for (const scope of scopes) {
|
|
364
|
+
const scopeDir = path.join(nodeModulesDir, scope);
|
|
365
|
+
const pkgs = fs.readdirSync(scopeDir);
|
|
366
|
+
for (const pkg2 of pkgs) {
|
|
367
|
+
const candidateDir = path.join(scopeDir, pkg2);
|
|
368
|
+
const candidatePkgPath = path.join(candidateDir, "package.json");
|
|
369
|
+
if (fs.existsSync(candidatePkgPath)) {
|
|
370
|
+
try {
|
|
371
|
+
const candidatePkg = JSON.parse(fs.readFileSync(candidatePkgPath, "utf-8"));
|
|
372
|
+
const pluginName = candidatePkg.openacp?.pluginName;
|
|
373
|
+
if (pluginName === name) {
|
|
374
|
+
pkgDir = candidateDir;
|
|
375
|
+
found = true;
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
} catch {
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
if (found) break;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
const pkgJsonPath = path.join(pkgDir, "package.json");
|
|
386
|
+
const pkg = JSON.parse(await fs.promises.readFile(pkgJsonPath, "utf-8"));
|
|
387
|
+
modulePath = path.join(pkgDir, pkg.main || "dist/index.js");
|
|
388
|
+
}
|
|
389
|
+
log.debug({ plugin: name, modulePath }, "Loading community plugin");
|
|
390
|
+
const mod = await import(modulePath);
|
|
391
|
+
const plugin = mod.default;
|
|
392
|
+
if (!plugin || !plugin.name || !plugin.setup) {
|
|
393
|
+
log.warn({ plugin: name }, "Community plugin has invalid exports (missing name or setup), skipping");
|
|
394
|
+
continue;
|
|
395
|
+
}
|
|
396
|
+
communityPlugins.push(plugin);
|
|
397
|
+
} catch (err) {
|
|
398
|
+
log.warn({ err, plugin: name }, "Failed to load community plugin, skipping");
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
if (communityPlugins.length > 0) {
|
|
402
|
+
log.debug({ plugins: communityPlugins.map((p) => p.name) }, "Booting community plugins");
|
|
403
|
+
await core.lifecycleManager.boot(communityPlugins);
|
|
404
|
+
}
|
|
405
|
+
} catch (err) {
|
|
406
|
+
log.warn({ err }, "Community plugin loading failed");
|
|
407
|
+
}
|
|
344
408
|
if (opts?.devPluginPath) {
|
|
345
|
-
const { DevPluginLoader } = await import("./dev-loader-
|
|
409
|
+
const { DevPluginLoader } = await import("./dev-loader-7P3HZCIA.js");
|
|
346
410
|
const devLoader = new DevPluginLoader(opts.devPluginPath);
|
|
347
411
|
try {
|
|
348
412
|
const devPlugin = await devLoader.load();
|
|
@@ -388,6 +452,11 @@ async function startServer(opts) {
|
|
|
388
452
|
core.eventBus.emit("system:commands-ready", { commands: commandRegistry.getAll() });
|
|
389
453
|
core.eventBus.emit("system:ready");
|
|
390
454
|
} catch (err) {
|
|
455
|
+
if (spinner) {
|
|
456
|
+
spinner.fail("Plugin boot failed");
|
|
457
|
+
spinner = void 0;
|
|
458
|
+
}
|
|
459
|
+
unmuteLogger();
|
|
391
460
|
log.error({ err }, "Plugin boot failed");
|
|
392
461
|
}
|
|
393
462
|
if (core.adapters.size === 0) {
|
|
@@ -399,20 +468,31 @@ async function startServer(opts) {
|
|
|
399
468
|
shuttingDown = true;
|
|
400
469
|
log.info({ signal, exitCode }, "Signal received, shutting down");
|
|
401
470
|
try {
|
|
471
|
+
try {
|
|
472
|
+
const nm = serviceRegistry.get("notifications");
|
|
473
|
+
if (nm) {
|
|
474
|
+
await nm.notifyAll({
|
|
475
|
+
sessionId: "system",
|
|
476
|
+
type: "error",
|
|
477
|
+
summary: "OpenACP is shutting down"
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
} catch {
|
|
481
|
+
}
|
|
482
|
+
await core.sessionManager.shutdownAll();
|
|
402
483
|
await core.lifecycleManager.shutdown();
|
|
403
|
-
await core.stop();
|
|
404
484
|
} catch (err) {
|
|
405
485
|
log.error({ err }, "Error during shutdown");
|
|
406
486
|
}
|
|
407
487
|
const isDaemon = process.argv.includes("--daemon-child");
|
|
408
488
|
if (isDaemon) {
|
|
409
|
-
const { removePidFile, getPidPath } = await import("./daemon-
|
|
489
|
+
const { removePidFile, getPidPath } = await import("./daemon-XFEMMJSZ.js");
|
|
410
490
|
removePidFile(getPidPath());
|
|
411
491
|
}
|
|
412
492
|
if (exitCode === RESTART_EXIT_CODE) {
|
|
413
493
|
if (isDaemon) {
|
|
414
494
|
const { spawn: spawnChild } = await import("child_process");
|
|
415
|
-
const { expandHome } = await import("./config-
|
|
495
|
+
const { expandHome } = await import("./config-KN6NKKPF.js");
|
|
416
496
|
const fs2 = await import("fs");
|
|
417
497
|
const pathMod = await import("path");
|
|
418
498
|
const cliPath = pathMod.resolve(process.argv[1]);
|
|
@@ -460,7 +540,15 @@ async function startServer(opts) {
|
|
|
460
540
|
ok("Config loaded");
|
|
461
541
|
ok("Dependencies checked");
|
|
462
542
|
const tunnelSvc = core.lifecycleManager.serviceRegistry.get("tunnel");
|
|
463
|
-
if (tunnelSvc)
|
|
543
|
+
if (tunnelSvc) {
|
|
544
|
+
const tunnelUrl = tunnelSvc.getPublicUrl();
|
|
545
|
+
const tunnelErr = tunnelSvc.getStartError();
|
|
546
|
+
if (tunnelErr) {
|
|
547
|
+
console.log(`\x1B[33m\u26A0\x1B[0m Tunnel failed (${tunnelErr}) \u2014 viewer links unavailable`);
|
|
548
|
+
} else {
|
|
549
|
+
ok(`Tunnel ready \u2192 ${tunnelUrl}`);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
464
552
|
for (const [name] of core.adapters) ok(`${name.charAt(0).toUpperCase() + name.slice(1)} connected`);
|
|
465
553
|
const apiPort = config.api?.port ?? 21420;
|
|
466
554
|
if (core.lifecycleManager.serviceRegistry.get("api-server")) ok(`API server on port ${apiPort}`);
|
|
@@ -476,13 +564,11 @@ async function autoRegisterBuiltinPlugins(settingsManager, pluginRegistry, confi
|
|
|
476
564
|
{ name: "@openacp/security", version: "1.0.0", description: "User access control and session limits" },
|
|
477
565
|
{ name: "@openacp/file-service", version: "1.0.0", description: "File storage and management" },
|
|
478
566
|
{ name: "@openacp/context", version: "1.0.0", description: "Conversation context management" },
|
|
479
|
-
{ name: "@openacp/usage", version: "1.0.0", description: "Token usage tracking and budget enforcement" },
|
|
480
567
|
{ name: "@openacp/speech", version: "1.0.0", description: "Text-to-speech and speech-to-text" },
|
|
481
568
|
{ name: "@openacp/notifications", version: "1.0.0", description: "Cross-session notification routing" },
|
|
482
569
|
{ name: "@openacp/tunnel", version: "1.0.0", description: "Expose local services via tunnel" },
|
|
483
570
|
{ name: "@openacp/api-server", version: "1.0.0", description: "REST API + SSE streaming server" },
|
|
484
|
-
{ name: "@openacp/telegram", version: "1.0.0", description: "Telegram adapter with forum topics" }
|
|
485
|
-
{ name: "@openacp/slack", version: "1.0.0", description: "Slack adapter with channels and threads" }
|
|
571
|
+
{ name: "@openacp/telegram", version: "1.0.0", description: "Telegram adapter with forum topics" }
|
|
486
572
|
];
|
|
487
573
|
let legacyConfig;
|
|
488
574
|
try {
|
|
@@ -494,15 +580,14 @@ async function autoRegisterBuiltinPlugins(settingsManager, pluginRegistry, confi
|
|
|
494
580
|
}
|
|
495
581
|
if (legacyConfig) {
|
|
496
582
|
const pluginModules = await Promise.allSettled([
|
|
497
|
-
import("./security-
|
|
498
|
-
import("./file-service-
|
|
499
|
-
import("./context-
|
|
500
|
-
import("./speech-
|
|
501
|
-
import("./notifications-
|
|
502
|
-
import("./tunnel-
|
|
503
|
-
import("./api-server-
|
|
504
|
-
import("./telegram-
|
|
505
|
-
import("./slack-2XNWBOWH.js")
|
|
583
|
+
import("./security-2BA265LN.js"),
|
|
584
|
+
import("./file-service-HHB3JQIO.js"),
|
|
585
|
+
import("./context-NXXW62NJ.js"),
|
|
586
|
+
import("./speech-SG62JYIF.js"),
|
|
587
|
+
import("./notifications-MO23S7S3.js"),
|
|
588
|
+
import("./tunnel-HWJ27WDH.js"),
|
|
589
|
+
import("./api-server-5VNYFWJE.js"),
|
|
590
|
+
import("./telegram-EAVRDNFU.js")
|
|
506
591
|
]);
|
|
507
592
|
for (const result of pluginModules) {
|
|
508
593
|
if (result.status !== "fulfilled") continue;
|
|
@@ -511,7 +596,7 @@ async function autoRegisterBuiltinPlugins(settingsManager, pluginRegistry, confi
|
|
|
511
596
|
try {
|
|
512
597
|
const existing = await settingsManager.loadSettings(plugin.name);
|
|
513
598
|
if (Object.keys(existing).length > 0) continue;
|
|
514
|
-
const { createInstallContext } = await import("./install-context-
|
|
599
|
+
const { createInstallContext } = await import("./install-context-EHYV5WRY.js");
|
|
515
600
|
const ctx = createInstallContext({
|
|
516
601
|
pluginName: plugin.name,
|
|
517
602
|
settingsManager,
|
|
@@ -566,4 +651,4 @@ export {
|
|
|
566
651
|
RESTART_EXIT_CODE,
|
|
567
652
|
startServer
|
|
568
653
|
};
|
|
569
|
-
//# sourceMappingURL=main-
|
|
654
|
+
//# sourceMappingURL=main-L2M4NTJY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/main.ts","../../src/core/commands/session.ts","../../src/core/commands/agents.ts","../../src/core/commands/admin.ts","../../src/core/commands/help.ts","../../src/core/commands/menu.ts","../../src/core/commands/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport path from 'node:path'\nimport { ConfigManager, OPENACP_DIR, PLUGINS_DATA_DIR, REGISTRY_PATH } from './core/config/config.js'\nimport { OpenACPCore } from './core/core.js'\nimport { initLogger, shutdownLogger, cleanupOldSessionLogs, log, muteLogger, unmuteLogger } from './core/utils/log.js'\nimport { corePlugins } from './plugins/core-plugins.js'\nimport { SettingsManager } from './core/plugin/settings-manager.js'\nimport { PluginRegistry } from './core/plugin/plugin-registry.js'\nimport { CommandRegistry } from './core/command-registry.js'\nimport { registerSystemCommands } from './core/commands/index.js'\nimport type { IChannelAdapter } from './core/channel.js'\nimport type { TunnelService } from './plugins/tunnel/tunnel-service.js'\nimport fs from 'node:fs'\n\nexport const RESTART_EXIT_CODE = 75\nlet shuttingDown = false\n\n\nexport interface StartServerOptions {\n devPluginPath?: string\n noWatch?: boolean\n}\n\nexport async function startServer(opts?: StartServerOptions) {\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('./cli/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 // Create SettingsManager and PluginRegistry early (needed by wizard + boot)\n const settingsManager = new SettingsManager(PLUGINS_DATA_DIR)\n const pluginRegistry = new PluginRegistry(REGISTRY_PATH)\n await pluginRegistry.load()\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/index.js')\n const shouldStart = await runSetup(configManager, { settingsManager, pluginRegistry })\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.debug({ configPath: configManager.getConfigPath() }, 'Config loaded')\n\n // First boot: auto-register built-in plugins if registry is empty\n if (pluginRegistry.list().size === 0) {\n await autoRegisterBuiltinPlugins(settingsManager, pluginRegistry, configManager)\n }\n\n // Show banner in foreground TTY mode (not daemon, not piped)\n const isForegroundTTY = !!(process.stdout.isTTY && !process.env.NO_COLOR && config.runMode !== 'daemon')\n if (isForegroundTTY) {\n const { printStartBanner } = await import('./core/setup/index.js')\n await printStartBanner()\n }\n\n // Mute pino during startup, show spinner instead\n let spinner: ReturnType<typeof import('ora').default> | undefined\n if (isForegroundTTY) {\n muteLogger()\n const ora = (await import('ora')).default\n spinner = ora({ text: 'Starting OpenACP...', spinner: 'dots' }).start()\n }\n\n // Post-upgrade dependency check (blocking — must complete before server start)\n try {\n const { runPostUpgradeChecks } = await import('./cli/post-upgrade.js')\n await runPostUpgradeChecks(config)\n } catch (err) {\n log.warn({ err }, 'Post-upgrade check failed')\n }\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 // 3b. Create CommandRegistry and register as service\n const commandRegistry = new CommandRegistry()\n const serviceRegistry = core.lifecycleManager.serviceRegistry\n serviceRegistry.register('command-registry', commandRegistry, 'core')\n\n // 3c. Register system commands\n registerSystemCommands(commandRegistry, core)\n\n // 4. Boot all plugins (services, infrastructure, adapters)\n try {\n // Emit kernel:booted before plugin boot\n core.eventBus.emit('kernel:booted')\n\n // Pass settingsManager and pluginRegistry to LifecycleManager\n ;(core.lifecycleManager as any).settingsManager = settingsManager\n ;(core.lifecycleManager as any).pluginRegistry = pluginRegistry\n\n // Boot all built-in plugins in dependency order\n await core.lifecycleManager.boot(corePlugins)\n\n // Load community plugins from registry (npm and local sources)\n try {\n const communityPlugins: import('./core/plugin/types.js').OpenACPPlugin[] = []\n const npmPlugins = pluginRegistry.listBySource('npm')\n const localPlugins = pluginRegistry.listBySource('local')\n const allCommunityEntries = new Map([...npmPlugins, ...localPlugins])\n\n for (const [name, entry] of allCommunityEntries) {\n if (!entry.enabled) continue\n\n try {\n let modulePath: string\n\n if (name.startsWith('/') || name.startsWith('.')) {\n // Absolute or relative path (local install via `plugin add /path/to/plugin`)\n const resolved = path.resolve(name)\n const pkgPath = path.join(resolved, 'package.json')\n const pkg = JSON.parse(await fs.promises.readFile(pkgPath, 'utf-8'))\n modulePath = path.join(resolved, pkg.main || 'dist/index.js')\n } else {\n // npm package: try direct name first, then scan node_modules for matching plugin name\n const nodeModulesDir = path.join(OPENACP_DIR, 'plugins', 'node_modules')\n let pkgDir = path.join(nodeModulesDir, name)\n\n if (!fs.existsSync(path.join(pkgDir, 'package.json'))) {\n // Plugin name doesn't match npm package name — scan installed packages\n // Match by openacp.pluginName field in package.json (no code execution)\n let found = false\n const scopes = fs.existsSync(nodeModulesDir)\n ? fs.readdirSync(nodeModulesDir).filter(d => d.startsWith('@'))\n : []\n for (const scope of scopes) {\n const scopeDir = path.join(nodeModulesDir, scope)\n const pkgs = fs.readdirSync(scopeDir)\n for (const pkg of pkgs) {\n const candidateDir = path.join(scopeDir, pkg)\n const candidatePkgPath = path.join(candidateDir, 'package.json')\n if (fs.existsSync(candidatePkgPath)) {\n try {\n const candidatePkg = JSON.parse(fs.readFileSync(candidatePkgPath, 'utf-8'))\n const pluginName = candidatePkg.openacp?.pluginName as string | undefined\n if (pluginName === name) {\n pkgDir = candidateDir\n found = true\n break\n }\n } catch { /* skip */ }\n }\n }\n if (found) break\n }\n }\n\n const pkgJsonPath = path.join(pkgDir, 'package.json')\n const pkg = JSON.parse(await fs.promises.readFile(pkgJsonPath, 'utf-8'))\n modulePath = path.join(pkgDir, pkg.main || 'dist/index.js')\n }\n\n log.debug({ plugin: name, modulePath }, 'Loading community plugin')\n const mod = await import(modulePath)\n const plugin = mod.default\n\n if (!plugin || !plugin.name || !plugin.setup) {\n log.warn({ plugin: name }, 'Community plugin has invalid exports (missing name or setup), skipping')\n continue\n }\n\n communityPlugins.push(plugin)\n } catch (err) {\n log.warn({ err, plugin: name }, 'Failed to load community plugin, skipping')\n }\n }\n\n if (communityPlugins.length > 0) {\n log.debug({ plugins: communityPlugins.map(p => p.name) }, 'Booting community plugins')\n await core.lifecycleManager.boot(communityPlugins)\n }\n } catch (err) {\n log.warn({ err }, 'Community plugin loading failed')\n }\n\n // Load dev plugin if running in dev mode\n if (opts?.devPluginPath) {\n const { DevPluginLoader } = await import('./core/plugin/dev-loader.js')\n const devLoader = new DevPluginLoader(opts.devPluginPath)\n\n try {\n const devPlugin = await devLoader.load()\n await core.lifecycleManager.boot([devPlugin])\n log.info({ plugin: devPlugin.name, version: devPlugin.version }, 'Dev plugin loaded')\n\n // Watch dist/ directory for changes and hot-reload\n if (!opts.noWatch) {\n const distPath = devLoader.getDistPath()\n let reloadTimer: ReturnType<typeof setTimeout> | null = null\n\n fs.watch(distPath, { recursive: true }, (_eventType, filename) => {\n if (!filename?.endsWith('.js')) return\n\n // Debounce: wait 500ms after last change\n if (reloadTimer) clearTimeout(reloadTimer)\n reloadTimer = setTimeout(async () => {\n try {\n log.info({ filename }, 'Dev plugin changed, reloading...')\n await core.lifecycleManager.unloadPlugin(devPlugin.name)\n const reloaded = await devLoader.load()\n await core.lifecycleManager.boot([reloaded])\n log.info({ plugin: reloaded.name, version: reloaded.version }, 'Dev plugin reloaded')\n } catch (err) {\n log.error({ err }, 'Dev plugin reload failed')\n }\n }, 500)\n })\n\n log.info({ distPath }, 'Watching dev plugin for changes')\n }\n } catch (err) {\n log.error({ err, pluginPath: opts.devPluginPath }, 'Failed to load dev plugin')\n }\n }\n\n // Wire adapters from service registry into core (discovered dynamically)\n for (const { name } of serviceRegistry.list()) {\n if (!name.startsWith('adapter:')) continue\n const adapterName = name.slice('adapter:'.length)\n const adapter = serviceRegistry.get<IChannelAdapter>(name)\n if (adapter) {\n core.registerAdapter(adapterName, adapter)\n log.info({ adapter: adapterName }, 'Adapter registered')\n }\n }\n\n // Wire tunnel service from service registry into core\n const tunnelSvc = serviceRegistry.get<TunnelService>('tunnel')\n if (tunnelSvc) {\n core.tunnelService = tunnelSvc\n }\n\n // Emit system:commands-ready with all registered commands\n core.eventBus.emit('system:commands-ready', { commands: commandRegistry.getAll() })\n\n core.eventBus.emit('system:ready')\n } catch (err) {\n if (spinner) {\n spinner.fail('Plugin boot failed')\n spinner = undefined\n }\n unmuteLogger()\n log.error({ err }, 'Plugin boot failed')\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. Setup shutdown handler\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 // 1. Send shutdown notification while plugins are still running\n try {\n const nm = serviceRegistry.get<import('./plugins/notifications/notification.js').NotificationManager>('notifications')\n if (nm) {\n await nm.notifyAll({\n sessionId: 'system',\n type: 'error',\n summary: 'OpenACP is shutting down',\n })\n }\n } catch {\n /* best effort */\n }\n\n // 2. Persist session state (don't kill agent subprocesses — they exit with parent)\n await core.sessionManager.shutdownAll()\n\n // 3. Lifecycle teardown stops all plugins (adapters, api-server, tunnel, etc.)\n await core.lifecycleManager.shutdown()\n // Note: do NOT call core.stop() here — it would double-stop adapters and\n // try to use the notification plugin after it has already been torn down.\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('./cli/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/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 // 6. Log ready\n if (isForegroundTTY) {\n if (spinner) spinner.stop()\n const ok = (msg: string) => console.log(`\\x1b[32m✓\\x1b[0m ${msg}`)\n ok('Config loaded')\n ok('Dependencies checked')\n const tunnelSvc = core.lifecycleManager.serviceRegistry.get<TunnelService>('tunnel')\n if (tunnelSvc) {\n const tunnelUrl = tunnelSvc.getPublicUrl()\n const tunnelErr = tunnelSvc.getStartError()\n if (tunnelErr) {\n console.log(`\\x1b[33m⚠\\x1b[0m Tunnel failed (${tunnelErr}) — viewer links unavailable`)\n } else {\n ok(`Tunnel ready → ${tunnelUrl}`)\n }\n }\n for (const [name] of core.adapters) ok(`${name.charAt(0).toUpperCase() + name.slice(1)} connected`)\n const apiPort = config.api?.port ?? 21420\n if (core.lifecycleManager.serviceRegistry.get('api-server')) ok(`API server on port ${apiPort}`)\n console.log(`\\nOpenACP is running. Press Ctrl+C to stop.\\n`)\n unmuteLogger()\n }\n log.debug({ agents: Object.keys(config.agents) }, 'OpenACP started')\n}\n\n/**\n * Auto-register all built-in plugins when the registry is empty (first boot with new plugin system,\n * or upgrade from legacy config). Also runs legacy config migration for each plugin.\n */\nasync function autoRegisterBuiltinPlugins(\n settingsManager: SettingsManager,\n pluginRegistry: PluginRegistry,\n configManager: ConfigManager,\n): Promise<void> {\n const allPlugins = [\n { name: '@openacp/security', version: '1.0.0', description: 'User access control and session limits' },\n { name: '@openacp/file-service', version: '1.0.0', description: 'File storage and management' },\n { name: '@openacp/context', version: '1.0.0', description: 'Conversation context management' },\n { name: '@openacp/speech', version: '1.0.0', description: 'Text-to-speech and speech-to-text' },\n { name: '@openacp/notifications', version: '1.0.0', description: 'Cross-session notification routing' },\n { name: '@openacp/tunnel', version: '1.0.0', description: 'Expose local services via tunnel' },\n { name: '@openacp/api-server', version: '1.0.0', description: 'REST API + SSE streaming server' },\n { name: '@openacp/telegram', version: '1.0.0', description: 'Telegram adapter with forum topics' },\n ]\n\n // Try to read legacy config for migration\n let legacyConfig: Record<string, unknown> | undefined\n try {\n const cfg = configManager.get()\n if (cfg && typeof cfg === 'object') {\n legacyConfig = cfg as unknown as Record<string, unknown>\n }\n } catch {\n // No config loaded yet — skip migration\n }\n\n // Run legacy migration for each plugin silently\n if (legacyConfig) {\n const pluginModules = await Promise.allSettled([\n import('./plugins/security/index.js'),\n import('./plugins/file-service/index.js'),\n import('./plugins/context/index.js'),\n import('./plugins/speech/index.js'),\n import('./plugins/notifications/index.js'),\n import('./plugins/tunnel/index.js'),\n import('./plugins/api-server/index.js'),\n import('./plugins/telegram/index.js'),\n ])\n\n for (const result of pluginModules) {\n if (result.status !== 'fulfilled') continue\n const plugin = result.value.default\n if (plugin?.install) {\n try {\n // Check if settings already exist\n const existing = await settingsManager.loadSettings(plugin.name)\n if (Object.keys(existing).length > 0) continue\n\n // Create a silent install context for migration only\n const { createInstallContext } = await import('./core/plugin/install-context.js')\n const ctx = createInstallContext({\n pluginName: plugin.name,\n settingsManager,\n basePath: PLUGINS_DATA_DIR,\n legacyConfig,\n })\n // Override terminal to be silent\n ctx.terminal = createSilentTerminal()\n await plugin.install(ctx)\n } catch {\n // Silently skip — migration is best-effort\n }\n }\n }\n }\n\n for (const p of allPlugins) {\n pluginRegistry.register(p.name, {\n version: p.version,\n source: 'builtin',\n enabled: true,\n settingsPath: settingsManager.getSettingsPath(p.name),\n description: p.description,\n })\n }\n await pluginRegistry.save()\n log.info('Built-in plugins registered in plugin registry')\n}\n\n/**\n * Create a no-op terminal for silent migration (no user interaction).\n */\nfunction createSilentTerminal(): import('./core/plugin/types.js').TerminalIO {\n const noop = () => {}\n // Throw on interactive prompts — silent migration should only use log/spinner/note.\n // If a plugin enters interactive mode (no legacy config to migrate), this aborts it\n // so the try-catch in autoRegisterBuiltinPlugins skips it gracefully.\n const abort = () => { throw new Error('Silent migration: no interactive input available') }\n return {\n text: async () => abort() as never,\n select: async () => abort() as never,\n confirm: async () => abort() as never,\n password: async () => abort() as never,\n multiselect: async () => abort() as never,\n log: { info: noop, success: noop, warning: noop, error: noop, step: noop },\n spinner: () => ({ start: noop, stop: noop, fail: noop }),\n note: noop,\n cancel: noop,\n }\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","import type { CommandRegistry } from '../command-registry.js'\nimport type { CommandResponse } from '../plugin/types.js'\n\n/**\n * System session commands — these are placeholder registrations for discovery\n * (autocomplete, help text, etc.). The actual logic lives in adapter-specific\n * handlers. Handlers return 'silent' so the generic dispatch passes through\n * to the adapter's dedicated handler via next().\n */\nexport function registerSessionCommands(registry: CommandRegistry, _core: unknown): void {\n registry.register({\n name: 'new',\n description: 'Start a new session',\n usage: '[agent-name]',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'cancel',\n description: 'Cancel the current agent turn',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'status',\n description: 'Show current session status',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'sessions',\n description: 'List all active sessions',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'clear',\n description: 'Clear session history',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'newchat',\n description: 'New chat, same agent & workspace',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'resume',\n description: 'Resume a previous session',\n usage: '<session-number>',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'handoff',\n description: 'Hand off session to another agent',\n usage: '<agent-name>',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n}\n","import type { CommandRegistry } from '../command-registry.js'\nimport type { CommandResponse } from '../plugin/types.js'\n\nexport function registerAgentCommands(registry: CommandRegistry, _core: unknown): void {\n registry.register({\n name: 'agents',\n description: 'List available agents',\n category: 'system',\n handler: async () => {\n return { type: 'text', text: 'No agents configured.' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'install',\n description: 'Install a plugin',\n usage: '<plugin-name>',\n category: 'system',\n handler: async (args) => {\n const plugin = args.raw.trim()\n if (!plugin) {\n return { type: 'error', message: 'Usage: /install <plugin-name>' } satisfies CommandResponse\n }\n return { type: 'text', text: `Installing plugin: ${plugin}...` } satisfies CommandResponse\n },\n })\n}\n","import type { CommandRegistry } from '../command-registry.js'\nimport type { CommandResponse } from '../plugin/types.js'\n\nexport function registerAdminCommands(registry: CommandRegistry, _core: unknown): void {\n registry.register({\n name: 'restart',\n description: 'Restart the server',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'update',\n description: 'Check for and apply updates',\n category: 'system',\n handler: async () => {\n return { type: 'text', text: 'Checking for updates...' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'doctor',\n description: 'Run system diagnostics',\n category: 'system',\n handler: async () => {\n return { type: 'text', text: 'Running diagnostics...' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'integrate',\n description: 'Set up a new channel integration',\n usage: '<channel>',\n category: 'system',\n handler: async (args) => {\n const channel = args.raw.trim()\n if (!channel) {\n return {\n type: 'menu',\n title: 'Available Integrations',\n options: [\n { label: 'Telegram', command: '/integrate telegram' },\n { label: 'Discord', command: '/integrate discord' },\n ],\n } satisfies CommandResponse\n }\n return { type: 'text', text: `Setting up ${channel} integration...` } satisfies CommandResponse\n },\n })\n}\n","import type { CommandRegistry } from '../command-registry.js'\nimport type { CommandResponse } from '../plugin/types.js'\n\nexport function registerHelpCommand(registry: CommandRegistry, _core: unknown): void {\n registry.register({\n name: 'help',\n description: 'Show available commands',\n usage: '[command]',\n category: 'system',\n handler: async (args) => {\n const query = args.raw.trim()\n\n if (query) {\n const cmd = registry.get(query)\n if (!cmd) {\n return { type: 'error', message: `Unknown command: /${query}` } satisfies CommandResponse\n }\n let text = `/${cmd.name}`\n if (cmd.usage) text += ` ${cmd.usage}`\n text += `\\n${cmd.description}`\n return { type: 'text', text } satisfies CommandResponse\n }\n\n // Auto-generate help from registry at invocation time\n const systemCmds = registry.getByCategory('system')\n const pluginCmds = registry.getByCategory('plugin')\n\n const lines: string[] = []\n\n if (systemCmds.length > 0) {\n lines.push('System Commands:')\n for (const cmd of systemCmds) {\n const usage = cmd.usage ? ` ${cmd.usage}` : ''\n lines.push(` /${cmd.name}${usage} — ${cmd.description}`)\n }\n }\n\n if (pluginCmds.length > 0) {\n if (lines.length > 0) lines.push('')\n lines.push('Plugin Commands:')\n for (const cmd of pluginCmds) {\n const usage = cmd.usage ? ` ${cmd.usage}` : ''\n lines.push(` /${cmd.name}${usage} — ${cmd.description}`)\n }\n }\n\n if (lines.length === 0) {\n return { type: 'text', text: 'No commands registered.' } satisfies CommandResponse\n }\n\n return { type: 'text', text: lines.join('\\n') } satisfies CommandResponse\n },\n })\n}\n","import type { CommandRegistry } from '../command-registry.js'\nimport type { CommandResponse } from '../plugin/types.js'\n\nexport function registerMenuCommand(registry: CommandRegistry, _core: unknown): void {\n registry.register({\n name: 'menu',\n description: 'Show the main menu',\n category: 'system',\n handler: async () => {\n return {\n type: 'menu',\n title: 'Main Menu',\n options: [\n { label: 'New Session', command: '/new' },\n { label: 'Active Sessions', command: '/sessions' },\n { label: 'Available Agents', command: '/agents' },\n { label: 'Usage', command: '/usage' },\n { label: 'Help', command: '/help' },\n ],\n } satisfies CommandResponse\n },\n })\n}\n","import type { CommandRegistry } from '../command-registry.js'\nimport { registerSessionCommands } from './session.js'\nimport { registerAgentCommands } from './agents.js'\nimport { registerAdminCommands } from './admin.js'\nimport { registerHelpCommand } from './help.js'\nimport { registerMenuCommand } from './menu.js'\n\nexport function registerSystemCommands(registry: CommandRegistry, core: unknown): void {\n registerSessionCommands(registry, core)\n registerAgentCommands(registry, core)\n registerAdminCommands(registry, core)\n registerHelpCommand(registry, core)\n registerMenuCommand(registry, core)\n}\n"],"mappings":"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","names":["pkg","fs"]}
|
|
@@ -5,7 +5,6 @@ import {
|
|
|
5
5
|
handleHelp,
|
|
6
6
|
handleMenu
|
|
7
7
|
} from "./chunk-AFKX424Q.js";
|
|
8
|
-
import "./chunk-VUNV25KB.js";
|
|
9
8
|
export {
|
|
10
9
|
buildMenuKeyboard,
|
|
11
10
|
buildSkillMessages,
|
|
@@ -13,4 +12,4 @@ export {
|
|
|
13
12
|
handleHelp,
|
|
14
13
|
handleMenu
|
|
15
14
|
};
|
|
16
|
-
//# sourceMappingURL=menu-
|
|
15
|
+
//# sourceMappingURL=menu-ALFN37IR.js.map
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getCurrentVersion
|
|
3
3
|
} from "./chunk-S64CB6J3.js";
|
|
4
|
-
import "./chunk-VUNV25KB.js";
|
|
5
4
|
|
|
6
5
|
// src/cli/commands/plugin-create.ts
|
|
7
6
|
import * as p from "@clack/prompts";
|
|
@@ -964,4 +963,4 @@ async function cmdPluginCreate() {
|
|
|
964
963
|
export {
|
|
965
964
|
cmdPluginCreate
|
|
966
965
|
};
|
|
967
|
-
//# sourceMappingURL=plugin-create-
|
|
966
|
+
//# sourceMappingURL=plugin-create-EHL76ZZG.js.map
|