@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.
Files changed (256) hide show
  1. package/dist/{action-detect-P7ZE4NEM.js → action-detect-QPA775HB.js} +2 -2
  2. package/dist/adapter-6ANPBSVU.js +16 -0
  3. package/dist/{discord-OMC52Y54.js → adapter-77ZCVABT.js} +520 -365
  4. package/dist/adapter-77ZCVABT.js.map +1 -0
  5. package/dist/{adapter-ZOANORGM.js → adapter-PQGHVG4K.js} +300 -93
  6. package/dist/adapter-PQGHVG4K.js.map +1 -0
  7. package/dist/{admin-6SYB6XCZ.js → admin-GBPZFFAU.js} +3 -3
  8. package/dist/agent-catalog-YHBFERYO.js +11 -0
  9. package/dist/{agent-dependencies-4OWBMZWZ.js → agent-dependencies-WS7Z2DFW.js} +2 -2
  10. package/dist/agent-registry-5LZT7CUB.js +9 -0
  11. package/dist/agent-store-VSHNY5GT.js +9 -0
  12. package/dist/{agents-QO7DKARJ.js → agents-BWU4MRRD.js} +3 -3
  13. package/dist/{api-client-CFQT5U7D.js → api-client-AQPNKXI2.js} +2 -2
  14. package/dist/api-server-3PYLRBCN.js +8 -0
  15. package/dist/api-server-CHVSUDBX.js +11 -0
  16. package/dist/{autostart-X33OGMX6.js → autostart-6JS565RY.js} +3 -3
  17. package/dist/chunk-2CX4IEEC.js +124 -0
  18. package/dist/chunk-2CX4IEEC.js.map +1 -0
  19. package/dist/{chunk-O7CPGUAI.js → chunk-4KGLKKQK.js} +4 -4
  20. package/dist/chunk-4KGLKKQK.js.map +1 -0
  21. package/dist/{chunk-W3EYKZNQ.js → chunk-4WXALZA3.js} +2 -2
  22. package/dist/chunk-4WXALZA3.js.map +1 -0
  23. package/dist/chunk-5OCGO27U.js +125 -0
  24. package/dist/chunk-5OCGO27U.js.map +1 -0
  25. package/dist/{chunk-OWP7RZ62.js → chunk-5ZOFBTOR.js} +118 -262
  26. package/dist/chunk-5ZOFBTOR.js.map +1 -0
  27. package/dist/chunk-6RXVEXF3.js +23 -0
  28. package/dist/chunk-6RXVEXF3.js.map +1 -0
  29. package/dist/{chunk-34M4OS5P.js → chunk-A6Y4GZM3.js} +3 -3
  30. package/dist/chunk-A6Y4GZM3.js.map +1 -0
  31. package/dist/chunk-AD3X6DGK.js +166 -0
  32. package/dist/chunk-AD3X6DGK.js.map +1 -0
  33. package/dist/{chunk-7QJS2XBD.js → chunk-AFKX424Q.js} +2 -2
  34. package/dist/chunk-AFKX424Q.js.map +1 -0
  35. package/dist/chunk-APS6UEFU.js +259 -0
  36. package/dist/chunk-APS6UEFU.js.map +1 -0
  37. package/dist/chunk-BLQUXO7S.js +113 -0
  38. package/dist/chunk-BLQUXO7S.js.map +1 -0
  39. package/dist/{chunk-WTZDAYZX.js → chunk-BQ6FR32N.js} +3 -3
  40. package/dist/chunk-BQ6FR32N.js.map +1 -0
  41. package/dist/chunk-FNRSWA2K.js +1 -0
  42. package/dist/chunk-FQEBWOZR.js +3557 -0
  43. package/dist/chunk-FQEBWOZR.js.map +1 -0
  44. package/dist/{chunk-4CTX774K.js → chunk-GJOY37U7.js} +4 -4
  45. package/dist/chunk-GJOY37U7.js.map +1 -0
  46. package/dist/{chunk-I7WC6E5S.js → chunk-HVBNCPAY.js} +2 -2
  47. package/dist/chunk-HVBNCPAY.js.map +1 -0
  48. package/dist/{chunk-2HMQOC7N.js → chunk-I3CGU5W7.js} +4 -4
  49. package/dist/chunk-I3CGU5W7.js.map +1 -0
  50. package/dist/{chunk-NVPG6JCL.js → chunk-L7YNNBI5.js} +3 -3
  51. package/dist/chunk-L7YNNBI5.js.map +1 -0
  52. package/dist/chunk-LGFWH3AE.js +26 -0
  53. package/dist/chunk-LGFWH3AE.js.map +1 -0
  54. package/dist/chunk-MLF4W5R6.js +101 -0
  55. package/dist/chunk-MLF4W5R6.js.map +1 -0
  56. package/dist/{chunk-KIRH7TUJ.js → chunk-MTSDOSXS.js} +3 -3
  57. package/dist/chunk-MTSDOSXS.js.map +1 -0
  58. package/dist/{chunk-J4SJTKIK.js → chunk-NAM4ERUW.js} +3 -3
  59. package/dist/chunk-NAM4ERUW.js.map +1 -0
  60. package/dist/{chunk-MKHUZLII.js → chunk-NBFIBGAT.js} +39 -25
  61. package/dist/chunk-NBFIBGAT.js.map +1 -0
  62. package/dist/{chunk-BNLGTZ34.js → chunk-O5RG4YZY.js} +3 -3
  63. package/dist/chunk-O5RG4YZY.js.map +1 -0
  64. package/dist/{chunk-JHYXKVV2.js → chunk-ODUM3D6X.js} +2 -2
  65. package/dist/chunk-ODUM3D6X.js.map +1 -0
  66. package/dist/chunk-OYSAN7UX.js +15 -0
  67. package/dist/chunk-OYSAN7UX.js.map +1 -0
  68. package/dist/chunk-P4SNGQNI.js +158 -0
  69. package/dist/chunk-P4SNGQNI.js.map +1 -0
  70. package/dist/{chunk-2CJ46J3C.js → chunk-PPSMUECX.js} +3 -3
  71. package/dist/chunk-PPSMUECX.js.map +1 -0
  72. package/dist/chunk-Q6ZXJTZB.js +56 -0
  73. package/dist/chunk-Q6ZXJTZB.js.map +1 -0
  74. package/dist/{chunk-XANPHG7W.js → chunk-QSDZDHNS.js} +7 -7
  75. package/dist/chunk-QSDZDHNS.js.map +1 -0
  76. package/dist/{chunk-33RP6K2O.js → chunk-QVMEF6FB.js} +6 -6
  77. package/dist/chunk-QVMEF6FB.js.map +1 -0
  78. package/dist/chunk-QWP76EBW.js +536 -0
  79. package/dist/chunk-QWP76EBW.js.map +1 -0
  80. package/dist/{chunk-V5GZQEIY.js → chunk-RBYBSSGO.js} +4 -4
  81. package/dist/chunk-RBYBSSGO.js.map +1 -0
  82. package/dist/{chunk-CS3KCJ5D.js → chunk-RKB2ZK6S.js} +555 -383
  83. package/dist/chunk-RKB2ZK6S.js.map +1 -0
  84. package/dist/{chunk-UKT3G5IA.js → chunk-SHTGQGAU.js} +7 -7
  85. package/dist/chunk-SHTGQGAU.js.map +1 -0
  86. package/dist/chunk-SNPYTMPR.js +51 -0
  87. package/dist/chunk-SNPYTMPR.js.map +1 -0
  88. package/dist/chunk-UB2QB6DE.js +124 -0
  89. package/dist/chunk-UB2QB6DE.js.map +1 -0
  90. package/dist/chunk-UNJUWWQO.js +1108 -0
  91. package/dist/chunk-UNJUWWQO.js.map +1 -0
  92. package/dist/chunk-V2M243KZ.js +445 -0
  93. package/dist/chunk-V2M243KZ.js.map +1 -0
  94. package/dist/chunk-V5JT5TPD.js +97 -0
  95. package/dist/chunk-V5JT5TPD.js.map +1 -0
  96. package/dist/chunk-W26AUH5B.js +61 -0
  97. package/dist/chunk-W26AUH5B.js.map +1 -0
  98. package/dist/chunk-WAAD23KY.js +222 -0
  99. package/dist/chunk-WAAD23KY.js.map +1 -0
  100. package/dist/chunk-WIIZNPCR.js +150 -0
  101. package/dist/chunk-WIIZNPCR.js.map +1 -0
  102. package/dist/chunk-WQCJTU2C.js +84 -0
  103. package/dist/chunk-WQCJTU2C.js.map +1 -0
  104. package/dist/chunk-WVLDNYOJ.js +150 -0
  105. package/dist/chunk-WVLDNYOJ.js.map +1 -0
  106. package/dist/chunk-WXVT3AOY.js +22 -0
  107. package/dist/chunk-WXVT3AOY.js.map +1 -0
  108. package/dist/{chunk-GAK6PIBW.js → chunk-XMMAGAT4.js} +2 -2
  109. package/dist/chunk-XMMAGAT4.js.map +1 -0
  110. package/dist/chunk-Y64XWMJ4.js +212 -0
  111. package/dist/chunk-Y64XWMJ4.js.map +1 -0
  112. package/dist/chunk-YEULD3SG.js +62 -0
  113. package/dist/chunk-YEULD3SG.js.map +1 -0
  114. package/dist/chunk-ZHGPZBS4.js +49 -0
  115. package/dist/chunk-ZHGPZBS4.js.map +1 -0
  116. package/dist/{chunk-JKBFUAJK.js → chunk-ZSLHHQPQ.js} +2 -2
  117. package/dist/chunk-ZSLHHQPQ.js.map +1 -0
  118. package/dist/cli.js +496 -150
  119. package/dist/cli.js.map +1 -1
  120. package/dist/{config-6S355X75.js → config-I4FMCJGZ.js} +3 -3
  121. package/dist/config-editor-HNEKXRLQ.js +11 -0
  122. package/dist/{config-registry-AHYI4MYL.js → config-registry-CUMNXFGK.js} +2 -2
  123. package/dist/context-XM6E22LM.js +10 -0
  124. package/dist/core-plugins-VEUNFTMB.js +27 -0
  125. package/dist/{daemon-4CS6HMB5.js → daemon-PXO5QPCR.js} +4 -4
  126. package/dist/dev-loader-RDC5E2CW.js +50 -0
  127. package/dist/dev-loader-RDC5E2CW.js.map +1 -0
  128. package/dist/discord-NOJQ5PZO.js +8 -0
  129. package/dist/doctor-H72BZOPA.js +10 -0
  130. package/dist/{doctor-OLYBO3V3.js → doctor-RF6BHMCC.js} +5 -5
  131. package/dist/file-service-EUODJAIT.js +9 -0
  132. package/dist/file-service-EUODJAIT.js.map +1 -0
  133. package/dist/index.d.ts +1293 -188
  134. package/dist/index.js +387 -48
  135. package/dist/index.js.map +1 -1
  136. package/dist/{install-cloudflared-Z7VCGOVG.js → install-cloudflared-AN24L4DP.js} +5 -5
  137. package/dist/install-cloudflared-AN24L4DP.js.map +1 -0
  138. package/dist/install-context-XPWTFT3J.js +78 -0
  139. package/dist/install-context-XPWTFT3J.js.map +1 -0
  140. package/dist/{install-jq-HUYSQWKR.js → install-jq-CRVDJGF3.js} +5 -5
  141. package/dist/install-jq-CRVDJGF3.js.map +1 -0
  142. package/dist/{integrate-PNEHRY2I.js → integrate-5C6KSU6D.js} +2 -2
  143. package/dist/integrate-5C6KSU6D.js.map +1 -0
  144. package/dist/{log-NXABYJTT.js → log-LZ7FTRKG.js} +2 -2
  145. package/dist/log-LZ7FTRKG.js.map +1 -0
  146. package/dist/main-T5WVCCFN.js +715 -0
  147. package/dist/main-T5WVCCFN.js.map +1 -0
  148. package/dist/{menu-YY5MKHEK.js → menu-YDQ2LWAR.js} +2 -2
  149. package/dist/menu-YDQ2LWAR.js.map +1 -0
  150. package/dist/{new-session-FEO4J4VU.js → new-session-AVQCNXRG.js} +5 -5
  151. package/dist/new-session-AVQCNXRG.js.map +1 -0
  152. package/dist/notifications-D5BRDNSU.js +9 -0
  153. package/dist/notifications-D5BRDNSU.js.map +1 -0
  154. package/dist/plugin-create-JVCVUG6V.js +331 -0
  155. package/dist/plugin-create-JVCVUG6V.js.map +1 -0
  156. package/dist/plugin-registry-WB3DR67H.js +8 -0
  157. package/dist/plugin-registry-WB3DR67H.js.map +1 -0
  158. package/dist/{post-upgrade-CJG5I7M2.js → post-upgrade-XLHZ6ZB7.js} +8 -8
  159. package/dist/post-upgrade-XLHZ6ZB7.js.map +1 -0
  160. package/dist/read-text-file-IRZM3QLM.js +8 -0
  161. package/dist/read-text-file-IRZM3QLM.js.map +1 -0
  162. package/dist/security-YNRBW6S7.js +9 -0
  163. package/dist/security-YNRBW6S7.js.map +1 -0
  164. package/dist/{session-IUSI7P5S.js → session-KZFA6Z26.js} +4 -4
  165. package/dist/session-KZFA6Z26.js.map +1 -0
  166. package/dist/{settings-RQPAM4KC.js → settings-MFYM7CZO.js} +4 -4
  167. package/dist/settings-MFYM7CZO.js.map +1 -0
  168. package/dist/settings-manager-MD2U4ZV2.js +8 -0
  169. package/dist/settings-manager-MD2U4ZV2.js.map +1 -0
  170. package/dist/{chunk-LCRLAV4G.js → setup-BAI2F24H.js} +154 -492
  171. package/dist/setup-BAI2F24H.js.map +1 -0
  172. package/dist/slack-KH7E3VBS.js +8 -0
  173. package/dist/slack-KH7E3VBS.js.map +1 -0
  174. package/dist/speech-2GHQNRIO.js +9 -0
  175. package/dist/speech-2GHQNRIO.js.map +1 -0
  176. package/dist/telegram-ZDC3JQF2.js +8 -0
  177. package/dist/telegram-ZDC3JQF2.js.map +1 -0
  178. package/dist/tunnel-M47I7H4B.js +8 -0
  179. package/dist/tunnel-M47I7H4B.js.map +1 -0
  180. package/dist/{tunnel-service-CJLUH6SZ.js → tunnel-service-WADYHREX.js} +17 -17
  181. package/dist/tunnel-service-WADYHREX.js.map +1 -0
  182. package/dist/usage-WYNK6ZC5.js +10 -0
  183. package/dist/usage-WYNK6ZC5.js.map +1 -0
  184. package/dist/validators-6CLEZUBD.js +8 -0
  185. package/dist/validators-6CLEZUBD.js.map +1 -0
  186. package/dist/validators-WSTBNKRW.js +12 -0
  187. package/dist/validators-WSTBNKRW.js.map +1 -0
  188. package/package.json +1 -1
  189. package/dist/adapter-ZOANORGM.js.map +0 -1
  190. package/dist/agent-catalog-FC3HGDEQ.js +0 -11
  191. package/dist/agent-registry-WT4NXPYG.js +0 -9
  192. package/dist/agent-store-VZLFPTZU.js +0 -9
  193. package/dist/chunk-2CJ46J3C.js.map +0 -1
  194. package/dist/chunk-2HMQOC7N.js.map +0 -1
  195. package/dist/chunk-33RP6K2O.js.map +0 -1
  196. package/dist/chunk-34M4OS5P.js.map +0 -1
  197. package/dist/chunk-4CTX774K.js.map +0 -1
  198. package/dist/chunk-7QJS2XBD.js.map +0 -1
  199. package/dist/chunk-BNLGTZ34.js.map +0 -1
  200. package/dist/chunk-CS3KCJ5D.js.map +0 -1
  201. package/dist/chunk-GAK6PIBW.js.map +0 -1
  202. package/dist/chunk-I7WC6E5S.js.map +0 -1
  203. package/dist/chunk-J4SJTKIK.js.map +0 -1
  204. package/dist/chunk-JHYXKVV2.js.map +0 -1
  205. package/dist/chunk-JKBFUAJK.js.map +0 -1
  206. package/dist/chunk-KIRH7TUJ.js.map +0 -1
  207. package/dist/chunk-LBIKITQT.js +0 -22
  208. package/dist/chunk-LBIKITQT.js.map +0 -1
  209. package/dist/chunk-LCRLAV4G.js.map +0 -1
  210. package/dist/chunk-LGP2YGRL.js +0 -4880
  211. package/dist/chunk-LGP2YGRL.js.map +0 -1
  212. package/dist/chunk-MKHUZLII.js.map +0 -1
  213. package/dist/chunk-NAMYZIS5.js +0 -1
  214. package/dist/chunk-NVPG6JCL.js.map +0 -1
  215. package/dist/chunk-O7CPGUAI.js.map +0 -1
  216. package/dist/chunk-OWP7RZ62.js.map +0 -1
  217. package/dist/chunk-UKT3G5IA.js.map +0 -1
  218. package/dist/chunk-V5GZQEIY.js.map +0 -1
  219. package/dist/chunk-VOIJ6OY4.js +0 -63
  220. package/dist/chunk-VOIJ6OY4.js.map +0 -1
  221. package/dist/chunk-W3EYKZNQ.js.map +0 -1
  222. package/dist/chunk-WTZDAYZX.js.map +0 -1
  223. package/dist/chunk-XANPHG7W.js.map +0 -1
  224. package/dist/config-editor-QQTZMWGD.js +0 -13
  225. package/dist/discord-OMC52Y54.js.map +0 -1
  226. package/dist/doctor-HZZ5BSHB.js +0 -10
  227. package/dist/install-cloudflared-Z7VCGOVG.js.map +0 -1
  228. package/dist/install-jq-HUYSQWKR.js.map +0 -1
  229. package/dist/integrate-PNEHRY2I.js.map +0 -1
  230. package/dist/main-XOZCLFUK.js +0 -238
  231. package/dist/main-XOZCLFUK.js.map +0 -1
  232. package/dist/post-upgrade-CJG5I7M2.js.map +0 -1
  233. package/dist/setup-XHS4OMPM.js +0 -37
  234. package/dist/tunnel-service-CJLUH6SZ.js.map +0 -1
  235. /package/dist/{action-detect-P7ZE4NEM.js.map → action-detect-QPA775HB.js.map} +0 -0
  236. /package/dist/{admin-6SYB6XCZ.js.map → adapter-6ANPBSVU.js.map} +0 -0
  237. /package/dist/{agent-catalog-FC3HGDEQ.js.map → admin-GBPZFFAU.js.map} +0 -0
  238. /package/dist/{agent-dependencies-4OWBMZWZ.js.map → agent-catalog-YHBFERYO.js.map} +0 -0
  239. /package/dist/{agent-registry-WT4NXPYG.js.map → agent-dependencies-WS7Z2DFW.js.map} +0 -0
  240. /package/dist/{agent-store-VZLFPTZU.js.map → agent-registry-5LZT7CUB.js.map} +0 -0
  241. /package/dist/{agents-QO7DKARJ.js.map → agent-store-VSHNY5GT.js.map} +0 -0
  242. /package/dist/{api-client-CFQT5U7D.js.map → agents-BWU4MRRD.js.map} +0 -0
  243. /package/dist/{autostart-X33OGMX6.js.map → api-client-AQPNKXI2.js.map} +0 -0
  244. /package/dist/{chunk-NAMYZIS5.js.map → api-server-3PYLRBCN.js.map} +0 -0
  245. /package/dist/{config-6S355X75.js.map → api-server-CHVSUDBX.js.map} +0 -0
  246. /package/dist/{config-editor-QQTZMWGD.js.map → autostart-6JS565RY.js.map} +0 -0
  247. /package/dist/{config-registry-AHYI4MYL.js.map → chunk-FNRSWA2K.js.map} +0 -0
  248. /package/dist/{daemon-4CS6HMB5.js.map → config-I4FMCJGZ.js.map} +0 -0
  249. /package/dist/{doctor-HZZ5BSHB.js.map → config-editor-HNEKXRLQ.js.map} +0 -0
  250. /package/dist/{doctor-OLYBO3V3.js.map → config-registry-CUMNXFGK.js.map} +0 -0
  251. /package/dist/{log-NXABYJTT.js.map → context-XM6E22LM.js.map} +0 -0
  252. /package/dist/{menu-YY5MKHEK.js.map → core-plugins-VEUNFTMB.js.map} +0 -0
  253. /package/dist/{new-session-FEO4J4VU.js.map → daemon-PXO5QPCR.js.map} +0 -0
  254. /package/dist/{session-IUSI7P5S.js.map → discord-NOJQ5PZO.js.map} +0 -0
  255. /package/dist/{settings-RQPAM4KC.js.map → doctor-H72BZOPA.js.map} +0 -0
  256. /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
