@theowlops/boombot 0.0.0-stage → 1.1.1

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 +244 -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,164 @@
1
+ /**
2
+ * Jev — local 2-tier cognitive gate (System 1 Reflex).
3
+ *
4
+ * Tier 1 rules (pure TypeScript, zero LLM calls):
5
+ * - Noul: detect prompt injection, catastrophic commands, and policy violations.
6
+ * - Choice: classify intent into routing buckets.
7
+ *
8
+ * Philosophy:
9
+ * - Deterministic keywords first, then lightweight heuristics.
10
+ * - No external network, no model inference — target < 2ms per evaluation.
11
+ * - Threshold > 0.5 on noul score → BLOCK immediately.
12
+ * - Confidence < 0.45 on choice → escalate to System 2.
13
+ */
14
+ // ───────────────────────── Noul patterns (danger detection) ─────────────────
15
+ /** Hard danger signals: any single hit raises noul > 0.5 immediately. */
16
+ const DANGER_HARD = [
17
+ // Prompt injection classic patterns
18
+ /ignore (?:all )?(?:previous|prior) (?:instructions?|rules?|prompts?)/iu,
19
+ /bỏ qua (?:mọi|tất cả) (?:chỉ dẫn|hướng dẫn|quy tắc)/iu,
20
+ /forget (?:all )?(?:your )?(?:instructions?|rules?|system prompt)/iu,
21
+ /you are now (?:a|an) (?:jailbreak|DAN|unrestricted)/iu,
22
+ /act as (?:a|an) (?:jailbreak|DAN|evil|harmful)/iu,
23
+ // Catastrophic shell commands
24
+ /rm\s+-rf\s+(?:\/|~|\*|\.)/u,
25
+ /rd\s+\/s\s+\/q\s+(?:c:|d:|\\)/iu,
26
+ /format\s+(?:c:|d:|\/dev\/)/iu,
27
+ /mkfs\./u,
28
+ /dd\s+if=\/dev\/zero/u,
29
+ // Database nukes
30
+ /drop\s+(?:database|table|schema)\s+/iu,
31
+ /truncate\s+table\s+/iu,
32
+ /delete\s+from\s+\w+\s*(?:;|$)/iu,
33
+ // Code execution via eval/exec
34
+ /\beval\s*\(/u,
35
+ /__import__\s*\(\s*['"]os['"]/u,
36
+ /exec\s*\(\s*(?:os\.|subprocess\.)/u,
37
+ // Owner Guard bypass attempts
38
+ /(?:reveal|show|print|output|leak)\s+(?:your\s+)?(?:system\s+prompt|api\s+key|secret|token|password)/iu,
39
+ /(?:pretend|assume|imagine)\s+(?:you\s+are|you're)\s+(?:ryan|the\s+owner|sếp)/iu,
40
+ ];
41
+ /** Soft danger signals: accumulated points contribute to noul score. */
42
+ const DANGER_SOFT = [
43
+ [/wget\s+.+\s*\|\s*(?:bash|sh|python)/u, 0.25],
44
+ [/curl\s+.+\s*\|\s*(?:bash|sh|python)/u, 0.25],
45
+ [/sudo\s+/u, 0.15],
46
+ [/chmod\s+[0-7]{3,4}\s+/u, 0.12],
47
+ [/base64\s+-d\s+/u, 0.18],
48
+ [/powershell\s+-(?:e(?:nc)?|encodedcommand)/iu, 0.22],
49
+ [/new-object\s+net\.webclient/iu, 0.20],
50
+ [/invoke-expression/iu, 0.22],
51
+ // Attempts to push agent to reveal internal data
52
+ [/(?:what|show|tell|list).+(?:api.?key|secret|token|password|credentials?)/iu, 0.30],
53
+ [/system\s+prompt/iu, 0.28],
54
+ ];
55
+ function evalNoul(text, startMs) {
56
+ // Hard patterns: immediate block
57
+ for (const pattern of DANGER_HARD) {
58
+ if (pattern.test(text)) {
59
+ return {
60
+ type: 'noul',
61
+ noul: 0.92,
62
+ decision: true,
63
+ reason: `Matched hard-danger pattern: ${pattern.source.slice(0, 60)}`,
64
+ latency_ms: Date.now() - startMs,
65
+ };
66
+ }
67
+ }
68
+ // Soft accumulation
69
+ let score = 0.02; // baseline — clean input
70
+ let matchedReason;
71
+ for (const [pattern, weight] of DANGER_SOFT) {
72
+ if (pattern.test(text)) {
73
+ score += weight;
74
+ matchedReason ??= `Soft signal: ${pattern.source.slice(0, 50)}`;
75
+ }
76
+ }
77
+ score = Math.min(0.95, score);
78
+ return {
79
+ type: 'noul',
80
+ noul: Math.round(score * 10000) / 10000,
81
+ decision: score > 0.5,
82
+ reason: score > 0.1 ? matchedReason : undefined,
83
+ latency_ms: Date.now() - startMs,
84
+ };
85
+ }
86
+ // ───────────────────────── Choice routing classifier ────────────────────────
87
+ export const DEFAULT_CHOICES = [
88
+ 'file', // read/write/edit local files
89
+ 'shell', // run terminal commands
90
+ 'search', // web search or file grep
91
+ 'code', // write, review, refactor code
92
+ 'memory', // save/recall memory
93
+ 'skill', // load a skill
94
+ 'chat', // general conversation, Q&A
95
+ 'creative', // write prose, poetry, design
96
+ 'analysis', // data analysis, reasoning
97
+ 'task', // schedule, plan, delegate
98
+ ];
99
+ /** Weighted keyword signals per choice bucket. */
100
+ const CHOICE_SIGNALS = [
101
+ ['file', ['file', 'đọc', 'ghi', 'sửa', 'tập tin', 'read', 'write', 'edit', 'open', 'save', 'path', 'directory', 'folder'], 1.0],
102
+ ['shell', ['bash', 'cmd', 'terminal', 'lệnh', 'command', 'run', 'chạy', 'execute', 'script', 'shell'], 1.0],
103
+ ['search', ['search', 'tìm', 'find', 'grep', 'web', 'lookup', 'query', 'tra cứu', 'google', 'look up'], 1.0],
104
+ ['code', ['code', 'function', 'class', 'implement', 'refactor', 'debug', 'fix', 'bug', 'viết', 'typescript', 'python', 'rust', 'build', 'compile'], 1.0],
105
+ ['memory', ['nhớ', 'remember', 'memory', 'lưu', 'save', 'note', 'bộ nhớ', 'ghi nhớ', 'add to memory'], 0.9],
106
+ ['skill', ['skill', 'skills', 'kỹ năng', 'load skill', 'use skill'], 0.8],
107
+ ['analysis', ['analyze', 'phân tích', 'tính toán', 'calculate', 'evaluate', 'compare', 'assess', 'summary', 'summarize', 'chart'], 1.0],
108
+ ['task', ['schedule', 'cron', 'task', 'plan', 'delegate', 'lịch', 'nhắc nhở', 'remind', 'todo', 'deadline'], 0.9],
109
+ ['creative', ['viết', 'write', 'sáng tác', 'poem', 'thơ', 'story', 'article', 'blog', 'design', 'idea', 'brainstorm'], 0.8],
110
+ ['chat', ['chào', 'hello', 'hi', 'how', 'what', 'why', 'when', 'tell me', 'explain', 'hỏi', 'giải thích', 'chia sẻ'], 0.7],
111
+ ];
112
+ function evalChoice(text, choices, startMs) {
113
+ const lower = text.toLowerCase();
114
+ const probs = {};
115
+ // Populate with user-requested choices; use default weights if available.
116
+ for (const bucket of choices) {
117
+ const signalRow = CHOICE_SIGNALS.find(([b]) => b === bucket);
118
+ if (!signalRow) {
119
+ probs[bucket] = 0.05; // unknown bucket — minimal prior
120
+ continue;
121
+ }
122
+ const [, keywords, base] = signalRow;
123
+ let hits = 0;
124
+ for (const kw of keywords) {
125
+ if (lower.includes(kw))
126
+ hits++;
127
+ }
128
+ probs[bucket] = Math.max(0.01, base * (hits * 0.35 + 0.1));
129
+ }
130
+ // Normalise to a probability distribution
131
+ const total = Object.values(probs).reduce((a, b) => a + b, 0);
132
+ for (const k of Object.keys(probs)) {
133
+ probs[k] = Math.round((probs[k] / total) * 10000) / 10000;
134
+ }
135
+ const best = Object.entries(probs).sort(([, a], [, b]) => b - a)[0];
136
+ const [choice, confidence] = best ?? ['chat', 0.1];
137
+ return {
138
+ type: 'choice',
139
+ choice,
140
+ probabilities: probs,
141
+ confidence,
142
+ latency_ms: Date.now() - startMs,
143
+ };
144
+ }
145
+ /**
146
+ * Evaluate a user message through System 1 (Jev — pure TS, < 2ms, zero LLM calls).
147
+ *
148
+ * Returns `passed: false` when the message triggers a danger threshold —
149
+ * the caller MUST NOT route to System 2 in that case.
150
+ */
151
+ export function jevEval(text, opts) {
152
+ const startMs = Date.now();
153
+ const choices = opts?.choices ?? DEFAULT_CHOICES;
154
+ const blockThreshold = opts?.blockThreshold ?? 0.5;
155
+ const noul = evalNoul(text, startMs);
156
+ const choice = evalChoice(text, choices, startMs);
157
+ const totalMs = Date.now() - startMs;
158
+ return {
159
+ noul,
160
+ choice,
161
+ passed: noul.noul <= blockThreshold,
162
+ latency_ms: totalMs,
163
+ };
164
+ }
@@ -0,0 +1,22 @@
1
+ export interface JevNoulResult {
2
+ readonly type: 'noul';
3
+ /** Probability of danger/malicious intent (0.0 to 1.0). */
4
+ readonly noul: number;
5
+ /** True if flagged dangerous (noul > 0.5). */
6
+ readonly decision: boolean;
7
+ readonly reason?: string;
8
+ readonly latency_ms: number;
9
+ }
10
+ export interface JevChoiceResult {
11
+ readonly type: 'choice';
12
+ readonly choice: string;
13
+ readonly probabilities: Record<string, number>;
14
+ readonly confidence: number;
15
+ readonly latency_ms: number;
16
+ }
17
+ export interface JevEvaluation {
18
+ readonly noul: JevNoulResult;
19
+ readonly choice: JevChoiceResult;
20
+ readonly passed: boolean;
21
+ readonly latency_ms: number;
22
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @boombot/core — hard resource caps for the LLM memory-consolidation job.
3
+ *
4
+ * Consolidation runs as a background job outside the agent turn loop. The LLM
5
+ * is the expensive resource here, so every run is bounded on four axes:
6
+ * conversations scanned, transcript chars fed to the model, LLM calls made,
7
+ * and wall-clock time. When any cap is hit the job stops cleanly and reports
8
+ * the stop reason — it never throws, never retries, and never fails the host.
9
+ *
10
+ * Pure logic, zero repo dependencies: safe to unit-test in isolation and to
11
+ * import from `packages/core` (a leaf package) without pulling agent-worker.
12
+ */
13
+ export interface ConsolidationBudget {
14
+ /** Max conversations scanned per run. Must be >= 1. */
15
+ maxConversationsPerRun: number;
16
+ /** Max total transcript chars handed to the LLM per run. Must be >= 1. */
17
+ maxInputCharsPerRun: number;
18
+ /** Max LLM completion calls per run. Must be >= 1. */
19
+ maxLlmCallsPerRun: number;
20
+ /** Wall-clock budget per run in ms. Must be >= 1. */
21
+ timeoutMs: number;
22
+ /**
23
+ * Conversations shorter than this many chars are skipped without spending
24
+ * an LLM call (relevance pre-filter: one-liners rarely hold durable facts).
25
+ * Must be >= 0.
26
+ */
27
+ minConversationChars: number;
28
+ }
29
+ /** Sane defaults: ~20 conversations or ~60k chars or 10 LLM calls or 2 min. */
30
+ export declare const DEFAULT_CONSOLIDATION_BUDGET: ConsolidationBudget;
31
+ export type BudgetStopReason = 'max-conversations' | 'max-input-chars' | 'max-llm-calls' | 'timeout';
32
+ export interface BudgetUsage {
33
+ conversations: number;
34
+ inputChars: number;
35
+ llmCalls: number;
36
+ elapsedMs: number;
37
+ }
38
+ /**
39
+ * Tracks one consolidation run against a `ConsolidationBudget`.
40
+ *
41
+ * `admitConversation` / `admitLlmCall` both check AND record: they return
42
+ * `null` when the unit is admitted, or the `BudgetStopReason` when a cap
43
+ * would be exceeded (in which case nothing is recorded and the caller should
44
+ * stop the run cleanly). `checkDeadline` reports a timeout without recording.
45
+ */
46
+ export declare class ConsolidationBudgetTracker {
47
+ private readonly budget;
48
+ private readonly now;
49
+ private readonly startedAt;
50
+ private conversations;
51
+ private inputChars;
52
+ private llmCalls;
53
+ constructor(budget: ConsolidationBudget, now?: () => number);
54
+ /** Admit one conversation of `chars` transcript chars, or report the cap hit. */
55
+ admitConversation(chars: number): BudgetStopReason | null;
56
+ /** Admit one LLM call, or report the cap hit. */
57
+ admitLlmCall(): BudgetStopReason | null;
58
+ /** Report 'timeout' once the wall-clock budget is exhausted, else null. */
59
+ checkDeadline(): BudgetStopReason | null;
60
+ /** Too short to be worth an LLM call — the relevance pre-filter. */
61
+ isBelowMinChars(chars: number): boolean;
62
+ get usage(): BudgetUsage;
63
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * @boombot/core — hard resource caps for the LLM memory-consolidation job.
3
+ *
4
+ * Consolidation runs as a background job outside the agent turn loop. The LLM
5
+ * is the expensive resource here, so every run is bounded on four axes:
6
+ * conversations scanned, transcript chars fed to the model, LLM calls made,
7
+ * and wall-clock time. When any cap is hit the job stops cleanly and reports
8
+ * the stop reason — it never throws, never retries, and never fails the host.
9
+ *
10
+ * Pure logic, zero repo dependencies: safe to unit-test in isolation and to
11
+ * import from `packages/core` (a leaf package) without pulling agent-worker.
12
+ */
13
+ /** Sane defaults: ~20 conversations or ~60k chars or 10 LLM calls or 2 min. */
14
+ export const DEFAULT_CONSOLIDATION_BUDGET = Object.freeze({
15
+ maxConversationsPerRun: 20,
16
+ maxInputCharsPerRun: 60_000,
17
+ maxLlmCallsPerRun: 10,
18
+ timeoutMs: 120_000,
19
+ minConversationChars: 200,
20
+ });
21
+ function requirePositiveInt(name, value) {
22
+ if (!Number.isFinite(value) || Math.floor(value) !== value || value < 1) {
23
+ throw new Error(`ConsolidationBudget: ${name} must be a positive integer, got ${value}`);
24
+ }
25
+ return value;
26
+ }
27
+ /**
28
+ * Tracks one consolidation run against a `ConsolidationBudget`.
29
+ *
30
+ * `admitConversation` / `admitLlmCall` both check AND record: they return
31
+ * `null` when the unit is admitted, or the `BudgetStopReason` when a cap
32
+ * would be exceeded (in which case nothing is recorded and the caller should
33
+ * stop the run cleanly). `checkDeadline` reports a timeout without recording.
34
+ */
35
+ export class ConsolidationBudgetTracker {
36
+ budget;
37
+ now;
38
+ startedAt;
39
+ conversations = 0;
40
+ inputChars = 0;
41
+ llmCalls = 0;
42
+ constructor(budget, now = () => Date.now()) {
43
+ this.budget = budget;
44
+ this.now = now;
45
+ requirePositiveInt('maxConversationsPerRun', budget.maxConversationsPerRun);
46
+ requirePositiveInt('maxInputCharsPerRun', budget.maxInputCharsPerRun);
47
+ requirePositiveInt('maxLlmCallsPerRun', budget.maxLlmCallsPerRun);
48
+ requirePositiveInt('timeoutMs', budget.timeoutMs);
49
+ if (!Number.isFinite(budget.minConversationChars) || budget.minConversationChars < 0) {
50
+ throw new Error(`ConsolidationBudget: minConversationChars must be >= 0, got ${budget.minConversationChars}`);
51
+ }
52
+ this.startedAt = this.now();
53
+ }
54
+ /** Admit one conversation of `chars` transcript chars, or report the cap hit. */
55
+ admitConversation(chars) {
56
+ const deadline = this.checkDeadline();
57
+ if (deadline !== null)
58
+ return deadline;
59
+ if (this.conversations >= this.budget.maxConversationsPerRun)
60
+ return 'max-conversations';
61
+ const safeChars = Number.isFinite(chars) && chars > 0 ? Math.floor(chars) : 0;
62
+ if (this.inputChars + safeChars > this.budget.maxInputCharsPerRun)
63
+ return 'max-input-chars';
64
+ this.conversations += 1;
65
+ this.inputChars += safeChars;
66
+ return null;
67
+ }
68
+ /** Admit one LLM call, or report the cap hit. */
69
+ admitLlmCall() {
70
+ const deadline = this.checkDeadline();
71
+ if (deadline !== null)
72
+ return deadline;
73
+ if (this.llmCalls >= this.budget.maxLlmCallsPerRun)
74
+ return 'max-llm-calls';
75
+ this.llmCalls += 1;
76
+ return null;
77
+ }
78
+ /** Report 'timeout' once the wall-clock budget is exhausted, else null. */
79
+ checkDeadline() {
80
+ return this.now() - this.startedAt >= this.budget.timeoutMs ? 'timeout' : null;
81
+ }
82
+ /** Too short to be worth an LLM call — the relevance pre-filter. */
83
+ isBelowMinChars(chars) {
84
+ return chars < this.budget.minConversationChars;
85
+ }
86
+ get usage() {
87
+ return {
88
+ conversations: this.conversations,
89
+ inputChars: this.inputChars,
90
+ llmCalls: this.llmCalls,
91
+ elapsedMs: this.now() - this.startedAt,
92
+ };
93
+ }
94
+ }
@@ -0,0 +1,152 @@
1
+ /**
2
+ * @boombot/core — LLM memory consolidation as a background job.
3
+ *
4
+ * Lesson from Hermes (and ChatGPT "Dreaming" / Mem0 research): consolidation
5
+ * — extracting durable facts from past conversations into long-term memory —
6
+ * must run as a background job with its own cursor, NEVER inside the agent
7
+ * turn loop. The loop is latency-sensitive and every extraction costs an LLM
8
+ * call; a per-turn hook would burn calls on small talk and touch the hot
9
+ * path. The host drives `runConsolidation` (or `ConsolidationJob`) on a
10
+ * timer, far away from turns.
11
+ *
12
+ * Design (non-destructive, Mem0-style):
13
+ * - Extraction is per conversation, via an injected LLM. The core never
14
+ * imports agent-worker: the model arrives as `ConsolidationLlm`.
15
+ * - Writes are append-only through `MemoryProvider.save()` with
16
+ * `provenance.source = 'model'`. There is no update path and no atomic
17
+ * swap — superseding, if ever needed, is a host concern.
18
+ * - Deduplication is rule-based (normalized exact match, Mem0's NOOP):
19
+ * no extra LLM call is spent deciding whether a fact already exists.
20
+ * - A relevance pre-filter skips conversations shorter than
21
+ * `budget.minConversationChars` before any LLM call (AgentX-style).
22
+ * - Progress is a watermark cursor under `CONSOLIDATION_STATE_ID`, advanced
23
+ * only past fully-processed conversations, so a crash or restart never
24
+ * loses work and never reprocesses.
25
+ * - Four hard budget axes (conversations / input chars / LLM calls /
26
+ * wall-clock) stop the run cleanly with a reason. The job never throws
27
+ * for LLM or budget reasons — it reports.
28
+ *
29
+ * Pure with respect to the agent loop: this module never sees a turn.
30
+ */
31
+ import { type BudgetStopReason, type BudgetUsage, type ConsolidationBudget } from './budget.js';
32
+ import type { MemoryProvider } from '../provider.js';
33
+ import type { MemoryScope } from '../types.js';
34
+ /**
35
+ * Sentinel memory id under which consolidation run state (the watermark
36
+ * cursor) is kept. Mirrors the host's `memory:curation` convention: the
37
+ * state lives in the store's audit trail, not in a separate KV table.
38
+ */
39
+ export declare const CONSOLIDATION_STATE_ID = "memory:consolidation";
40
+ /** Actor id recorded in provenance for consolidation-written records. */
41
+ export declare const CONSOLIDATION_ACTOR_ID = "memory-consolidation";
42
+ /**
43
+ * The only way the consolidator talks to a model: one injected text
44
+ * completion per conversation. The host adapts its real LLM client
45
+ * (streaming or not) to this shape; `packages/core` stays a leaf.
46
+ */
47
+ export interface ConsolidationLlm {
48
+ completeText(prompt: string, opts?: {
49
+ maxTokens?: number;
50
+ }): Promise<string>;
51
+ }
52
+ /** A finished conversation handed to the consolidator by the host. */
53
+ export interface EndedConversation {
54
+ /** Stable conversation id (session id). Used as the provenance reference. */
55
+ id: string;
56
+ /** Principal that owns the conversation. */
57
+ principalId: string;
58
+ /** Scope extracted facts are written to (durable = principal scope). */
59
+ scope: MemoryScope;
60
+ /** Flattened user+assistant text; tool output is cut by the host. */
61
+ transcript: string;
62
+ /** ISO-8601 end time — doubles as the watermark value. */
63
+ endedAt: string;
64
+ }
65
+ /**
66
+ * Source of finished conversations after a watermark cursor. The host
67
+ * implements this over its session store; the core never touches sessions.
68
+ */
69
+ export interface ConversationSource {
70
+ listEndedAfter(watermark: string | null, limit: number): Promise<readonly EndedConversation[]>;
71
+ }
72
+ /**
73
+ * Durable cursor storage. The host implements this over whatever backs
74
+ * its job state (the reference host uses the memory store's audit trail
75
+ * under `CONSOLIDATION_STATE_ID`, mirroring `memory:curation`).
76
+ */
77
+ export interface WatermarkStore {
78
+ get(key: string): string | null;
79
+ set(key: string, value: string): void;
80
+ }
81
+ export interface ConsolidationReport {
82
+ at: string;
83
+ /** Conversations fully handled (including short-skips and parse-skips). */
84
+ processed: number;
85
+ factsCreated: number;
86
+ skippedShort: number;
87
+ skippedDuplicate: number;
88
+ stopReason: BudgetStopReason | 'completed' | 'llm-error';
89
+ usage: BudgetUsage;
90
+ }
91
+ export interface RunConsolidationDeps {
92
+ llm: ConsolidationLlm;
93
+ store: MemoryProvider;
94
+ conversations: ConversationSource;
95
+ watermarks: WatermarkStore;
96
+ budget?: ConsolidationBudget;
97
+ }
98
+ /**
99
+ * Build the extraction prompt for one conversation transcript. Exported so
100
+ * hosts (and tests) can see the exact contract, including the no-secrets
101
+ * guardrail: consolidation reads raw transcripts, so the extraction prompt
102
+ * must explicitly forbid persisting credentials.
103
+ */
104
+ export declare function buildExtractionPrompt(transcript: string): string;
105
+ /**
106
+ * Parse the model's extraction output into fact strings. Tolerant: accepts
107
+ * a bare array, objects with a "text" field, or plain strings; extracts the
108
+ * first `[...]` block when the model adds prose anyway. Unparseable output
109
+ * yields an empty list (the conversation is skipped, never fatal).
110
+ */
111
+ export declare function parseExtractedFacts(raw: string): string[];
112
+ /**
113
+ * Run one consolidation pass: read the watermark, extract durable facts from
114
+ * each new conversation via the injected LLM, and append them to memory.
115
+ *
116
+ * Never throws for LLM or budget reasons — failures are reported in
117
+ * `stopReason`. The watermark advances only past fully-processed
118
+ * conversations, so an LLM failure leaves the failed conversation for the
119
+ * next run while keeping everything already written.
120
+ */
121
+ export declare function runConsolidation(deps: RunConsolidationDeps): Promise<ConsolidationReport>;
122
+ export interface ConsolidationJobOptions {
123
+ llm: ConsolidationLlm;
124
+ store: MemoryProvider;
125
+ conversations: ConversationSource;
126
+ watermarks: WatermarkStore;
127
+ budget?: ConsolidationBudget;
128
+ /** Interval between runs in ms. Default 30 minutes. */
129
+ intervalMs?: number;
130
+ /**
131
+ * Called when a scheduled run throws. `runConsolidation` itself never
132
+ * throws for LLM/budget reasons; this covers host-adapter failures
133
+ * (session store down, watermark store down).
134
+ */
135
+ onError?: (error: unknown) => void;
136
+ }
137
+ /**
138
+ * Background job that runs consolidation on a timer. Start it once at host
139
+ * boot; it never touches the agent loop. `runOnce()` exists for tests and
140
+ * for hosts that drive scheduling themselves (e.g. cron). Mirrors
141
+ * `CurationJob`, except the run is async (the LLM is remote).
142
+ */
143
+ export declare class ConsolidationJob {
144
+ private readonly options;
145
+ private timer;
146
+ private running;
147
+ constructor(options: ConsolidationJobOptions);
148
+ start(): void;
149
+ stop(): void;
150
+ get isRunning(): boolean;
151
+ runOnce(): Promise<ConsolidationReport>;
152
+ }