@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,157 @@
1
+ /**
2
+ * Public types for the BoomBot durable scheduler.
3
+ *
4
+ * A scheduled job contains an opaque ID, owner, schedule,
5
+ * timezone, payload reference, enabled state, concurrency policy, retry
6
+ * policy, and next-run time. Schedules are persisted before acknowledgment.
7
+ */
8
+ export type ConcurrencyPolicy = 'forbid' | 'allow' | 'replace';
9
+ export type MissedRunPolicy = 'skip' | 'run_once' | 'catch_up_bounded';
10
+ export type RunStatus = 'claimed' | 'running' | 'completed' | 'failed' | 'dead_letter';
11
+ /** User-supplied schedule specification (validated at the trust boundary). */
12
+ export interface ScheduleSpec {
13
+ readonly name: string;
14
+ /** 5-field cron expression, e.g. "0 9 * * 1-5". */
15
+ readonly cron: string;
16
+ /** IANA timezone, e.g. "Asia/Ho_Chi_Minh". */
17
+ readonly timezone: string;
18
+ /**
19
+ * Registered prompt text submitted as an agent turn when the schedule
20
+ * fires. This is inert text — never code, never a shell command.
21
+ */
22
+ readonly promptText: string;
23
+ readonly enabled?: boolean;
24
+ readonly concurrencyPolicy?: ConcurrencyPolicy;
25
+ readonly missedRunPolicy?: MissedRunPolicy;
26
+ /** Max catch-up runs per tick for `catch_up_bounded`. Default 3. */
27
+ readonly maxCatchUp?: number;
28
+ /** Max attempts per run before dead-letter. Default 3. */
29
+ readonly maxAttempts?: number;
30
+ readonly baseRetryDelayMs?: number;
31
+ readonly maxRetryDelayMs?: number;
32
+ }
33
+ export interface SchedulerJob {
34
+ readonly id: string;
35
+ readonly ownerPrincipalId: string;
36
+ readonly name: string;
37
+ readonly cronExpr: string;
38
+ readonly timezone: string;
39
+ readonly promptText: string;
40
+ readonly enabled: boolean;
41
+ readonly concurrencyPolicy: ConcurrencyPolicy;
42
+ readonly missedRunPolicy: MissedRunPolicy;
43
+ readonly maxCatchUp: number;
44
+ readonly maxAttempts: number;
45
+ readonly baseRetryDelayMs: number;
46
+ readonly maxRetryDelayMs: number;
47
+ /** ISO-8601 UTC of the next scheduled fire, or null when disabled. */
48
+ readonly nextRunAt: string | null;
49
+ readonly createdAt: string;
50
+ readonly updatedAt: string;
51
+ }
52
+ export interface SchedulerRun {
53
+ readonly id: string;
54
+ readonly jobId: string;
55
+ readonly idempotencyKey: string;
56
+ /** ISO-8601 UTC fire time this run serves. */
57
+ readonly scheduledFireAt: string;
58
+ readonly status: RunStatus;
59
+ readonly attempt: number;
60
+ readonly notBeforeAt: string;
61
+ readonly claimedBy: string;
62
+ readonly leaseExpiresAt: string;
63
+ readonly claimedAt: string;
64
+ readonly completedAt: string | null;
65
+ readonly errorCode: string | null;
66
+ }
67
+ /**
68
+ * Proof that the caller was authenticated by the HOST's authN layer
69
+ * (SECURITY FIX: confused-deputy / identity-binding gap, medium).
70
+ *
71
+ * `ScheduleRegistry` management methods take this instead of a bare
72
+ * principal-id string. Only `createAuthenticatedContext()` — which the host
73
+ * calls with the principal id from its OWN verified session/auth context —
74
+ * can mint a value carrying the brand: a plain `{ principalId }` object (or
75
+ * a header / JWT claim / plugin-supplied string the host did not verify)
76
+ * fails both the type check and the runtime brand check in
77
+ * `assertAuthenticatedContext()`.
78
+ *
79
+ * HOST INTEGRATION (MUST):
80
+ * - Mint the context from the Gateway's authenticated session ONLY.
81
+ * - NEVER mint from user input, request headers, plugin-supplied data, or
82
+ * unverified token claims. A confused-deputy host that mints from
83
+ * attacker-influenced data re-opens the impersonation gap below.
84
+ */
85
+ /**
86
+ * Brand key: a module-private runtime symbol, also used as the type-level
87
+ * brand via its `unique symbol` type. Never exported, so only
88
+ * `createAuthenticatedContext()` (this module) can mint a branded context;
89
+ * a forged plain object fails the runtime check in
90
+ * `assertAuthenticatedContext()`.
91
+ */
92
+ declare const authenticatedBrand: unique symbol;
93
+ export interface AuthenticatedContext {
94
+ readonly principalId: string;
95
+ readonly [authenticatedBrand]: true;
96
+ }
97
+ /**
98
+ * Mint an `AuthenticatedContext`. The host MUST call this with the
99
+ * principal id from its own verified session/auth context — never from
100
+ * user input, headers, or plugin data (see `AuthenticatedContext`).
101
+ */
102
+ export declare function createAuthenticatedContext(principalId: string): AuthenticatedContext;
103
+ /**
104
+ * Runtime brand check: rejects forged or plain `{ principalId }` objects
105
+ * that were not minted by `createAuthenticatedContext()`. Defense in depth
106
+ * behind the type-level brand.
107
+ */
108
+ export declare function assertAuthenticatedContext(context: unknown): asserts context is AuthenticatedContext;
109
+ /** Narrow port: who may manage schedules. Wired by the host to Gateway authZ. */
110
+ export interface SchedulerAuthorizer {
111
+ canManage(principalId: string): boolean | Promise<boolean>;
112
+ }
113
+ /**
114
+ * Narrow port: submit a turn for a fired schedule. The host wires this to the
115
+ * sessions facade (`turn.submit`); `command_idempotency` dedupes on the
116
+ * idempotency key. The scheduler never executes anything itself.
117
+ */
118
+ export interface TurnSubmitter {
119
+ submit(input: {
120
+ readonly principalId: string;
121
+ readonly text: string;
122
+ readonly idempotencyKey: string;
123
+ /**
124
+ * Run context, populated by `SchedulerRunner.driveRun` when driving a
125
+ * claimed run. Host submitters (e.g. the gateway scheduler service) use
126
+ * these to record per-attempt delivery outcomes. Optional so existing
127
+ * submitters that only need the narrow port keep compiling.
128
+ */
129
+ readonly jobId?: string;
130
+ readonly jobName?: string;
131
+ readonly runId?: string;
132
+ readonly attempt?: number;
133
+ }): Promise<{
134
+ readonly turnId: string;
135
+ }>;
136
+ }
137
+ /** Wall-clock source (injectable for tests). */
138
+ export interface WallClock {
139
+ now(): number;
140
+ }
141
+ export type SchedulerErrorCode = 'SCHEDULER_UNAUTHORIZED' | 'SCHEDULER_INVALID_SPEC' | 'SCHEDULER_NOT_FOUND' | 'SCHEDULER_CONFLICT' | 'SCHEDULER_LIMIT_EXCEEDED' | 'SCHEDULER_INVALID_STATE' | 'SCHEDULER_STORAGE_ERROR';
142
+ export declare class SchedulerError extends Error {
143
+ readonly code: SchedulerErrorCode;
144
+ constructor(code: SchedulerErrorCode, message: string, cause?: unknown);
145
+ }
146
+ export declare function unauthorized(message: string): SchedulerError;
147
+ export declare function invalidSpec(message: string): SchedulerError;
148
+ export declare function notFound(message: string): SchedulerError;
149
+ export declare function limitExceeded(message: string): SchedulerError;
150
+ /**
151
+ * The target exists but is in a state that forbids the operation
152
+ * (e.g. `run-now` on a disabled schedule). Client-caused: hosts map this
153
+ * to a 4xx, never a 500.
154
+ */
155
+ export declare function invalidState(message: string): SchedulerError;
156
+ export declare function storageError(message: string, cause?: unknown): SchedulerError;
157
+ export {};
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Public types for the BoomBot durable scheduler.
3
+ *
4
+ * A scheduled job contains an opaque ID, owner, schedule,
5
+ * timezone, payload reference, enabled state, concurrency policy, retry
6
+ * policy, and next-run time. Schedules are persisted before acknowledgment.
7
+ */
8
+ /**
9
+ * Proof that the caller was authenticated by the HOST's authN layer
10
+ * (SECURITY FIX: confused-deputy / identity-binding gap, medium).
11
+ *
12
+ * `ScheduleRegistry` management methods take this instead of a bare
13
+ * principal-id string. Only `createAuthenticatedContext()` — which the host
14
+ * calls with the principal id from its OWN verified session/auth context —
15
+ * can mint a value carrying the brand: a plain `{ principalId }` object (or
16
+ * a header / JWT claim / plugin-supplied string the host did not verify)
17
+ * fails both the type check and the runtime brand check in
18
+ * `assertAuthenticatedContext()`.
19
+ *
20
+ * HOST INTEGRATION (MUST):
21
+ * - Mint the context from the Gateway's authenticated session ONLY.
22
+ * - NEVER mint from user input, request headers, plugin-supplied data, or
23
+ * unverified token claims. A confused-deputy host that mints from
24
+ * attacker-influenced data re-opens the impersonation gap below.
25
+ */
26
+ /**
27
+ * Brand key: a module-private runtime symbol, also used as the type-level
28
+ * brand via its `unique symbol` type. Never exported, so only
29
+ * `createAuthenticatedContext()` (this module) can mint a branded context;
30
+ * a forged plain object fails the runtime check in
31
+ * `assertAuthenticatedContext()`.
32
+ */
33
+ const authenticatedBrand = Symbol('boombot.scheduler.authenticated');
34
+ /**
35
+ * Mint an `AuthenticatedContext`. The host MUST call this with the
36
+ * principal id from its own verified session/auth context — never from
37
+ * user input, headers, or plugin data (see `AuthenticatedContext`).
38
+ */
39
+ export function createAuthenticatedContext(principalId) {
40
+ if (typeof principalId !== 'string' || principalId.length === 0) {
41
+ throw unauthorized('principalId is required to mint an authenticated context');
42
+ }
43
+ return { principalId, [authenticatedBrand]: true };
44
+ }
45
+ /**
46
+ * Runtime brand check: rejects forged or plain `{ principalId }` objects
47
+ * that were not minted by `createAuthenticatedContext()`. Defense in depth
48
+ * behind the type-level brand.
49
+ */
50
+ export function assertAuthenticatedContext(context) {
51
+ if (typeof context !== 'object' ||
52
+ context === null ||
53
+ typeof context.principalId !== 'string' ||
54
+ context[authenticatedBrand] !== true) {
55
+ throw unauthorized('caller context is not authenticated: mint via createAuthenticatedContext() ' +
56
+ 'from the host authN layer');
57
+ }
58
+ }
59
+ export class SchedulerError extends Error {
60
+ code;
61
+ constructor(code, message, cause) {
62
+ super(message, cause === undefined ? undefined : { cause });
63
+ this.name = 'SchedulerError';
64
+ this.code = code;
65
+ }
66
+ }
67
+ export function unauthorized(message) {
68
+ return new SchedulerError('SCHEDULER_UNAUTHORIZED', message);
69
+ }
70
+ export function invalidSpec(message) {
71
+ return new SchedulerError('SCHEDULER_INVALID_SPEC', message);
72
+ }
73
+ export function notFound(message) {
74
+ return new SchedulerError('SCHEDULER_NOT_FOUND', message);
75
+ }
76
+ export function limitExceeded(message) {
77
+ return new SchedulerError('SCHEDULER_LIMIT_EXCEEDED', message);
78
+ }
79
+ /**
80
+ * The target exists but is in a state that forbids the operation
81
+ * (e.g. `run-now` on a disabled schedule). Client-caused: hosts map this
82
+ * to a 4xx, never a 500.
83
+ */
84
+ export function invalidState(message) {
85
+ return new SchedulerError('SCHEDULER_INVALID_STATE', message);
86
+ }
87
+ export function storageError(message, cause) {
88
+ return new SchedulerError('SCHEDULER_STORAGE_ERROR', message, cause);
89
+ }
@@ -0,0 +1,7 @@
1
+ export type { StepStatus, Task, TaskCheckpoint, TaskEvent, TaskInput, TaskRunner, TaskStatus, TaskStep, TurnRunner, TurnRunnerEvent, } from './types.js';
2
+ export { TaskError } from './types.js';
3
+ export { TaskStore, createTaskStore } from './store.js';
4
+ export { createTaskRunner } from './runner.js';
5
+ export type { TaskRunnerOptions } from './runner.js';
6
+ export { decomposeGoal, planToTaskInput, createAndStartFromGoal, } from './planner.js';
7
+ export type { PlannedStep, TaskPlan, TaskPlannerOptions, } from './planner.js';
@@ -0,0 +1,5 @@
1
+ // @boombot/core — background task runner with durable checkpoints.
2
+ export { TaskError } from './types.js';
3
+ export { TaskStore, createTaskStore } from './store.js';
4
+ export { createTaskRunner } from './runner.js';
5
+ export { decomposeGoal, planToTaskInput, createAndStartFromGoal, } from './planner.js';
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Dynamic Task Decomposition & Planner for @boombot/core.
3
+ *
4
+ * Decomposes high-level complex goals into ordered, durable TaskSteps
5
+ * with explicit dependencies, checkpoints, and automated fallback planning.
6
+ */
7
+ import type { Task, TaskInput, TaskRunner } from './types.js';
8
+ export interface PlannedStep {
9
+ readonly title: string;
10
+ readonly prompt: string;
11
+ readonly description?: string;
12
+ readonly dependencies?: readonly number[];
13
+ }
14
+ export interface TaskPlan {
15
+ readonly goal: string;
16
+ readonly summary: string;
17
+ readonly steps: readonly PlannedStep[];
18
+ readonly totalSteps: number;
19
+ }
20
+ export interface TaskPlannerOptions {
21
+ /** Optional custom LLM decomposition function. */
22
+ readonly decomposeLlm?: (goal: string, context?: string) => Promise<string>;
23
+ /** Maximum number of sub-steps allowed. Default 8. */
24
+ readonly maxSteps?: number;
25
+ }
26
+ /**
27
+ * Decomposes a high-level goal into an ordered, executable TaskPlan.
28
+ */
29
+ export declare function decomposeGoal(goal: string, context?: string, options?: TaskPlannerOptions): Promise<TaskPlan>;
30
+ /**
31
+ * Converts a TaskPlan into TaskInput ready for TaskRunner.createAndStart.
32
+ */
33
+ export declare function planToTaskInput(plan: TaskPlan): TaskInput;
34
+ /**
35
+ * Helper to decompose a goal and immediately launch it in the given TaskRunner.
36
+ */
37
+ export declare function createAndStartFromGoal(runner: TaskRunner, goal: string, context?: string, options?: TaskPlannerOptions): Promise<Task>;
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Dynamic Task Decomposition & Planner for @boombot/core.
3
+ *
4
+ * Decomposes high-level complex goals into ordered, durable TaskSteps
5
+ * with explicit dependencies, checkpoints, and automated fallback planning.
6
+ */
7
+ /**
8
+ * Parses structured JSON response from LLM or extracts steps from bulleted text.
9
+ */
10
+ function parseLlmPlanJson(raw, goal) {
11
+ try {
12
+ const jsonMatch = raw.match(/\{[\s\S]*\}/);
13
+ if (!jsonMatch)
14
+ return null;
15
+ const parsed = JSON.parse(jsonMatch[0]);
16
+ if (!parsed || !Array.isArray(parsed.steps) || parsed.steps.length === 0) {
17
+ return null;
18
+ }
19
+ const steps = parsed.steps.map((s, idx) => ({
20
+ title: typeof s.title === 'string' ? s.title : `Step ${idx + 1}`,
21
+ prompt: typeof s.prompt === 'string' && s.prompt.trim()
22
+ ? s.prompt.trim()
23
+ : typeof s.title === 'string'
24
+ ? s.title
25
+ : `Execute step ${idx + 1}`,
26
+ description: typeof s.description === 'string' ? s.description : undefined,
27
+ dependencies: Array.isArray(s.dependencies)
28
+ ? s.dependencies.filter((d) => typeof d === 'number')
29
+ : undefined,
30
+ }));
31
+ return {
32
+ goal,
33
+ summary: typeof parsed.summary === 'string' ? parsed.summary : `Plan for: ${goal}`,
34
+ steps,
35
+ totalSteps: steps.length,
36
+ };
37
+ }
38
+ catch {
39
+ return null;
40
+ }
41
+ }
42
+ /**
43
+ * Heuristically extracts numbered/bulleted steps from user input if present.
44
+ */
45
+ function extractHeuristicSteps(text) {
46
+ const lines = text.split('\n').map((l) => l.trim());
47
+ const steps = [];
48
+ const stepPattern = /^(?:(?:\d+[\.\)]|\-|\*)\s+)(.+)$/;
49
+ for (const line of lines) {
50
+ const match = line.match(stepPattern);
51
+ if (match && match[1]) {
52
+ const content = match[1].trim();
53
+ if (content.length > 5) {
54
+ steps.push({
55
+ title: content.slice(0, 50),
56
+ prompt: content,
57
+ });
58
+ }
59
+ }
60
+ }
61
+ return steps;
62
+ }
63
+ /**
64
+ * Standard 4-phase autonomous software engineering lifecycle.
65
+ */
66
+ function createDefaultDecomposition(goal, context) {
67
+ const ctxHint = context ? ` (Context: ${context})` : '';
68
+ const steps = [
69
+ {
70
+ title: 'Phase 1: Reconnaissance & Inspection',
71
+ prompt: `Inspect codebase, identify required files, analyze dependencies and verify prerequisites for: ${goal}${ctxHint}`,
72
+ description: 'Audit workspace and understand existing architecture before making changes.',
73
+ },
74
+ {
75
+ title: 'Phase 2: Core Implementation',
76
+ prompt: `Implement core changes, logic, and data models to fulfill goal: ${goal}${ctxHint}`,
77
+ description: 'Perform minimal, targeted implementation adhering to clean architecture.',
78
+ dependencies: [0],
79
+ },
80
+ {
81
+ title: 'Phase 3: Verification & Test Execution',
82
+ prompt: `Verify changes for: ${goal}. Run unit tests, typechecks, linter and inspect edge cases.`,
83
+ description: 'Run automated test suites and ensure zero regressions.',
84
+ dependencies: [1],
85
+ },
86
+ {
87
+ title: 'Phase 4: Polish & Documentation',
88
+ prompt: `Review diffs, ensure no secrets or debug statements remain, and document changes for: ${goal}`,
89
+ description: 'Finalize deliverable with clean git state and audit verification.',
90
+ dependencies: [2],
91
+ },
92
+ ];
93
+ return {
94
+ goal,
95
+ summary: `Autonomous Plan: ${goal.slice(0, 60)}`,
96
+ steps,
97
+ totalSteps: steps.length,
98
+ };
99
+ }
100
+ /**
101
+ * Decomposes a high-level goal into an ordered, executable TaskPlan.
102
+ */
103
+ export async function decomposeGoal(goal, context, options = {}) {
104
+ const maxSteps = options.maxSteps ?? 8;
105
+ // 1. If LLM decomposer function provided, attempt structured decomposition
106
+ if (options.decomposeLlm) {
107
+ try {
108
+ const raw = await options.decomposeLlm(goal, context);
109
+ const plan = parseLlmPlanJson(raw, goal);
110
+ if (plan && plan.steps.length > 0) {
111
+ return {
112
+ ...plan,
113
+ steps: plan.steps.slice(0, maxSteps),
114
+ totalSteps: Math.min(plan.steps.length, maxSteps),
115
+ };
116
+ }
117
+ }
118
+ catch {
119
+ // Fall through to heuristic / rule-based planner
120
+ }
121
+ }
122
+ // 2. Check for explicit bulleted steps in the goal prompt
123
+ const userSteps = extractHeuristicSteps(goal);
124
+ if (userSteps.length >= 2) {
125
+ const limited = userSteps.slice(0, maxSteps);
126
+ return {
127
+ goal,
128
+ summary: `User Specified Steps (${limited.length} phases)`,
129
+ steps: limited,
130
+ totalSteps: limited.length,
131
+ };
132
+ }
133
+ // 3. Fallback to robust 4-phase autonomous software engineering lifecycle
134
+ return createDefaultDecomposition(goal, context);
135
+ }
136
+ /**
137
+ * Converts a TaskPlan into TaskInput ready for TaskRunner.createAndStart.
138
+ */
139
+ export function planToTaskInput(plan) {
140
+ return {
141
+ title: plan.summary,
142
+ steps: plan.steps.map((s) => ({
143
+ prompt: `[${s.title}] ${s.prompt}`,
144
+ })),
145
+ };
146
+ }
147
+ /**
148
+ * Helper to decompose a goal and immediately launch it in the given TaskRunner.
149
+ */
150
+ export async function createAndStartFromGoal(runner, goal, context, options = {}) {
151
+ const plan = await decomposeGoal(goal, context, options);
152
+ const input = planToTaskInput(plan);
153
+ return runner.createAndStart(input);
154
+ }
@@ -0,0 +1,8 @@
1
+ import type { TaskStore } from './store.js';
2
+ import type { TaskEvent, TaskRunner, TurnRunner } from './types.js';
3
+ export interface TaskRunnerOptions {
4
+ store: TaskStore;
5
+ turnRunner: TurnRunner;
6
+ onEvent?: (e: TaskEvent) => void;
7
+ }
8
+ export declare function createTaskRunner(options: TaskRunnerOptions): TaskRunner;