@openacp/cli 2026.327.5 → 2026.328.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 (178) hide show
  1. package/README.md +13 -13
  2. package/dist/adapter-HGJENQCN.js +13 -0
  3. package/dist/agent-catalog-SZQQERV7.js +10 -0
  4. package/dist/{agent-dependencies-WS7Z2DFW.js → agent-dependencies-ED2ZTUHG.js} +1 -2
  5. package/dist/{agent-registry-5LZT7CUB.js → agent-registry-YOGP656W.js} +1 -2
  6. package/dist/agent-store-5UHZH2XI.js +8 -0
  7. package/dist/{api-client-AQPNKXI2.js → api-client-XTLRRFPX.js} +1 -2
  8. package/dist/api-server-DSUW637I.js +7 -0
  9. package/dist/api-server-WFB5K6FP.js +10 -0
  10. package/dist/{autostart-6JS565RY.js → autostart-CUPZMKKC.js} +3 -4
  11. package/dist/{chunk-WIIZNPCR.js → chunk-2KT6TROD.js} +12 -33
  12. package/dist/chunk-2KT6TROD.js.map +1 -0
  13. package/dist/{chunk-PPSMUECX.js → chunk-2R5XM3ES.js} +2 -2
  14. package/dist/{chunk-SNPYTMPR.js → chunk-3EWTPOF7.js} +2 -2
  15. package/dist/{chunk-YEULD3SG.js → chunk-3NAFXVQM.js} +7 -2
  16. package/dist/{chunk-YEULD3SG.js.map → chunk-3NAFXVQM.js.map} +1 -1
  17. package/dist/{chunk-QAQDGPB4.js → chunk-43JVXFYP.js} +3 -3
  18. package/dist/{chunk-KMMEFXIE.js → chunk-4B6PCWQP.js} +37 -9
  19. package/dist/chunk-4B6PCWQP.js.map +1 -0
  20. package/dist/{chunk-A6Y4GZM3.js → chunk-566W6INH.js} +2 -2
  21. package/dist/{chunk-ODUM3D6X.js → chunk-5HKQCYOI.js} +1 -39
  22. package/dist/chunk-5HKQCYOI.js.map +1 -0
  23. package/dist/{chunk-P2G275VD.js → chunk-5TCXYDLR.js} +3 -3
  24. package/dist/{chunk-XIBG7LSL.js → chunk-6VR4GWOO.js} +238 -108
  25. package/dist/chunk-6VR4GWOO.js.map +1 -0
  26. package/dist/{chunk-WXVT3AOY.js → chunk-7ZCQF6QM.js} +8 -3
  27. package/dist/chunk-7ZCQF6QM.js.map +1 -0
  28. package/dist/{chunk-S3ZGPPXY.js → chunk-E2SLHZAC.js} +8 -12
  29. package/dist/{chunk-S3ZGPPXY.js.map → chunk-E2SLHZAC.js.map} +1 -1
  30. package/dist/{chunk-RBYBSSGO.js → chunk-FCTC7KDT.js} +2 -2
  31. package/dist/{plugin-installer-QVJP6VKV.js → chunk-I53NEV3S.js} +6 -3
  32. package/dist/chunk-I53NEV3S.js.map +1 -0
  33. package/dist/{chunk-2YCW3QDV.js → chunk-IXMIC4GQ.js} +8 -7
  34. package/dist/chunk-IXMIC4GQ.js.map +1 -0
  35. package/dist/{chunk-BLQUXO7S.js → chunk-IZ5UEZF7.js} +27 -2
  36. package/dist/chunk-IZ5UEZF7.js.map +1 -0
  37. package/dist/{chunk-QVMEF6FB.js → chunk-JOMDPFQ2.js} +10 -24
  38. package/dist/chunk-JOMDPFQ2.js.map +1 -0
  39. package/dist/{chunk-4GMLGCF2.js → chunk-JUFN4XMB.js} +2 -2
  40. package/dist/{chunk-AD3X6DGK.js → chunk-NT6FYV27.js} +75 -13
  41. package/dist/chunk-NT6FYV27.js.map +1 -0
  42. package/dist/{chunk-HRKAXFWR.js → chunk-QBEQJFGL.js} +9 -9
  43. package/dist/{chunk-XMMAGAT4.js → chunk-R6KZYF7D.js} +8 -1
  44. package/dist/{chunk-XMMAGAT4.js.map → chunk-R6KZYF7D.js.map} +1 -1
  45. package/dist/{chunk-XWDW3XBE.js → chunk-RXMWJHWH.js} +687 -99
  46. package/dist/chunk-RXMWJHWH.js.map +1 -0
  47. package/dist/{chunk-SHTGQGAU.js → chunk-V2YZWYXT.js} +3 -3
  48. package/dist/{chunk-BQ6FR32N.js → chunk-VD3QSMVY.js} +2 -2
  49. package/dist/cli.js +103 -97
  50. package/dist/cli.js.map +1 -1
  51. package/dist/{config-I4FMCJGZ.js → config-UCAFCS5W.js} +3 -4
  52. package/dist/config-editor-OU6PUY66.js +10 -0
  53. package/dist/{config-registry-CUMNXFGK.js → config-registry-ZXAIJNYB.js} +2 -3
  54. package/dist/{context-XM6E22LM.js → context-7MPU7RL5.js} +1 -2
  55. package/dist/core-plugins-R2EVZAJV.js +22 -0
  56. package/dist/{daemon-PXO5QPCR.js → daemon-DTA6KYYY.js} +4 -5
  57. package/dist/{dev-loader-DRU3R7ZM.js → dev-loader-7P3HZCIA.js} +1 -3
  58. package/dist/{dev-loader-DRU3R7ZM.js.map → dev-loader-7P3HZCIA.js.map} +1 -1
  59. package/dist/doctor-D723IB2I.js +9 -0
  60. package/dist/file-service-HHB3JQIO.js +8 -0
  61. package/dist/index.d.ts +37 -145
  62. package/dist/index.js +32 -28
  63. package/dist/index.js.map +1 -1
  64. package/dist/{install-cloudflared-AN24L4DP.js → install-cloudflared-JRJ4BSOM.js} +3 -4
  65. package/dist/{install-cloudflared-AN24L4DP.js.map → install-cloudflared-JRJ4BSOM.js.map} +1 -1
  66. package/dist/{install-context-XPWTFT3J.js → install-context-EHYV5WRY.js} +2 -3
  67. package/dist/{install-context-XPWTFT3J.js.map → install-context-EHYV5WRY.js.map} +1 -1
  68. package/dist/{install-jq-CRVDJGF3.js → install-jq-ISTGT263.js} +3 -4
  69. package/dist/{install-jq-CRVDJGF3.js.map → install-jq-ISTGT263.js.map} +1 -1
  70. package/dist/{integrate-G6CVXTGT.js → integrate-JIEZYDOR.js} +1 -2
  71. package/dist/{integrate-G6CVXTGT.js.map → integrate-JIEZYDOR.js.map} +1 -1
  72. package/dist/{log-LZ7FTRKG.js → log-YZ243M5G.js} +4 -3
  73. package/dist/{main-3GF3EQTE.js → main-RRSX5SRL.js} +117 -40
  74. package/dist/main-RRSX5SRL.js.map +1 -0
  75. package/dist/{menu-YDQ2LWAR.js → menu-ALFN37IR.js} +1 -2
  76. package/dist/notifications-MO23S7S3.js +8 -0
  77. package/dist/{plugin-create-5HQRF2ID.js → plugin-create-EHL76ZZG.js} +1 -2
  78. package/dist/{plugin-create-5HQRF2ID.js.map → plugin-create-EHL76ZZG.js.map} +1 -1
  79. package/dist/plugin-installer-5XHORMLS.js +9 -0
  80. package/dist/{plugin-registry-WB3DR67H.js → plugin-registry-6J3YSFHF.js} +1 -2
  81. package/dist/{plugin-search-HQ4WQKOF.js → plugin-search-MGKAL5JM.js} +1 -2
  82. package/dist/{plugin-search-HQ4WQKOF.js.map → plugin-search-MGKAL5JM.js.map} +1 -1
  83. package/dist/{post-upgrade-3ADZRMYJ.js → post-upgrade-Y26S2ZQ7.js} +6 -7
  84. package/dist/{post-upgrade-3ADZRMYJ.js.map → post-upgrade-Y26S2ZQ7.js.map} +1 -1
  85. package/dist/{read-text-file-IRZM3QLM.js → read-text-file-DJBTITIB.js} +1 -2
  86. package/dist/{registry-client-AVGRE4CF.js → registry-client-GTBWLXYU.js} +1 -2
  87. package/dist/{security-YNRBW6S7.js → security-2BA265LN.js} +1 -2
  88. package/dist/{settings-manager-MD2U4ZV2.js → settings-manager-B4UN2LAC.js} +1 -2
  89. package/dist/{setup-A7VPW46C.js → setup-OI6A3OXW.js} +109 -82
  90. package/dist/setup-OI6A3OXW.js.map +1 -0
  91. package/dist/speech-GB7PHVQZ.js +9 -0
  92. package/dist/{suggest-7D6B542M.js → suggest-RST5VOHB.js} +1 -3
  93. package/dist/{suggest-7D6B542M.js.map → suggest-RST5VOHB.js.map} +1 -1
  94. package/dist/telegram-UVIAXADE.js +7 -0
  95. package/dist/tunnel-4WNFC7GO.js +7 -0
  96. package/dist/{tunnel-service-QJPUYEKU.js → tunnel-service-I2NFUX3V.js} +3 -4
  97. package/dist/{tunnel-service-QJPUYEKU.js.map → tunnel-service-I2NFUX3V.js.map} +1 -1
  98. package/dist/{validators-WSTBNKRW.js → validators-GITLOFXC.js} +1 -2
  99. package/dist/{version-NQZBM5M7.js → version-AXXV6IV2.js} +1 -2
  100. package/package.json +1 -3
  101. package/dist/adapter-JQFQ3JAO.js +0 -15
  102. package/dist/adapter-UORRGHNH.js +0 -1030
  103. package/dist/adapter-UORRGHNH.js.map +0 -1
  104. package/dist/agent-catalog-YHBFERYO.js +0 -11
  105. package/dist/agent-store-VSHNY5GT.js +0 -9
  106. package/dist/api-server-7G3ZUZRM.js +0 -8
  107. package/dist/api-server-CAYNPUF2.js +0 -11
  108. package/dist/chunk-2YCW3QDV.js.map +0 -1
  109. package/dist/chunk-32LVIEPW.js +0 -477
  110. package/dist/chunk-32LVIEPW.js.map +0 -1
  111. package/dist/chunk-AD3X6DGK.js.map +0 -1
  112. package/dist/chunk-BLQUXO7S.js.map +0 -1
  113. package/dist/chunk-KMMEFXIE.js.map +0 -1
  114. package/dist/chunk-ODUM3D6X.js.map +0 -1
  115. package/dist/chunk-QVMEF6FB.js.map +0 -1
  116. package/dist/chunk-VUNV25KB.js +0 -16
  117. package/dist/chunk-WIIZNPCR.js.map +0 -1
  118. package/dist/chunk-WXVT3AOY.js.map +0 -1
  119. package/dist/chunk-XIBG7LSL.js.map +0 -1
  120. package/dist/chunk-XWDW3XBE.js.map +0 -1
  121. package/dist/chunk-ZNSO2QVC.js +0 -124
  122. package/dist/chunk-ZNSO2QVC.js.map +0 -1
  123. package/dist/config-editor-7PKW42GZ.js +0 -11
  124. package/dist/core-plugins-Y5US6RED.js +0 -23
  125. package/dist/dist-UHQK5CXN.js +0 -21151
  126. package/dist/dist-UHQK5CXN.js.map +0 -1
  127. package/dist/doctor-QZQAP46W.js +0 -10
  128. package/dist/file-service-EUODJAIT.js +0 -9
  129. package/dist/main-3GF3EQTE.js.map +0 -1
  130. package/dist/notifications-D5BRDNSU.js +0 -9
  131. package/dist/plugin-installer-QVJP6VKV.js.map +0 -1
  132. package/dist/setup-A7VPW46C.js.map +0 -1
  133. package/dist/slack-2XNWBOWH.js +0 -8
  134. package/dist/speech-2GHQNRIO.js +0 -9
  135. package/dist/telegram-E65IWFBW.js +0 -8
  136. package/dist/tunnel-45HA72MB.js +0 -8
  137. package/dist/version-NQZBM5M7.js.map +0 -1
  138. /package/dist/{adapter-JQFQ3JAO.js.map → adapter-HGJENQCN.js.map} +0 -0
  139. /package/dist/{agent-catalog-YHBFERYO.js.map → agent-catalog-SZQQERV7.js.map} +0 -0
  140. /package/dist/{agent-dependencies-WS7Z2DFW.js.map → agent-dependencies-ED2ZTUHG.js.map} +0 -0
  141. /package/dist/{agent-registry-5LZT7CUB.js.map → agent-registry-YOGP656W.js.map} +0 -0
  142. /package/dist/{agent-store-VSHNY5GT.js.map → agent-store-5UHZH2XI.js.map} +0 -0
  143. /package/dist/{api-client-AQPNKXI2.js.map → api-client-XTLRRFPX.js.map} +0 -0
  144. /package/dist/{api-server-7G3ZUZRM.js.map → api-server-DSUW637I.js.map} +0 -0
  145. /package/dist/{api-server-CAYNPUF2.js.map → api-server-WFB5K6FP.js.map} +0 -0
  146. /package/dist/{autostart-6JS565RY.js.map → autostart-CUPZMKKC.js.map} +0 -0
  147. /package/dist/{chunk-PPSMUECX.js.map → chunk-2R5XM3ES.js.map} +0 -0
  148. /package/dist/{chunk-SNPYTMPR.js.map → chunk-3EWTPOF7.js.map} +0 -0
  149. /package/dist/{chunk-QAQDGPB4.js.map → chunk-43JVXFYP.js.map} +0 -0
  150. /package/dist/{chunk-A6Y4GZM3.js.map → chunk-566W6INH.js.map} +0 -0
  151. /package/dist/{chunk-P2G275VD.js.map → chunk-5TCXYDLR.js.map} +0 -0
  152. /package/dist/{chunk-RBYBSSGO.js.map → chunk-FCTC7KDT.js.map} +0 -0
  153. /package/dist/{chunk-4GMLGCF2.js.map → chunk-JUFN4XMB.js.map} +0 -0
  154. /package/dist/{chunk-HRKAXFWR.js.map → chunk-QBEQJFGL.js.map} +0 -0
  155. /package/dist/{chunk-SHTGQGAU.js.map → chunk-V2YZWYXT.js.map} +0 -0
  156. /package/dist/{chunk-BQ6FR32N.js.map → chunk-VD3QSMVY.js.map} +0 -0
  157. /package/dist/{chunk-VUNV25KB.js.map → config-UCAFCS5W.js.map} +0 -0
  158. /package/dist/{config-I4FMCJGZ.js.map → config-editor-OU6PUY66.js.map} +0 -0
  159. /package/dist/{config-editor-7PKW42GZ.js.map → config-registry-ZXAIJNYB.js.map} +0 -0
  160. /package/dist/{config-registry-CUMNXFGK.js.map → context-7MPU7RL5.js.map} +0 -0
  161. /package/dist/{context-XM6E22LM.js.map → core-plugins-R2EVZAJV.js.map} +0 -0
  162. /package/dist/{core-plugins-Y5US6RED.js.map → daemon-DTA6KYYY.js.map} +0 -0
  163. /package/dist/{daemon-PXO5QPCR.js.map → doctor-D723IB2I.js.map} +0 -0
  164. /package/dist/{doctor-QZQAP46W.js.map → file-service-HHB3JQIO.js.map} +0 -0
  165. /package/dist/{file-service-EUODJAIT.js.map → log-YZ243M5G.js.map} +0 -0
  166. /package/dist/{log-LZ7FTRKG.js.map → menu-ALFN37IR.js.map} +0 -0
  167. /package/dist/{menu-YDQ2LWAR.js.map → notifications-MO23S7S3.js.map} +0 -0
  168. /package/dist/{notifications-D5BRDNSU.js.map → plugin-installer-5XHORMLS.js.map} +0 -0
  169. /package/dist/{plugin-registry-WB3DR67H.js.map → plugin-registry-6J3YSFHF.js.map} +0 -0
  170. /package/dist/{read-text-file-IRZM3QLM.js.map → read-text-file-DJBTITIB.js.map} +0 -0
  171. /package/dist/{registry-client-AVGRE4CF.js.map → registry-client-GTBWLXYU.js.map} +0 -0
  172. /package/dist/{security-YNRBW6S7.js.map → security-2BA265LN.js.map} +0 -0
  173. /package/dist/{settings-manager-MD2U4ZV2.js.map → settings-manager-B4UN2LAC.js.map} +0 -0
  174. /package/dist/{slack-2XNWBOWH.js.map → speech-GB7PHVQZ.js.map} +0 -0
  175. /package/dist/{speech-2GHQNRIO.js.map → telegram-UVIAXADE.js.map} +0 -0
  176. /package/dist/{telegram-E65IWFBW.js.map → tunnel-4WNFC7GO.js.map} +0 -0
  177. /package/dist/{tunnel-45HA72MB.js.map → validators-GITLOFXC.js.map} +0 -0
  178. /package/dist/{validators-WSTBNKRW.js.map → version-AXXV6IV2.js.map} +0 -0
