@theowlops/boombot 0.0.0-stage → 1.1.0

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 (544) hide show
  1. package/README.md +69 -3
  2. package/dist/LICENSE +21 -0
  3. package/dist/bin/boombot.js +16 -0
  4. package/dist/cli/api-key.js +123 -0
  5. package/dist/cli/bin-bun.js +17 -0
  6. package/dist/cli/bin.js +34 -0
  7. package/dist/cli/cli/cli-error.js +61 -0
  8. package/dist/cli/cli/dispatch.js +138 -0
  9. package/dist/cli/cli/help.js +83 -0
  10. package/dist/cli/cli/parser.js +89 -0
  11. package/dist/cli/cli/registry.js +185 -0
  12. package/dist/cli/cli/spec.js +41 -0
  13. package/dist/cli/cli/suggest.js +125 -0
  14. package/dist/cli/cli/version.js +30 -0
  15. package/dist/cli/cli/vocabulary.js +87 -0
  16. package/dist/cli/commands/doctor.js +365 -0
  17. package/dist/cli/commands/gateway.js +290 -0
  18. package/dist/cli/commands/migrate.js +270 -0
  19. package/dist/cli/commands/plugin.js +97 -0
  20. package/dist/cli/commands/setup.js +230 -0
  21. package/dist/cli/config-file.js +133 -0
  22. package/dist/cli/master-key.js +78 -0
  23. package/dist/cli/open-browser.js +59 -0
  24. package/dist/cli/web-assets.js +58 -0
  25. package/dist/gateway/auth.js +46 -0
  26. package/dist/gateway/config-format.js +202 -0
  27. package/dist/gateway/config.js +427 -0
  28. package/dist/gateway/context.js +1 -0
  29. package/dist/gateway/env-file.js +129 -0
  30. package/dist/gateway/events.js +172 -0
  31. package/dist/gateway/guard/tagging.js +505 -0
  32. package/dist/gateway/handlers/index.js +66 -0
  33. package/dist/gateway/handlers/memory.js +54 -0
  34. package/dist/gateway/handlers/providers.js +73 -0
  35. package/dist/gateway/handlers/registry.js +39 -0
  36. package/dist/gateway/handlers/sessions.js +188 -0
  37. package/dist/gateway/handlers/system.js +12 -0
  38. package/dist/gateway/handlers/tasks.js +191 -0
  39. package/dist/gateway/handlers/turn.js +100 -0
  40. package/dist/gateway/index.js +126 -0
  41. package/dist/gateway/main.js +23 -0
  42. package/dist/gateway/server.js +354 -0
  43. package/dist/gateway/services/context-limits.js +75 -0
  44. package/dist/gateway/services/history-normalizer.js +42 -0
  45. package/dist/gateway/services/image-pipeline.js +56 -0
  46. package/dist/gateway/services/key-roulette-client.js +43 -0
  47. package/dist/gateway/services/llm-client.js +593 -0
  48. package/dist/gateway/services/llm-decoder.js +200 -0
  49. package/dist/gateway/services/local-fallback.js +135 -0
  50. package/dist/gateway/services/memory.js +511 -0
  51. package/dist/gateway/services/persistent-memory.js +196 -0
  52. package/dist/gateway/services/providers.js +44 -0
  53. package/dist/gateway/services/tasks.js +237 -0
  54. package/dist/gateway/services/verification.js +124 -0
  55. package/dist/gateway/services/vision-payload.js +48 -0
  56. package/dist/gateway/services.js +257 -0
  57. package/dist/gateway/session-snapshot.js +19 -0
  58. package/dist/gateway/sessions.js +701 -0
  59. package/dist/gateway/static.js +239 -0
  60. package/dist/gateway/turns/clarify-tool.js +57 -0
  61. package/dist/gateway/turns/cronjob-tool.js +96 -0
  62. package/dist/gateway/turns/deferred-tools.js +154 -0
  63. package/dist/gateway/turns/execute-code-tool.js +84 -0
  64. package/dist/gateway/turns/file-tool-defs.js +178 -0
  65. package/dist/gateway/turns/file-tool-ops.js +178 -0
  66. package/dist/gateway/turns/file-tool-scan.js +182 -0
  67. package/dist/gateway/turns/file-tool.js +302 -0
  68. package/dist/gateway/turns/index.js +416 -0
  69. package/dist/gateway/turns/jev-middleware.js +91 -0
  70. package/dist/gateway/turns/local-reply.js +156 -0
  71. package/dist/gateway/turns/mcp-client.js +643 -0
  72. package/dist/gateway/turns/memory-tool.js +171 -0
  73. package/dist/gateway/turns/middleware.js +96 -0
  74. package/dist/gateway/turns/python-core.js +397 -0
  75. package/dist/gateway/turns/routing/index.js +3 -0
  76. package/dist/gateway/turns/routing/intent-classifier.js +60 -0
  77. package/dist/gateway/turns/routing/planner-adapter.js +91 -0
  78. package/dist/gateway/turns/routing/types.js +1 -0
  79. package/dist/gateway/turns/runtime-deps.js +228 -0
  80. package/dist/gateway/turns/self-config-tool.js +277 -0
  81. package/dist/gateway/turns/service-types.js +11 -0
  82. package/dist/gateway/turns/service.js +820 -0
  83. package/dist/gateway/turns/session-adapter.js +158 -0
  84. package/dist/gateway/turns/session-tool.js +49 -0
  85. package/dist/gateway/turns/shell-tool.js +190 -0
  86. package/dist/gateway/turns/skill-tool.js +239 -0
  87. package/dist/gateway/turns/spillover.js +201 -0
  88. package/dist/gateway/turns/subagent-tool.js +140 -0
  89. package/dist/gateway/turns/system-prompt.js +121 -0
  90. package/dist/gateway/turns/tool-schema.js +90 -0
  91. package/dist/gateway/turns/turn-utils.js +58 -0
  92. package/dist/gateway/turns/vision-tool.js +120 -0
  93. package/dist/gateway/types.js +1 -0
  94. package/dist/native/win32-x64/boombot-native-host.exe +0 -0
  95. package/dist/node_modules/@boombot/channels/handlers.d.ts +9 -0
  96. package/dist/node_modules/@boombot/channels/handlers.js +109 -0
  97. package/dist/node_modules/@boombot/channels/index.d.ts +12 -0
  98. package/dist/node_modules/@boombot/channels/index.js +12 -0
  99. package/dist/node_modules/@boombot/channels/package.json +9 -0
  100. package/dist/node_modules/@boombot/channels/service.d.ts +62 -0
  101. package/dist/node_modules/@boombot/channels/service.js +608 -0
  102. package/dist/node_modules/@boombot/channels/tool.d.ts +10 -0
  103. package/dist/node_modules/@boombot/channels/tool.js +46 -0
  104. package/dist/node_modules/@boombot/channels/transports/common/dedup.d.ts +17 -0
  105. package/dist/node_modules/@boombot/channels/transports/common/dedup.js +42 -0
  106. package/dist/node_modules/@boombot/channels/transports/common/handoff.d.ts +19 -0
  107. package/dist/node_modules/@boombot/channels/transports/common/handoff.js +32 -0
  108. package/dist/node_modules/@boombot/channels/transports/common/index.d.ts +3 -0
  109. package/dist/node_modules/@boombot/channels/transports/common/index.js +3 -0
  110. package/dist/node_modules/@boombot/channels/transports/common/types.d.ts +99 -0
  111. package/dist/node_modules/@boombot/channels/transports/common/types.js +54 -0
  112. package/dist/node_modules/@boombot/channels/transports/common.d.ts +2 -0
  113. package/dist/node_modules/@boombot/channels/transports/common.js +2 -0
  114. package/dist/node_modules/@boombot/channels/transports/dedup/index.d.ts +1 -0
  115. package/dist/node_modules/@boombot/channels/transports/dedup/index.js +1 -0
  116. package/dist/node_modules/@boombot/channels/transports/dedup.d.ts +2 -0
  117. package/dist/node_modules/@boombot/channels/transports/dedup.js +2 -0
  118. package/dist/node_modules/@boombot/channels/transports/discord/index.d.ts +1 -0
  119. package/dist/node_modules/@boombot/channels/transports/discord/index.js +1 -0
  120. package/dist/node_modules/@boombot/channels/transports/discord/transport.d.ts +36 -0
  121. package/dist/node_modules/@boombot/channels/transports/discord/transport.js +199 -0
  122. package/dist/node_modules/@boombot/channels/transports/discord.d.ts +2 -0
  123. package/dist/node_modules/@boombot/channels/transports/discord.js +2 -0
  124. package/dist/node_modules/@boombot/channels/transports/handoff.d.ts +2 -0
  125. package/dist/node_modules/@boombot/channels/transports/handoff.js +2 -0
  126. package/dist/node_modules/@boombot/channels/transports/messenger/index.d.ts +1 -0
  127. package/dist/node_modules/@boombot/channels/transports/messenger/index.js +1 -0
  128. package/dist/node_modules/@boombot/channels/transports/messenger/transport.d.ts +34 -0
  129. package/dist/node_modules/@boombot/channels/transports/messenger/transport.js +180 -0
  130. package/dist/node_modules/@boombot/channels/transports/messenger.d.ts +2 -0
  131. package/dist/node_modules/@boombot/channels/transports/messenger.js +2 -0
  132. package/dist/node_modules/@boombot/channels/transports/slack/index.d.ts +1 -0
  133. package/dist/node_modules/@boombot/channels/transports/slack/index.js +1 -0
  134. package/dist/node_modules/@boombot/channels/transports/slack/transport.d.ts +35 -0
  135. package/dist/node_modules/@boombot/channels/transports/slack/transport.js +183 -0
  136. package/dist/node_modules/@boombot/channels/transports/slack.d.ts +2 -0
  137. package/dist/node_modules/@boombot/channels/transports/slack.js +2 -0
  138. package/dist/node_modules/@boombot/channels/transports/streamer/index.d.ts +1 -0
  139. package/dist/node_modules/@boombot/channels/transports/streamer/index.js +1 -0
  140. package/dist/node_modules/@boombot/channels/transports/streamer/streamer.d.ts +31 -0
  141. package/dist/node_modules/@boombot/channels/transports/streamer/streamer.js +141 -0
  142. package/dist/node_modules/@boombot/channels/transports/streamer.d.ts +2 -0
  143. package/dist/node_modules/@boombot/channels/transports/streamer.js +2 -0
  144. package/dist/node_modules/@boombot/channels/transports/telegram/index.d.ts +1 -0
  145. package/dist/node_modules/@boombot/channels/transports/telegram/index.js +1 -0
  146. package/dist/node_modules/@boombot/channels/transports/telegram/transport.d.ts +75 -0
  147. package/dist/node_modules/@boombot/channels/transports/telegram/transport.js +395 -0
  148. package/dist/node_modules/@boombot/channels/transports/telegram.d.ts +2 -0
  149. package/dist/node_modules/@boombot/channels/transports/telegram.js +2 -0
  150. package/dist/node_modules/@boombot/channels/transports/tiktok/index.d.ts +1 -0
  151. package/dist/node_modules/@boombot/channels/transports/tiktok/index.js +1 -0
  152. package/dist/node_modules/@boombot/channels/transports/tiktok/transport.d.ts +27 -0
  153. package/dist/node_modules/@boombot/channels/transports/tiktok/transport.js +97 -0
  154. package/dist/node_modules/@boombot/channels/transports/tiktok.d.ts +2 -0
  155. package/dist/node_modules/@boombot/channels/transports/tiktok.js +2 -0
  156. package/dist/node_modules/@boombot/channels/transports/whatsapp/index.d.ts +1 -0
  157. package/dist/node_modules/@boombot/channels/transports/whatsapp/index.js +1 -0
  158. package/dist/node_modules/@boombot/channels/transports/whatsapp/transport.d.ts +38 -0
  159. package/dist/node_modules/@boombot/channels/transports/whatsapp/transport.js +189 -0
  160. package/dist/node_modules/@boombot/channels/transports/whatsapp.d.ts +2 -0
  161. package/dist/node_modules/@boombot/channels/transports/whatsapp.js +2 -0
  162. package/dist/node_modules/@boombot/channels/transports/zalo/index.d.ts +2 -0
  163. package/dist/node_modules/@boombot/channels/transports/zalo/index.js +2 -0
  164. package/dist/node_modules/@boombot/channels/transports/zalo/oa.d.ts +28 -0
  165. package/dist/node_modules/@boombot/channels/transports/zalo/oa.js +94 -0
  166. package/dist/node_modules/@boombot/channels/transports/zalo/personal.d.ts +106 -0
  167. package/dist/node_modules/@boombot/channels/transports/zalo/personal.js +171 -0
  168. package/dist/node_modules/@boombot/channels/transports/zalo-personal.d.ts +2 -0
  169. package/dist/node_modules/@boombot/channels/transports/zalo-personal.js +2 -0
  170. package/dist/node_modules/@boombot/channels/transports/zalo.d.ts +2 -0
  171. package/dist/node_modules/@boombot/channels/transports/zalo.js +2 -0
  172. package/dist/node_modules/@boombot/core/agent-core/index.d.ts +12 -0
  173. package/dist/node_modules/@boombot/core/agent-core/index.js +12 -0
  174. package/dist/node_modules/@boombot/core/agent-core/middleware.d.ts +60 -0
  175. package/dist/node_modules/@boombot/core/agent-core/middleware.js +152 -0
  176. package/dist/node_modules/@boombot/core/agent-core/routing.d.ts +128 -0
  177. package/dist/node_modules/@boombot/core/agent-core/routing.js +437 -0
  178. package/dist/node_modules/@boombot/core/agent-core/runtime-deps.d.ts +88 -0
  179. package/dist/node_modules/@boombot/core/agent-core/runtime-deps.js +8 -0
  180. package/dist/node_modules/@boombot/core/agent-core/tool-errors.d.ts +44 -0
  181. package/dist/node_modules/@boombot/core/agent-core/tool-errors.js +60 -0
  182. package/dist/node_modules/@boombot/core/agent-core/turn-loop.d.ts +21 -0
  183. package/dist/node_modules/@boombot/core/agent-core/turn-loop.js +561 -0
  184. package/dist/node_modules/@boombot/core/agent-core/types.d.ts +189 -0
  185. package/dist/node_modules/@boombot/core/agent-core/types.js +7 -0
  186. package/dist/node_modules/@boombot/core/compaction/compactor.d.ts +19 -0
  187. package/dist/node_modules/@boombot/core/compaction/compactor.js +127 -0
  188. package/dist/node_modules/@boombot/core/compaction/estimator.d.ts +10 -0
  189. package/dist/node_modules/@boombot/core/compaction/estimator.js +48 -0
  190. package/dist/node_modules/@boombot/core/compaction/index.d.ts +3 -0
  191. package/dist/node_modules/@boombot/core/compaction/index.js +3 -0
  192. package/dist/node_modules/@boombot/core/compaction/types.d.ts +31 -0
  193. package/dist/node_modules/@boombot/core/compaction/types.js +7 -0
  194. package/dist/node_modules/@boombot/core/index.d.ts +9 -0
  195. package/dist/node_modules/@boombot/core/index.js +9 -0
  196. package/dist/node_modules/@boombot/core/jev/index.d.ts +2 -0
  197. package/dist/node_modules/@boombot/core/jev/index.js +2 -0
  198. package/dist/node_modules/@boombot/core/jev/jev.d.ts +30 -0
  199. package/dist/node_modules/@boombot/core/jev/jev.js +164 -0
  200. package/dist/node_modules/@boombot/core/jev/types.d.ts +22 -0
  201. package/dist/node_modules/@boombot/core/jev/types.js +1 -0
  202. package/dist/node_modules/@boombot/core/memory/consolidation/budget.d.ts +63 -0
  203. package/dist/node_modules/@boombot/core/memory/consolidation/budget.js +94 -0
  204. package/dist/node_modules/@boombot/core/memory/consolidation/consolidator.d.ts +152 -0
  205. package/dist/node_modules/@boombot/core/memory/consolidation/consolidator.js +318 -0
  206. package/dist/node_modules/@boombot/core/memory/consolidation/index.d.ts +12 -0
  207. package/dist/node_modules/@boombot/core/memory/consolidation/index.js +12 -0
  208. package/dist/node_modules/@boombot/core/memory/curation.d.ts +86 -0
  209. package/dist/node_modules/@boombot/core/memory/curation.js +120 -0
  210. package/dist/node_modules/@boombot/core/memory/errors.d.ts +12 -0
  211. package/dist/node_modules/@boombot/core/memory/errors.js +20 -0
  212. package/dist/node_modules/@boombot/core/memory/hybrid-search.d.ts +29 -0
  213. package/dist/node_modules/@boombot/core/memory/hybrid-search.js +52 -0
  214. package/dist/node_modules/@boombot/core/memory/index.d.ts +23 -0
  215. package/dist/node_modules/@boombot/core/memory/index.js +23 -0
  216. package/dist/node_modules/@boombot/core/memory/indexer.d.ts +47 -0
  217. package/dist/node_modules/@boombot/core/memory/indexer.js +138 -0
  218. package/dist/node_modules/@boombot/core/memory/lifecycle.d.ts +12 -0
  219. package/dist/node_modules/@boombot/core/memory/lifecycle.js +66 -0
  220. package/dist/node_modules/@boombot/core/memory/provider.d.ts +84 -0
  221. package/dist/node_modules/@boombot/core/memory/provider.js +117 -0
  222. package/dist/node_modules/@boombot/core/memory/recall.d.ts +7 -0
  223. package/dist/node_modules/@boombot/core/memory/recall.js +111 -0
  224. package/dist/node_modules/@boombot/core/memory/scope-resolver.d.ts +27 -0
  225. package/dist/node_modules/@boombot/core/memory/scope-resolver.js +60 -0
  226. package/dist/node_modules/@boombot/core/memory/search.d.ts +37 -0
  227. package/dist/node_modules/@boombot/core/memory/search.js +158 -0
  228. package/dist/node_modules/@boombot/core/memory/store.d.ts +60 -0
  229. package/dist/node_modules/@boombot/core/memory/store.js +289 -0
  230. package/dist/node_modules/@boombot/core/memory/types.d.ts +121 -0
  231. package/dist/node_modules/@boombot/core/memory/types.js +21 -0
  232. package/dist/node_modules/@boombot/core/memory/vector-index.d.ts +34 -0
  233. package/dist/node_modules/@boombot/core/memory/vector-index.js +65 -0
  234. package/dist/node_modules/@boombot/core/package.json +9 -0
  235. package/dist/node_modules/@boombot/core/reflection/classifier.d.ts +13 -0
  236. package/dist/node_modules/@boombot/core/reflection/classifier.js +77 -0
  237. package/dist/node_modules/@boombot/core/reflection/index.d.ts +2 -0
  238. package/dist/node_modules/@boombot/core/reflection/index.js +2 -0
  239. package/dist/node_modules/@boombot/core/reflection/types.d.ts +13 -0
  240. package/dist/node_modules/@boombot/core/reflection/types.js +4 -0
  241. package/dist/node_modules/@boombot/core/research/config.d.ts +89 -0
  242. package/dist/node_modules/@boombot/core/research/config.js +206 -0
  243. package/dist/node_modules/@boombot/core/research/crawl.d.ts +36 -0
  244. package/dist/node_modules/@boombot/core/research/crawl.js +179 -0
  245. package/dist/node_modules/@boombot/core/research/factory.d.ts +26 -0
  246. package/dist/node_modules/@boombot/core/research/factory.js +46 -0
  247. package/dist/node_modules/@boombot/core/research/http.d.ts +87 -0
  248. package/dist/node_modules/@boombot/core/research/http.js +250 -0
  249. package/dist/node_modules/@boombot/core/research/index.d.ts +17 -0
  250. package/dist/node_modules/@boombot/core/research/index.js +10 -0
  251. package/dist/node_modules/@boombot/core/research/orchestrator.d.ts +113 -0
  252. package/dist/node_modules/@boombot/core/research/orchestrator.js +252 -0
  253. package/dist/node_modules/@boombot/core/research/parse/docx.d.ts +24 -0
  254. package/dist/node_modules/@boombot/core/research/parse/docx.js +183 -0
  255. package/dist/node_modules/@boombot/core/research/parse/guards.d.ts +89 -0
  256. package/dist/node_modules/@boombot/core/research/parse/guards.js +171 -0
  257. package/dist/node_modules/@boombot/core/research/parse/index.d.ts +68 -0
  258. package/dist/node_modules/@boombot/core/research/parse/index.js +219 -0
  259. package/dist/node_modules/@boombot/core/research/parse/pdf.d.ts +38 -0
  260. package/dist/node_modules/@boombot/core/research/parse/pdf.js +567 -0
  261. package/dist/node_modules/@boombot/core/research/providers/arxiv.d.ts +9 -0
  262. package/dist/node_modules/@boombot/core/research/providers/arxiv.js +72 -0
  263. package/dist/node_modules/@boombot/core/research/providers/brave.d.ts +11 -0
  264. package/dist/node_modules/@boombot/core/research/providers/brave.js +36 -0
  265. package/dist/node_modules/@boombot/core/research/providers/duckduckgo.d.ts +9 -0
  266. package/dist/node_modules/@boombot/core/research/providers/duckduckgo.js +78 -0
  267. package/dist/node_modules/@boombot/core/research/providers/exa.d.ts +11 -0
  268. package/dist/node_modules/@boombot/core/research/providers/exa.js +34 -0
  269. package/dist/node_modules/@boombot/core/research/providers/firecrawl.d.ts +16 -0
  270. package/dist/node_modules/@boombot/core/research/providers/firecrawl.js +47 -0
  271. package/dist/node_modules/@boombot/core/research/providers/index.d.ts +17 -0
  272. package/dist/node_modules/@boombot/core/research/providers/index.js +11 -0
  273. package/dist/node_modules/@boombot/core/research/providers/jina.d.ts +13 -0
  274. package/dist/node_modules/@boombot/core/research/providers/jina.js +114 -0
  275. package/dist/node_modules/@boombot/core/research/providers/openalex.d.ts +14 -0
  276. package/dist/node_modules/@boombot/core/research/providers/openalex.js +66 -0
  277. package/dist/node_modules/@boombot/core/research/providers/semantic-scholar.d.ts +9 -0
  278. package/dist/node_modules/@boombot/core/research/providers/semantic-scholar.js +56 -0
  279. package/dist/node_modules/@boombot/core/research/providers/tavily.d.ts +11 -0
  280. package/dist/node_modules/@boombot/core/research/providers/tavily.js +35 -0
  281. package/dist/node_modules/@boombot/core/research/providers/wikipedia.d.ts +12 -0
  282. package/dist/node_modules/@boombot/core/research/providers/wikipedia.js +47 -0
  283. package/dist/node_modules/@boombot/core/research/tools.d.ts +27 -0
  284. package/dist/node_modules/@boombot/core/research/tools.js +251 -0
  285. package/dist/node_modules/@boombot/core/research/types.d.ts +133 -0
  286. package/dist/node_modules/@boombot/core/research/types.js +8 -0
  287. package/dist/node_modules/@boombot/core/research/wiring.d.ts +25 -0
  288. package/dist/node_modules/@boombot/core/research/wiring.js +51 -0
  289. package/dist/node_modules/@boombot/core/scheduler/cron.d.ts +34 -0
  290. package/dist/node_modules/@boombot/core/scheduler/cron.js +147 -0
  291. package/dist/node_modules/@boombot/core/scheduler/evaluator.d.ts +42 -0
  292. package/dist/node_modules/@boombot/core/scheduler/evaluator.js +148 -0
  293. package/dist/node_modules/@boombot/core/scheduler/index.d.ts +15 -0
  294. package/dist/node_modules/@boombot/core/scheduler/index.js +15 -0
  295. package/dist/node_modules/@boombot/core/scheduler/registry.d.ts +81 -0
  296. package/dist/node_modules/@boombot/core/scheduler/registry.js +263 -0
  297. package/dist/node_modules/@boombot/core/scheduler/runner.d.ts +59 -0
  298. package/dist/node_modules/@boombot/core/scheduler/runner.js +257 -0
  299. package/dist/node_modules/@boombot/core/scheduler/store.d.ts +150 -0
  300. package/dist/node_modules/@boombot/core/scheduler/store.js +526 -0
  301. package/dist/node_modules/@boombot/core/scheduler/timezone.d.ts +35 -0
  302. package/dist/node_modules/@boombot/core/scheduler/timezone.js +96 -0
  303. package/dist/node_modules/@boombot/core/scheduler/types.d.ts +157 -0
  304. package/dist/node_modules/@boombot/core/scheduler/types.js +89 -0
  305. package/dist/node_modules/@boombot/core/task-runner/index.d.ts +7 -0
  306. package/dist/node_modules/@boombot/core/task-runner/index.js +5 -0
  307. package/dist/node_modules/@boombot/core/task-runner/planner.d.ts +37 -0
  308. package/dist/node_modules/@boombot/core/task-runner/planner.js +154 -0
  309. package/dist/node_modules/@boombot/core/task-runner/runner.d.ts +8 -0
  310. package/dist/node_modules/@boombot/core/task-runner/runner.js +564 -0
  311. package/dist/node_modules/@boombot/core/task-runner/store.d.ts +28 -0
  312. package/dist/node_modules/@boombot/core/task-runner/store.js +126 -0
  313. package/dist/node_modules/@boombot/core/task-runner/types.d.ts +138 -0
  314. package/dist/node_modules/@boombot/core/task-runner/types.js +11 -0
  315. package/dist/node_modules/@boombot/core/workflow/dag.d.ts +16 -0
  316. package/dist/node_modules/@boombot/core/workflow/dag.js +109 -0
  317. package/dist/node_modules/@boombot/core/workflow/engine.d.ts +34 -0
  318. package/dist/node_modules/@boombot/core/workflow/engine.js +304 -0
  319. package/dist/node_modules/@boombot/core/workflow/index.d.ts +3 -0
  320. package/dist/node_modules/@boombot/core/workflow/index.js +3 -0
  321. package/dist/node_modules/@boombot/core/workflow/types.d.ts +98 -0
  322. package/dist/node_modules/@boombot/core/workflow/types.js +21 -0
  323. package/dist/node_modules/@boombot/cronjobs/handlers.d.ts +11 -0
  324. package/dist/node_modules/@boombot/cronjobs/handlers.js +174 -0
  325. package/dist/node_modules/@boombot/cronjobs/index.d.ts +2 -0
  326. package/dist/node_modules/@boombot/cronjobs/index.js +2 -0
  327. package/dist/node_modules/@boombot/cronjobs/package.json +9 -0
  328. package/dist/node_modules/@boombot/cronjobs/service.d.ts +53 -0
  329. package/dist/node_modules/@boombot/cronjobs/service.js +200 -0
  330. package/dist/node_modules/@boombot/plugins/index.d.ts +2 -0
  331. package/dist/node_modules/@boombot/plugins/index.js +2 -0
  332. package/dist/node_modules/@boombot/plugins/installer.d.ts +45 -0
  333. package/dist/node_modules/@boombot/plugins/installer.js +487 -0
  334. package/dist/node_modules/@boombot/plugins/manager.d.ts +23 -0
  335. package/dist/node_modules/@boombot/plugins/manager.js +243 -0
  336. package/dist/node_modules/@boombot/plugins/package.json +9 -0
  337. package/dist/node_modules/@boombot/protocol/gateway-protocol/commands-channels.d.ts +125 -0
  338. package/dist/node_modules/@boombot/protocol/gateway-protocol/commands-channels.js +76 -0
  339. package/dist/node_modules/@boombot/protocol/gateway-protocol/commands-plugins.d.ts +220 -0
  340. package/dist/node_modules/@boombot/protocol/gateway-protocol/commands-plugins.js +60 -0
  341. package/dist/node_modules/@boombot/protocol/gateway-protocol/commands-scheduler.d.ts +33 -0
  342. package/dist/node_modules/@boombot/protocol/gateway-protocol/commands-scheduler.js +25 -0
  343. package/dist/node_modules/@boombot/protocol/gateway-protocol/commands.d.ts +4349 -0
  344. package/dist/node_modules/@boombot/protocol/gateway-protocol/commands.js +563 -0
  345. package/dist/node_modules/@boombot/protocol/gateway-protocol/envelope.d.ts +32 -0
  346. package/dist/node_modules/@boombot/protocol/gateway-protocol/envelope.js +61 -0
  347. package/dist/node_modules/@boombot/protocol/gateway-protocol/errors.d.ts +13 -0
  348. package/dist/node_modules/@boombot/protocol/gateway-protocol/errors.js +16 -0
  349. package/dist/node_modules/@boombot/protocol/gateway-protocol/events.d.ts +567 -0
  350. package/dist/node_modules/@boombot/protocol/gateway-protocol/events.js +395 -0
  351. package/dist/node_modules/@boombot/protocol/gateway-protocol/index.d.ts +20 -0
  352. package/dist/node_modules/@boombot/protocol/gateway-protocol/index.js +13 -0
  353. package/dist/node_modules/@boombot/protocol/gateway-protocol/types.d.ts +91 -0
  354. package/dist/node_modules/@boombot/protocol/gateway-protocol/types.js +7 -0
  355. package/dist/node_modules/@boombot/protocol/index.d.ts +4 -0
  356. package/dist/node_modules/@boombot/protocol/index.js +3 -0
  357. package/dist/node_modules/@boombot/protocol/package.json +9 -0
  358. package/dist/node_modules/@boombot/protocol/plugin-sdk/channel.d.ts +41 -0
  359. package/dist/node_modules/@boombot/protocol/plugin-sdk/channel.js +17 -0
  360. package/dist/node_modules/@boombot/protocol/plugin-sdk/index.d.ts +10 -0
  361. package/dist/node_modules/@boombot/protocol/plugin-sdk/index.js +10 -0
  362. package/dist/node_modules/@boombot/protocol/plugin-sdk/manifest.d.ts +58 -0
  363. package/dist/node_modules/@boombot/protocol/plugin-sdk/manifest.js +116 -0
  364. package/dist/node_modules/@boombot/protocol/plugin-sdk/plugin.d.ts +25 -0
  365. package/dist/node_modules/@boombot/protocol/plugin-sdk/plugin.js +1 -0
  366. package/dist/node_modules/@boombot/protocol/providers/cipher.d.ts +7 -0
  367. package/dist/node_modules/@boombot/protocol/providers/cipher.js +52 -0
  368. package/dist/node_modules/@boombot/protocol/providers/index.d.ts +19 -0
  369. package/dist/node_modules/@boombot/protocol/providers/index.js +19 -0
  370. package/dist/node_modules/@boombot/protocol/providers/key-roulette.d.ts +79 -0
  371. package/dist/node_modules/@boombot/protocol/providers/key-roulette.js +81 -0
  372. package/dist/node_modules/@boombot/protocol/providers/probe.d.ts +29 -0
  373. package/dist/node_modules/@boombot/protocol/providers/probe.js +96 -0
  374. package/dist/node_modules/@boombot/protocol/providers/profiles/anthropic.d.ts +11 -0
  375. package/dist/node_modules/@boombot/protocol/providers/profiles/anthropic.js +11 -0
  376. package/dist/node_modules/@boombot/protocol/providers/profiles/custom.d.ts +22 -0
  377. package/dist/node_modules/@boombot/protocol/providers/profiles/custom.js +222 -0
  378. package/dist/node_modules/@boombot/protocol/providers/profiles/deepseek.d.ts +7 -0
  379. package/dist/node_modules/@boombot/protocol/providers/profiles/deepseek.js +9 -0
  380. package/dist/node_modules/@boombot/protocol/providers/profiles/google.d.ts +10 -0
  381. package/dist/node_modules/@boombot/protocol/providers/profiles/google.js +10 -0
  382. package/dist/node_modules/@boombot/protocol/providers/profiles/index.d.ts +31 -0
  383. package/dist/node_modules/@boombot/protocol/providers/profiles/index.js +56 -0
  384. package/dist/node_modules/@boombot/protocol/providers/profiles/local.d.ts +10 -0
  385. package/dist/node_modules/@boombot/protocol/providers/profiles/local.js +11 -0
  386. package/dist/node_modules/@boombot/protocol/providers/profiles/mistral.d.ts +7 -0
  387. package/dist/node_modules/@boombot/protocol/providers/profiles/mistral.js +9 -0
  388. package/dist/node_modules/@boombot/protocol/providers/profiles/openai-compatible.d.ts +10 -0
  389. package/dist/node_modules/@boombot/protocol/providers/profiles/openai-compatible.js +10 -0
  390. package/dist/node_modules/@boombot/protocol/providers/profiles/openai.d.ts +7 -0
  391. package/dist/node_modules/@boombot/protocol/providers/profiles/openai.js +11 -0
  392. package/dist/node_modules/@boombot/protocol/providers/profiles/types.d.ts +58 -0
  393. package/dist/node_modules/@boombot/protocol/providers/profiles/types.js +1 -0
  394. package/dist/node_modules/@boombot/protocol/providers/profiles/xai.d.ts +7 -0
  395. package/dist/node_modules/@boombot/protocol/providers/profiles/xai.js +10 -0
  396. package/dist/node_modules/@boombot/protocol/providers/request-profile.d.ts +102 -0
  397. package/dist/node_modules/@boombot/protocol/providers/request-profile.js +118 -0
  398. package/dist/node_modules/@boombot/protocol/providers/service.d.ts +2 -0
  399. package/dist/node_modules/@boombot/protocol/providers/service.js +418 -0
  400. package/dist/node_modules/@boombot/protocol/providers/types.d.ts +141 -0
  401. package/dist/node_modules/@boombot/protocol/providers/types.js +16 -0
  402. package/dist/node_modules/@boombot/sandbox/fs-path.d.ts +13 -0
  403. package/dist/node_modules/@boombot/sandbox/fs-path.js +79 -0
  404. package/dist/node_modules/@boombot/sandbox/index.d.ts +13 -0
  405. package/dist/node_modules/@boombot/sandbox/index.js +13 -0
  406. package/dist/node_modules/@boombot/sandbox/native.d.ts +39 -0
  407. package/dist/node_modules/@boombot/sandbox/native.js +224 -0
  408. package/dist/node_modules/@boombot/sandbox/package.json +9 -0
  409. package/dist/node_modules/@boombot/sandbox/sandbox.d.ts +92 -0
  410. package/dist/node_modules/@boombot/sandbox/sandbox.js +229 -0
  411. package/dist/node_modules/@boombot/security/harness-guard/boundary.d.ts +22 -0
  412. package/dist/node_modules/@boombot/security/harness-guard/boundary.js +105 -0
  413. package/dist/node_modules/@boombot/security/harness-guard/gates.d.ts +90 -0
  414. package/dist/node_modules/@boombot/security/harness-guard/gates.js +791 -0
  415. package/dist/node_modules/@boombot/security/harness-guard/index.d.ts +23 -0
  416. package/dist/node_modules/@boombot/security/harness-guard/index.js +23 -0
  417. package/dist/node_modules/@boombot/security/harness-guard/policy.d.ts +20 -0
  418. package/dist/node_modules/@boombot/security/harness-guard/policy.js +70 -0
  419. package/dist/node_modules/@boombot/security/harness-guard/sanitizer.d.ts +53 -0
  420. package/dist/node_modules/@boombot/security/harness-guard/sanitizer.js +145 -0
  421. package/dist/node_modules/@boombot/security/harness-guard/types.d.ts +71 -0
  422. package/dist/node_modules/@boombot/security/harness-guard/types.js +10 -0
  423. package/dist/node_modules/@boombot/security/harness-guard/verifier.d.ts +59 -0
  424. package/dist/node_modules/@boombot/security/harness-guard/verifier.js +169 -0
  425. package/dist/node_modules/@boombot/security/index.d.ts +5 -0
  426. package/dist/node_modules/@boombot/security/index.js +9 -0
  427. package/dist/node_modules/@boombot/security/package.json +9 -0
  428. package/dist/node_modules/@boombot/security/policy/approval.d.ts +117 -0
  429. package/dist/node_modules/@boombot/security/policy/approval.js +223 -0
  430. package/dist/node_modules/@boombot/security/reasoning-guard/claim-extractor.d.ts +10 -0
  431. package/dist/node_modules/@boombot/security/reasoning-guard/claim-extractor.js +124 -0
  432. package/dist/node_modules/@boombot/security/reasoning-guard/evidence-ledger.d.ts +25 -0
  433. package/dist/node_modules/@boombot/security/reasoning-guard/evidence-ledger.js +70 -0
  434. package/dist/node_modules/@boombot/security/reasoning-guard/gate.d.ts +38 -0
  435. package/dist/node_modules/@boombot/security/reasoning-guard/gate.js +61 -0
  436. package/dist/node_modules/@boombot/security/reasoning-guard/grounding-check.d.ts +12 -0
  437. package/dist/node_modules/@boombot/security/reasoning-guard/grounding-check.js +234 -0
  438. package/dist/node_modules/@boombot/security/reasoning-guard/index.d.ts +17 -0
  439. package/dist/node_modules/@boombot/security/reasoning-guard/index.js +13 -0
  440. package/dist/node_modules/@boombot/security/reasoning-guard/policy.d.ts +15 -0
  441. package/dist/node_modules/@boombot/security/reasoning-guard/policy.js +39 -0
  442. package/dist/node_modules/@boombot/security/reasoning-guard/types.d.ts +46 -0
  443. package/dist/node_modules/@boombot/security/reasoning-guard/types.js +7 -0
  444. package/dist/node_modules/@boombot/security/security/approval.d.ts +63 -0
  445. package/dist/node_modules/@boombot/security/security/approval.js +140 -0
  446. package/dist/node_modules/@boombot/security/security/audit.d.ts +39 -0
  447. package/dist/node_modules/@boombot/security/security/audit.js +70 -0
  448. package/dist/node_modules/@boombot/security/security/index.d.ts +12 -0
  449. package/dist/node_modules/@boombot/security/security/index.js +12 -0
  450. package/dist/node_modules/@boombot/security/security/trust.d.ts +79 -0
  451. package/dist/node_modules/@boombot/security/security/trust.js +87 -0
  452. package/dist/package.json +5 -0
  453. package/dist/proto/agent_core.proto +56 -0
  454. package/dist/python/agent-core-python/pyproject.toml +40 -0
  455. package/dist/python/agent-core-python/src/boombot_agent/__init__.py +5 -0
  456. package/dist/python/agent-core-python/src/boombot_agent/generated/__init__.py +0 -0
  457. package/dist/python/agent-core-python/src/boombot_agent/generated/agent_core_pb2.py +54 -0
  458. package/dist/python/agent-core-python/src/boombot_agent/generated/agent_core_pb2_grpc.py +140 -0
  459. package/dist/python/agent-core-python/src/boombot_agent/rpc.py +265 -0
  460. package/dist/python/agent-core-python/src/boombot_agent/turn.py +577 -0
  461. package/dist/python/agent-core-python/src/boombot_ml/__init__.py +12 -0
  462. package/dist/python/agent-core-python/src/boombot_ml/embeddings.py +58 -0
  463. package/dist/python/agent-core-python/src/boombot_ml/training.py +156 -0
  464. package/dist/python/agent-core-python/uv.lock +2856 -0
  465. package/dist/web/assets/ChatView-BZrSD-64.js +262 -0
  466. package/dist/web/assets/ChatView-Cahbjez6.css +1 -0
  467. package/dist/web/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  468. package/dist/web/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  469. package/dist/web/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  470. package/dist/web/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  471. package/dist/web/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  472. package/dist/web/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  473. package/dist/web/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  474. package/dist/web/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  475. package/dist/web/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  476. package/dist/web/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  477. package/dist/web/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  478. package/dist/web/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  479. package/dist/web/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  480. package/dist/web/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  481. package/dist/web/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  482. package/dist/web/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  483. package/dist/web/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  484. package/dist/web/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  485. package/dist/web/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  486. package/dist/web/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  487. package/dist/web/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  488. package/dist/web/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  489. package/dist/web/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  490. package/dist/web/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  491. package/dist/web/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  492. package/dist/web/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  493. package/dist/web/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  494. package/dist/web/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  495. package/dist/web/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  496. package/dist/web/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  497. package/dist/web/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  498. package/dist/web/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  499. package/dist/web/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  500. package/dist/web/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  501. package/dist/web/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  502. package/dist/web/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  503. package/dist/web/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  504. package/dist/web/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  505. package/dist/web/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  506. package/dist/web/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  507. package/dist/web/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  508. package/dist/web/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  509. package/dist/web/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  510. package/dist/web/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  511. package/dist/web/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  512. package/dist/web/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  513. package/dist/web/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  514. package/dist/web/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  515. package/dist/web/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  516. package/dist/web/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  517. package/dist/web/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  518. package/dist/web/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  519. package/dist/web/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  520. package/dist/web/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  521. package/dist/web/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  522. package/dist/web/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  523. package/dist/web/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  524. package/dist/web/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  525. package/dist/web/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  526. package/dist/web/assets/MemoryView-BJbXqqs7.css +1 -0
  527. package/dist/web/assets/MemoryView-BfMq_6CD.js +1 -0
  528. package/dist/web/assets/SchedulesView-B22QmPR-.js +1 -0
  529. package/dist/web/assets/SchedulesView-C6XK7A8a.css +1 -0
  530. package/dist/web/assets/SessionsView-C1dqdhxI.css +1 -0
  531. package/dist/web/assets/SessionsView-DS0-aH2a.js +1 -0
  532. package/dist/web/assets/TasksView-Dtasg4hd.css +1 -0
  533. package/dist/web/assets/TasksView-ey0FLsW8.js +2 -0
  534. package/dist/web/assets/Textarea-DN3Zybl1.js +1 -0
  535. package/dist/web/assets/Tooltip-Bn2cqFPz.css +1 -0
  536. package/dist/web/assets/Tooltip-MzV2Gqnc.js +1 -0
  537. package/dist/web/assets/browser-Bnt73-Ub.js +8 -0
  538. package/dist/web/assets/index-BL8bi7Yt.css +1 -0
  539. package/dist/web/assets/index-CuPR73Tn.js +73 -0
  540. package/dist/web/favicon.svg +4 -0
  541. package/dist/web/index.html +26 -0
  542. package/dist/web/logo.jpg +0 -0
  543. package/dist/web/logo.png +0 -0
  544. package/package.json +51 -4