- TelegramAdapter
3
- } from "./chunk-CS3KCJ5D.js";
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-LGP2YGRL.js";
20
+ } from "./chunk-FQEBWOZR.js";
35
21
  import {
36
- ChannelAdapter
37
- } from "./chunk-LBIKITQT.js";
38
- import "./chunk-NVPG6JCL.js";
39
- import "./chunk-NAMYZIS5.js";
40
- import "./chunk-7QJS2XBD.js";
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-WTZDAYZX.js";
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-2CJ46J3C.js";
62
- import "./chunk-LCRLAV4G.js";
63
- import "./chunk-JKBFUAJK.js";
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
- installPlugin,
66
- listPlugins,
67
- loadAdapterFactory,
68
- uninstallPlugin
69
- } from "./chunk-VOIJ6OY4.js";
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-JHYXKVV2.js";
89
+ } from "./chunk-ODUM3D6X.js";
78
90
  import {
79
91
  ConfigManager,
80
92
  PLUGINS_DIR,
81
93
  expandHome
82
- } from "./chunk-33RP6K2O.js";
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-GAK6PIBW.js";
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-V5GZQEIY.js";
4
- import "./chunk-JKBFUAJK.js";
5
- import "./chunk-GAK6PIBW.js";
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-Z7VCGOVG.js.map
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