@@ -1,10 +0,0 @@
1
- import {
2
- DoctorEngine
3
- } from "./chunk-QAQDGPB4.js";
4
- import "./chunk-QVMEF6FB.js";
5
- import "./chunk-XMMAGAT4.js";
6
- import "./chunk-VUNV25KB.js";
7
- export {
8
- DoctorEngine
9
- };
10
- //# sourceMappingURL=doctor-QZQAP46W.js.map
@@ -1,9 +0,0 @@
1
- import {
2
- file_service_default
3
- } from "./chunk-YEULD3SG.js";
4
- import "./chunk-BLQUXO7S.js";
5
- import "./chunk-VUNV25KB.js";
6
- export {
7
- file_service_default as default
8
- };
9
- //# sourceMappingURL=file-service-EUODJAIT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/commands/session.ts","../../src/core/commands/agents.ts","../../src/core/commands/admin.ts","../../src/core/commands/help.ts","../../src/core/commands/menu.ts","../../src/core/commands/index.ts","../../src/main.ts"],"sourcesContent":["import type { CommandRegistry } from '../command-registry.js'\nimport type { CommandResponse } from '../plugin/types.js'\n\n/**\n * System session commands — these are placeholder registrations for discovery\n * (autocomplete, help text, etc.). The actual logic lives in adapter-specific\n * handlers. Handlers return 'silent' so the generic dispatch passes through\n * to the adapter's dedicated handler via next().\n */\nexport function registerSessionCommands(registry: CommandRegistry, _core: unknown): void {\n registry.register({\n name: 'new',\n description: 'Start a new session',\n usage: '[agent-name]',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'cancel',\n description: 'Cancel the current agent turn',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'status',\n description: 'Show current session status',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'sessions',\n description: 'List all active sessions',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'clear',\n description: 'Clear session history',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'newchat',\n description: 'New chat, same agent & workspace',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'resume',\n description: 'Resume a previous session',\n usage: '<session-number>',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'handoff',\n description: 'Hand off session to another agent',\n usage: '<agent-name>',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n}\n","import type { CommandRegistry } from '../command-registry.js'\nimport type { CommandResponse } from '../plugin/types.js'\n\nexport function registerAgentCommands(registry: CommandRegistry, _core: unknown): void {\n registry.register({\n name: 'agents',\n description: 'List available agents',\n category: 'system',\n handler: async () => {\n return { type: 'text', text: 'No agents configured.' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'install',\n description: 'Install a plugin',\n usage: '<plugin-name>',\n category: 'system',\n handler: async (args) => {\n const plugin = args.raw.trim()\n if (!plugin) {\n return { type: 'error', message: 'Usage: /install <plugin-name>' } satisfies CommandResponse\n }\n return { type: 'text', text: `Installing plugin: ${plugin}...` } satisfies CommandResponse\n },\n })\n}\n","import type { CommandRegistry } from '../command-registry.js'\nimport type { CommandResponse } from '../plugin/types.js'\n\nexport function registerAdminCommands(registry: CommandRegistry, _core: unknown): void {\n registry.register({\n name: 'restart',\n description: 'Restart the server',\n category: 'system',\n handler: async () => {\n return { type: 'silent' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'update',\n description: 'Check for and apply updates',\n category: 'system',\n handler: async () => {\n return { type: 'text', text: 'Checking for updates...' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'doctor',\n description: 'Run system diagnostics',\n category: 'system',\n handler: async () => {\n return { type: 'text', text: 'Running diagnostics...' } satisfies CommandResponse\n },\n })\n\n registry.register({\n name: 'integrate',\n description: 'Set up a new channel integration',\n usage: '<channel>',\n category: 'system',\n handler: async (args) => {\n const channel = args.raw.trim()\n if (!channel) {\n return {\n type: 'menu',\n title: 'Available Integrations',\n options: [\n { label: 'Telegram', command: '/integrate telegram' },\n { label: 'Discord', command: '/integrate discord' },\n { label: 'Slack', command: '/integrate slack' },\n ],\n } satisfies CommandResponse\n }\n return { type: 'text', text: `Setting up ${channel} integration...` } satisfies CommandResponse\n },\n })\n}\n","import type { CommandRegistry } from '../command-registry.js'\nimport type { CommandResponse } from '../plugin/types.js'\n\nexport function registerHelpCommand(registry: CommandRegistry, _core: unknown): void {\n registry.register({\n name: 'help',\n description: 'Show available commands',\n usage: '[command]',\n category: 'system',\n handler: async (args) => {\n const query = args.raw.trim()\n\n if (query) {\n const cmd = registry.get(query)\n if (!cmd) {\n return { type: 'error', message: `Unknown command: /${query}` } satisfies CommandResponse\n }\n let text = `/${cmd.name}`\n if (cmd.usage) text += ` ${cmd.usage}`\n text += `\\n${cmd.description}`\n return { type: 'text', text } satisfies CommandResponse\n }\n\n // Auto-generate help from registry at invocation time\n const systemCmds = registry.getByCategory('system')\n const pluginCmds = registry.getByCategory('plugin')\n\n const lines: string[] = []\n\n if (systemCmds.length > 0) {\n lines.push('System Commands:')\n for (const cmd of systemCmds) {\n const usage = cmd.usage ? ` ${cmd.usage}` : ''\n lines.push(` /${cmd.name}${usage} — ${cmd.description}`)\n }\n }\n\n if (pluginCmds.length > 0) {\n if (lines.length > 0) lines.push('')\n lines.push('Plugin Commands:')\n for (const cmd of pluginCmds) {\n const usage = cmd.usage ? ` ${cmd.usage}` : ''\n lines.push(` /${cmd.name}${usage} — ${cmd.description}`)\n }\n }\n\n if (lines.length === 0) {\n return { type: 'text', text: 'No commands registered.' } satisfies CommandResponse\n }\n\n return { type: 'text', text: lines.join('\\n') } satisfies CommandResponse\n },\n })\n}\n","import type { CommandRegistry } from '../command-registry.js'\nimport type { CommandResponse } from '../plugin/types.js'\n\nexport function registerMenuCommand(registry: CommandRegistry, _core: unknown): void {\n registry.register({\n name: 'menu',\n description: 'Show the main menu',\n category: 'system',\n handler: async () => {\n return {\n type: 'menu',\n title: 'Main Menu',\n options: [\n { label: 'New Session', command: '/new' },\n { label: 'Active Sessions', command: '/sessions' },\n { label: 'Available Agents', command: '/agents' },\n { label: 'Usage', command: '/usage' },\n { label: 'Help', command: '/help' },\n ],\n } satisfies CommandResponse\n },\n })\n}\n","import type { CommandRegistry } from '../command-registry.js'\nimport { registerSessionCommands } from './session.js'\nimport { registerAgentCommands } from './agents.js'\nimport { registerAdminCommands } from './admin.js'\nimport { registerHelpCommand } from './help.js'\nimport { registerMenuCommand } from './menu.js'\n\nexport function registerSystemCommands(registry: CommandRegistry, core: unknown): void {\n registerSessionCommands(registry, core)\n registerAgentCommands(registry, core)\n registerAdminCommands(registry, core)\n registerHelpCommand(registry, core)\n registerMenuCommand(registry, core)\n}\n","#!/usr/bin/env node\n\nimport { ConfigManager } from './core/config/config.js'\nimport { OpenACPCore } from './core/core.js'\nimport { initLogger, shutdownLogger, cleanupOldSessionLogs, log, muteLogger, unmuteLogger } from './core/utils/log.js'\nimport { corePlugins } from './plugins/core-plugins.js'\nimport { SettingsManager } from './core/plugin/settings-manager.js'\nimport { PluginRegistry } from './core/plugin/plugin-registry.js'\nimport { CommandRegistry } from './core/command-registry.js'\nimport { registerSystemCommands } from './core/commands/index.js'\nimport type { IChannelAdapter } from './core/channel.js'\nimport type { TunnelService } from './plugins/tunnel/tunnel-service.js'\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport os from 'node:os'\n\nexport const RESTART_EXIT_CODE = 75\nlet shuttingDown = false\n\nconst OPENACP_DIR = path.join(os.homedir(), '.openacp')\nconst PLUGINS_DATA_DIR = path.join(OPENACP_DIR, 'plugins', 'data')\nconst REGISTRY_PATH = path.join(OPENACP_DIR, 'plugins.json')\n\nexport interface StartServerOptions {\n devPluginPath?: string\n noWatch?: boolean\n}\n\nexport async function startServer(opts?: StartServerOptions) {\n // 0. If running as daemon child, check state and write PID file\n if (process.argv.includes('--daemon-child')) {\n const { writePidFile, readPidFile, getPidPath, shouldAutoStart } = await import('./cli/daemon.js')\n\n // Only auto-start if the daemon was previously running (user started it)\n if (!shouldAutoStart()) {\n process.exit(0)\n }\n\n const pidPath = getPidPath()\n const existingPid = readPidFile(pidPath)\n if (existingPid !== null && existingPid !== process.pid) {\n try {\n process.kill(existingPid, 0)\n console.error(`Another OpenACP instance is already running (PID ${existingPid}). Exiting.`)\n process.exit(1)\n } catch {\n // Stale PID file — safe to overwrite\n }\n }\n writePidFile(pidPath, process.pid)\n }\n\n // Create SettingsManager and PluginRegistry early (needed by wizard + boot)\n const settingsManager = new SettingsManager(PLUGINS_DATA_DIR)\n const pluginRegistry = new PluginRegistry(REGISTRY_PATH)\n await pluginRegistry.load()\n\n // 1. Check config exists, run setup if not\n const configManager = new ConfigManager()\n const configExists = await configManager.exists()\n\n if (!configExists) {\n const { runSetup } = await import('./core/setup/index.js')\n const shouldStart = await runSetup(configManager, { settingsManager, pluginRegistry })\n if (!shouldStart) process.exit(0)\n }\n\n // 2. Load config (validates with Zod)\n await configManager.load()\n const config = configManager.get()\n initLogger(config.logging)\n log.debug({ configPath: configManager.getConfigPath() }, 'Config loaded')\n\n // First boot: auto-register built-in plugins if registry is empty\n if (pluginRegistry.list().size === 0) {\n await autoRegisterBuiltinPlugins(settingsManager, pluginRegistry, configManager)\n }\n\n // Show banner in foreground TTY mode (not daemon, not piped)\n const isForegroundTTY = !!(process.stdout.isTTY && !process.env.NO_COLOR && config.runMode !== 'daemon')\n if (isForegroundTTY) {\n const { printStartBanner } = await import('./core/setup/index.js')\n await printStartBanner()\n }\n\n // Mute pino during startup, show spinner instead\n let spinner: ReturnType<typeof import('ora').default> | undefined\n if (isForegroundTTY) {\n muteLogger()\n const ora = (await import('ora')).default\n spinner = ora({ text: 'Starting OpenACP...', spinner: 'dots' }).start()\n }\n\n // Post-upgrade dependency check (blocking — must complete before server start)\n try {\n const { runPostUpgradeChecks } = await import('./cli/post-upgrade.js')\n await runPostUpgradeChecks(config)\n } catch (err) {\n log.warn({ err }, 'Post-upgrade check failed')\n }\n\n // Async cleanup of old session logs (non-blocking)\n cleanupOldSessionLogs(config.logging.sessionLogRetentionDays).catch(err =>\n log.warn({ err }, 'Session log cleanup failed')\n )\n\n // 3. Create core\n const core = new OpenACPCore(configManager)\n\n // 3b. Create CommandRegistry and register as service\n const commandRegistry = new CommandRegistry()\n const serviceRegistry = core.lifecycleManager.serviceRegistry\n serviceRegistry.register('command-registry', commandRegistry, 'core')\n\n // 3c. Register system commands\n registerSystemCommands(commandRegistry, core)\n\n // 4. Boot all plugins (services, infrastructure, adapters)\n try {\n // Emit kernel:booted before plugin boot\n core.eventBus.emit('kernel:booted')\n\n // Pass settingsManager and pluginRegistry to LifecycleManager\n ;(core.lifecycleManager as any).settingsManager = settingsManager\n ;(core.lifecycleManager as any).pluginRegistry = pluginRegistry\n\n // Boot all built-in plugins in dependency order\n await core.lifecycleManager.boot(corePlugins)\n\n // Load dev plugin if running in dev mode\n if (opts?.devPluginPath) {\n const { DevPluginLoader } = await import('./core/plugin/dev-loader.js')\n const devLoader = new DevPluginLoader(opts.devPluginPath)\n\n try {\n const devPlugin = await devLoader.load()\n await core.lifecycleManager.boot([devPlugin])\n log.info({ plugin: devPlugin.name, version: devPlugin.version }, 'Dev plugin loaded')\n\n // Watch dist/ directory for changes and hot-reload\n if (!opts.noWatch) {\n const distPath = devLoader.getDistPath()\n let reloadTimer: ReturnType<typeof setTimeout> | null = null\n\n fs.watch(distPath, { recursive: true }, (_eventType, filename) => {\n if (!filename?.endsWith('.js')) return\n\n // Debounce: wait 500ms after last change\n if (reloadTimer) clearTimeout(reloadTimer)\n reloadTimer = setTimeout(async () => {\n try {\n log.info({ filename }, 'Dev plugin changed, reloading...')\n await core.lifecycleManager.unloadPlugin(devPlugin.name)\n const reloaded = await devLoader.load()\n await core.lifecycleManager.boot([reloaded])\n log.info({ plugin: reloaded.name, version: reloaded.version }, 'Dev plugin reloaded')\n } catch (err) {\n log.error({ err }, 'Dev plugin reload failed')\n }\n }, 500)\n })\n\n log.info({ distPath }, 'Watching dev plugin for changes')\n }\n } catch (err) {\n log.error({ err, pluginPath: opts.devPluginPath }, 'Failed to load dev plugin')\n }\n }\n\n // Wire adapters from service registry into core (discovered dynamically)\n for (const { name } of serviceRegistry.list()) {\n if (!name.startsWith('adapter:')) continue\n const adapterName = name.slice('adapter:'.length)\n const adapter = serviceRegistry.get<IChannelAdapter>(name)\n if (adapter) {\n core.registerAdapter(adapterName, adapter)\n log.info({ adapter: adapterName }, 'Adapter registered')\n }\n }\n\n // Wire tunnel service from service registry into core\n const tunnelSvc = serviceRegistry.get<TunnelService>('tunnel')\n if (tunnelSvc) {\n core.tunnelService = tunnelSvc\n }\n\n // Emit system:commands-ready with all registered commands\n core.eventBus.emit('system:commands-ready', { commands: commandRegistry.getAll() })\n\n core.eventBus.emit('system:ready')\n } catch (err) {\n log.error({ err }, 'Plugin boot failed')\n }\n\n if (core.adapters.size === 0) {\n log.error('No channels enabled. Enable at least one channel in config.')\n process.exit(1)\n }\n\n // 5. Setup shutdown handler\n const shutdown = async (signal: string, exitCode = 0) => {\n if (shuttingDown) return\n shuttingDown = true\n log.info({ signal, exitCode }, 'Signal received, shutting down')\n\n try {\n // Lifecycle teardown stops all plugins (adapters, api-server, tunnel, etc.)\n await core.lifecycleManager.shutdown()\n await core.stop()\n } catch (err) {\n log.error({ err }, 'Error during shutdown')\n }\n\n const isDaemon = process.argv.includes('--daemon-child')\n\n // Clean up PID file if running as daemon\n if (isDaemon) {\n const { removePidFile, getPidPath } = await import('./cli/daemon.js')\n removePidFile(getPidPath())\n }\n\n // Self-respawn on restart\n if (exitCode === RESTART_EXIT_CODE) {\n if (isDaemon) {\n // Daemon mode: spawn detached child writing to log file\n const { spawn: spawnChild } = await import('node:child_process')\n const { expandHome } = await import('./core/config/config.js')\n const fs = await import('node:fs')\n const pathMod = await import('node:path')\n\n const cliPath = pathMod.resolve(process.argv[1])\n const resolvedLogDir = expandHome(config.logging.logDir)\n fs.mkdirSync(resolvedLogDir, { recursive: true })\n const logFile = pathMod.join(resolvedLogDir, 'openacp.log')\n const out = fs.openSync(logFile, 'a')\n const err = fs.openSync(logFile, 'a')\n\n const child = spawnChild(process.execPath, [cliPath, '--daemon-child'], {\n detached: true,\n stdio: ['ignore', out, err],\n env: { ...process.env, OPENACP_SKIP_UPDATE_CHECK: '1' },\n })\n fs.closeSync(out)\n fs.closeSync(err)\n child.unref()\n log.info({ newPid: child.pid }, 'Respawned daemon for restart')\n } else if (!process.env.OPENACP_DEV_LOOP) {\n // Foreground production mode: spawn replacement process with inherited stdio\n const { spawn: spawnChild } = await import('node:child_process')\n const child = spawnChild(process.execPath, process.argv.slice(1), {\n stdio: 'inherit',\n env: { ...process.env, OPENACP_SKIP_UPDATE_CHECK: '1' },\n })\n await shutdownLogger()\n child.on('exit', (code) => process.exit(code ?? 0))\n return\n }\n }\n\n await shutdownLogger()\n process.exit(exitCode)\n }\n\n // Expose restart trigger for adapters (e.g. /restart command)\n core.requestRestart = () => shutdown('restart', RESTART_EXIT_CODE)\n\n process.on('SIGINT', () => shutdown('SIGINT'))\n process.on('SIGTERM', () => shutdown('SIGTERM'))\n\n process.on('uncaughtException', (err) => {\n log.error({ err }, 'Uncaught exception')\n })\n\n process.on('unhandledRejection', (err) => {\n log.error({ err }, 'Unhandled rejection')\n })\n\n await core.start()\n\n // 6. Log ready\n if (isForegroundTTY) {\n if (spinner) spinner.stop()\n const ok = (msg: string) => console.log(`\\x1b[32m✓\\x1b[0m ${msg}`)\n ok('Config loaded')\n ok('Dependencies checked')\n const tunnelSvc = core.lifecycleManager.serviceRegistry.get<TunnelService>('tunnel')\n if (tunnelSvc) ok(`Tunnel ready → ${tunnelSvc.getPublicUrl()}`)\n for (const [name] of core.adapters) ok(`${name.charAt(0).toUpperCase() + name.slice(1)} connected`)\n const apiPort = config.api?.port ?? 21420\n if (core.lifecycleManager.serviceRegistry.get('api-server')) ok(`API server on port ${apiPort}`)\n console.log(`\\nOpenACP is running. Press Ctrl+C to stop.\\n`)\n unmuteLogger()\n }\n log.debug({ agents: Object.keys(config.agents) }, 'OpenACP started')\n}\n\n/**\n * Auto-register all built-in plugins when the registry is empty (first boot with new plugin system,\n * or upgrade from legacy config). Also runs legacy config migration for each plugin.\n */\nasync function autoRegisterBuiltinPlugins(\n settingsManager: SettingsManager,\n pluginRegistry: PluginRegistry,\n configManager: ConfigManager,\n): Promise<void> {\n const allPlugins = [\n { name: '@openacp/security', version: '1.0.0', description: 'User access control and session limits' },\n { name: '@openacp/file-service', version: '1.0.0', description: 'File storage and management' },\n { name: '@openacp/context', version: '1.0.0', description: 'Conversation context management' },\n { name: '@openacp/usage', version: '1.0.0', description: 'Token usage tracking and budget enforcement' },\n { name: '@openacp/speech', version: '1.0.0', description: 'Text-to-speech and speech-to-text' },\n { name: '@openacp/notifications', version: '1.0.0', description: 'Cross-session notification routing' },\n { name: '@openacp/tunnel', version: '1.0.0', description: 'Expose local services via tunnel' },\n { name: '@openacp/api-server', version: '1.0.0', description: 'REST API + SSE streaming server' },\n { name: '@openacp/telegram', version: '1.0.0', description: 'Telegram adapter with forum topics' },\n { name: '@openacp/slack', version: '1.0.0', description: 'Slack adapter with channels and threads' },\n ]\n\n // Try to read legacy config for migration\n let legacyConfig: Record<string, unknown> | undefined\n try {\n const cfg = configManager.get()\n if (cfg && typeof cfg === 'object') {\n legacyConfig = cfg as unknown as Record<string, unknown>\n }\n } catch {\n // No config loaded yet — skip migration\n }\n\n // Run legacy migration for each plugin silently\n if (legacyConfig) {\n const pluginModules = await Promise.allSettled([\n import('./plugins/security/index.js'),\n import('./plugins/file-service/index.js'),\n import('./plugins/context/index.js'),\n import('./plugins/speech/index.js'),\n import('./plugins/notifications/index.js'),\n import('./plugins/tunnel/index.js'),\n import('./plugins/api-server/index.js'),\n import('./plugins/telegram/index.js'),\n import('./plugins/slack/index.js'),\n ])\n\n for (const result of pluginModules) {\n if (result.status !== 'fulfilled') continue\n const plugin = result.value.default\n if (plugin?.install) {\n try {\n // Check if settings already exist\n const existing = await settingsManager.loadSettings(plugin.name)\n if (Object.keys(existing).length > 0) continue\n\n // Create a silent install context for migration only\n const { createInstallContext } = await import('./core/plugin/install-context.js')\n const ctx = createInstallContext({\n pluginName: plugin.name,\n settingsManager,\n basePath: PLUGINS_DATA_DIR,\n legacyConfig,\n })\n // Override terminal to be silent\n ctx.terminal = createSilentTerminal()\n await plugin.install(ctx)\n } catch {\n // Silently skip — migration is best-effort\n }\n }\n }\n }\n\n for (const p of allPlugins) {\n pluginRegistry.register(p.name, {\n version: p.version,\n source: 'builtin',\n enabled: true,\n settingsPath: settingsManager.getSettingsPath(p.name),\n description: p.description,\n })\n }\n await pluginRegistry.save()\n log.info('Built-in plugins registered in plugin registry')\n}\n\n/**\n * Create a no-op terminal for silent migration (no user interaction).\n */\nfunction createSilentTerminal(): import('./core/plugin/types.js').TerminalIO {\n const noop = () => {}\n // Throw on interactive prompts — silent migration should only use log/spinner/note.\n // If a plugin enters interactive mode (no legacy config to migrate), this aborts it\n // so the try-catch in autoRegisterBuiltinPlugins skips it gracefully.\n const abort = () => { throw new Error('Silent migration: no interactive input available') }\n return {\n text: async () => abort() as never,\n select: async () => abort() as never,\n confirm: async () => abort() as never,\n password: async () => abort() as never,\n multiselect: async () => abort() as never,\n log: { info: noop, success: noop, warning: noop, error: noop, step: noop },\n spinner: () => ({ start: noop, stop: noop, fail: noop }),\n note: noop,\n cancel: noop,\n }\n}\n\n// Direct execution for dev (node dist/main.js)\nconst isDirectExecution = process.argv[1]?.endsWith('main.js')\nif (isDirectExecution) {\n startServer().catch((err) => {\n log.error({ err }, 'Fatal error')\n process.exit(1)\n })\n}\n"],"mappings":"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","names":["fs"]}
@@ -1,9 +0,0 @@
1
- import {
2
- notifications_default
3
- } from "./chunk-SNPYTMPR.js";
4
- import "./chunk-WXVT3AOY.js";
5
- import "./chunk-VUNV25KB.js";
6
- export {
7
- notifications_default as default
8
- };
9
- //# sourceMappingURL=notifications-D5BRDNSU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/plugin/plugin-installer.ts"],"sourcesContent":["import { exec } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport * as fs from 'node:fs'\nimport * as os from 'node:os'\nimport * as path from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nconst execAsync = promisify(exec)\n\n/**\n * Import a package resolved from a specific directory (not the project root).\n * Reads the package's package.json to find the ESM entry point, then imports by file path.\n */\nexport async function importFromDir(packageName: string, dir: string): Promise<any> {\n const pkgDir = path.join(dir, 'node_modules', ...packageName.split('/'))\n const pkgJsonPath = path.join(pkgDir, 'package.json')\n const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'))\n\n // Resolve entry: exports[\".\"].import > main > index.js\n let entry: string\n const exportsMain = pkgJson.exports?.['.']\n if (typeof exportsMain === 'string') {\n entry = exportsMain\n } else if (exportsMain?.import) {\n entry = exportsMain.import\n } else {\n entry = pkgJson.main ?? 'index.js'\n }\n\n const entryPath = path.join(pkgDir, entry)\n return import(pathToFileURL(entryPath).href)\n}\n\n/**\n * Install an npm package to the plugins directory and return the loaded module.\n * Tries to import first; if not installed, runs npm install asynchronously.\n */\nexport async function installNpmPlugin(packageName: string, pluginsDir?: string): Promise<any> {\n const dir = pluginsDir ?? path.join(os.homedir(), '.openacp', 'plugins')\n\n // Try import from plugins dir first — already installed\n try {\n return await importFromDir(packageName, dir)\n } catch {\n // Not installed, proceed with install\n }\n\n await execAsync(`npm install ${packageName} --prefix \"${dir}\" --save`, {\n timeout: 60000,\n })\n\n return await importFromDir(packageName, dir)\n}\n"],"mappings":";;;AAAA,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAC1B,YAAY,QAAQ;AACpB,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,qBAAqB;AAE9B,IAAM,YAAY,UAAU,IAAI;AAMhC,eAAsB,cAAc,aAAqB,KAA2B;AAClF,QAAM,SAAc,UAAK,KAAK,gBAAgB,GAAG,YAAY,MAAM,GAAG,CAAC;AACvE,QAAM,cAAmB,UAAK,QAAQ,cAAc;AACpD,QAAM,UAAU,KAAK,MAAS,gBAAa,aAAa,OAAO,CAAC;AAGhE,MAAI;AACJ,QAAM,cAAc,QAAQ,UAAU,GAAG;AACzC,MAAI,OAAO,gBAAgB,UAAU;AACnC,YAAQ;AAAA,EACV,WAAW,aAAa,QAAQ;AAC9B,YAAQ,YAAY;AAAA,EACtB,OAAO;AACL,YAAQ,QAAQ,QAAQ;AAAA,EAC1B;AAEA,QAAM,YAAiB,UAAK,QAAQ,KAAK;AACzC,SAAO,OAAO,cAAc,SAAS,EAAE;AACzC;AAMA,eAAsB,iBAAiB,aAAqB,YAAmC;AAC7F,QAAM,MAAM,cAAmB,UAAQ,WAAQ,GAAG,YAAY,SAAS;AAGvE,MAAI;AACF,WAAO,MAAM,cAAc,aAAa,GAAG;AAAA,EAC7C,QAAQ;AAAA,EAER;AAEA,QAAM,UAAU,eAAe,WAAW,cAAc,GAAG,YAAY;AAAA,IACrE,SAAS;AAAA,EACX,CAAC;AAED,SAAO,MAAM,cAAc,aAAa,GAAG;AAC7C;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/setup/wizard.ts","../../src/core/setup/types.ts","../../src/core/setup/helpers.ts","../../src/core/setup/setup-agents.ts","../../src/core/setup/setup-workspace.ts","../../src/core/setup/setup-run-mode.ts","../../src/core/setup/setup-integrations.ts","../../src/core/setup/setup-channels.ts"],"sourcesContent":["import * as clack from \"@clack/prompts\";\nimport type { Config, ConfigManager } from \"../config/config.js\";\nimport type { ChannelId } from \"./types.js\";\nimport type { OnboardSection } from \"./types.js\";\nimport { ONBOARD_SECTION_OPTIONS } from \"./types.js\";\nimport { guardCancel, ok, fail, printStartBanner, summarizeConfig } from \"./helpers.js\";\nimport { setupAgents } from \"./setup-agents.js\";\nimport { setupWorkspace } from \"./setup-workspace.js\";\nimport { setupRunMode } from \"./setup-run-mode.js\";\nimport { setupIntegrations } from \"./setup-integrations.js\";\nimport { configureChannels } from \"./setup-channels.js\";\nimport type { SettingsManager } from \"../plugin/settings-manager.js\";\nimport type { PluginRegistry } from \"../plugin/plugin-registry.js\";\n\n// ─── First-run setup ───\n\nexport async function runSetup(\n configManager: ConfigManager,\n opts?: { skipRunMode?: boolean; settingsManager?: SettingsManager; pluginRegistry?: PluginRegistry },\n): Promise<boolean> {\n await printStartBanner();\n clack.intro(\"Let's set up OpenACP\");\n\n const { settingsManager, pluginRegistry } = opts ?? {};\n\n try {\n if (!settingsManager || !pluginRegistry) {\n console.log(fail('Plugin system not initialized. Cannot set up channels.'));\n return false;\n }\n\n // Ask user which channels to set up\n const channelChoices = guardCancel(\n await clack.multiselect({\n message: 'Which channels do you want to set up?',\n options: [\n { value: 'telegram' as const, label: 'Telegram', hint: 'built-in' },\n { value: 'discord' as const, label: 'Discord', hint: 'will install @openacp/adapter-discord' },\n ],\n required: true,\n initialValues: ['telegram' as const],\n }),\n ) as ChannelId[];\n\n // Calculate total steps dynamically: channel(s) + workspace + run mode\n const channelSteps = channelChoices.length;\n const runModeSteps = opts?.skipRunMode ? 0 : 1;\n const totalSteps = channelSteps + 1 + runModeSteps; // + workspace + optional run mode\n\n let currentStep = 0;\n\n const { createInstallContext } = await import('../plugin/install-context.js');\n\n for (const channelId of channelChoices) {\n currentStep++;\n\n if (channelId === 'telegram') {\n const telegramPlugin = (await import('../../plugins/telegram/index.js')).default;\n const ctx = createInstallContext({\n pluginName: telegramPlugin.name,\n settingsManager,\n basePath: settingsManager.getBasePath(),\n });\n await telegramPlugin.install!(ctx);\n pluginRegistry.register(telegramPlugin.name, {\n version: telegramPlugin.version,\n source: 'builtin',\n enabled: true,\n settingsPath: settingsManager.getSettingsPath(telegramPlugin.name),\n description: telegramPlugin.description,\n });\n }\n\n if (channelId === 'discord') {\n await installAndSetupDiscord(settingsManager, pluginRegistry);\n }\n }\n\n const { defaultAgent } = await setupAgents();\n\n // Offer Claude CLI integration\n await setupIntegrations();\n\n currentStep++;\n const workspace = await setupWorkspace({ stepNum: currentStep, totalSteps });\n\n let runMode: 'foreground' | 'daemon' = 'foreground';\n let autoStart = false;\n if (!opts?.skipRunMode) {\n currentStep++;\n const result = await setupRunMode({ stepNum: currentStep, totalSteps });\n runMode = result.runMode;\n autoStart = result.autoStart;\n }\n\n const security = {\n allowedUserIds: [] as string[],\n maxConcurrentSessions: 20,\n sessionTimeoutMinutes: 60,\n };\n\n const config: Config = {\n channels: {},\n agents: {},\n defaultAgent,\n workspace,\n security,\n logging: {\n level: \"info\",\n logDir: \"~/.openacp/logs\",\n maxFileSize: \"10m\",\n maxFiles: 7,\n sessionLogRetentionDays: 30,\n },\n runMode,\n autoStart,\n api: {\n port: 21420,\n host: '127.0.0.1',\n },\n sessionStore: { ttlDays: 30 },\n tunnel: {\n enabled: true,\n port: 3100,\n provider: \"cloudflare\",\n options: {},\n maxUserTunnels: 5,\n storeTtlMinutes: 60,\n auth: { enabled: false },\n },\n usage: {\n enabled: true,\n warningThreshold: 0.8,\n currency: \"USD\",\n retentionDays: 90,\n },\n integrations: {},\n speech: {\n stt: { provider: null, providers: {} },\n tts: { provider: null, providers: {} },\n },\n };\n\n try {\n await configManager.writeNew(config);\n } catch (writeErr) {\n console.log(\n fail(`Could not save config: ${(writeErr as Error).message}`),\n );\n return false;\n }\n\n // Auto-register remaining built-in plugins in the registry\n if (settingsManager && pluginRegistry) {\n await registerBuiltinPlugins(settingsManager, pluginRegistry);\n await pluginRegistry.save();\n }\n\n clack.outro(`Config saved to ${configManager.getConfigPath()}`);\n\n if (!opts?.skipRunMode) {\n console.log(ok(\"Starting OpenACP...\"));\n console.log(\"\");\n }\n\n return true;\n } catch (err) {\n if ((err as Error).name === \"ExitPromptError\") {\n clack.cancel(\"Setup cancelled.\");\n return false;\n }\n throw err;\n }\n}\n\n/**\n * Install @openacp/adapter-discord from npm if needed, then run its install() hook.\n */\nasync function installAndSetupDiscord(\n settingsManager: SettingsManager,\n pluginRegistry: PluginRegistry,\n): Promise<void> {\n const packageName = '@openacp/adapter-discord';\n\n // Try to import first — if not installed, install it\n let discordPlugin: any;\n const pluginsDir = settingsManager.getBasePath();\n try {\n const { importFromDir } = await import('../plugin/plugin-installer.js');\n const mod = await importFromDir(packageName, pluginsDir);\n discordPlugin = mod.default;\n } catch {\n const spinner = clack.spinner();\n spinner.start(`Installing ${packageName}...`);\n try {\n const { installNpmPlugin } = await import('../plugin/plugin-installer.js');\n const mod = await installNpmPlugin(packageName, pluginsDir);\n discordPlugin = mod.default;\n spinner.stop(ok(`${packageName} installed`));\n } catch (installErr) {\n spinner.stop(fail(`Failed to install ${packageName}: ${(installErr as Error).message}`));\n console.log(fail('You can install it later with: openacp plugin add @openacp/adapter-discord'));\n return;\n }\n }\n\n const { createInstallContext } = await import('../plugin/install-context.js');\n const ctx = createInstallContext({\n pluginName: discordPlugin.name,\n settingsManager,\n basePath: settingsManager.getBasePath(),\n });\n\n if (discordPlugin.install) {\n await discordPlugin.install(ctx);\n }\n\n pluginRegistry.register(discordPlugin.name, {\n version: discordPlugin.version,\n source: 'npm',\n enabled: true,\n settingsPath: settingsManager.getSettingsPath(discordPlugin.name),\n description: discordPlugin.description,\n });\n}\n\n/**\n * Register all built-in plugins that haven't been registered yet.\n * Called after first-run setup to populate the registry with defaults.\n */\nasync function registerBuiltinPlugins(\n settingsManager: SettingsManager,\n pluginRegistry: PluginRegistry,\n): Promise<void> {\n const builtinPlugins = [\n { name: '@openacp/security', version: '1.0.0', description: 'User access control and session limits' },\n { name: '@openacp/file-service', version: '1.0.0', description: 'File storage and management' },\n { name: '@openacp/context', version: '1.0.0', description: 'Conversation context management' },\n { name: '@openacp/usage', version: '1.0.0', description: 'Token usage tracking and budget enforcement' },\n { name: '@openacp/speech', version: '1.0.0', description: 'Text-to-speech and speech-to-text' },\n { name: '@openacp/notifications', version: '1.0.0', description: 'Cross-session notification routing' },\n { name: '@openacp/tunnel', version: '1.0.0', description: 'Expose local services via tunnel' },\n { name: '@openacp/api-server', version: '1.0.0', description: 'REST API + SSE streaming server' },\n ];\n\n for (const p of builtinPlugins) {\n if (!pluginRegistry.get(p.name)) {\n pluginRegistry.register(p.name, {\n version: p.version,\n source: 'builtin',\n enabled: true,\n settingsPath: settingsManager.getSettingsPath(p.name),\n description: p.description,\n });\n }\n }\n}\n\n// ─── Reconfigure (section-based, for existing config) ───\n\ntype ReconfigureSection = OnboardSection | \"__continue\";\n\nasync function selectSection(hasSelection: boolean): Promise<ReconfigureSection> {\n return guardCancel(\n await clack.select({\n message: \"Select sections to configure\",\n options: [\n ...ONBOARD_SECTION_OPTIONS,\n {\n value: \"__continue\" as const,\n label: \"Continue\",\n hint: hasSelection ? \"Done\" : \"Skip for now\",\n },\n ],\n initialValue: ONBOARD_SECTION_OPTIONS[0].value,\n }),\n ) as ReconfigureSection;\n}\n\nexport async function runReconfigure(configManager: ConfigManager): Promise<void> {\n await printStartBanner();\n clack.intro(\"OpenACP — Reconfigure\");\n\n try {\n await configManager.load();\n let config = configManager.get();\n\n // Show current config summary\n clack.note(summarizeConfig(config), \"Current configuration\");\n\n let ranSection = false;\n\n while (true) {\n const choice = await selectSection(ranSection);\n if (choice === \"__continue\") break;\n ranSection = true;\n\n if (choice === \"channels\") {\n const result = await configureChannels(config);\n if (result.changed) {\n // IMPORTANT: Use writeNew() instead of save() because save() uses deepMerge\n // which cannot delete keys. Channel deletion (delete next.channels.telegram)\n // would be silently ignored by deepMerge. writeNew() overwrites the full config.\n config = { ...config, channels: result.config.channels };\n await configManager.writeNew(config);\n }\n }\n\n if (choice === \"agents\") {\n const { defaultAgent } = await setupAgents();\n await configManager.save({ defaultAgent });\n config = configManager.get();\n }\n\n if (choice === \"workspace\") {\n const { baseDir } = await setupWorkspace({\n existing: config.workspace.baseDir,\n });\n await configManager.save({ workspace: { baseDir } });\n config = configManager.get();\n }\n\n if (choice === \"runMode\") {\n const result = await setupRunMode({\n existing: { runMode: config.runMode, autoStart: config.autoStart },\n });\n await configManager.save({\n runMode: result.runMode,\n autoStart: result.autoStart,\n });\n config = configManager.get();\n }\n\n if (choice === \"integrations\") {\n await setupIntegrations(config);\n }\n }\n\n if (!ranSection) {\n clack.outro(\"No changes made.\");\n return;\n }\n\n clack.outro(`Config saved to ${configManager.getConfigPath()}`);\n } catch (err) {\n if ((err as Error).name === \"ExitPromptError\") {\n clack.cancel(\"Setup cancelled.\");\n return;\n }\n throw err;\n }\n}\n","export type OnboardSection =\n | \"channels\"\n | \"agents\"\n | \"workspace\"\n | \"runMode\"\n | \"integrations\";\n\nexport type ConfiguredChannelAction = \"modify\" | \"disable\" | \"delete\" | \"skip\";\n\nexport type ChannelId = string;\n\nexport type ChannelStatus = {\n id: ChannelId;\n label: string;\n configured: boolean;\n enabled: boolean;\n hint?: string;\n};\n\nexport const ONBOARD_SECTION_OPTIONS: Array<{\n value: OnboardSection;\n label: string;\n hint: string;\n}> = [\n { value: \"channels\", label: \"Channels\", hint: \"Link/update messaging platforms\" },\n { value: \"agents\", label: \"Agents\", hint: \"Install agents, change default\" },\n { value: \"workspace\", label: \"Workspace\", hint: \"Set workspace directory\" },\n { value: \"runMode\", label: \"Run mode\", hint: \"Foreground/daemon, auto-start\" },\n { value: \"integrations\", label: \"Integrations\", hint: \"Claude CLI session transfer\" },\n];\n\nexport const CHANNEL_META: Record<string, { label: string; method: string }> = {\n telegram: { label: \"Telegram\", method: \"Bot API\" },\n discord: { label: \"Discord\", method: \"Bot API\" },\n};\n\n","import * as clack from \"@clack/prompts\";\nimport type { Config } from \"../config/config.js\";\n\n// --- ANSI colors ---\n\nexport const c = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n red: \"\\x1b[31m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n};\n\nexport const ok = (msg: string) =>\n `${c.green}${c.bold}✓${c.reset} ${c.green}${msg}${c.reset}`;\nexport const warn = (msg: string) => `${c.yellow}⚠ ${msg}${c.reset}`;\nexport const fail = (msg: string) => `${c.red}✗ ${msg}${c.reset}`;\nexport const step = (n: number, total: number, title: string) =>\n `\\n${c.cyan}${c.bold}[${n}/${total}]${c.reset} ${c.bold}${title}${c.reset}\\n`;\nexport const dim = (msg: string) => `${c.dim}${msg}${c.reset}`;\n\nexport function guardCancel<T>(value: T | symbol): T {\n if (clack.isCancel(value)) {\n clack.cancel(\"Setup cancelled.\");\n process.exit(0);\n }\n return value as T;\n}\n\n// --- Banner ---\n\nfunction applyGradient(text: string): string {\n const colors = [135, 99, 63, 33, 39, 44, 44];\n const lines = text.split(\"\\n\");\n return lines\n .map((line, i) => {\n const colorIdx = Math.min(i, colors.length - 1);\n return `\\x1b[38;5;${colors[colorIdx]}m${line}\\x1b[0m`;\n })\n .join(\"\\n\");\n}\n\nconst BANNER = `\n ██████╗ ██████╗ ███████╗███╗ ██╗ █████╗ ██████╗██████╗\n ██╔═══██╗██╔══██╗██╔════╝████╗ ██║██╔══██╗██╔════╝██╔══██╗\n ██║ ██║██████╔╝█████╗ ██╔██╗ ██║███████║██║ ██████╔╝\n ██║ ██║██╔═══╝ ██╔══╝ ██║╚██╗██║██╔══██║██║ ██╔═══╝\n ╚██████╔╝██║ ███████╗██║ ╚████║██║ ██║╚██████╗██║\n ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═════╝╚═╝\n`;\n\nexport async function printStartBanner(): Promise<void> {\n let version = \"0.0.0\";\n try {\n const { getCurrentVersion } = await import(\"../../cli/version.js\");\n version = getCurrentVersion();\n } catch {\n // ignore\n }\n console.log(applyGradient(BANNER));\n console.log(`${c.dim} AI coding agents, anywhere. v${version}${c.reset}\\n`);\n}\n\n// --- Config summary ---\n\nexport function summarizeConfig(config: Config): string {\n const lines: string[] = [];\n\n // Channels\n const channelStatuses: string[] = [];\n for (const [id, meta] of Object.entries({\n telegram: \"Telegram\",\n discord: \"Discord\",\n })) {\n const ch = config.channels[id] as { enabled?: boolean } | undefined;\n if (ch?.enabled) {\n channelStatuses.push(`${meta} (enabled)`);\n } else if (ch && Object.keys(ch).length > 1) {\n channelStatuses.push(`${meta} (disabled)`);\n } else {\n channelStatuses.push(`${meta} (not configured)`);\n }\n }\n lines.push(`Channels: ${channelStatuses.join(\", \")}`);\n\n // Default agent\n lines.push(`Default agent: ${config.defaultAgent}`);\n\n // Workspace\n lines.push(`Workspace: ${config.workspace.baseDir}`);\n\n // Run mode\n lines.push(`Run mode: ${config.runMode}${config.autoStart ? \" (auto-start)\" : \"\"}`);\n\n return lines.join(\"\\n\");\n}\n","import { execFileSync } from \"node:child_process\";\nimport * as clack from \"@clack/prompts\";\nimport { commandExists } from \"../agents/agent-dependencies.js\";\nimport { guardCancel, ok, warn, c } from \"./helpers.js\";\n\nconst KNOWN_AGENTS: Array<{ name: string; commands: string[] }> = [\n // claude-agent-acp is bundled as a dependency — no detection needed, but\n // kept here so detectAgents() still returns it for display purposes.\n { name: \"claude\", commands: [\"claude-agent-acp\"] },\n { name: \"codex\", commands: [\"codex\"] },\n];\n\nexport async function detectAgents(): Promise<\n Array<{ name: string; command: string }>\n> {\n const found: Array<{ name: string; command: string }> = [];\n for (const agent of KNOWN_AGENTS) {\n // Find all available commands for this agent (PATH + node_modules/.bin)\n const available: string[] = [];\n for (const cmd of agent.commands) {\n if (commandExists(cmd)) {\n available.push(cmd);\n }\n }\n if (available.length > 0) {\n // Prefer claude-agent-acp over claude/claude-code (priority order)\n found.push({ name: agent.name, command: available[0] });\n }\n }\n return found;\n}\n\nexport async function validateAgentCommand(command: string): Promise<boolean> {\n try {\n execFileSync(\"which\", [command], { stdio: \"pipe\" });\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function setupAgents(): Promise<{\n defaultAgent: string;\n}> {\n const { AgentCatalog } = await import(\"../agents/agent-catalog.js\");\n const { muteLogger, unmuteLogger } = await import(\"../utils/log.js\");\n\n muteLogger();\n const catalog = new AgentCatalog();\n catalog.load();\n\n const s = clack.spinner();\n s.start(\"Checking available agents...\");\n await catalog.refreshRegistryIfStale();\n\n // Claude is always pre-installed (bundled dependency)\n if (!catalog.getInstalledAgent(\"claude\")) {\n const claudeRegistry = catalog.findRegistryAgent(\"claude-acp\");\n if (claudeRegistry) {\n await catalog.install(\"claude-acp\");\n } else {\n // Fallback: register bundled claude-agent-acp directly\n const { AgentStore } = await import(\"../agents/agent-store.js\");\n const store = new AgentStore();\n store.load();\n store.addAgent(\"claude\", {\n registryId: \"claude-acp\",\n name: \"Claude Agent\",\n version: \"bundled\",\n distribution: \"npx\",\n command: \"npx\",\n args: [\"@zed-industries/claude-agent-acp\"],\n env: {},\n installedAt: new Date().toISOString(),\n binaryPath: null,\n });\n }\n }\n s.stop(ok(\"Claude Agent ready\"));\n unmuteLogger();\n\n const available = catalog.getAvailable();\n const installed = available.filter((a) => a.installed);\n const installable = available.filter((a) => !a.installed && a.available);\n\n // Offer agent selection — show installed agents as pre-checked + installable agents\n if (installed.length > 0 || installable.length > 0) {\n // Deduplicate by key AND name\n const seen = new Set<string>();\n const options: Array<{ label: string; value: string }> = [];\n\n for (const a of installed) {\n const dedupeKey = `${a.key}::${a.name}`;\n if (seen.has(dedupeKey)) continue;\n seen.add(dedupeKey);\n options.push({\n label: `${a.name} (installed)`,\n value: a.key,\n });\n }\n for (const a of installable) {\n const dedupeKey = `${a.key}::${a.name}`;\n if (seen.has(dedupeKey)) continue;\n seen.add(dedupeKey);\n options.push({\n label: `${a.name} (${a.distribution})`,\n value: a.key,\n });\n }\n\n const installedKeys = installed.map(a => a.key);\n const selected = guardCancel(\n await clack.autocompleteMultiselect({\n message: \"Install additional agents? (type to search, Space to select)\",\n options,\n initialValues: installedKeys,\n required: false,\n }),\n ) as string[];\n\n for (const key of selected) {\n const regAgent = catalog.findRegistryAgent(key);\n if (regAgent) {\n const installSpinner = clack.spinner();\n installSpinner.start(`Installing ${regAgent.name}...`);\n muteLogger();\n const result = await catalog.install(key);\n unmuteLogger();\n if (result.ok) {\n installSpinner.stop(ok(\"done\"));\n } else {\n installSpinner.stop(warn(`skipped: ${result.error}`));\n }\n }\n }\n }\n\n // Choose default agent\n const installedAgents = Object.keys(catalog.getInstalledEntries());\n let defaultAgent = \"claude\";\n\n if (installedAgents.length > 1) {\n defaultAgent = guardCancel(\n await clack.select({\n message: \"Which agent should be the default?\",\n options: installedAgents.map((key) => {\n const agent = catalog.getInstalledAgent(key)!;\n return { label: `${agent.name} (${key})`, value: key };\n }),\n initialValue: \"claude\",\n }),\n ) as string;\n }\n\n console.log(ok(`Default agent: ${c.bold}${defaultAgent}${c.reset}`));\n return { defaultAgent };\n}\n","import * as clack from \"@clack/prompts\";\nimport { guardCancel, step } from \"./helpers.js\";\n\nexport async function setupWorkspace(opts?: {\n existing?: string;\n stepNum?: number;\n totalSteps?: number;\n}): Promise<{ baseDir: string }> {\n const { existing, stepNum, totalSteps } = opts ?? {};\n if (stepNum != null && totalSteps != null) {\n console.log(step(stepNum, totalSteps, \"Workspace\"));\n }\n\n const baseDir = guardCancel(\n await clack.text({\n message: \"Base directory for workspaces:\",\n initialValue: existing ?? \"~/openacp-workspace\",\n validate: (val) =>\n (val ?? \"\").toString().trim().length > 0 ? undefined : \"Path cannot be empty\",\n }),\n ) as string;\n\n return { baseDir: baseDir.trim().replace(/^['\"]|['\"]$/g, \"\") };\n}\n","import * as clack from \"@clack/prompts\";\nimport { expandHome } from \"../config/config.js\";\nimport { guardCancel, ok, warn, dim, step } from \"./helpers.js\";\n\nexport async function setupRunMode(opts?: {\n existing?: { runMode: string; autoStart: boolean };\n stepNum?: number;\n totalSteps?: number;\n}): Promise<{ runMode: 'foreground' | 'daemon'; autoStart: boolean }> {\n const { existing, stepNum, totalSteps } = opts ?? {};\n if (stepNum != null && totalSteps != null) {\n console.log(step(stepNum, totalSteps, 'Run Mode'));\n }\n\n // Don't show daemon option on Windows\n if (process.platform === 'win32') {\n console.log(dim(' (Daemon mode not available on Windows)'));\n return { runMode: 'foreground', autoStart: false };\n }\n\n const initialValue = (existing?.runMode === 'daemon' ? 'daemon' : 'foreground') as 'foreground' | 'daemon';\n\n const mode = guardCancel(\n await clack.select({\n message: 'How would you like to run OpenACP?',\n options: [\n {\n label: 'Background (daemon)',\n value: 'daemon' as const,\n hint: 'Runs silently, auto-starts on boot. Manage with: openacp status | stop | logs',\n },\n {\n label: 'Foreground (terminal)',\n value: 'foreground' as const,\n hint: 'Runs in current terminal session. Start with: openacp',\n },\n ],\n initialValue,\n }),\n );\n\n const wasDaemon = existing?.runMode === 'daemon';\n\n if (mode === 'daemon') {\n const { installAutoStart, isAutoStartSupported } = await import('../../cli/autostart.js');\n const { muteLogger, unmuteLogger } = await import('../utils/log.js');\n const autoStart = isAutoStartSupported();\n if (autoStart) {\n muteLogger();\n const result = installAutoStart(expandHome('~/.openacp/logs'));\n unmuteLogger();\n if (result.success) {\n console.log(ok('Auto-start on boot enabled'));\n } else {\n console.log(warn(`Auto-start failed: ${result.error}`));\n }\n }\n return { runMode: 'daemon', autoStart };\n }\n\n // Switching from daemon → foreground: stop daemon + uninstall autostart\n if (wasDaemon) {\n const { muteLogger, unmuteLogger } = await import('../utils/log.js');\n muteLogger();\n try {\n const { stopDaemon } = await import('../../cli/daemon.js');\n const result = await stopDaemon();\n unmuteLogger();\n if (result.stopped) {\n console.log(ok(`Daemon stopped (was PID ${result.pid})`));\n }\n } catch {\n unmuteLogger();\n // Daemon may not be running\n }\n muteLogger();\n try {\n const { uninstallAutoStart } = await import('../../cli/autostart.js');\n uninstallAutoStart();\n unmuteLogger();\n } catch {\n unmuteLogger();\n // ignore\n }\n }\n\n return { runMode: 'foreground', autoStart: false };\n}\n","import * as clack from \"@clack/prompts\";\nimport type { Config } from \"../config/config.js\";\nimport { guardCancel } from \"./helpers.js\";\n\nexport async function setupIntegrations(config?: Config): Promise<void> {\n const claudeIntegration = (config?.integrations as Record<string, unknown> | undefined)?.claude as { installed?: boolean } | undefined;\n const isInstalled = claudeIntegration?.installed === true;\n\n const installClaude = guardCancel(\n await clack.confirm({\n message: isInstalled\n ? \"Claude CLI integration is installed. Reinstall?\"\n : \"Install session transfer for Claude? (enables /openacp:handoff in your terminal)\",\n initialValue: !isInstalled,\n }),\n );\n\n if (installClaude) {\n try {\n const { getIntegration } = await import(\"../../cli/integrate.js\");\n const integration = getIntegration(\"claude\");\n if (integration) {\n for (const item of integration.items) {\n const result = await item.install();\n for (const log of result.logs) console.log(` ${log}`);\n }\n }\n console.log(\"Claude CLI integration installed.\\n\");\n } catch (err) {\n console.log(`Could not install Claude CLI integration: ${err instanceof Error ? err.message : err}`);\n console.log(\" You can install it later with: openacp integrate claude\\n\");\n }\n }\n}\n","import * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport * as clack from \"@clack/prompts\";\nimport type { Config } from \"../config/config.js\";\nimport type { ConfiguredChannelAction, ChannelId, ChannelStatus } from \"./types.js\";\nimport { CHANNEL_META } from \"./types.js\";\nimport { guardCancel, ok, c } from \"./helpers.js\";\n\nexport function getChannelStatuses(config: Config): ChannelStatus[] {\n const statuses: ChannelStatus[] = [];\n\n for (const [id, meta] of Object.entries(CHANNEL_META) as [ChannelId, typeof CHANNEL_META[ChannelId]][]) {\n const ch = config.channels[id] as Record<string, unknown> | undefined;\n const enabled = ch?.enabled === true;\n const configured = !!ch && Object.keys(ch).length > 1;\n\n let hint: string | undefined;\n if (id === \"telegram\" && ch?.botToken && typeof ch.botToken === \"string\" && ch.botToken !== \"YOUR_BOT_TOKEN_HERE\") {\n hint = `Chat ID: ${ch.chatId}`;\n }\n if (id === \"discord\" && ch?.guildId) {\n hint = `Guild: ${ch.guildId}`;\n }\n\n statuses.push({ id, label: meta.label, configured, enabled, hint });\n }\n\n return statuses;\n}\n\nexport function noteChannelStatus(config: Config): void {\n const statuses = getChannelStatuses(config);\n const lines = statuses.map((s) => {\n const status = s.enabled ? \"enabled\" : s.configured ? \"disabled\" : \"not configured\";\n const hintStr = s.hint ? ` — ${s.hint}` : \"\";\n return ` ${s.label}: ${status}${hintStr}`;\n });\n\n console.log(\"\");\n console.log(`${c.bold} Channel status${c.reset}`);\n for (const line of lines) console.log(line);\n console.log(\"\");\n}\n\nasync function promptConfiguredAction(label: string): Promise<ConfiguredChannelAction> {\n return guardCancel(\n await clack.select({\n message: `${label} already configured. What do you want to do?`,\n options: [\n { value: \"modify\" as const, label: \"Modify settings\" },\n { value: \"disable\" as const, label: \"Disable bot\" },\n { value: \"delete\" as const, label: \"Delete config\" },\n { value: \"skip\" as const, label: \"Skip (leave as-is)\" },\n ],\n initialValue: \"modify\" as const,\n }),\n );\n}\n\nasync function configureViaPlugin(channelId: ChannelId): Promise<void> {\n const pluginImports: Record<ChannelId, () => Promise<any>> = {\n telegram: () => import('../../plugins/telegram/index.js'),\n discord: async () => {\n const pkg = '@openacp/adapter-discord';\n try {\n return await import(/* webpackIgnore: true */ pkg);\n } catch {\n throw new Error(\n `${pkg} is not installed. Run: openacp plugin add ${pkg}`,\n );\n }\n },\n };\n\n const importer = pluginImports[channelId];\n if (!importer) return;\n\n const { SettingsManager } = await import('../plugin/settings-manager.js');\n const { createInstallContext } = await import('../plugin/install-context.js');\n const basePath = path.join(os.homedir(), '.openacp', 'plugins');\n const settingsManager = new SettingsManager(basePath);\n\n const pluginModule = await importer();\n const plugin = pluginModule.default;\n\n if (plugin?.configure) {\n const ctx = createInstallContext({\n pluginName: plugin.name,\n settingsManager,\n basePath,\n });\n await plugin.configure(ctx);\n }\n}\n\nexport async function configureChannels(config: Config): Promise<{ config: Config; changed: boolean }> {\n const next = structuredClone(config);\n let changed = false;\n\n noteChannelStatus(next);\n\n while (true) {\n const statuses = getChannelStatuses(next);\n const options = statuses.map((s) => {\n const status = s.enabled ? \"enabled\" : s.configured ? \"disabled\" : \"not configured\";\n return {\n value: s.id,\n label: `${s.label} (${CHANNEL_META[s.id].method})`,\n hint: status + (s.hint ? ` · ${s.hint}` : \"\"),\n };\n });\n\n const choice = guardCancel(\n await clack.select({\n message: \"Select a channel\",\n options: [\n ...options,\n { value: \"__done__\" as const, label: \"Finished\" },\n ],\n }),\n );\n\n if (choice === \"__done__\") break;\n\n const channelId = choice as ChannelId;\n const meta = CHANNEL_META[channelId];\n const existing = next.channels[channelId] as Record<string, unknown> | undefined;\n const isConfigured = !!existing && Object.keys(existing).length > 1;\n\n if (isConfigured) {\n const action = await promptConfiguredAction(meta.label);\n\n if (action === \"skip\") continue;\n if (action === \"disable\") {\n (next.channels[channelId] as Record<string, unknown>).enabled = false;\n changed = true;\n console.log(ok(`${meta.label} disabled`));\n continue;\n }\n if (action === \"delete\") {\n const confirmed = guardCancel(\n await clack.confirm({\n message: `Delete ${meta.label} config? This cannot be undone.`,\n initialValue: false,\n }),\n );\n if (confirmed) {\n delete next.channels[channelId];\n changed = true;\n console.log(ok(`${meta.label} config deleted`));\n }\n continue;\n }\n // action === \"modify\" — fall through to plugin configure\n }\n\n // Run channel configuration via plugin configure()\n await configureViaPlugin(channelId);\n changed = true;\n }\n\n return { config: next, changed };\n}\n"],"mappings":"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","names":["clack","text","clack","clack","clack","clack","clack","spinner"]}
@@ -1,8 +0,0 @@
1
- import {
2
- slack_default
3
- } from "./chunk-ZNSO2QVC.js";
4
- import "./chunk-VUNV25KB.js";
5
- export {
6
- slack_default as default
7
- };
8
- //# sourceMappingURL=slack-2XNWBOWH.js.map
@@ -1,9 +0,0 @@
1
- import {
2
- speech_default
3
- } from "./chunk-AD3X6DGK.js";
4
- import "./chunk-WIIZNPCR.js";
5
- import "./chunk-VUNV25KB.js";
6
- export {
7
- speech_default as default
8
- };
9
- //# sourceMappingURL=speech-2GHQNRIO.js.map
@@ -1,8 +0,0 @@
1
- import {
2
- telegram_default
3
- } from "./chunk-P2G275VD.js";
4
- import "./chunk-VUNV25KB.js";
5
- export {
6
- telegram_default as default
7
- };
8
- //# sourceMappingURL=telegram-E65IWFBW.js.map
@@ -1,8 +0,0 @@
1
- import {
2
- tunnel_default
3
- } from "./chunk-KMMEFXIE.js";
4
- import "./chunk-VUNV25KB.js";
5
- export {
6
- tunnel_default as default
7
- };
8
- //# sourceMappingURL=tunnel-45HA72MB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}