@@ -0,0 +1,243 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { mkdir, readFile, readdir } from 'node:fs/promises';
10
+ import { pathToFileURL } from 'node:url';
11
+ import { parseManifest, } from '@boombot/protocol';
12
+ import { resolveWithin } from '@boombot/sandbox';
13
+ const MANIFEST_FILE = 'boombot.plugin.json';
14
+ const MAX_MANIFEST_BYTES = 64 * 1024;
15
+ export class PluginManager {
16
+ tools;
17
+ deactivate;
18
+ manifests;
19
+ root;
20
+ configs;
21
+ logger;
22
+ constructor(tools, deactivate, manifests, root, configs, logger) {
23
+ this.tools = tools;
24
+ this.deactivate = deactivate;
25
+ this.manifests = manifests;
26
+ this.root = root;
27
+ this.configs = configs;
28
+ this.logger = logger;
29
+ }
30
+ static empty() {
31
+ return new PluginManager([], [], []);
32
+ }
33
+ static async load(root, configs = {}, log = () => { }) {
34
+ await mkdir(root, { recursive: true });
35
+ const tools = [];
36
+ const deactivate = [];
37
+ const manifests = [];
38
+ const ids = new Set();
39
+ const toolNames = new Set();
40
+ const entries = (await readdir(root, { withFileTypes: true }))
41
+ .filter((entry) => entry.isDirectory())
42
+ .sort((a, b) => a.name.localeCompare(b.name));
43
+ for (const entry of entries) {
44
+ const firstTool = tools.length;
45
+ let manifestId;
46
+ try {
47
+ const pluginRoot = await resolveWithin(root, entry.name);
48
+ const manifestPath = await resolveWithin(pluginRoot, MANIFEST_FILE);
49
+ const rawText = await readFile(manifestPath, 'utf8');
50
+ if (Buffer.byteLength(rawText) > MAX_MANIFEST_BYTES) {
51
+ throw new Error(`manifest exceeds ${String(MAX_MANIFEST_BYTES)} bytes`);
52
+ }
53
+ const parsed = parseManifest(JSON.parse(rawText));
54
+ if (!parsed.ok)
55
+ throw new Error(parsed.errors.join('; '));
56
+ const manifest = parsed.manifest;
57
+ manifestId = manifest.id;
58
+ if (ids.has(manifest.id))
59
+ throw new Error(`duplicate plugin id '${manifest.id}'`);
60
+ ids.add(manifest.id);
61
+ const config = configs[manifest.id] ?? {};
62
+ const configErrors = validateConfig(config, manifest.configSchema);
63
+ if (configErrors.length > 0)
64
+ throw new Error(`invalid config: ${configErrors.join('; ')}`);
65
+ const modulePath = await resolveWithin(pluginRoot, manifest.entry ?? 'index.js');
66
+ const moduleUrl = pathToFileURL(modulePath).href;
67
+ const imported = await import(__rewriteRelativeImportExtension(/* @vite-ignore */ moduleUrl));
68
+ const plugin = resolvePlugin(imported);
69
+ let accepting = true;
70
+ const api = {
71
+ config,
72
+ registerTool: (definition, handler) => {
73
+ if (!accepting)
74
+ throw new Error('tools must be registered during plugin activation');
75
+ if (!manifest.capabilities.includes('tool.register')) {
76
+ throw new Error(`plugin '${manifest.id}' did not declare capability 'tool.register'`);
77
+ }
78
+ validateToolDefinition(definition);
79
+ const name = pluginToolName(manifest.id, definition.name);
80
+ if (toolNames.has(name))
81
+ throw new Error(`duplicate plugin tool '${name}'`);
82
+ toolNames.add(name);
83
+ tools.push({
84
+ localName: definition.name,
85
+ handler,
86
+ definition: {
87
+ name,
88
+ description: `[Plugin ${manifest.id}] ${definition.description}`,
89
+ parameters: definition.parameters,
90
+ },
91
+ });
92
+ },
93
+ log: (level, message) => log(level, message, { plugin: manifest.id }),
94
+ };
95
+ await plugin.activate(api);
96
+ accepting = false;
97
+ if (typeof plugin.deactivate === 'function')
98
+ deactivate.push(() => plugin.deactivate?.());
99
+ manifests.push(manifest);
100
+ log('info', 'plugin loaded', { plugin: manifest.id, version: manifest.version });
101
+ }
102
+ catch (error) {
103
+ for (const removed of tools.splice(firstTool))
104
+ toolNames.delete(removed.definition.name);
105
+ if (manifestId !== undefined)
106
+ ids.delete(manifestId);
107
+ log('warn', 'plugin failed to load', {
108
+ directory: entry.name,
109
+ error: error instanceof Error ? error.message : String(error),
110
+ });
111
+ }
112
+ }
113
+ return new PluginManager(tools, deactivate, manifests, root, configs, log);
114
+ }
115
+ get toolNames() {
116
+ return this.tools.map((tool) => tool.definition.name);
117
+ }
118
+ /** Hot-reload plugins in-memory without restarting the gateway or dropping sessions. */
119
+ async reload() {
120
+ if (!this.root)
121
+ return this.toolNames;
122
+ for (const stop of [...this.deactivate].reverse()) {
123
+ try {
124
+ await stop();
125
+ }
126
+ catch {
127
+ // cleanup never throws
128
+ }
129
+ }
130
+ this.tools = [];
131
+ this.deactivate = [];
132
+ this.manifests.length = 0;
133
+ const fresh = await PluginManager.load(this.root, this.configs, this.logger);
134
+ this.tools.push(...fresh.tools);
135
+ this.deactivate.push(...fresh.deactivate);
136
+ this.manifests.push(...fresh.manifests);
137
+ return this.toolNames;
138
+ }
139
+ registerTools(registry) {
140
+ for (const tool of this.tools) {
141
+ registry.registerTool(tool.definition, async (call, signal) => {
142
+ try {
143
+ signal?.throwIfAborted();
144
+ const result = await tool.handler({
145
+ id: call.id,
146
+ name: tool.localName,
147
+ arguments: call.arguments,
148
+ }, signal);
149
+ signal?.throwIfAborted();
150
+ if (typeof result?.output !== 'string')
151
+ return failure(call, 'plugin returned no string output');
152
+ return { callId: call.id, name: call.name, output: result.output, error: result.error === true };
153
+ }
154
+ catch (error) {
155
+ if (signal?.aborted === true)
156
+ throw error;
157
+ return failure(call, error instanceof Error ? error.message : 'plugin tool failed');
158
+ }
159
+ });
160
+ }
161
+ }
162
+ async close() {
163
+ for (const stop of [...this.deactivate].reverse())
164
+ await stop();
165
+ }
166
+ }
167
+ function resolvePlugin(module) {
168
+ const candidate = module.default ?? module.plugin ?? module;
169
+ if (typeof candidate !== 'object' || candidate === null ||
170
+ typeof candidate.activate !== 'function') {
171
+ throw new Error('entry module must export a plugin object with activate(api)');
172
+ }
173
+ return candidate;
174
+ }
175
+ function validateToolDefinition(definition) {
176
+ if (!/^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$/.test(definition.name)) {
177
+ throw new Error(`invalid plugin tool name '${definition.name}'`);
178
+ }
179
+ if (typeof definition.description !== 'string' || definition.description.trim() === '') {
180
+ throw new Error(`plugin tool '${definition.name}' needs a description`);
181
+ }
182
+ if (typeof definition.parameters !== 'object' || definition.parameters === null || Array.isArray(definition.parameters)) {
183
+ throw new Error(`plugin tool '${definition.name}' parameters must be a JSON Schema object`);
184
+ }
185
+ }
186
+ function pluginToolName(pluginId, localName) {
187
+ const safeId = pluginId.replace(/[^A-Za-z0-9_-]/g, '_');
188
+ const safeName = localName.replace(/[^A-Za-z0-9_-]/g, '_');
189
+ return `plugin_${safeId}_${safeName}`.slice(0, 64);
190
+ }
191
+ function failure(call, message) {
192
+ return { callId: call.id, name: call.name, output: message, error: true };
193
+ }
194
+ function validateConfig(value, schema, path = 'config') {
195
+ const errors = [];
196
+ if (schema.enum !== undefined && !schema.enum.some((item) => Object.is(item, value))) {
197
+ errors.push(`${path} is not an allowed value`);
198
+ return errors;
199
+ }
200
+ if (schema.type === 'object') {
201
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
202
+ return [`${path} must be an object`];
203
+ }
204
+ const record = value;
205
+ for (const required of schema.required ?? []) {
206
+ if (!(required in record))
207
+ errors.push(`${path}.${required} is required`);
208
+ }
209
+ for (const [key, child] of Object.entries(schema.properties ?? {})) {
210
+ if (key in record)
211
+ errors.push(...validateConfig(record[key], child, `${path}.${key}`));
212
+ }
213
+ if (schema.additionalProperties === false) {
214
+ for (const key of Object.keys(record)) {
215
+ if (schema.properties?.[key] === undefined)
216
+ errors.push(`${path}.${key} is not allowed`);
217
+ }
218
+ }
219
+ }
220
+ else if (schema.type === 'array') {
221
+ if (!Array.isArray(value))
222
+ return [`${path} must be an array`];
223
+ if (schema.items !== undefined) {
224
+ value.forEach((item, index) => errors.push(...validateConfig(item, schema.items, `${path}[${String(index)}]`)));
225
+ }
226
+ }
227
+ else if (schema.type === 'string' && typeof value !== 'string') {
228
+ errors.push(`${path} must be a string`);
229
+ }
230
+ else if (schema.type === 'number' && (typeof value !== 'number' || !Number.isFinite(value))) {
231
+ errors.push(`${path} must be a finite number`);
232
+ }
233
+ else if (schema.type === 'integer' && (typeof value !== 'number' || !Number.isInteger(value))) {
234
+ errors.push(`${path} must be an integer`);
235
+ }
236
+ else if (schema.type === 'boolean' && typeof value !== 'boolean') {
237
+ errors.push(`${path} must be a boolean`);
238
+ }
239
+ else if (schema.type === 'null' && value !== null) {
240
+ errors.push(`${path} must be null`);
241
+ }
242
+ return errors;
243
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "@boombot/plugins",
3
+ "version": "2.0.0",
4
+ "type": "module",
5
+ "main": "./index.js",
6
+ "exports": {
7
+ ".": "./index.js"
8
+ }
9
+ }
@@ -0,0 +1,125 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Command defs pending merge into the protocol barrel.
4
+ * Shape mirrors `COMMAND_SCHEMAS`: `{ [type]: { type, payload, response } }`.
5
+ */
6
+ export declare const EXTRA_COMMAND_DEFS: {
7
+ readonly "channel.connect": {
8
+ type: string;
9
+ payload: z.ZodUnion<[z.ZodObject<{
10
+ channel: z.ZodLiteral<"telegram">;
11
+ botToken: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ channel: "telegram";
14
+ botToken: string;
15
+ }, {
16
+ channel: "telegram";
17
+ botToken: string;
18
+ }>, z.ZodObject<{
19
+ channel: z.ZodLiteral<"zalo">;
20
+ mode: z.ZodOptional<z.ZodLiteral<"oa">>;
21
+ appId: z.ZodOptional<z.ZodString>;
22
+ appSecret: z.ZodOptional<z.ZodString>;
23
+ redirectUri: z.ZodString;
24
+ }, "strip", z.ZodTypeAny, {
25
+ channel: "zalo";
26
+ redirectUri: string;
27
+ mode?: "oa" | undefined;
28
+ appId?: string | undefined;
29
+ appSecret?: string | undefined;
30
+ }, {
31
+ channel: "zalo";
32
+ redirectUri: string;
33
+ mode?: "oa" | undefined;
34
+ appId?: string | undefined;
35
+ appSecret?: string | undefined;
36
+ }>, z.ZodObject<{
37
+ channel: z.ZodLiteral<"zalo">;
38
+ mode: z.ZodLiteral<"personal">;
39
+ }, "strip", z.ZodTypeAny, {
40
+ mode: "personal";
41
+ channel: "zalo";
42
+ }, {
43
+ mode: "personal";
44
+ channel: "zalo";
45
+ }>]>;
46
+ response: z.ZodDiscriminatedUnion<"status", [z.ZodObject<{
47
+ status: z.ZodLiteral<"connected">;
48
+ displayName: z.ZodString;
49
+ }, "strip", z.ZodTypeAny, {
50
+ status: "connected";
51
+ displayName: string;
52
+ }, {
53
+ status: "connected";
54
+ displayName: string;
55
+ }>, z.ZodObject<{
56
+ status: z.ZodLiteral<"authorization_required">;
57
+ authorizationUrl: z.ZodString;
58
+ expiresAt: z.ZodString;
59
+ }, "strip", z.ZodTypeAny, {
60
+ status: "authorization_required";
61
+ authorizationUrl: string;
62
+ expiresAt: string;
63
+ }, {
64
+ status: "authorization_required";
65
+ authorizationUrl: string;
66
+ expiresAt: string;
67
+ }>, z.ZodObject<{
68
+ status: z.ZodLiteral<"qr_required">;
69
+ qrDataUrl: z.ZodString;
70
+ expiresAt: z.ZodString;
71
+ }, "strip", z.ZodTypeAny, {
72
+ status: "qr_required";
73
+ expiresAt: string;
74
+ qrDataUrl: string;
75
+ }, {
76
+ status: "qr_required";
77
+ expiresAt: string;
78
+ qrDataUrl: string;
79
+ }>]>;
80
+ };
81
+ readonly "channel.pair": {
82
+ type: string;
83
+ payload: z.ZodObject<{
84
+ channel: z.ZodString;
85
+ }, "strip", z.ZodTypeAny, {
86
+ channel: string;
87
+ }, {
88
+ channel: string;
89
+ }>;
90
+ response: z.ZodObject<{
91
+ /** `BOOM-######` pairing code the user types on the channel. */
92
+ code: z.ZodString;
93
+ }, "strip", z.ZodTypeAny, {
94
+ code: string;
95
+ }, {
96
+ code: string;
97
+ }>;
98
+ };
99
+ readonly "channel.unpair": {
100
+ type: string;
101
+ payload: z.ZodObject<{
102
+ channel: z.ZodString;
103
+ target: z.ZodString;
104
+ }, "strip", z.ZodTypeAny, {
105
+ channel: string;
106
+ target: string;
107
+ }, {
108
+ channel: string;
109
+ target: string;
110
+ }>;
111
+ response: z.ZodObject<{
112
+ ok: z.ZodBoolean;
113
+ }, "strip", z.ZodTypeAny, {
114
+ ok: boolean;
115
+ }, {
116
+ ok: boolean;
117
+ }>;
118
+ };
119
+ };
120
+ /** Union of the extra command type literals. */
121
+ export type ExtraCommandType = keyof typeof EXTRA_COMMAND_DEFS;
122
+ /** Validated payload type for an extra command. */
123
+ export type ExtraCommandPayload<T extends ExtraCommandType> = z.infer<(typeof EXTRA_COMMAND_DEFS)[T]["payload"]>;
124
+ /** Validated response type for an extra command. */
125
+ export type ExtraCommandResponse<T extends ExtraCommandType> = z.infer<(typeof EXTRA_COMMAND_DEFS)[T]["response"]>;
@@ -0,0 +1,76 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Extra channel command definitions, additive-only.
4
+ *
5
+ * `channel.connect` / `channel.pair` / `channel.unpair` are handled by
6
+ * `channels/src/handlers.ts` (which re-validates the payload
7
+ * with the same rules so the handler does not depend on this barrel).
8
+ * They are wired into `COMMAND_SCHEMAS` in `commands.ts` (additive merge)
9
+ * and re-exported from the protocol barrel as `CHANNEL_EXTRA_COMMAND_DEFS`
10
+ * for handlers that need the def directly.
11
+ */
12
+ const channelPair = {
13
+ type: "channel.pair",
14
+ payload: z.object({
15
+ channel: z.string().min(1),
16
+ }),
17
+ response: z.object({
18
+ /** `BOOM-######` pairing code the user types on the channel. */
19
+ code: z.string().min(1),
20
+ }),
21
+ };
22
+ const channelUnpair = {
23
+ type: "channel.unpair",
24
+ payload: z.object({
25
+ channel: z.string().min(1),
26
+ target: z.string().min(1),
27
+ }),
28
+ response: z.object({
29
+ ok: z.boolean(),
30
+ }),
31
+ };
32
+ const channelConnect = {
33
+ type: "channel.connect",
34
+ payload: z.union([
35
+ z.object({
36
+ channel: z.literal("telegram"),
37
+ botToken: z.string().min(1),
38
+ }),
39
+ z.object({
40
+ channel: z.literal("zalo"),
41
+ mode: z.literal("oa").optional(),
42
+ appId: z.string().min(1).optional(),
43
+ appSecret: z.string().min(1).optional(),
44
+ redirectUri: z.string().url(),
45
+ }),
46
+ z.object({
47
+ channel: z.literal("zalo"),
48
+ mode: z.literal("personal"),
49
+ }),
50
+ ]),
51
+ response: z.discriminatedUnion("status", [
52
+ z.object({
53
+ status: z.literal("connected"),
54
+ displayName: z.string().min(1),
55
+ }),
56
+ z.object({
57
+ status: z.literal("authorization_required"),
58
+ authorizationUrl: z.string().url(),
59
+ expiresAt: z.string().datetime(),
60
+ }),
61
+ z.object({
62
+ status: z.literal("qr_required"),
63
+ qrDataUrl: z.string().startsWith("data:image/png;base64,"),
64
+ expiresAt: z.string().datetime(),
65
+ }),
66
+ ]),
67
+ };
68
+ /**
69
+ * Command defs pending merge into the protocol barrel.
70
+ * Shape mirrors `COMMAND_SCHEMAS`: `{ [type]: { type, payload, response } }`.
71
+ */
72
+ export const EXTRA_COMMAND_DEFS = {
73
+ "channel.connect": channelConnect,
74
+ "channel.pair": channelPair,
75
+ "channel.unpair": channelUnpair,
76
+ };
@@ -0,0 +1,220 @@
1
+ import { z } from 'zod';
2
+ export declare const pluginInfoSchema: z.ZodObject<{
3
+ id: z.ZodString;
4
+ version: z.ZodString;
5
+ displayName: z.ZodOptional<z.ZodString>;
6
+ description: z.ZodOptional<z.ZodString>;
7
+ capabilities: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
8
+ directory: z.ZodOptional<z.ZodString>;
9
+ entry: z.ZodOptional<z.ZodString>;
10
+ isValid: z.ZodBoolean;
11
+ error: z.ZodOptional<z.ZodString>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ id: string;
14
+ version: string;
15
+ capabilities: string[];
16
+ isValid: boolean;
17
+ error?: string | undefined;
18
+ directory?: string | undefined;
19
+ displayName?: string | undefined;
20
+ description?: string | undefined;
21
+ entry?: string | undefined;
22
+ }, {
23
+ id: string;
24
+ version: string;
25
+ isValid: boolean;
26
+ error?: string | undefined;
27
+ directory?: string | undefined;
28
+ displayName?: string | undefined;
29
+ description?: string | undefined;
30
+ capabilities?: string[] | undefined;
31
+ entry?: string | undefined;
32
+ }>;
33
+ export declare const marketplacePluginSchema: z.ZodObject<{
34
+ id: z.ZodString;
35
+ name: z.ZodString;
36
+ version: z.ZodString;
37
+ description: z.ZodString;
38
+ author: z.ZodString;
39
+ capabilities: z.ZodArray<z.ZodString, "many">;
40
+ tags: z.ZodArray<z.ZodString, "many">;
41
+ }, "strip", z.ZodTypeAny, {
42
+ name: string;
43
+ id: string;
44
+ version: string;
45
+ description: string;
46
+ capabilities: string[];
47
+ author: string;
48
+ tags: string[];
49
+ }, {
50
+ name: string;
51
+ id: string;
52
+ version: string;
53
+ description: string;
54
+ capabilities: string[];
55
+ author: string;
56
+ tags: string[];
57
+ }>;
58
+ export declare const PLUGIN_COMMAND_DEFS: {
59
+ readonly 'plugin.list': {
60
+ readonly type: "plugin.list";
61
+ readonly payload: z.ZodDefault<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
62
+ readonly response: z.ZodObject<{
63
+ plugins: z.ZodArray<z.ZodObject<{
64
+ id: z.ZodString;
65
+ version: z.ZodString;
66
+ displayName: z.ZodOptional<z.ZodString>;
67
+ description: z.ZodOptional<z.ZodString>;
68
+ capabilities: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
69
+ directory: z.ZodOptional<z.ZodString>;
70
+ entry: z.ZodOptional<z.ZodString>;
71
+ isValid: z.ZodBoolean;
72
+ error: z.ZodOptional<z.ZodString>;
73
+ }, "strip", z.ZodTypeAny, {
74
+ id: string;
75
+ version: string;
76
+ capabilities: string[];
77
+ isValid: boolean;
78
+ error?: string | undefined;
79
+ directory?: string | undefined;
80
+ displayName?: string | undefined;
81
+ description?: string | undefined;
82
+ entry?: string | undefined;
83
+ }, {
84
+ id: string;
85
+ version: string;
86
+ isValid: boolean;
87
+ error?: string | undefined;
88
+ directory?: string | undefined;
89
+ displayName?: string | undefined;
90
+ description?: string | undefined;
91
+ capabilities?: string[] | undefined;
92
+ entry?: string | undefined;
93
+ }>, "many">;
94
+ }, "strip", z.ZodTypeAny, {
95
+ plugins: {
96
+ id: string;
97
+ version: string;
98
+ capabilities: string[];
99
+ isValid: boolean;
100
+ error?: string | undefined;
101
+ directory?: string | undefined;
102
+ displayName?: string | undefined;
103
+ description?: string | undefined;
104
+ entry?: string | undefined;
105
+ }[];
106
+ }, {
107
+ plugins: {
108
+ id: string;
109
+ version: string;
110
+ isValid: boolean;
111
+ error?: string | undefined;
112
+ directory?: string | undefined;
113
+ displayName?: string | undefined;
114
+ description?: string | undefined;
115
+ capabilities?: string[] | undefined;
116
+ entry?: string | undefined;
117
+ }[];
118
+ }>;
119
+ };
120
+ readonly 'plugin.marketplace': {
121
+ readonly type: "plugin.marketplace";
122
+ readonly payload: z.ZodDefault<z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>>;
123
+ readonly response: z.ZodObject<{
124
+ marketplace: z.ZodArray<z.ZodObject<{
125
+ id: z.ZodString;
126
+ name: z.ZodString;
127
+ version: z.ZodString;
128
+ description: z.ZodString;
129
+ author: z.ZodString;
130
+ capabilities: z.ZodArray<z.ZodString, "many">;
131
+ tags: z.ZodArray<z.ZodString, "many">;
132
+ }, "strip", z.ZodTypeAny, {
133
+ name: string;
134
+ id: string;
135
+ version: string;
136
+ description: string;
137
+ capabilities: string[];
138
+ author: string;
139
+ tags: string[];
140
+ }, {
141
+ name: string;
142
+ id: string;
143
+ version: string;
144
+ description: string;
145
+ capabilities: string[];
146
+ author: string;
147
+ tags: string[];
148
+ }>, "many">;
149
+ }, "strip", z.ZodTypeAny, {
150
+ marketplace: {
151
+ name: string;
152
+ id: string;
153
+ version: string;
154
+ description: string;
155
+ capabilities: string[];
156
+ author: string;
157
+ tags: string[];
158
+ }[];
159
+ }, {
160
+ marketplace: {
161
+ name: string;
162
+ id: string;
163
+ version: string;
164
+ description: string;
165
+ capabilities: string[];
166
+ author: string;
167
+ tags: string[];
168
+ }[];
169
+ }>;
170
+ };
171
+ readonly 'plugin.install': {
172
+ readonly type: "plugin.install";
173
+ readonly payload: z.ZodObject<{
174
+ spec: z.ZodString;
175
+ force: z.ZodOptional<z.ZodBoolean>;
176
+ }, "strip", z.ZodTypeAny, {
177
+ spec: string;
178
+ force?: boolean | undefined;
179
+ }, {
180
+ spec: string;
181
+ force?: boolean | undefined;
182
+ }>;
183
+ readonly response: z.ZodObject<{
184
+ ok: z.ZodBoolean;
185
+ id: z.ZodString;
186
+ message: z.ZodString;
187
+ }, "strip", z.ZodTypeAny, {
188
+ id: string;
189
+ message: string;
190
+ ok: boolean;
191
+ }, {
192
+ id: string;
193
+ message: string;
194
+ ok: boolean;
195
+ }>;
196
+ };
197
+ readonly 'plugin.uninstall': {
198
+ readonly type: "plugin.uninstall";
199
+ readonly payload: z.ZodObject<{
200
+ id: z.ZodString;
201
+ }, "strip", z.ZodTypeAny, {
202
+ id: string;
203
+ }, {
204
+ id: string;
205
+ }>;
206
+ readonly response: z.ZodObject<{
207
+ ok: z.ZodBoolean;
208
+ id: z.ZodString;
209
+ message: z.ZodString;
210
+ }, "strip", z.ZodTypeAny, {
211
+ id: string;
212
+ message: string;
213
+ ok: boolean;
214
+ }, {
215
+ id: string;
216
+ message: string;
217
+ ok: boolean;
218
+ }>;
219
+ };
220
+ };