@openacp/cli 0.6.10 → 2026.326.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/dist/{action-detect-P7ZE4NEM.js → action-detect-QPA775HB.js} +2 -2
- package/dist/adapter-6ANPBSVU.js +16 -0
- package/dist/{discord-OMC52Y54.js → adapter-77ZCVABT.js} +520 -365
- package/dist/adapter-77ZCVABT.js.map +1 -0
- package/dist/{adapter-ZOANORGM.js → adapter-PQGHVG4K.js} +300 -93
- package/dist/adapter-PQGHVG4K.js.map +1 -0
- package/dist/{admin-6SYB6XCZ.js → admin-GBPZFFAU.js} +3 -3
- package/dist/agent-catalog-YHBFERYO.js +11 -0
- package/dist/{agent-dependencies-4OWBMZWZ.js → agent-dependencies-WS7Z2DFW.js} +2 -2
- package/dist/agent-registry-5LZT7CUB.js +9 -0
- package/dist/agent-store-VSHNY5GT.js +9 -0
- package/dist/{agents-QO7DKARJ.js → agents-BWU4MRRD.js} +3 -3
- package/dist/{api-client-CFQT5U7D.js → api-client-AQPNKXI2.js} +2 -2
- package/dist/api-server-3PYLRBCN.js +8 -0
- package/dist/api-server-CHVSUDBX.js +11 -0
- package/dist/{autostart-X33OGMX6.js → autostart-6JS565RY.js} +3 -3
- package/dist/chunk-2CX4IEEC.js +124 -0
- package/dist/chunk-2CX4IEEC.js.map +1 -0
- package/dist/{chunk-O7CPGUAI.js → chunk-4KGLKKQK.js} +4 -4
- package/dist/chunk-4KGLKKQK.js.map +1 -0
- package/dist/{chunk-W3EYKZNQ.js → chunk-4WXALZA3.js} +2 -2
- package/dist/chunk-4WXALZA3.js.map +1 -0
- package/dist/chunk-5OCGO27U.js +125 -0
- package/dist/chunk-5OCGO27U.js.map +1 -0
- package/dist/{chunk-OWP7RZ62.js → chunk-5ZOFBTOR.js} +118 -262
- package/dist/chunk-5ZOFBTOR.js.map +1 -0
- package/dist/chunk-6RXVEXF3.js +23 -0
- package/dist/chunk-6RXVEXF3.js.map +1 -0
- package/dist/{chunk-34M4OS5P.js → chunk-A6Y4GZM3.js} +3 -3
- package/dist/chunk-A6Y4GZM3.js.map +1 -0
- package/dist/chunk-AD3X6DGK.js +166 -0
- package/dist/chunk-AD3X6DGK.js.map +1 -0
- package/dist/{chunk-7QJS2XBD.js → chunk-AFKX424Q.js} +2 -2
- package/dist/chunk-AFKX424Q.js.map +1 -0
- package/dist/chunk-APS6UEFU.js +259 -0
- package/dist/chunk-APS6UEFU.js.map +1 -0
- package/dist/chunk-BLQUXO7S.js +113 -0
- package/dist/chunk-BLQUXO7S.js.map +1 -0
- package/dist/{chunk-WTZDAYZX.js → chunk-BQ6FR32N.js} +3 -3
- package/dist/chunk-BQ6FR32N.js.map +1 -0
- package/dist/chunk-FNRSWA2K.js +1 -0
- package/dist/chunk-FQEBWOZR.js +3557 -0
- package/dist/chunk-FQEBWOZR.js.map +1 -0
- package/dist/{chunk-4CTX774K.js → chunk-GJOY37U7.js} +4 -4
- package/dist/chunk-GJOY37U7.js.map +1 -0
- package/dist/{chunk-I7WC6E5S.js → chunk-HVBNCPAY.js} +2 -2
- package/dist/chunk-HVBNCPAY.js.map +1 -0
- package/dist/{chunk-2HMQOC7N.js → chunk-I3CGU5W7.js} +4 -4
- package/dist/chunk-I3CGU5W7.js.map +1 -0
- package/dist/{chunk-NVPG6JCL.js → chunk-L7YNNBI5.js} +3 -3
- package/dist/chunk-L7YNNBI5.js.map +1 -0
- package/dist/chunk-LGFWH3AE.js +26 -0
- package/dist/chunk-LGFWH3AE.js.map +1 -0
- package/dist/chunk-MLF4W5R6.js +101 -0
- package/dist/chunk-MLF4W5R6.js.map +1 -0
- package/dist/{chunk-KIRH7TUJ.js → chunk-MTSDOSXS.js} +3 -3
- package/dist/chunk-MTSDOSXS.js.map +1 -0
- package/dist/{chunk-J4SJTKIK.js → chunk-NAM4ERUW.js} +3 -3
- package/dist/chunk-NAM4ERUW.js.map +1 -0
- package/dist/{chunk-MKHUZLII.js → chunk-NBFIBGAT.js} +39 -25
- package/dist/chunk-NBFIBGAT.js.map +1 -0
- package/dist/{chunk-BNLGTZ34.js → chunk-O5RG4YZY.js} +3 -3
- package/dist/chunk-O5RG4YZY.js.map +1 -0
- package/dist/{chunk-JHYXKVV2.js → chunk-ODUM3D6X.js} +2 -2
- package/dist/chunk-ODUM3D6X.js.map +1 -0
- package/dist/chunk-OYSAN7UX.js +15 -0
- package/dist/chunk-OYSAN7UX.js.map +1 -0
- package/dist/chunk-P4SNGQNI.js +158 -0
- package/dist/chunk-P4SNGQNI.js.map +1 -0
- package/dist/{chunk-2CJ46J3C.js → chunk-PPSMUECX.js} +3 -3
- package/dist/chunk-PPSMUECX.js.map +1 -0
- package/dist/chunk-Q6ZXJTZB.js +56 -0
- package/dist/chunk-Q6ZXJTZB.js.map +1 -0
- package/dist/{chunk-XANPHG7W.js → chunk-QSDZDHNS.js} +7 -7
- package/dist/chunk-QSDZDHNS.js.map +1 -0
- package/dist/{chunk-33RP6K2O.js → chunk-QVMEF6FB.js} +6 -6
- package/dist/chunk-QVMEF6FB.js.map +1 -0
- package/dist/chunk-QWP76EBW.js +536 -0
- package/dist/chunk-QWP76EBW.js.map +1 -0
- package/dist/{chunk-V5GZQEIY.js → chunk-RBYBSSGO.js} +4 -4
- package/dist/chunk-RBYBSSGO.js.map +1 -0
- package/dist/{chunk-CS3KCJ5D.js → chunk-RKB2ZK6S.js} +555 -383
- package/dist/chunk-RKB2ZK6S.js.map +1 -0
- package/dist/{chunk-UKT3G5IA.js → chunk-SHTGQGAU.js} +7 -7
- package/dist/chunk-SHTGQGAU.js.map +1 -0
- package/dist/chunk-SNPYTMPR.js +51 -0
- package/dist/chunk-SNPYTMPR.js.map +1 -0
- package/dist/chunk-UB2QB6DE.js +124 -0
- package/dist/chunk-UB2QB6DE.js.map +1 -0
- package/dist/chunk-UNJUWWQO.js +1108 -0
- package/dist/chunk-UNJUWWQO.js.map +1 -0
- package/dist/chunk-V2M243KZ.js +445 -0
- package/dist/chunk-V2M243KZ.js.map +1 -0
- package/dist/chunk-V5JT5TPD.js +97 -0
- package/dist/chunk-V5JT5TPD.js.map +1 -0
- package/dist/chunk-W26AUH5B.js +61 -0
- package/dist/chunk-W26AUH5B.js.map +1 -0
- package/dist/chunk-WAAD23KY.js +222 -0
- package/dist/chunk-WAAD23KY.js.map +1 -0
- package/dist/chunk-WIIZNPCR.js +150 -0
- package/dist/chunk-WIIZNPCR.js.map +1 -0
- package/dist/chunk-WQCJTU2C.js +84 -0
- package/dist/chunk-WQCJTU2C.js.map +1 -0
- package/dist/chunk-WVLDNYOJ.js +150 -0
- package/dist/chunk-WVLDNYOJ.js.map +1 -0
- package/dist/chunk-WXVT3AOY.js +22 -0
- package/dist/chunk-WXVT3AOY.js.map +1 -0
- package/dist/{chunk-GAK6PIBW.js → chunk-XMMAGAT4.js} +2 -2
- package/dist/chunk-XMMAGAT4.js.map +1 -0
- package/dist/chunk-Y64XWMJ4.js +212 -0
- package/dist/chunk-Y64XWMJ4.js.map +1 -0
- package/dist/chunk-YEULD3SG.js +62 -0
- package/dist/chunk-YEULD3SG.js.map +1 -0
- package/dist/chunk-ZHGPZBS4.js +49 -0
- package/dist/chunk-ZHGPZBS4.js.map +1 -0
- package/dist/{chunk-JKBFUAJK.js → chunk-ZSLHHQPQ.js} +2 -2
- package/dist/chunk-ZSLHHQPQ.js.map +1 -0
- package/dist/cli.js +496 -150
- package/dist/cli.js.map +1 -1
- package/dist/{config-6S355X75.js → config-I4FMCJGZ.js} +3 -3
- package/dist/config-editor-HNEKXRLQ.js +11 -0
- package/dist/{config-registry-AHYI4MYL.js → config-registry-CUMNXFGK.js} +2 -2
- package/dist/context-XM6E22LM.js +10 -0
- package/dist/core-plugins-VEUNFTMB.js +27 -0
- package/dist/{daemon-4CS6HMB5.js → daemon-PXO5QPCR.js} +4 -4
- package/dist/dev-loader-RDC5E2CW.js +50 -0
- package/dist/dev-loader-RDC5E2CW.js.map +1 -0
- package/dist/discord-NOJQ5PZO.js +8 -0
- package/dist/doctor-H72BZOPA.js +10 -0
- package/dist/{doctor-OLYBO3V3.js → doctor-RF6BHMCC.js} +5 -5
- package/dist/file-service-EUODJAIT.js +9 -0
- package/dist/file-service-EUODJAIT.js.map +1 -0
- package/dist/index.d.ts +1293 -188
- package/dist/index.js +387 -48
- package/dist/index.js.map +1 -1
- package/dist/{install-cloudflared-Z7VCGOVG.js → install-cloudflared-AN24L4DP.js} +5 -5
- package/dist/install-cloudflared-AN24L4DP.js.map +1 -0
- package/dist/install-context-XPWTFT3J.js +78 -0
- package/dist/install-context-XPWTFT3J.js.map +1 -0
- package/dist/{install-jq-HUYSQWKR.js → install-jq-CRVDJGF3.js} +5 -5
- package/dist/install-jq-CRVDJGF3.js.map +1 -0
- package/dist/{integrate-PNEHRY2I.js → integrate-5C6KSU6D.js} +2 -2
- package/dist/integrate-5C6KSU6D.js.map +1 -0
- package/dist/{log-NXABYJTT.js → log-LZ7FTRKG.js} +2 -2
- package/dist/log-LZ7FTRKG.js.map +1 -0
- package/dist/main-T5WVCCFN.js +715 -0
- package/dist/main-T5WVCCFN.js.map +1 -0
- package/dist/{menu-YY5MKHEK.js → menu-YDQ2LWAR.js} +2 -2
- package/dist/menu-YDQ2LWAR.js.map +1 -0
- package/dist/{new-session-FEO4J4VU.js → new-session-AVQCNXRG.js} +5 -5
- package/dist/new-session-AVQCNXRG.js.map +1 -0
- package/dist/notifications-D5BRDNSU.js +9 -0
- package/dist/notifications-D5BRDNSU.js.map +1 -0
- package/dist/plugin-create-JVCVUG6V.js +331 -0
- package/dist/plugin-create-JVCVUG6V.js.map +1 -0
- package/dist/plugin-registry-WB3DR67H.js +8 -0
- package/dist/plugin-registry-WB3DR67H.js.map +1 -0
- package/dist/{post-upgrade-CJG5I7M2.js → post-upgrade-XLHZ6ZB7.js} +8 -8
- package/dist/post-upgrade-XLHZ6ZB7.js.map +1 -0
- package/dist/read-text-file-IRZM3QLM.js +8 -0
- package/dist/read-text-file-IRZM3QLM.js.map +1 -0
- package/dist/security-YNRBW6S7.js +9 -0
- package/dist/security-YNRBW6S7.js.map +1 -0
- package/dist/{session-IUSI7P5S.js → session-KZFA6Z26.js} +4 -4
- package/dist/session-KZFA6Z26.js.map +1 -0
- package/dist/{settings-RQPAM4KC.js → settings-MFYM7CZO.js} +4 -4
- package/dist/settings-MFYM7CZO.js.map +1 -0
- package/dist/settings-manager-MD2U4ZV2.js +8 -0
- package/dist/settings-manager-MD2U4ZV2.js.map +1 -0
- package/dist/{chunk-LCRLAV4G.js → setup-BAI2F24H.js} +154 -492
- package/dist/setup-BAI2F24H.js.map +1 -0
- package/dist/slack-KH7E3VBS.js +8 -0
- package/dist/slack-KH7E3VBS.js.map +1 -0
- package/dist/speech-2GHQNRIO.js +9 -0
- package/dist/speech-2GHQNRIO.js.map +1 -0
- package/dist/telegram-ZDC3JQF2.js +8 -0
- package/dist/telegram-ZDC3JQF2.js.map +1 -0
- package/dist/tunnel-M47I7H4B.js +8 -0
- package/dist/tunnel-M47I7H4B.js.map +1 -0
- package/dist/{tunnel-service-CJLUH6SZ.js → tunnel-service-WADYHREX.js} +17 -17
- package/dist/tunnel-service-WADYHREX.js.map +1 -0
- package/dist/usage-WYNK6ZC5.js +10 -0
- package/dist/usage-WYNK6ZC5.js.map +1 -0
- package/dist/validators-6CLEZUBD.js +8 -0
- package/dist/validators-6CLEZUBD.js.map +1 -0
- package/dist/validators-WSTBNKRW.js +12 -0
- package/dist/validators-WSTBNKRW.js.map +1 -0
- package/package.json +1 -1
- package/dist/adapter-ZOANORGM.js.map +0 -1
- package/dist/agent-catalog-FC3HGDEQ.js +0 -11
- package/dist/agent-registry-WT4NXPYG.js +0 -9
- package/dist/agent-store-VZLFPTZU.js +0 -9
- package/dist/chunk-2CJ46J3C.js.map +0 -1
- package/dist/chunk-2HMQOC7N.js.map +0 -1
- package/dist/chunk-33RP6K2O.js.map +0 -1
- package/dist/chunk-34M4OS5P.js.map +0 -1
- package/dist/chunk-4CTX774K.js.map +0 -1
- package/dist/chunk-7QJS2XBD.js.map +0 -1
- package/dist/chunk-BNLGTZ34.js.map +0 -1
- package/dist/chunk-CS3KCJ5D.js.map +0 -1
- package/dist/chunk-GAK6PIBW.js.map +0 -1
- package/dist/chunk-I7WC6E5S.js.map +0 -1
- package/dist/chunk-J4SJTKIK.js.map +0 -1
- package/dist/chunk-JHYXKVV2.js.map +0 -1
- package/dist/chunk-JKBFUAJK.js.map +0 -1
- package/dist/chunk-KIRH7TUJ.js.map +0 -1
- package/dist/chunk-LBIKITQT.js +0 -22
- package/dist/chunk-LBIKITQT.js.map +0 -1
- package/dist/chunk-LCRLAV4G.js.map +0 -1
- package/dist/chunk-LGP2YGRL.js +0 -4880
- package/dist/chunk-LGP2YGRL.js.map +0 -1
- package/dist/chunk-MKHUZLII.js.map +0 -1
- package/dist/chunk-NAMYZIS5.js +0 -1
- package/dist/chunk-NVPG6JCL.js.map +0 -1
- package/dist/chunk-O7CPGUAI.js.map +0 -1
- package/dist/chunk-OWP7RZ62.js.map +0 -1
- package/dist/chunk-UKT3G5IA.js.map +0 -1
- package/dist/chunk-V5GZQEIY.js.map +0 -1
- package/dist/chunk-VOIJ6OY4.js +0 -63
- package/dist/chunk-VOIJ6OY4.js.map +0 -1
- package/dist/chunk-W3EYKZNQ.js.map +0 -1
- package/dist/chunk-WTZDAYZX.js.map +0 -1
- package/dist/chunk-XANPHG7W.js.map +0 -1
- package/dist/config-editor-QQTZMWGD.js +0 -13
- package/dist/discord-OMC52Y54.js.map +0 -1
- package/dist/doctor-HZZ5BSHB.js +0 -10
- package/dist/install-cloudflared-Z7VCGOVG.js.map +0 -1
- package/dist/install-jq-HUYSQWKR.js.map +0 -1
- package/dist/integrate-PNEHRY2I.js.map +0 -1
- package/dist/main-XOZCLFUK.js +0 -238
- package/dist/main-XOZCLFUK.js.map +0 -1
- package/dist/post-upgrade-CJG5I7M2.js.map +0 -1
- package/dist/setup-XHS4OMPM.js +0 -37
- package/dist/tunnel-service-CJLUH6SZ.js.map +0 -1
- /package/dist/{action-detect-P7ZE4NEM.js.map → action-detect-QPA775HB.js.map} +0 -0
- /package/dist/{admin-6SYB6XCZ.js.map → adapter-6ANPBSVU.js.map} +0 -0
- /package/dist/{agent-catalog-FC3HGDEQ.js.map → admin-GBPZFFAU.js.map} +0 -0
- /package/dist/{agent-dependencies-4OWBMZWZ.js.map → agent-catalog-YHBFERYO.js.map} +0 -0
- /package/dist/{agent-registry-WT4NXPYG.js.map → agent-dependencies-WS7Z2DFW.js.map} +0 -0
- /package/dist/{agent-store-VZLFPTZU.js.map → agent-registry-5LZT7CUB.js.map} +0 -0
- /package/dist/{agents-QO7DKARJ.js.map → agent-store-VSHNY5GT.js.map} +0 -0
- /package/dist/{api-client-CFQT5U7D.js.map → agents-BWU4MRRD.js.map} +0 -0
- /package/dist/{autostart-X33OGMX6.js.map → api-client-AQPNKXI2.js.map} +0 -0
- /package/dist/{chunk-NAMYZIS5.js.map → api-server-3PYLRBCN.js.map} +0 -0
- /package/dist/{config-6S355X75.js.map → api-server-CHVSUDBX.js.map} +0 -0
- /package/dist/{config-editor-QQTZMWGD.js.map → autostart-6JS565RY.js.map} +0 -0
- /package/dist/{config-registry-AHYI4MYL.js.map → chunk-FNRSWA2K.js.map} +0 -0
- /package/dist/{daemon-4CS6HMB5.js.map → config-I4FMCJGZ.js.map} +0 -0
- /package/dist/{doctor-HZZ5BSHB.js.map → config-editor-HNEKXRLQ.js.map} +0 -0
- /package/dist/{doctor-OLYBO3V3.js.map → config-registry-CUMNXFGK.js.map} +0 -0
- /package/dist/{log-NXABYJTT.js.map → context-XM6E22LM.js.map} +0 -0
- /package/dist/{menu-YY5MKHEK.js.map → core-plugins-VEUNFTMB.js.map} +0 -0
- /package/dist/{new-session-FEO4J4VU.js.map → daemon-PXO5QPCR.js.map} +0 -0
- /package/dist/{session-IUSI7P5S.js.map → discord-NOJQ5PZO.js.map} +0 -0
- /package/dist/{settings-RQPAM4KC.js.map → doctor-H72BZOPA.js.map} +0 -0
- /package/dist/{setup-XHS4OMPM.js.map → doctor-RF6BHMCC.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,72 +1,84 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-OWP7RZ62.js";
|
|
2
|
+
runConfigEditor
|
|
3
|
+
} from "./chunk-NBFIBGAT.js";
|
|
5
4
|
import {
|
|
6
5
|
AgentInstance,
|
|
7
6
|
AgentManager,
|
|
8
|
-
ApiServer,
|
|
9
|
-
ContextManager,
|
|
10
|
-
EntireProvider,
|
|
11
7
|
EventBus,
|
|
12
|
-
FileService,
|
|
13
|
-
GroqSTT,
|
|
14
8
|
MessageTransformer,
|
|
15
|
-
NotificationManager,
|
|
16
9
|
OpenACPCore,
|
|
17
10
|
PermissionGate,
|
|
18
11
|
PromptQueue,
|
|
19
|
-
SSEManager,
|
|
20
|
-
SecurityGuard,
|
|
21
12
|
Session,
|
|
22
13
|
SessionBridge,
|
|
23
14
|
SessionFactory,
|
|
24
15
|
SessionManager,
|
|
25
|
-
SpeechService,
|
|
26
|
-
StaticServer,
|
|
27
16
|
StderrCapture,
|
|
28
|
-
TopicManager,
|
|
29
17
|
TypedEmitter,
|
|
30
|
-
UsageBudget,
|
|
31
|
-
UsageStore,
|
|
32
18
|
nodeToWebReadable,
|
|
33
19
|
nodeToWebWritable
|
|
34
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-FQEBWOZR.js";
|
|
35
21
|
import {
|
|
36
|
-
|
|
37
|
-
} from "./chunk-
|
|
38
|
-
import
|
|
39
|
-
|
|
40
|
-
|
|
22
|
+
AgentCatalog
|
|
23
|
+
} from "./chunk-SHTGQGAU.js";
|
|
24
|
+
import {
|
|
25
|
+
AgentStore
|
|
26
|
+
} from "./chunk-A6Y4GZM3.js";
|
|
41
27
|
import {
|
|
42
28
|
getPidPath,
|
|
43
29
|
getStatus,
|
|
44
30
|
startDaemon,
|
|
45
31
|
stopDaemon
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import {
|
|
48
|
-
AgentCatalog
|
|
49
|
-
} from "./chunk-UKT3G5IA.js";
|
|
50
|
-
import {
|
|
51
|
-
AgentStore
|
|
52
|
-
} from "./chunk-34M4OS5P.js";
|
|
53
|
-
import {
|
|
54
|
-
runConfigEditor
|
|
55
|
-
} from "./chunk-MKHUZLII.js";
|
|
32
|
+
} from "./chunk-BQ6FR32N.js";
|
|
56
33
|
import {
|
|
57
34
|
installAutoStart,
|
|
58
35
|
isAutoStartInstalled,
|
|
59
36
|
isAutoStartSupported,
|
|
60
37
|
uninstallAutoStart
|
|
61
|
-
} from "./chunk-
|
|
62
|
-
import
|
|
63
|
-
|
|
38
|
+
} from "./chunk-PPSMUECX.js";
|
|
39
|
+
import {
|
|
40
|
+
TelegramAdapter
|
|
41
|
+
} from "./chunk-RKB2ZK6S.js";
|
|
42
|
+
import {
|
|
43
|
+
SendQueue,
|
|
44
|
+
ToolCallTracker
|
|
45
|
+
} from "./chunk-5ZOFBTOR.js";
|
|
46
|
+
import {
|
|
47
|
+
BaseRenderer,
|
|
48
|
+
MessagingAdapter
|
|
49
|
+
} from "./chunk-V2M243KZ.js";
|
|
50
|
+
import "./chunk-AFKX424Q.js";
|
|
51
|
+
import "./chunk-L7YNNBI5.js";
|
|
52
|
+
import {
|
|
53
|
+
ApiServer,
|
|
54
|
+
SSEManager,
|
|
55
|
+
StaticServer
|
|
56
|
+
} from "./chunk-UNJUWWQO.js";
|
|
57
|
+
import "./chunk-FNRSWA2K.js";
|
|
58
|
+
import "./chunk-ZSLHHQPQ.js";
|
|
59
|
+
import {
|
|
60
|
+
SecurityGuard
|
|
61
|
+
} from "./chunk-LGFWH3AE.js";
|
|
62
|
+
import "./chunk-OYSAN7UX.js";
|
|
64
63
|
import {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
FileService
|
|
65
|
+
} from "./chunk-BLQUXO7S.js";
|
|
66
|
+
import {
|
|
67
|
+
ContextManager,
|
|
68
|
+
EntireProvider
|
|
69
|
+
} from "./chunk-QWP76EBW.js";
|
|
70
|
+
import "./chunk-APS6UEFU.js";
|
|
71
|
+
import {
|
|
72
|
+
UsageBudget,
|
|
73
|
+
UsageStore
|
|
74
|
+
} from "./chunk-WAAD23KY.js";
|
|
75
|
+
import {
|
|
76
|
+
GroqSTT,
|
|
77
|
+
SpeechService
|
|
78
|
+
} from "./chunk-WIIZNPCR.js";
|
|
79
|
+
import {
|
|
80
|
+
NotificationManager
|
|
81
|
+
} from "./chunk-WXVT3AOY.js";
|
|
70
82
|
import {
|
|
71
83
|
CONFIG_REGISTRY,
|
|
72
84
|
getConfigValue,
|
|
@@ -74,12 +86,12 @@ import {
|
|
|
74
86
|
getSafeFields,
|
|
75
87
|
isHotReloadable,
|
|
76
88
|
resolveOptions
|
|
77
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-ODUM3D6X.js";
|
|
78
90
|
import {
|
|
79
91
|
ConfigManager,
|
|
80
92
|
PLUGINS_DIR,
|
|
81
93
|
expandHome
|
|
82
|
-
} from "./chunk-
|
|
94
|
+
} from "./chunk-QVMEF6FB.js";
|
|
83
95
|
import {
|
|
84
96
|
cleanupOldSessionLogs,
|
|
85
97
|
createChildLogger,
|
|
@@ -88,23 +100,351 @@ import {
|
|
|
88
100
|
log,
|
|
89
101
|
setLogLevel,
|
|
90
102
|
shutdownLogger
|
|
91
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-XMMAGAT4.js";
|
|
92
104
|
import "./chunk-VUNV25KB.js";
|
|
105
|
+
|
|
106
|
+
// src/core/channel.ts
|
|
107
|
+
var ChannelAdapter = class {
|
|
108
|
+
constructor(core, config) {
|
|
109
|
+
this.core = core;
|
|
110
|
+
this.config = config;
|
|
111
|
+
}
|
|
112
|
+
capabilities = {
|
|
113
|
+
streaming: false,
|
|
114
|
+
richFormatting: false,
|
|
115
|
+
threads: false,
|
|
116
|
+
reactions: false,
|
|
117
|
+
fileUpload: false,
|
|
118
|
+
voice: false
|
|
119
|
+
};
|
|
120
|
+
async deleteSessionThread(_sessionId) {
|
|
121
|
+
}
|
|
122
|
+
async sendSkillCommands(_sessionId, _commands) {
|
|
123
|
+
}
|
|
124
|
+
async cleanupSkillCommands(_sessionId) {
|
|
125
|
+
}
|
|
126
|
+
async archiveSessionTopic(_sessionId) {
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
// src/plugins/telegram/topic-manager.ts
|
|
131
|
+
var log2 = createChildLogger({ module: "topic-manager" });
|
|
132
|
+
var TopicManager = class {
|
|
133
|
+
constructor(sessionManager, adapter, systemTopicIds) {
|
|
134
|
+
this.sessionManager = sessionManager;
|
|
135
|
+
this.adapter = adapter;
|
|
136
|
+
this.systemTopicIds = systemTopicIds;
|
|
137
|
+
}
|
|
138
|
+
listTopics(filter) {
|
|
139
|
+
const records = this.sessionManager.listRecords(filter);
|
|
140
|
+
return records.filter((r) => !this.isSystemTopic(r)).filter((r) => !filter?.statuses?.length || filter.statuses.includes(r.status)).map((r) => ({
|
|
141
|
+
sessionId: r.sessionId,
|
|
142
|
+
topicId: r.platform?.topicId ?? null,
|
|
143
|
+
name: r.name ?? null,
|
|
144
|
+
status: r.status,
|
|
145
|
+
agentName: r.agentName,
|
|
146
|
+
lastActiveAt: r.lastActiveAt
|
|
147
|
+
}));
|
|
148
|
+
}
|
|
149
|
+
async deleteTopic(sessionId, options) {
|
|
150
|
+
const records = this.sessionManager.listRecords();
|
|
151
|
+
const record = records.find((r) => r.sessionId === sessionId);
|
|
152
|
+
if (!record) return { ok: false, error: "Session not found" };
|
|
153
|
+
if (this.isSystemTopic(record)) return { ok: false, error: "Cannot delete system topic" };
|
|
154
|
+
const isActive = record.status === "active" || record.status === "initializing";
|
|
155
|
+
if (isActive && !options?.confirmed) {
|
|
156
|
+
return {
|
|
157
|
+
ok: false,
|
|
158
|
+
needsConfirmation: true,
|
|
159
|
+
session: { id: record.sessionId, name: record.name ?? null, status: record.status }
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
if (isActive) {
|
|
163
|
+
await this.sessionManager.cancelSession(sessionId);
|
|
164
|
+
}
|
|
165
|
+
const topicId = record.platform?.topicId ?? null;
|
|
166
|
+
if (this.adapter && topicId) {
|
|
167
|
+
try {
|
|
168
|
+
await this.adapter.deleteSessionThread?.(sessionId);
|
|
169
|
+
} catch (err) {
|
|
170
|
+
log2.warn({ err, sessionId, topicId }, "Failed to delete platform thread, removing record anyway");
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
await this.sessionManager.removeRecord(sessionId);
|
|
174
|
+
return { ok: true, topicId };
|
|
175
|
+
}
|
|
176
|
+
async cleanup(statuses) {
|
|
177
|
+
const targetStatuses = statuses?.length ? statuses : ["finished", "error", "cancelled"];
|
|
178
|
+
const records = this.sessionManager.listRecords({ statuses: targetStatuses });
|
|
179
|
+
const targets = records.filter((r) => !this.isSystemTopic(r)).filter((r) => targetStatuses.includes(r.status));
|
|
180
|
+
const deleted = [];
|
|
181
|
+
const failed = [];
|
|
182
|
+
for (const record of targets) {
|
|
183
|
+
try {
|
|
184
|
+
const isActive = record.status === "active" || record.status === "initializing";
|
|
185
|
+
if (isActive) {
|
|
186
|
+
await this.sessionManager.cancelSession(record.sessionId);
|
|
187
|
+
}
|
|
188
|
+
const topicId = record.platform?.topicId;
|
|
189
|
+
if (this.adapter && topicId) {
|
|
190
|
+
try {
|
|
191
|
+
await this.adapter.deleteSessionThread?.(record.sessionId);
|
|
192
|
+
} catch (err) {
|
|
193
|
+
log2.warn({ err, sessionId: record.sessionId }, "Failed to delete platform thread during cleanup");
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
await this.sessionManager.removeRecord(record.sessionId);
|
|
197
|
+
deleted.push(record.sessionId);
|
|
198
|
+
} catch (err) {
|
|
199
|
+
failed.push({ sessionId: record.sessionId, error: err instanceof Error ? err.message : String(err) });
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return { deleted, failed };
|
|
203
|
+
}
|
|
204
|
+
isSystemTopic(record) {
|
|
205
|
+
const topicId = record.platform?.topicId;
|
|
206
|
+
if (!topicId) return false;
|
|
207
|
+
return topicId === this.systemTopicIds.notificationTopicId || topicId === this.systemTopicIds.assistantTopicId;
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
// src/core/adapter-primitives/stream-adapter.ts
|
|
212
|
+
var StreamAdapter = class {
|
|
213
|
+
capabilities;
|
|
214
|
+
constructor(config) {
|
|
215
|
+
this.capabilities = {
|
|
216
|
+
streaming: true,
|
|
217
|
+
richFormatting: false,
|
|
218
|
+
threads: false,
|
|
219
|
+
reactions: false,
|
|
220
|
+
fileUpload: false,
|
|
221
|
+
voice: false,
|
|
222
|
+
...config
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
async sendMessage(sessionId, content) {
|
|
226
|
+
await this.emit(sessionId, {
|
|
227
|
+
type: content.type,
|
|
228
|
+
sessionId,
|
|
229
|
+
payload: content,
|
|
230
|
+
timestamp: Date.now()
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
async sendPermissionRequest(sessionId, request) {
|
|
234
|
+
await this.emit(sessionId, {
|
|
235
|
+
type: "permission_request",
|
|
236
|
+
sessionId,
|
|
237
|
+
payload: request,
|
|
238
|
+
timestamp: Date.now()
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
async sendNotification(notification) {
|
|
242
|
+
await this.broadcast({
|
|
243
|
+
type: "notification",
|
|
244
|
+
payload: notification,
|
|
245
|
+
timestamp: Date.now()
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
async createSessionThread(_sessionId, _name) {
|
|
249
|
+
return "";
|
|
250
|
+
}
|
|
251
|
+
async renameSessionThread(sessionId, name) {
|
|
252
|
+
await this.emit(sessionId, {
|
|
253
|
+
type: "session_rename",
|
|
254
|
+
sessionId,
|
|
255
|
+
payload: { name },
|
|
256
|
+
timestamp: Date.now()
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
// src/core/adapter-primitives/primitives/draft-manager.ts
|
|
262
|
+
var Draft = class {
|
|
263
|
+
constructor(sessionId, config) {
|
|
264
|
+
this.sessionId = sessionId;
|
|
265
|
+
this.config = config;
|
|
266
|
+
}
|
|
267
|
+
buffer = "";
|
|
268
|
+
_messageId;
|
|
269
|
+
firstFlushPending = false;
|
|
270
|
+
flushTimer;
|
|
271
|
+
flushPromise = Promise.resolve();
|
|
272
|
+
get isEmpty() {
|
|
273
|
+
return !this.buffer;
|
|
274
|
+
}
|
|
275
|
+
get messageId() {
|
|
276
|
+
return this._messageId;
|
|
277
|
+
}
|
|
278
|
+
append(text) {
|
|
279
|
+
if (!text) return;
|
|
280
|
+
this.buffer += text;
|
|
281
|
+
this.scheduleFlush();
|
|
282
|
+
}
|
|
283
|
+
async finalize() {
|
|
284
|
+
if (this.flushTimer) {
|
|
285
|
+
clearTimeout(this.flushTimer);
|
|
286
|
+
this.flushTimer = void 0;
|
|
287
|
+
}
|
|
288
|
+
await this.flushPromise;
|
|
289
|
+
if (this.buffer) {
|
|
290
|
+
await this.flush();
|
|
291
|
+
}
|
|
292
|
+
return this._messageId;
|
|
293
|
+
}
|
|
294
|
+
destroy() {
|
|
295
|
+
if (this.flushTimer) {
|
|
296
|
+
clearTimeout(this.flushTimer);
|
|
297
|
+
this.flushTimer = void 0;
|
|
298
|
+
}
|
|
299
|
+
this.buffer = "";
|
|
300
|
+
}
|
|
301
|
+
scheduleFlush() {
|
|
302
|
+
if (this.flushTimer) return;
|
|
303
|
+
this.flushTimer = setTimeout(() => {
|
|
304
|
+
this.flushTimer = void 0;
|
|
305
|
+
this.flushPromise = this.flushPromise.then(() => this.flush()).catch(() => {
|
|
306
|
+
});
|
|
307
|
+
}, this.config.flushInterval);
|
|
308
|
+
}
|
|
309
|
+
async flush() {
|
|
310
|
+
if (!this.buffer || this.firstFlushPending) return;
|
|
311
|
+
const snapshot = this.buffer;
|
|
312
|
+
const isEdit = !!this._messageId;
|
|
313
|
+
if (!this._messageId) {
|
|
314
|
+
this.firstFlushPending = true;
|
|
315
|
+
}
|
|
316
|
+
try {
|
|
317
|
+
const result = await this.config.onFlush(this.sessionId, snapshot, isEdit);
|
|
318
|
+
if (!isEdit && result) {
|
|
319
|
+
this._messageId = result;
|
|
320
|
+
}
|
|
321
|
+
} catch (err) {
|
|
322
|
+
this.config.onError?.(this.sessionId, err instanceof Error ? err : new Error(String(err)));
|
|
323
|
+
} finally {
|
|
324
|
+
this.firstFlushPending = false;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
var DraftManager = class {
|
|
329
|
+
constructor(config) {
|
|
330
|
+
this.config = config;
|
|
331
|
+
}
|
|
332
|
+
drafts = /* @__PURE__ */ new Map();
|
|
333
|
+
getOrCreate(sessionId) {
|
|
334
|
+
let draft = this.drafts.get(sessionId);
|
|
335
|
+
if (!draft) {
|
|
336
|
+
draft = new Draft(sessionId, this.config);
|
|
337
|
+
this.drafts.set(sessionId, draft);
|
|
338
|
+
}
|
|
339
|
+
return draft;
|
|
340
|
+
}
|
|
341
|
+
async finalize(sessionId) {
|
|
342
|
+
const draft = this.drafts.get(sessionId);
|
|
343
|
+
if (!draft) return;
|
|
344
|
+
await draft.finalize();
|
|
345
|
+
}
|
|
346
|
+
async finalizeAll() {
|
|
347
|
+
await Promise.all([...this.drafts.values()].map((d) => d.finalize()));
|
|
348
|
+
}
|
|
349
|
+
destroy(sessionId) {
|
|
350
|
+
const draft = this.drafts.get(sessionId);
|
|
351
|
+
if (draft) {
|
|
352
|
+
draft.destroy();
|
|
353
|
+
this.drafts.delete(sessionId);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
destroyAll() {
|
|
357
|
+
for (const draft of this.drafts.values()) {
|
|
358
|
+
draft.destroy();
|
|
359
|
+
}
|
|
360
|
+
this.drafts.clear();
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
// src/core/adapter-primitives/primitives/activity-tracker.ts
|
|
365
|
+
var ActivityTracker = class {
|
|
366
|
+
constructor(config) {
|
|
367
|
+
this.config = config;
|
|
368
|
+
}
|
|
369
|
+
sessions = /* @__PURE__ */ new Map();
|
|
370
|
+
onThinkingStart(sessionId, callbacks) {
|
|
371
|
+
this.cleanup(sessionId);
|
|
372
|
+
const state = {
|
|
373
|
+
callbacks,
|
|
374
|
+
startTime: Date.now(),
|
|
375
|
+
dismissed: false
|
|
376
|
+
};
|
|
377
|
+
this.sessions.set(sessionId, state);
|
|
378
|
+
setTimeout(() => {
|
|
379
|
+
if (state.dismissed) return;
|
|
380
|
+
callbacks.sendThinkingIndicator().catch(() => {
|
|
381
|
+
});
|
|
382
|
+
this.startRefresh(sessionId, state);
|
|
383
|
+
}, 0);
|
|
384
|
+
}
|
|
385
|
+
onTextStart(sessionId) {
|
|
386
|
+
const state = this.sessions.get(sessionId);
|
|
387
|
+
if (!state || state.dismissed) return;
|
|
388
|
+
state.dismissed = true;
|
|
389
|
+
this.stopRefresh(state);
|
|
390
|
+
state.callbacks.removeThinkingIndicator().catch(() => {
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
onSessionEnd(sessionId) {
|
|
394
|
+
this.cleanup(sessionId);
|
|
395
|
+
}
|
|
396
|
+
destroy() {
|
|
397
|
+
for (const [id] of this.sessions) {
|
|
398
|
+
this.cleanup(id);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
cleanup(sessionId) {
|
|
402
|
+
const state = this.sessions.get(sessionId);
|
|
403
|
+
if (!state) return;
|
|
404
|
+
state.dismissed = true;
|
|
405
|
+
this.stopRefresh(state);
|
|
406
|
+
this.sessions.delete(sessionId);
|
|
407
|
+
}
|
|
408
|
+
startRefresh(sessionId, state) {
|
|
409
|
+
state.refreshTimer = setInterval(() => {
|
|
410
|
+
if (state.dismissed) {
|
|
411
|
+
this.stopRefresh(state);
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
if (Date.now() - state.startTime >= this.config.maxThinkingDuration) {
|
|
415
|
+
this.stopRefresh(state);
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
state.callbacks.updateThinkingIndicator().catch(() => {
|
|
419
|
+
});
|
|
420
|
+
}, this.config.thinkingRefreshInterval);
|
|
421
|
+
}
|
|
422
|
+
stopRefresh(state) {
|
|
423
|
+
if (state.refreshTimer) {
|
|
424
|
+
clearInterval(state.refreshTimer);
|
|
425
|
+
state.refreshTimer = void 0;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
};
|
|
93
429
|
export {
|
|
430
|
+
ActivityTracker,
|
|
94
431
|
AgentCatalog,
|
|
95
432
|
AgentInstance,
|
|
96
433
|
AgentManager,
|
|
97
434
|
AgentStore,
|
|
98
435
|
ApiServer,
|
|
436
|
+
BaseRenderer,
|
|
99
437
|
CONFIG_REGISTRY,
|
|
100
438
|
ChannelAdapter,
|
|
101
439
|
ConfigManager,
|
|
102
440
|
ContextManager,
|
|
441
|
+
DraftManager,
|
|
103
442
|
EntireProvider,
|
|
104
443
|
EventBus,
|
|
105
444
|
FileService,
|
|
106
445
|
GroqSTT,
|
|
107
446
|
MessageTransformer,
|
|
447
|
+
MessagingAdapter,
|
|
108
448
|
NotificationManager,
|
|
109
449
|
OpenACPCore,
|
|
110
450
|
PLUGINS_DIR,
|
|
@@ -112,6 +452,7 @@ export {
|
|
|
112
452
|
PromptQueue,
|
|
113
453
|
SSEManager,
|
|
114
454
|
SecurityGuard,
|
|
455
|
+
SendQueue,
|
|
115
456
|
Session,
|
|
116
457
|
SessionBridge,
|
|
117
458
|
SessionFactory,
|
|
@@ -119,7 +460,9 @@ export {
|
|
|
119
460
|
SpeechService,
|
|
120
461
|
StaticServer,
|
|
121
462
|
StderrCapture,
|
|
463
|
+
StreamAdapter,
|
|
122
464
|
TelegramAdapter,
|
|
465
|
+
ToolCallTracker,
|
|
123
466
|
TopicManager,
|
|
124
467
|
TypedEmitter,
|
|
125
468
|
UsageBudget,
|
|
@@ -135,12 +478,9 @@ export {
|
|
|
135
478
|
getStatus,
|
|
136
479
|
initLogger,
|
|
137
480
|
installAutoStart,
|
|
138
|
-
installPlugin,
|
|
139
481
|
isAutoStartInstalled,
|
|
140
482
|
isAutoStartSupported,
|
|
141
483
|
isHotReloadable,
|
|
142
|
-
listPlugins,
|
|
143
|
-
loadAdapterFactory,
|
|
144
484
|
log,
|
|
145
485
|
nodeToWebReadable,
|
|
146
486
|
nodeToWebWritable,
|
|
@@ -150,7 +490,6 @@ export {
|
|
|
150
490
|
shutdownLogger,
|
|
151
491
|
startDaemon,
|
|
152
492
|
stopDaemon,
|
|
153
|
-
uninstallAutoStart
|
|
154
|
-
uninstallPlugin
|
|
493
|
+
uninstallAutoStart
|
|
155
494
|
};
|
|
156
495
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/channel.ts","../../src/plugins/telegram/topic-manager.ts","../../src/core/adapter-primitives/stream-adapter.ts","../../src/core/adapter-primitives/primitives/draft-manager.ts","../../src/core/adapter-primitives/primitives/activity-tracker.ts"],"sourcesContent":["import type { OutgoingMessage, PermissionRequest, NotificationMessage, AgentCommand } from './types.js'\n\nexport interface ChannelConfig {\n enabled: boolean\n [key: string]: unknown\n}\n\nexport interface AdapterCapabilities {\n streaming: boolean\n richFormatting: boolean\n threads: boolean\n reactions: boolean\n fileUpload: boolean\n voice: boolean\n}\n\nexport interface IChannelAdapter {\n readonly name: string\n readonly capabilities: AdapterCapabilities\n\n start(): Promise<void>\n stop(): Promise<void>\n\n // Outgoing: core → channel\n sendMessage(sessionId: string, content: OutgoingMessage): Promise<void>\n sendPermissionRequest(sessionId: string, request: PermissionRequest): Promise<void>\n sendNotification(notification: NotificationMessage): Promise<void>\n\n // Session lifecycle on channel side\n createSessionThread(sessionId: string, name: string): Promise<string> // returns threadId\n renameSessionThread(sessionId: string, newName: string): Promise<void>\n deleteSessionThread?(sessionId: string): Promise<void>\n archiveSessionTopic?(sessionId: string): Promise<void>\n\n // Skill commands — optional\n sendSkillCommands?(sessionId: string, commands: AgentCommand[]): Promise<void>\n cleanupSkillCommands?(sessionId: string): Promise<void>\n}\n\n/**\n * Base class providing default no-op implementations for optional methods.\n * Adapters can extend this or implement IChannelAdapter directly.\n * @deprecated Use MessagingAdapter or StreamAdapter instead. Kept for backward compat during migration.\n */\nexport abstract class ChannelAdapter<TCore = unknown> implements IChannelAdapter {\n abstract readonly name: string\n readonly capabilities: AdapterCapabilities = {\n streaming: false, richFormatting: false, threads: false,\n reactions: false, fileUpload: false, voice: false,\n }\n\n constructor(public readonly core: TCore, protected config: ChannelConfig) {}\n\n abstract start(): Promise<void>\n abstract stop(): Promise<void>\n\n abstract sendMessage(sessionId: string, content: OutgoingMessage): Promise<void>\n abstract sendPermissionRequest(sessionId: string, request: PermissionRequest): Promise<void>\n abstract sendNotification(notification: NotificationMessage): Promise<void>\n\n abstract createSessionThread(sessionId: string, name: string): Promise<string>\n abstract renameSessionThread(sessionId: string, newName: string): Promise<void>\n async deleteSessionThread(_sessionId: string): Promise<void> {}\n\n async sendSkillCommands(_sessionId: string, _commands: AgentCommand[]): Promise<void> {}\n async cleanupSkillCommands(_sessionId: string): Promise<void> {}\n async archiveSessionTopic(_sessionId: string): Promise<void> {}\n}\n","import type { SessionManager } from '../../core/sessions/session-manager.js'\nimport type { IChannelAdapter } from '../../core/channel.js'\nimport type { SessionRecord } from '../../core/types.js'\nimport { createChildLogger } from '../../core/utils/log.js'\n\nconst log = createChildLogger({ module: 'topic-manager' })\n\nexport interface TopicInfo {\n sessionId: string\n topicId: number | null\n name: string | null\n status: string\n agentName: string\n lastActiveAt: string\n}\n\nexport interface DeleteTopicResult {\n ok: boolean\n needsConfirmation?: boolean\n topicId?: number | null\n session?: { id: string; name: string | null; status: string }\n error?: string\n}\n\nexport interface CleanupResult {\n deleted: string[]\n failed: { sessionId: string; error: string }[]\n}\n\ninterface SystemTopicIds {\n notificationTopicId: number | null\n assistantTopicId: number | null\n}\n\nexport class TopicManager {\n constructor(\n private sessionManager: SessionManager,\n private adapter: IChannelAdapter | null,\n private systemTopicIds: SystemTopicIds,\n ) {}\n\n listTopics(filter?: { statuses?: string[] }): TopicInfo[] {\n const records = this.sessionManager.listRecords(filter)\n return records\n .filter(r => !this.isSystemTopic(r))\n .filter(r => !filter?.statuses?.length || filter.statuses.includes(r.status))\n .map(r => ({\n sessionId: r.sessionId,\n topicId: (r.platform as Record<string, unknown>)?.topicId as number ?? null,\n name: r.name ?? null,\n status: r.status,\n agentName: r.agentName,\n lastActiveAt: r.lastActiveAt,\n }))\n }\n\n async deleteTopic(sessionId: string, options?: { confirmed?: boolean }): Promise<DeleteTopicResult> {\n const records = this.sessionManager.listRecords()\n const record = records.find(r => r.sessionId === sessionId)\n if (!record) return { ok: false, error: 'Session not found' }\n\n if (this.isSystemTopic(record)) return { ok: false, error: 'Cannot delete system topic' }\n\n const isActive = record.status === 'active' || record.status === 'initializing'\n if (isActive && !options?.confirmed) {\n return {\n ok: false,\n needsConfirmation: true,\n session: { id: record.sessionId, name: record.name ?? null, status: record.status },\n }\n }\n\n if (isActive) {\n await this.sessionManager.cancelSession(sessionId)\n }\n\n const topicId = (record.platform as Record<string, unknown>)?.topicId as number ?? null\n if (this.adapter && topicId) {\n try {\n await this.adapter.deleteSessionThread?.(sessionId)\n } catch (err) {\n log.warn({ err, sessionId, topicId }, 'Failed to delete platform thread, removing record anyway')\n }\n }\n\n await this.sessionManager.removeRecord(sessionId)\n return { ok: true, topicId }\n }\n\n async cleanup(statuses?: string[]): Promise<CleanupResult> {\n const targetStatuses = statuses?.length ? statuses : ['finished', 'error', 'cancelled']\n const records = this.sessionManager.listRecords({ statuses: targetStatuses })\n const targets = records\n .filter(r => !this.isSystemTopic(r))\n .filter(r => targetStatuses.includes(r.status))\n\n const deleted: string[] = []\n const failed: { sessionId: string; error: string }[] = []\n\n for (const record of targets) {\n try {\n // Cancel active/initializing sessions to prevent orphaned agent processes\n const isActive = record.status === 'active' || record.status === 'initializing'\n if (isActive) {\n await this.sessionManager.cancelSession(record.sessionId)\n }\n\n const topicId = (record.platform as Record<string, unknown>)?.topicId as number | undefined\n if (this.adapter && topicId) {\n try {\n await this.adapter.deleteSessionThread?.(record.sessionId)\n } catch (err) {\n log.warn({ err, sessionId: record.sessionId }, 'Failed to delete platform thread during cleanup')\n }\n }\n await this.sessionManager.removeRecord(record.sessionId)\n deleted.push(record.sessionId)\n } catch (err) {\n failed.push({ sessionId: record.sessionId, error: err instanceof Error ? err.message : String(err) })\n }\n }\n\n return { deleted, failed }\n }\n\n private isSystemTopic(record: SessionRecord): boolean {\n const topicId = (record.platform as Record<string, unknown>)?.topicId as number | undefined\n if (!topicId) return false\n return topicId === this.systemTopicIds.notificationTopicId\n || topicId === this.systemTopicIds.assistantTopicId\n }\n}\n","import type {\n IChannelAdapter,\n AdapterCapabilities,\n} from '../channel.js'\nimport type {\n OutgoingMessage,\n PermissionRequest,\n NotificationMessage,\n} from '../types.js'\n\nexport interface StreamEvent {\n type: string\n sessionId?: string\n payload: unknown\n timestamp: number\n}\n\nexport abstract class StreamAdapter implements IChannelAdapter {\n abstract readonly name: string\n\n capabilities: AdapterCapabilities\n\n constructor(config?: Partial<AdapterCapabilities>) {\n this.capabilities = {\n streaming: true,\n richFormatting: false,\n threads: false,\n reactions: false,\n fileUpload: false,\n voice: false,\n ...config,\n }\n }\n\n async sendMessage(sessionId: string, content: OutgoingMessage): Promise<void> {\n await this.emit(sessionId, {\n type: content.type,\n sessionId,\n payload: content,\n timestamp: Date.now(),\n })\n }\n\n async sendPermissionRequest(sessionId: string, request: PermissionRequest): Promise<void> {\n await this.emit(sessionId, {\n type: 'permission_request',\n sessionId,\n payload: request,\n timestamp: Date.now(),\n })\n }\n\n async sendNotification(notification: NotificationMessage): Promise<void> {\n await this.broadcast({\n type: 'notification',\n payload: notification,\n timestamp: Date.now(),\n })\n }\n\n async createSessionThread(_sessionId: string, _name: string): Promise<string> {\n return ''\n }\n\n async renameSessionThread(sessionId: string, name: string): Promise<void> {\n await this.emit(sessionId, {\n type: 'session_rename',\n sessionId,\n payload: { name },\n timestamp: Date.now(),\n })\n }\n\n protected abstract emit(sessionId: string, event: StreamEvent): Promise<void>\n protected abstract broadcast(event: StreamEvent): Promise<void>\n abstract start(): Promise<void>\n abstract stop(): Promise<void>\n}\n","export interface DraftConfig {\n flushInterval: number\n maxLength: number\n onFlush: (sessionId: string, text: string, isEdit: boolean) => Promise<string | undefined>\n onError?: (sessionId: string, error: Error) => void\n}\n\nexport class Draft {\n private buffer = ''\n private _messageId?: string\n private firstFlushPending = false\n private flushTimer?: ReturnType<typeof setTimeout>\n private flushPromise: Promise<void> = Promise.resolve()\n\n constructor(\n private sessionId: string,\n private config: DraftConfig,\n ) {}\n\n get isEmpty(): boolean { return !this.buffer }\n get messageId(): string | undefined { return this._messageId }\n\n append(text: string): void {\n if (!text) return\n this.buffer += text\n this.scheduleFlush()\n }\n\n async finalize(): Promise<string | undefined> {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer)\n this.flushTimer = undefined\n }\n await this.flushPromise\n if (this.buffer) {\n await this.flush()\n }\n return this._messageId\n }\n\n destroy(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer)\n this.flushTimer = undefined\n }\n this.buffer = ''\n }\n\n private scheduleFlush(): void {\n if (this.flushTimer) return\n this.flushTimer = setTimeout(() => {\n this.flushTimer = undefined\n this.flushPromise = this.flushPromise\n .then(() => this.flush())\n .catch(() => {})\n }, this.config.flushInterval)\n }\n\n private async flush(): Promise<void> {\n if (!this.buffer || this.firstFlushPending) return\n\n const snapshot = this.buffer\n const isEdit = !!this._messageId\n\n if (!this._messageId) {\n this.firstFlushPending = true\n }\n\n try {\n const result = await this.config.onFlush(this.sessionId, snapshot, isEdit)\n if (!isEdit && result) {\n this._messageId = result\n }\n } catch (err) {\n this.config.onError?.(this.sessionId, err instanceof Error ? err : new Error(String(err)))\n } finally {\n this.firstFlushPending = false\n }\n }\n}\n\nexport class DraftManager {\n private drafts = new Map<string, Draft>()\n\n constructor(private config: DraftConfig) {}\n\n getOrCreate(sessionId: string): Draft {\n let draft = this.drafts.get(sessionId)\n if (!draft) {\n draft = new Draft(sessionId, this.config)\n this.drafts.set(sessionId, draft)\n }\n return draft\n }\n\n async finalize(sessionId: string): Promise<void> {\n const draft = this.drafts.get(sessionId)\n if (!draft) return\n await draft.finalize()\n }\n\n async finalizeAll(): Promise<void> {\n await Promise.all([...this.drafts.values()].map(d => d.finalize()))\n }\n\n destroy(sessionId: string): void {\n const draft = this.drafts.get(sessionId)\n if (draft) {\n draft.destroy()\n this.drafts.delete(sessionId)\n }\n }\n\n destroyAll(): void {\n for (const draft of this.drafts.values()) {\n draft.destroy()\n }\n this.drafts.clear()\n }\n}\n","export interface ActivityConfig {\n thinkingRefreshInterval: number\n maxThinkingDuration: number\n}\n\nexport interface ActivityCallbacks {\n sendThinkingIndicator(): Promise<void>\n updateThinkingIndicator(): Promise<void>\n removeThinkingIndicator(): Promise<void>\n}\n\ninterface SessionState {\n callbacks: ActivityCallbacks\n refreshTimer?: ReturnType<typeof setInterval>\n startTime: number\n dismissed: boolean\n}\n\nexport class ActivityTracker {\n private sessions = new Map<string, SessionState>()\n\n constructor(private config: ActivityConfig) {}\n\n onThinkingStart(sessionId: string, callbacks: ActivityCallbacks): void {\n this.cleanup(sessionId)\n\n const state: SessionState = {\n callbacks,\n startTime: Date.now(),\n dismissed: false,\n }\n this.sessions.set(sessionId, state)\n\n setTimeout(() => {\n if (state.dismissed) return\n callbacks.sendThinkingIndicator().catch(() => {})\n this.startRefresh(sessionId, state)\n }, 0)\n }\n\n onTextStart(sessionId: string): void {\n const state = this.sessions.get(sessionId)\n if (!state || state.dismissed) return\n state.dismissed = true\n this.stopRefresh(state)\n state.callbacks.removeThinkingIndicator().catch(() => {})\n }\n\n onSessionEnd(sessionId: string): void {\n this.cleanup(sessionId)\n }\n\n destroy(): void {\n for (const [id] of this.sessions) {\n this.cleanup(id)\n }\n }\n\n private cleanup(sessionId: string): void {\n const state = this.sessions.get(sessionId)\n if (!state) return\n state.dismissed = true\n this.stopRefresh(state)\n this.sessions.delete(sessionId)\n }\n\n private startRefresh(sessionId: string, state: SessionState): void {\n state.refreshTimer = setInterval(() => {\n if (state.dismissed) {\n this.stopRefresh(state)\n return\n }\n if (Date.now() - state.startTime >= this.config.maxThinkingDuration) {\n this.stopRefresh(state)\n return\n }\n state.callbacks.updateThinkingIndicator().catch(() => {})\n }, this.config.thinkingRefreshInterval)\n }\n\n private stopRefresh(state: SessionState): void {\n if (state.refreshTimer) {\n clearInterval(state.refreshTimer)\n state.refreshTimer = undefined\n }\n }\n}\n"],"mappings":"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","names":["log"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ensureBinary
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
5
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-RBYBSSGO.js";
|
|
4
|
+
import "./chunk-ZSLHHQPQ.js";
|
|
5
|
+
import "./chunk-XMMAGAT4.js";
|
|
6
6
|
import "./chunk-VUNV25KB.js";
|
|
7
7
|
|
|
8
|
-
// src/tunnel/providers/install-cloudflared.ts
|
|
8
|
+
// src/plugins/tunnel/providers/install-cloudflared.ts
|
|
9
9
|
var CLOUDFLARED_SPEC = {
|
|
10
10
|
name: "cloudflared",
|
|
11
11
|
githubBaseUrl: "https://github.com/cloudflare/cloudflared/releases/latest/download",
|
|
@@ -30,4 +30,4 @@ async function ensureCloudflared() {
|
|
|
30
30
|
export {
|
|
31
31
|
ensureCloudflared
|
|
32
32
|
};
|
|
33
|
-
//# sourceMappingURL=install-cloudflared-
|
|
33
|
+
//# sourceMappingURL=install-cloudflared-AN24L4DP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/plugins/tunnel/providers/install-cloudflared.ts"],"sourcesContent":["import { ensureBinary, type BinarySpec } from '../../../core/utils/install-binary.js'\n\nconst CLOUDFLARED_SPEC: BinarySpec = {\n name: 'cloudflared',\n githubBaseUrl: 'https://github.com/cloudflare/cloudflared/releases/latest/download',\n platforms: {\n darwin: {\n x64: 'cloudflared-darwin-amd64.tgz',\n arm64: 'cloudflared-darwin-amd64.tgz',\n },\n win32: {\n x64: 'cloudflared-windows-amd64.exe',\n },\n linux: {\n x64: 'cloudflared-linux-amd64',\n arm64: 'cloudflared-linux-arm64',\n },\n },\n isArchive: (url) => url.endsWith('.tgz'),\n}\n\nexport async function ensureCloudflared(): Promise<string> {\n return ensureBinary(CLOUDFLARED_SPEC)\n}\n"],"mappings":";;;;;;;;AAEA,IAAM,mBAA+B;AAAA,EACnC,MAAM;AAAA,EACN,eAAe;AAAA,EACf,WAAW;AAAA,IACT,QAAQ;AAAA,MACN,KAAK;AAAA,MACL,OAAO;AAAA,IACT;AAAA,IACA,OAAO;AAAA,MACL,KAAK;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,WAAW,CAAC,QAAQ,IAAI,SAAS,MAAM;AACzC;AAEA,eAAsB,oBAAqC;AACzD,SAAO,aAAa,gBAAgB;AACtC;","names":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {
|
|
2
|
+
log
|
|
3
|
+
} from "./chunk-XMMAGAT4.js";
|
|
4
|
+
import "./chunk-VUNV25KB.js";
|
|
5
|
+
|
|
6
|
+
// src/core/plugin/install-context.ts
|
|
7
|
+
import path from "path";
|
|
8
|
+
|
|
9
|
+
// src/core/plugin/terminal-io.ts
|
|
10
|
+
import * as clack from "@clack/prompts";
|
|
11
|
+
function isCancel(value) {
|
|
12
|
+
return typeof value === "symbol";
|
|
13
|
+
}
|
|
14
|
+
function guardCancel(value) {
|
|
15
|
+
if (isCancel(value)) {
|
|
16
|
+
throw new Error("cancelled");
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
function createTerminalIO() {
|
|
21
|
+
return {
|
|
22
|
+
async text(opts) {
|
|
23
|
+
const result = await clack.text(opts);
|
|
24
|
+
return guardCancel(result);
|
|
25
|
+
},
|
|
26
|
+
async select(opts) {
|
|
27
|
+
const result = await clack.select(opts);
|
|
28
|
+
return guardCancel(result);
|
|
29
|
+
},
|
|
30
|
+
async confirm(opts) {
|
|
31
|
+
const result = await clack.confirm(opts);
|
|
32
|
+
return guardCancel(result);
|
|
33
|
+
},
|
|
34
|
+
async password(opts) {
|
|
35
|
+
const result = await clack.password(opts);
|
|
36
|
+
return guardCancel(result);
|
|
37
|
+
},
|
|
38
|
+
async multiselect(opts) {
|
|
39
|
+
const result = await clack.multiselect(opts);
|
|
40
|
+
return guardCancel(result);
|
|
41
|
+
},
|
|
42
|
+
log: {
|
|
43
|
+
info: (msg) => clack.log.info(msg),
|
|
44
|
+
success: (msg) => clack.log.success(msg),
|
|
45
|
+
warning: (msg) => clack.log.warning(msg),
|
|
46
|
+
error: (msg) => clack.log.error(msg),
|
|
47
|
+
step: (msg) => clack.log.step(msg)
|
|
48
|
+
},
|
|
49
|
+
spinner() {
|
|
50
|
+
const s = clack.spinner();
|
|
51
|
+
return {
|
|
52
|
+
start: (msg) => s.start(msg),
|
|
53
|
+
stop: (msg) => s.stop(msg),
|
|
54
|
+
fail: (msg) => s.stop(msg ?? "Failed")
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
note: (msg, title) => clack.note(msg, title),
|
|
58
|
+
cancel: (msg) => clack.cancel(msg)
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// src/core/plugin/install-context.ts
|
|
63
|
+
function createInstallContext(opts) {
|
|
64
|
+
const { pluginName, settingsManager, basePath, legacyConfig } = opts;
|
|
65
|
+
const dataDir = path.join(basePath, pluginName, "data");
|
|
66
|
+
return {
|
|
67
|
+
pluginName,
|
|
68
|
+
terminal: createTerminalIO(),
|
|
69
|
+
settings: settingsManager.createAPI(pluginName),
|
|
70
|
+
legacyConfig,
|
|
71
|
+
dataDir,
|
|
72
|
+
log: log.child({ plugin: pluginName })
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
createInstallContext
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=install-context-XPWTFT3J.js.map
|