monomind 1.11.13 → 1.12.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 (389) hide show
  1. package/.claude/agents/generated/channel-intelligence-director.md +87 -0
  2. package/.claude/agents/generated/chief-growth-officer.md +88 -0
  3. package/.claude/agents/generated/content-seo-strategist.md +90 -0
  4. package/.claude/agents/generated/developer-community-strategist.md +91 -0
  5. package/.claude/agents/generated/outreach-partnership-strategist.md +90 -0
  6. package/.claude/agents/generated/social-media-strategist.md +91 -0
  7. package/.claude/agents/generated/video-visual-strategist.md +90 -0
  8. package/.claude/commands/mastermind/idea.md +1 -1
  9. package/.claude/helpers/auto-memory-hook.mjs +13 -4
  10. package/.claude/helpers/control-start.cjs +5 -0
  11. package/.claude/helpers/event-logger.cjs +114 -0
  12. package/.claude/helpers/handlers/adr-draft-handler.cjs +19 -5
  13. package/.claude/helpers/handlers/agent-start-handler.cjs +13 -4
  14. package/.claude/helpers/handlers/compact-handler.cjs +2 -0
  15. package/.claude/helpers/handlers/edit-handler.cjs +1 -1
  16. package/.claude/helpers/handlers/gates-handler.cjs +3 -0
  17. package/.claude/helpers/handlers/graph-status-handler.cjs +14 -8
  18. package/.claude/helpers/handlers/loops-status-handler.cjs +5 -2
  19. package/.claude/helpers/handlers/route-handler.cjs +13 -6
  20. package/.claude/helpers/handlers/session-handler.cjs +11 -4
  21. package/.claude/helpers/handlers/session-restore-handler.cjs +21 -11
  22. package/.claude/helpers/handlers/task-handler.cjs +13 -5
  23. package/.claude/helpers/intelligence.cjs +7 -2
  24. package/.claude/helpers/loop-tracker.cjs +15 -3
  25. package/.claude/helpers/memory.cjs +6 -1
  26. package/.claude/helpers/router.cjs +5 -2
  27. package/.claude/helpers/session.cjs +2 -0
  28. package/.claude/helpers/statusline.cjs +10 -2
  29. package/.claude/helpers/utils/micro-agents.cjs +20 -4
  30. package/.claude/scheduled_tasks.lock +1 -1
  31. package/.claude/settings.json +92 -1
  32. package/.claude/skills/mastermind/_protocol.md +23 -13
  33. package/.claude/skills/mastermind/architect.md +6 -9
  34. package/.claude/skills/mastermind/build.md +3 -3
  35. package/.claude/skills/mastermind/content.md +3 -3
  36. package/.claude/skills/mastermind/createorg.md +2 -2
  37. package/.claude/skills/mastermind/finance.md +3 -3
  38. package/.claude/skills/mastermind/idea.md +5 -3
  39. package/.claude/skills/mastermind/marketing.md +3 -3
  40. package/.claude/skills/mastermind/monitor.md +2 -2
  41. package/.claude/skills/mastermind/release.md +3 -3
  42. package/.claude/skills/mastermind/research.md +3 -3
  43. package/.claude/skills/mastermind/review.md +3 -3
  44. package/.claude/skills/mastermind/runorg.md +153 -86
  45. package/.claude/skills/mastermind/sales.md +3 -3
  46. package/README.md +286 -129
  47. package/package.json +19 -2
  48. package/packages/@monomind/cli/README.md +286 -129
  49. package/packages/@monomind/cli/bundled-graph/dist/src/build.js +73 -0
  50. package/packages/@monomind/cli/bundled-graph/dist/src/cluster.js +120 -0
  51. package/packages/@monomind/cli/bundled-graph/package.json +57 -0
  52. package/packages/@monomind/cli/dist/src/agents/halt-signal.d.ts +25 -0
  53. package/packages/@monomind/cli/dist/src/agents/halt-signal.js +76 -0
  54. package/packages/@monomind/cli/dist/src/agents/index.d.ts +18 -0
  55. package/packages/@monomind/cli/dist/src/agents/index.js +13 -0
  56. package/packages/@monomind/cli/dist/src/agents/managed-agent.d.ts +41 -0
  57. package/packages/@monomind/cli/dist/src/agents/managed-agent.js +69 -0
  58. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.d.ts +23 -0
  59. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.js +49 -0
  60. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.d.ts +22 -0
  61. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.js +80 -0
  62. package/packages/@monomind/cli/dist/src/agents/registry-builder.js +2 -0
  63. package/packages/@monomind/cli/dist/src/agents/registry-query.d.ts +71 -0
  64. package/packages/@monomind/cli/dist/src/agents/registry-query.js +125 -0
  65. package/packages/@monomind/cli/dist/src/agents/score-decay.d.ts +19 -0
  66. package/packages/@monomind/cli/dist/src/agents/score-decay.js +22 -0
  67. package/packages/@monomind/cli/dist/src/agents/shared-instructions-loader.d.ts +13 -0
  68. package/packages/@monomind/cli/dist/src/agents/shared-instructions-loader.js +40 -0
  69. package/packages/@monomind/cli/dist/src/agents/specialization-scorer.d.ts +54 -0
  70. package/packages/@monomind/cli/dist/src/agents/specialization-scorer.js +212 -0
  71. package/packages/@monomind/cli/dist/src/agents/termination-watcher.d.ts +30 -0
  72. package/packages/@monomind/cli/dist/src/agents/termination-watcher.js +84 -0
  73. package/packages/@monomind/cli/dist/src/agents/trigger-index.d.ts +20 -0
  74. package/packages/@monomind/cli/dist/src/agents/trigger-index.js +38 -0
  75. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.d.ts +64 -0
  76. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.js +308 -0
  77. package/packages/@monomind/cli/dist/src/agents/version-diff.d.ts +18 -0
  78. package/packages/@monomind/cli/dist/src/agents/version-diff.js +64 -0
  79. package/packages/@monomind/cli/dist/src/agents/version-store.d.ts +60 -0
  80. package/packages/@monomind/cli/dist/src/agents/version-store.js +235 -0
  81. package/packages/@monomind/cli/dist/src/autopilot-state.js +10 -5
  82. package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.js +13 -0
  83. package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.js +20 -9
  84. package/packages/@monomind/cli/dist/src/benchmarks/pretrain/index.d.ts +45 -0
  85. package/packages/@monomind/cli/dist/src/benchmarks/pretrain/index.js +404 -0
  86. package/packages/@monomind/cli/dist/src/browser/actions.js +10 -3
  87. package/packages/@monomind/cli/dist/src/browser/browser.js +12 -2
  88. package/packages/@monomind/cli/dist/src/browser/cdp.js +21 -3
  89. package/packages/@monomind/cli/dist/src/browser/har.js +27 -5
  90. package/packages/@monomind/cli/dist/src/commands/agent-wasm.d.ts +14 -0
  91. package/packages/@monomind/cli/dist/src/commands/agent-wasm.js +333 -0
  92. package/packages/@monomind/cli/dist/src/commands/agent.js +11 -8
  93. package/packages/@monomind/cli/dist/src/commands/analyze.js +36 -21
  94. package/packages/@monomind/cli/dist/src/commands/autopilot.js +12 -4
  95. package/packages/@monomind/cli/dist/src/commands/benchmark.js +51 -8
  96. package/packages/@monomind/cli/dist/src/commands/browse.js +5 -2
  97. package/packages/@monomind/cli/dist/src/commands/claims.js +29 -11
  98. package/packages/@monomind/cli/dist/src/commands/cleanup.js +25 -5
  99. package/packages/@monomind/cli/dist/src/commands/config.js +15 -7
  100. package/packages/@monomind/cli/dist/src/commands/daemon.js +6 -0
  101. package/packages/@monomind/cli/dist/src/commands/deployment.js +34 -19
  102. package/packages/@monomind/cli/dist/src/commands/doctor.js +151 -20
  103. package/packages/@monomind/cli/dist/src/commands/guidance.js +15 -2
  104. package/packages/@monomind/cli/dist/src/commands/hive-mind.js +37 -14
  105. package/packages/@monomind/cli/dist/src/commands/hooks.js +42 -25
  106. package/packages/@monomind/cli/dist/src/commands/init.js +9 -4
  107. package/packages/@monomind/cli/dist/src/commands/issues.js +29 -26
  108. package/packages/@monomind/cli/dist/src/commands/mcp.js +11 -5
  109. package/packages/@monomind/cli/dist/src/commands/memory.js +10 -0
  110. package/packages/@monomind/cli/dist/src/commands/migrate.js +5 -5
  111. package/packages/@monomind/cli/dist/src/commands/monograph.js +18 -5
  112. package/packages/@monomind/cli/dist/src/commands/monovector/backup.js +8 -2
  113. package/packages/@monomind/cli/dist/src/commands/monovector/benchmark.js +20 -7
  114. package/packages/@monomind/cli/dist/src/commands/monovector/import.js +15 -0
  115. package/packages/@monomind/cli/dist/src/commands/monovector/migrate.js +4 -1
  116. package/packages/@monomind/cli/dist/src/commands/monovector/optimize.js +11 -0
  117. package/packages/@monomind/cli/dist/src/commands/monovector/setup.js +11 -1
  118. package/packages/@monomind/cli/dist/src/commands/neural.js +1 -1
  119. package/packages/@monomind/cli/dist/src/commands/performance.js +20 -7
  120. package/packages/@monomind/cli/dist/src/commands/platforms.js +90 -8
  121. package/packages/@monomind/cli/dist/src/commands/plugins.js +12 -5
  122. package/packages/@monomind/cli/dist/src/commands/process.js +33 -10
  123. package/packages/@monomind/cli/dist/src/commands/progress.js +5 -3
  124. package/packages/@monomind/cli/dist/src/commands/providers.js +5 -5
  125. package/packages/@monomind/cli/dist/src/commands/replay.js +8 -2
  126. package/packages/@monomind/cli/dist/src/commands/route.js +27 -7
  127. package/packages/@monomind/cli/dist/src/commands/security.js +4 -0
  128. package/packages/@monomind/cli/dist/src/commands/session.js +12 -1
  129. package/packages/@monomind/cli/dist/src/commands/start.js +11 -4
  130. package/packages/@monomind/cli/dist/src/commands/status.js +7 -4
  131. package/packages/@monomind/cli/dist/src/commands/swarm.js +27 -13
  132. package/packages/@monomind/cli/dist/src/commands/task.js +26 -11
  133. package/packages/@monomind/cli/dist/src/commands/tokens.js +7 -2
  134. package/packages/@monomind/cli/dist/src/commands/transfer-store.js +36 -22
  135. package/packages/@monomind/cli/dist/src/commands/ui.js +68 -0
  136. package/packages/@monomind/cli/dist/src/commands/update.js +15 -3
  137. package/packages/@monomind/cli/dist/src/commands/workflow.js +39 -6
  138. package/packages/@monomind/cli/dist/src/consensus/audit-writer.js +18 -7
  139. package/packages/@monomind/cli/dist/src/consensus/index.d.ts +7 -0
  140. package/packages/@monomind/cli/dist/src/consensus/index.js +6 -0
  141. package/packages/@monomind/cli/dist/src/consensus/vote-signer.js +25 -8
  142. package/packages/@monomind/cli/dist/src/context/context-provider.d.ts +44 -0
  143. package/packages/@monomind/cli/dist/src/context/context-provider.js +25 -0
  144. package/packages/@monomind/cli/dist/src/context/git-state-provider.d.ts +12 -0
  145. package/packages/@monomind/cli/dist/src/context/git-state-provider.js +34 -0
  146. package/packages/@monomind/cli/dist/src/context/index.d.ts +12 -0
  147. package/packages/@monomind/cli/dist/src/context/index.js +12 -0
  148. package/packages/@monomind/cli/dist/src/context/project-conventions-provider.d.ts +15 -0
  149. package/packages/@monomind/cli/dist/src/context/project-conventions-provider.js +19 -0
  150. package/packages/@monomind/cli/dist/src/context/prompt-assembler.d.ts +26 -0
  151. package/packages/@monomind/cli/dist/src/context/prompt-assembler.js +93 -0
  152. package/packages/@monomind/cli/dist/src/context/task-history-provider.d.ts +24 -0
  153. package/packages/@monomind/cli/dist/src/context/task-history-provider.js +32 -0
  154. package/packages/@monomind/cli/dist/src/context/user-preferences-provider.d.ts +14 -0
  155. package/packages/@monomind/cli/dist/src/context/user-preferences-provider.js +27 -0
  156. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.d.ts +31 -0
  157. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.js +81 -0
  158. package/packages/@monomind/cli/dist/src/dlq/dlq-writer.d.ts +24 -0
  159. package/packages/@monomind/cli/dist/src/dlq/dlq-writer.js +65 -0
  160. package/packages/@monomind/cli/dist/src/dlq/index.d.ts +10 -0
  161. package/packages/@monomind/cli/dist/src/dlq/index.js +7 -0
  162. package/packages/@monomind/cli/dist/src/eval/dataset-manager.d.ts +33 -0
  163. package/packages/@monomind/cli/dist/src/eval/dataset-manager.js +107 -0
  164. package/packages/@monomind/cli/dist/src/eval/dataset-runner.d.ts +23 -0
  165. package/packages/@monomind/cli/dist/src/eval/dataset-runner.js +59 -0
  166. package/packages/@monomind/cli/dist/src/eval/index.d.ts +10 -0
  167. package/packages/@monomind/cli/dist/src/eval/index.js +7 -0
  168. package/packages/@monomind/cli/dist/src/eval/trace-collector.d.ts +40 -0
  169. package/packages/@monomind/cli/dist/src/eval/trace-collector.js +102 -0
  170. package/packages/@monomind/cli/dist/src/index.js +7 -3
  171. package/packages/@monomind/cli/dist/src/infrastructure/in-memory-repositories.d.ts +68 -0
  172. package/packages/@monomind/cli/dist/src/infrastructure/in-memory-repositories.js +264 -0
  173. package/packages/@monomind/cli/dist/src/init/executor.js +14 -11
  174. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +20 -4
  175. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +33 -12
  176. package/packages/@monomind/cli/dist/src/interactive/interrupt.d.ts +22 -0
  177. package/packages/@monomind/cli/dist/src/interactive/interrupt.js +71 -0
  178. package/packages/@monomind/cli/dist/src/mcp/deprecation-injector.d.ts +25 -0
  179. package/packages/@monomind/cli/dist/src/mcp/deprecation-injector.js +48 -0
  180. package/packages/@monomind/cli/dist/src/mcp/tool-registry.d.ts +61 -0
  181. package/packages/@monomind/cli/dist/src/mcp/tool-registry.js +246 -0
  182. package/packages/@monomind/cli/dist/src/mcp-tools/a2a-tools.js +98 -13
  183. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +16 -3
  184. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.js +80 -17
  185. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +84 -22
  186. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.js +35 -7
  187. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.js +82 -17
  188. package/packages/@monomind/cli/dist/src/mcp-tools/coordination-tools.js +37 -4
  189. package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.js +49 -7
  190. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +45 -18
  191. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +75 -25
  192. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +32 -10
  193. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +91 -20
  194. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +188 -29
  195. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +25 -7
  196. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-compat.js +11 -2
  197. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +148 -26
  198. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +44 -9
  199. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.js +45 -10
  200. package/packages/@monomind/cli/dist/src/mcp-tools/progress-tools.js +7 -4
  201. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.js +15 -1
  202. package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.js +61 -9
  203. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +45 -14
  204. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +15 -3
  205. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +14 -7
  206. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +52 -10
  207. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.js +40 -6
  208. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +37 -4
  209. package/packages/@monomind/cli/dist/src/mcp-tools/wasm-agent-tools.d.ts +9 -0
  210. package/packages/@monomind/cli/dist/src/mcp-tools/wasm-agent-tools.js +230 -0
  211. package/packages/@monomind/cli/dist/src/mcp-tools/workflow-tools.js +29 -6
  212. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +26 -10
  213. package/packages/@monomind/cli/dist/src/memory/intelligence.js +80 -19
  214. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +21 -2
  215. package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +67 -3
  216. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +14 -4
  217. package/packages/@monomind/cli/dist/src/model/complexity-scorer.d.ts +21 -0
  218. package/packages/@monomind/cli/dist/src/model/complexity-scorer.js +106 -0
  219. package/packages/@monomind/cli/dist/src/model/index.d.ts +4 -0
  220. package/packages/@monomind/cli/dist/src/model/index.js +4 -0
  221. package/packages/@monomind/cli/dist/src/model/model-settings.d.ts +22 -0
  222. package/packages/@monomind/cli/dist/src/model/model-settings.js +33 -0
  223. package/packages/@monomind/cli/dist/src/model/model-tier-resolver.d.ts +24 -0
  224. package/packages/@monomind/cli/dist/src/model/model-tier-resolver.js +65 -0
  225. package/packages/@monomind/cli/dist/src/monovector/capabilities.d.ts +34 -0
  226. package/packages/@monomind/cli/dist/src/monovector/capabilities.js +37 -0
  227. package/packages/@monomind/cli/dist/src/monovector/command-outcomes.js +43 -7
  228. package/packages/@monomind/cli/dist/src/monovector/coverage-router.js +8 -4
  229. package/packages/@monomind/cli/dist/src/monovector/coverage-tools.js +6 -3
  230. package/packages/@monomind/cli/dist/src/monovector/diff-classifier.js +13 -0
  231. package/packages/@monomind/cli/dist/src/monovector/route-outcomes.d.ts +2 -1
  232. package/packages/@monomind/cli/dist/src/monovector/route-outcomes.js +46 -4
  233. package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +1 -1
  234. package/packages/@monomind/cli/dist/src/orchestration/index.d.ts +7 -0
  235. package/packages/@monomind/cli/dist/src/orchestration/index.js +6 -0
  236. package/packages/@monomind/cli/dist/src/orchestration/mode-dispatcher.d.ts +11 -0
  237. package/packages/@monomind/cli/dist/src/orchestration/mode-dispatcher.js +31 -0
  238. package/packages/@monomind/cli/dist/src/orchestration/routing-modes.d.ts +68 -0
  239. package/packages/@monomind/cli/dist/src/orchestration/routing-modes.js +180 -0
  240. package/packages/@monomind/cli/dist/src/plugins/manager.js +8 -3
  241. package/packages/@monomind/cli/dist/src/plugins/store/discovery.js +46 -2
  242. package/packages/@monomind/cli/dist/src/plugins/store/search.js +5 -4
  243. package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.d.ts +7 -0
  244. package/packages/@monomind/cli/dist/src/plugins/tests/demo-plugin-store.js +126 -0
  245. package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.d.ts +12 -0
  246. package/packages/@monomind/cli/dist/src/plugins/tests/standalone-test.js +188 -0
  247. package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.d.ts +7 -0
  248. package/packages/@monomind/cli/dist/src/plugins/tests/test-plugin-store.js +206 -0
  249. package/packages/@monomind/cli/dist/src/production/circuit-breaker.js +17 -3
  250. package/packages/@monomind/cli/dist/src/production/error-handler.js +3 -0
  251. package/packages/@monomind/cli/dist/src/production/monitoring.js +20 -3
  252. package/packages/@monomind/cli/dist/src/production/rate-limiter.js +13 -4
  253. package/packages/@monomind/cli/dist/src/production/retry.js +17 -9
  254. package/packages/@monomind/cli/dist/src/routing/embed-worker.js +6 -2
  255. package/packages/@monomind/cli/dist/src/routing/embedder.js +0 -0
  256. package/packages/@monomind/cli/dist/src/routing/llm-caller.js +13 -2
  257. package/packages/@monomind/cli/dist/src/routing/route-layer-factory.js +18 -3
  258. package/packages/@monomind/cli/dist/src/runtime/headless.d.ts +60 -0
  259. package/packages/@monomind/cli/dist/src/runtime/headless.js +284 -0
  260. package/packages/@monomind/cli/dist/src/services/agentic-flow-bridge.d.ts +50 -0
  261. package/packages/@monomind/cli/dist/src/services/agentic-flow-bridge.js +95 -0
  262. package/packages/@monomind/cli/dist/src/services/claim-service.d.ts +1 -0
  263. package/packages/@monomind/cli/dist/src/services/claim-service.js +8 -0
  264. package/packages/@monomind/cli/dist/src/services/config-file-manager.js +14 -2
  265. package/packages/@monomind/cli/dist/src/services/container-worker-pool.d.ts +197 -0
  266. package/packages/@monomind/cli/dist/src/services/container-worker-pool.js +623 -0
  267. package/packages/@monomind/cli/dist/src/services/headless-worker-executor.js +18 -2
  268. package/packages/@monomind/cli/dist/src/services/index.d.ts +13 -0
  269. package/packages/@monomind/cli/dist/src/services/index.js +11 -0
  270. package/packages/@monomind/cli/dist/src/services/worker-daemon.js +53 -12
  271. package/packages/@monomind/cli/dist/src/services/worker-queue.d.ts +201 -0
  272. package/packages/@monomind/cli/dist/src/services/worker-queue.js +594 -0
  273. package/packages/@monomind/cli/dist/src/swarm/communication-graph.d.ts +25 -0
  274. package/packages/@monomind/cli/dist/src/swarm/communication-graph.js +77 -0
  275. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.d.ts +31 -0
  276. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.js +61 -0
  277. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.d.ts +19 -0
  278. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.js +68 -0
  279. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.d.ts +0 -3
  280. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.js +16 -1
  281. package/packages/@monomind/cli/dist/src/transfer/deploy-seraphine.d.ts +13 -0
  282. package/packages/@monomind/cli/dist/src/transfer/deploy-seraphine.js +205 -0
  283. package/packages/@monomind/cli/dist/src/transfer/export.js +8 -0
  284. package/packages/@monomind/cli/dist/src/transfer/ipfs/upload.js +33 -3
  285. package/packages/@monomind/cli/dist/src/transfer/serialization/cfp.js +9 -3
  286. package/packages/@monomind/cli/dist/src/transfer/storage/gcs.js +37 -3
  287. package/packages/@monomind/cli/dist/src/transfer/store/discovery.js +45 -3
  288. package/packages/@monomind/cli/dist/src/transfer/store/download.js +5 -0
  289. package/packages/@monomind/cli/dist/src/transfer/store/publish.js +13 -1
  290. package/packages/@monomind/cli/dist/src/transfer/store/registry.d.ts +8 -0
  291. package/packages/@monomind/cli/dist/src/transfer/store/registry.js +30 -5
  292. package/packages/@monomind/cli/dist/src/transfer/store/search.js +20 -5
  293. package/packages/@monomind/cli/dist/src/transfer/store/tests/standalone-test.d.ts +12 -0
  294. package/packages/@monomind/cli/dist/src/transfer/store/tests/standalone-test.js +190 -0
  295. package/packages/@monomind/cli/dist/src/transfer/test-seraphine.d.ts +6 -0
  296. package/packages/@monomind/cli/dist/src/transfer/test-seraphine.js +105 -0
  297. package/packages/@monomind/cli/dist/src/transfer/tests/test-store.d.ts +7 -0
  298. package/packages/@monomind/cli/dist/src/transfer/tests/test-store.js +214 -0
  299. package/packages/@monomind/cli/dist/src/update/checker.js +59 -7
  300. package/packages/@monomind/cli/dist/src/update/executor.js +50 -3
  301. package/packages/@monomind/cli/dist/src/update/index.js +18 -1
  302. package/packages/@monomind/cli/dist/src/update/rate-limiter.d.ts +6 -0
  303. package/packages/@monomind/cli/dist/src/update/rate-limiter.js +79 -7
  304. package/packages/@monomind/cli/dist/src/update/validator.js +52 -1
  305. package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.d.ts +10 -0
  306. package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.js +82 -0
  307. package/packages/@monomind/cli/dist/src/workflow/context-resolver.d.ts +12 -0
  308. package/packages/@monomind/cli/dist/src/workflow/context-resolver.js +23 -0
  309. package/packages/@monomind/cli/dist/src/workflow/dag-builder.d.ts +17 -0
  310. package/packages/@monomind/cli/dist/src/workflow/dag-builder.js +129 -0
  311. package/packages/@monomind/cli/dist/src/workflow/dag-executor.d.ts +9 -0
  312. package/packages/@monomind/cli/dist/src/workflow/dag-executor.js +116 -0
  313. package/packages/@monomind/cli/dist/src/workflow/dag-types.d.ts +41 -0
  314. package/packages/@monomind/cli/dist/src/workflow/dag-types.js +8 -0
  315. package/packages/@monomind/cli/dist/src/workflow/dsl-parser.d.ts +12 -0
  316. package/packages/@monomind/cli/dist/src/workflow/dsl-parser.js +20 -0
  317. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.d.ts +165 -0
  318. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.js +82 -0
  319. package/packages/@monomind/cli/dist/src/workflow/index.d.ts +13 -0
  320. package/packages/@monomind/cli/dist/src/workflow/index.js +11 -0
  321. package/packages/@monomind/cli/dist/src/workflow/template-engine.d.ts +11 -0
  322. package/packages/@monomind/cli/dist/src/workflow/template-engine.js +40 -0
  323. package/packages/@monomind/cli/dist/src/workflow/workflow-executor.d.ts +29 -0
  324. package/packages/@monomind/cli/dist/src/workflow/workflow-executor.js +227 -0
  325. package/packages/@monomind/cli/package.json +9 -10
  326. package/packages/@monomind/guidance/dist/adversarial.d.ts +284 -0
  327. package/packages/@monomind/guidance/dist/adversarial.js +572 -0
  328. package/packages/@monomind/guidance/dist/analyzer.d.ts +530 -0
  329. package/packages/@monomind/guidance/dist/analyzer.js +2518 -0
  330. package/packages/@monomind/guidance/dist/artifacts.d.ts +283 -0
  331. package/packages/@monomind/guidance/dist/artifacts.js +356 -0
  332. package/packages/@monomind/guidance/dist/authority.d.ts +290 -0
  333. package/packages/@monomind/guidance/dist/authority.js +558 -0
  334. package/packages/@monomind/guidance/dist/capabilities.d.ts +209 -0
  335. package/packages/@monomind/guidance/dist/capabilities.js +485 -0
  336. package/packages/@monomind/guidance/dist/coherence.d.ts +233 -0
  337. package/packages/@monomind/guidance/dist/coherence.js +372 -0
  338. package/packages/@monomind/guidance/dist/compiler.d.ts +87 -0
  339. package/packages/@monomind/guidance/dist/compiler.js +419 -0
  340. package/packages/@monomind/guidance/dist/conformance-kit.d.ts +225 -0
  341. package/packages/@monomind/guidance/dist/conformance-kit.js +629 -0
  342. package/packages/@monomind/guidance/dist/continue-gate.d.ts +214 -0
  343. package/packages/@monomind/guidance/dist/continue-gate.js +353 -0
  344. package/packages/@monomind/guidance/dist/crypto-utils.d.ts +17 -0
  345. package/packages/@monomind/guidance/dist/crypto-utils.js +24 -0
  346. package/packages/@monomind/guidance/dist/evolution.d.ts +282 -0
  347. package/packages/@monomind/guidance/dist/evolution.js +500 -0
  348. package/packages/@monomind/guidance/dist/gates.d.ts +79 -0
  349. package/packages/@monomind/guidance/dist/gates.js +302 -0
  350. package/packages/@monomind/guidance/dist/gateway.d.ts +206 -0
  351. package/packages/@monomind/guidance/dist/gateway.js +452 -0
  352. package/packages/@monomind/guidance/dist/generators.d.ts +153 -0
  353. package/packages/@monomind/guidance/dist/generators.js +682 -0
  354. package/packages/@monomind/guidance/dist/headless.d.ts +177 -0
  355. package/packages/@monomind/guidance/dist/headless.js +342 -0
  356. package/packages/@monomind/guidance/dist/hooks.d.ts +109 -0
  357. package/packages/@monomind/guidance/dist/hooks.js +347 -0
  358. package/packages/@monomind/guidance/dist/index.d.ts +205 -0
  359. package/packages/@monomind/guidance/dist/index.js +321 -0
  360. package/packages/@monomind/guidance/dist/ledger.d.ts +162 -0
  361. package/packages/@monomind/guidance/dist/ledger.js +375 -0
  362. package/packages/@monomind/guidance/dist/manifest-validator.d.ts +289 -0
  363. package/packages/@monomind/guidance/dist/manifest-validator.js +838 -0
  364. package/packages/@monomind/guidance/dist/memory-gate.d.ts +222 -0
  365. package/packages/@monomind/guidance/dist/memory-gate.js +382 -0
  366. package/packages/@monomind/guidance/dist/meta-governance.d.ts +265 -0
  367. package/packages/@monomind/guidance/dist/meta-governance.js +348 -0
  368. package/packages/@monomind/guidance/dist/optimizer.d.ts +104 -0
  369. package/packages/@monomind/guidance/dist/optimizer.js +329 -0
  370. package/packages/@monomind/guidance/dist/persistence.d.ts +189 -0
  371. package/packages/@monomind/guidance/dist/persistence.js +464 -0
  372. package/packages/@monomind/guidance/dist/proof.d.ts +185 -0
  373. package/packages/@monomind/guidance/dist/proof.js +238 -0
  374. package/packages/@monomind/guidance/dist/retriever.d.ts +116 -0
  375. package/packages/@monomind/guidance/dist/retriever.js +394 -0
  376. package/packages/@monomind/guidance/dist/ruvbot-integration.d.ts +370 -0
  377. package/packages/@monomind/guidance/dist/ruvbot-integration.js +738 -0
  378. package/packages/@monomind/guidance/dist/temporal.d.ts +426 -0
  379. package/packages/@monomind/guidance/dist/temporal.js +658 -0
  380. package/packages/@monomind/guidance/dist/trust.d.ts +283 -0
  381. package/packages/@monomind/guidance/dist/trust.js +473 -0
  382. package/packages/@monomind/guidance/dist/truth-anchors.d.ts +276 -0
  383. package/packages/@monomind/guidance/dist/truth-anchors.js +488 -0
  384. package/packages/@monomind/guidance/dist/types.d.ts +378 -0
  385. package/packages/@monomind/guidance/dist/types.js +10 -0
  386. package/packages/@monomind/guidance/dist/uncertainty.d.ts +372 -0
  387. package/packages/@monomind/guidance/dist/uncertainty.js +619 -0
  388. package/packages/@monomind/guidance/dist/wasm-kernel.d.ts +48 -0
  389. package/packages/@monomind/guidance/dist/wasm-kernel.js +158 -0
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Agent Version Store (Task 29)
3
+ *
4
+ * JSONL-based append-only storage for agent definition versions.
5
+ * Supports save, list, get, rollback, and diff operations.
6
+ */
7
+ import { createHash, randomUUID, randomBytes } from 'crypto';
8
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync, statSync } from 'fs';
9
+ import { join } from 'path';
10
+ import { computeUnifiedDiff } from './version-diff.js';
11
+ import { parseJsonl } from '../utils/parse-jsonl.js';
12
+ function toStored(r) {
13
+ return {
14
+ id: r.id,
15
+ slug: r.slug,
16
+ version: r.version,
17
+ changelog: r.changelog,
18
+ deprecated: r.deprecated,
19
+ deprecatedBy: r.deprecatedBy,
20
+ content: r.content,
21
+ contentHash: r.contentHash,
22
+ capturedAt: r.capturedAt instanceof Date
23
+ ? r.capturedAt.toISOString()
24
+ : String(r.capturedAt),
25
+ capturedBy: r.capturedBy,
26
+ isCurrent: r.isCurrent,
27
+ };
28
+ }
29
+ function fromStored(s) {
30
+ return {
31
+ id: s.id,
32
+ slug: s.slug,
33
+ version: s.version,
34
+ changelog: s.changelog,
35
+ deprecated: s.deprecated,
36
+ deprecatedBy: s.deprecatedBy,
37
+ content: s.content,
38
+ contentHash: s.contentHash,
39
+ capturedAt: new Date(s.capturedAt),
40
+ capturedBy: s.capturedBy,
41
+ isCurrent: s.isCurrent,
42
+ };
43
+ }
44
+ /**
45
+ * JSONL-based agent version store.
46
+ *
47
+ * Each slug's versions are stored in `<dirPath>/versions.jsonl`, one JSON
48
+ * object per line. Rollback rewrites the file to update `isCurrent` flags.
49
+ */
50
+ export class AgentVersionStore {
51
+ dirPath;
52
+ filePath;
53
+ constructor(dirPath) {
54
+ this.dirPath = dirPath;
55
+ if (!existsSync(dirPath)) {
56
+ mkdirSync(dirPath, { recursive: true });
57
+ }
58
+ this.filePath = join(dirPath, 'versions.jsonl');
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // Persistence helpers
62
+ // ---------------------------------------------------------------------------
63
+ readAll() {
64
+ if (!existsSync(this.filePath)) {
65
+ return [];
66
+ }
67
+ const stat = statSync(this.filePath);
68
+ if (stat.size > 10 * 1024 * 1024) {
69
+ throw new Error('Version store exceeds size limit; run compaction');
70
+ }
71
+ const raw = readFileSync(this.filePath, 'utf-8');
72
+ // Drop any record whose stored contentHash does not match the SHA-256 of
73
+ // its content. saveVersion advertises tamper-evidence by computing the
74
+ // hash; without this verification step, an attacker who can write the
75
+ // JSONL file can swap `content` with a poisoned agent prompt while
76
+ // leaving `contentHash` unchanged, and the next getCurrent() returns
77
+ // the tampered prompt verbatim into the LLM context.
78
+ const records = parseJsonl(raw);
79
+ const verified = [];
80
+ for (const r of records) {
81
+ if (typeof r?.content !== 'string' ||
82
+ typeof r?.contentHash !== 'string' ||
83
+ typeof r?.id !== 'string' ||
84
+ typeof r?.slug !== 'string' ||
85
+ typeof r?.version !== 'string' ||
86
+ typeof r?.changelog !== 'string' ||
87
+ typeof r?.capturedBy !== 'string' ||
88
+ typeof r?.capturedAt !== 'string')
89
+ continue;
90
+ const actual = createHash('sha256').update(r.content).digest('hex');
91
+ if (actual !== r.contentHash)
92
+ continue; // silently drop tampered record
93
+ verified.push(r);
94
+ }
95
+ return verified.map(fromStored);
96
+ }
97
+ writeAll(records) {
98
+ const lines = records.map((r) => JSON.stringify(toStored(r)));
99
+ const tmp = `${this.filePath}.${process.pid}.${randomBytes(8).toString('hex')}.tmp`;
100
+ writeFileSync(tmp, lines.join('\n') + '\n', 'utf-8');
101
+ renameSync(tmp, this.filePath);
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // Public API
105
+ // ---------------------------------------------------------------------------
106
+ /**
107
+ * Save a new version for the given agent slug.
108
+ *
109
+ * Computes a SHA-256 hash of the content, marks all previous versions for
110
+ * the same slug as non-current, and appends the new record.
111
+ */
112
+ saveVersion(slug, content, version, changelog, opts = {}) {
113
+ const MAX_CONTENT_BYTES = 512 * 1024;
114
+ if (Buffer.byteLength(content, 'utf-8') > MAX_CONTENT_BYTES) {
115
+ throw new Error(`content exceeds maximum allowed size (${MAX_CONTENT_BYTES} bytes)`);
116
+ }
117
+ const contentHash = createHash('sha256').update(content).digest('hex');
118
+ // SINGLE-WRITER CONTRACT: version-store is written only by the daemon process.
119
+ // Concurrent saveVersion() calls from multiple processes would race on readAll/writeAll.
120
+ // If multi-writer access is needed in future, introduce an advisory lock here.
121
+ const existing = this.readAll();
122
+ for (const rec of existing) {
123
+ if (rec.slug === slug && rec.isCurrent) {
124
+ rec.isCurrent = false;
125
+ }
126
+ }
127
+ const record = {
128
+ id: randomUUID(),
129
+ slug,
130
+ version,
131
+ changelog,
132
+ deprecated: opts.deprecated ?? false,
133
+ deprecatedBy: opts.deprecatedBy,
134
+ content,
135
+ contentHash,
136
+ capturedAt: new Date(),
137
+ capturedBy: opts.capturedBy ?? 'system',
138
+ isCurrent: true,
139
+ };
140
+ existing.push(record);
141
+ this.writeAll(existing);
142
+ return record;
143
+ }
144
+ /**
145
+ * List all versions for a slug, sorted by capturedAt DESC (newest first).
146
+ * Uses insertion order (line index) as a stable tiebreaker.
147
+ */
148
+ listVersions(slug) {
149
+ const all = this.readAll();
150
+ const indexed = all.map((r, i) => ({ r, i }));
151
+ return indexed
152
+ .filter(({ r }) => r.slug === slug)
153
+ .sort((a, b) => {
154
+ const timeDiff = new Date(b.r.capturedAt).getTime() -
155
+ new Date(a.r.capturedAt).getTime();
156
+ return timeDiff !== 0 ? timeDiff : b.i - a.i;
157
+ })
158
+ .map(({ r }) => r);
159
+ }
160
+ /**
161
+ * Get the current active version for a slug, or null.
162
+ */
163
+ getCurrent(slug) {
164
+ const all = this.readAll();
165
+ const indexed = all.map((r, i) => ({ r, i }));
166
+ const matching = indexed.filter(({ r }) => r.slug === slug && r.isCurrent);
167
+ if (matching.length === 0)
168
+ return null;
169
+ // Return the most recent current record (insertion order as tiebreaker)
170
+ return matching.sort((a, b) => {
171
+ const timeDiff = new Date(b.r.capturedAt).getTime() -
172
+ new Date(a.r.capturedAt).getTime();
173
+ return timeDiff !== 0 ? timeDiff : b.i - a.i;
174
+ })[0].r;
175
+ }
176
+ /**
177
+ * Get a specific version by slug and semver string, or null.
178
+ */
179
+ getVersion(slug, version) {
180
+ return (this.readAll().find((r) => r.slug === slug && r.version === version) ?? null);
181
+ }
182
+ /**
183
+ * Roll back to a specific version.
184
+ *
185
+ * Marks the target version as current and all others for that slug as
186
+ * non-current. Rewrites the JSONL file.
187
+ *
188
+ * @throws Error if the target version does not exist.
189
+ */
190
+ rollback(slug, toVersion) {
191
+ const all = this.readAll();
192
+ let target;
193
+ for (const rec of all) {
194
+ if (rec.slug === slug) {
195
+ if (rec.version === toVersion) {
196
+ rec.isCurrent = true;
197
+ target = rec;
198
+ }
199
+ else {
200
+ rec.isCurrent = false;
201
+ }
202
+ }
203
+ }
204
+ if (!target) {
205
+ throw new Error(`Version "${toVersion}" not found for agent "${slug}"`);
206
+ }
207
+ this.writeAll(all);
208
+ return target;
209
+ }
210
+ /**
211
+ * Compute a line-level diff between two versions of the same agent.
212
+ *
213
+ * @throws Error if either version does not exist.
214
+ */
215
+ diff(slug, fromVersion, toVersion) {
216
+ const from = this.getVersion(slug, fromVersion);
217
+ if (!from) {
218
+ throw new Error(`Version "${fromVersion}" not found for agent "${slug}"`);
219
+ }
220
+ const to = this.getVersion(slug, toVersion);
221
+ if (!to) {
222
+ throw new Error(`Version "${toVersion}" not found for agent "${slug}"`);
223
+ }
224
+ const { additions, deletions, hunks } = computeUnifiedDiff(from.content, to.content);
225
+ return {
226
+ slug,
227
+ fromVersion,
228
+ toVersion,
229
+ additions,
230
+ deletions,
231
+ hunks,
232
+ };
233
+ }
234
+ }
235
+ //# sourceMappingURL=version-store.js.map
@@ -19,6 +19,8 @@ export const LOG_FILE = `${STATE_DIR}/autopilot-log.json`;
19
19
  const MAX_HISTORY_ENTRIES = 50;
20
20
  /** Maximum entries kept in the event log */
21
21
  const MAX_LOG_ENTRIES = 1000;
22
+ /** Maximum bytes before refusing to load a state/log JSON file (10 MB) */
23
+ const MAX_STATE_FILE_BYTES = 10 * 1024 * 1024;
22
24
  /** Allowlist for valid task sources */
23
25
  export const VALID_TASK_SOURCES = new Set(['team-tasks', 'swarm-tasks', 'file-checklist']);
24
26
  /** Terminal task statuses */
@@ -91,7 +93,7 @@ export function loadState() {
91
93
  const filePath = path.resolve(STATE_FILE);
92
94
  const defaults = getDefaultState();
93
95
  try {
94
- if (fs.existsSync(filePath)) {
96
+ if (fs.existsSync(filePath) && fs.statSync(filePath).size <= MAX_STATE_FILE_BYTES) {
95
97
  const raw = safeJsonParse(fs.readFileSync(filePath, 'utf-8'));
96
98
  const merged = { ...defaults, ...raw };
97
99
  // Re-validate fields that could be tampered with
@@ -190,7 +192,7 @@ function compactLog(filePath) {
190
192
  export function loadLog() {
191
193
  const filePath = path.resolve(LOG_FILE);
192
194
  try {
193
- if (fs.existsSync(filePath)) {
195
+ if (fs.existsSync(filePath) && fs.statSync(filePath).size <= MAX_STATE_FILE_BYTES) {
194
196
  const raw = fs.readFileSync(filePath, 'utf-8');
195
197
  // Backward compatible: support both old JSON-array form and the new
196
198
  // append-only NDJSON form. Prefer NDJSON if the file looks line-based.
@@ -236,7 +238,10 @@ export function discoverTasks(sources) {
236
238
  const files = fs.readdirSync(teamDir).filter((f) => f.endsWith('.json'));
237
239
  for (const file of files) {
238
240
  try {
239
- const data = safeJsonParse(fs.readFileSync(path.join(teamDir, file), 'utf-8'));
241
+ const taskFilePath = path.join(teamDir, file);
242
+ if (fs.statSync(taskFilePath).size > MAX_STATE_FILE_BYTES)
243
+ continue;
244
+ const data = safeJsonParse(fs.readFileSync(taskFilePath, 'utf-8'));
240
245
  tasks.push({
241
246
  id: String(data.id || file.replace('.json', '')),
242
247
  subject: String(data.subject || data.title || file),
@@ -254,7 +259,7 @@ export function discoverTasks(sources) {
254
259
  if (source === 'swarm-tasks') {
255
260
  const swarmFile = path.resolve('.monomind/swarm-tasks.json');
256
261
  try {
257
- if (fs.existsSync(swarmFile)) {
262
+ if (fs.existsSync(swarmFile) && fs.statSync(swarmFile).size <= MAX_STATE_FILE_BYTES) {
258
263
  const data = safeJsonParse(fs.readFileSync(swarmFile, 'utf-8'));
259
264
  const swarmTasks = Array.isArray(data) ? data : (data.tasks || []);
260
265
  for (const t of swarmTasks) {
@@ -275,7 +280,7 @@ export function discoverTasks(sources) {
275
280
  if (source === 'file-checklist') {
276
281
  const checklistFile = path.resolve('.monomind/data/checklist.json');
277
282
  try {
278
- if (fs.existsSync(checklistFile)) {
283
+ if (fs.existsSync(checklistFile) && fs.statSync(checklistFile).size <= MAX_STATE_FILE_BYTES) {
279
284
  const data = safeJsonParse(fs.readFileSync(checklistFile, 'utf-8'));
280
285
  const items = Array.isArray(data) ? data : (data.items || []);
281
286
  for (const item of items) {
@@ -23,9 +23,22 @@ export class BenchmarkRunner {
23
23
  if (!fs.existsSync(resolved)) {
24
24
  return benchmarks;
25
25
  }
26
+ const MAX_BENCH_FILE_SIZE = 1 * 1024 * 1024; // 1 MB per benchmark file
26
27
  const files = fs.readdirSync(resolved).filter((f) => f.endsWith('.json'));
27
28
  for (const file of files) {
28
29
  const filePath = path.join(resolved, file);
30
+ // Guard against OOM: reject symlinks and oversized files before reading
31
+ let stat;
32
+ try {
33
+ stat = fs.lstatSync(filePath);
34
+ }
35
+ catch {
36
+ continue;
37
+ }
38
+ if (stat.isSymbolicLink())
39
+ continue;
40
+ if (stat.size > MAX_BENCH_FILE_SIZE)
41
+ continue;
29
42
  const raw = fs.readFileSync(filePath, 'utf-8');
30
43
  try {
31
44
  const parsed = JSON.parse(raw);
@@ -6,15 +6,17 @@
6
6
  * Checks whether the output contains the expected substring.
7
7
  */
8
8
  export function containsExpected(output, config) {
9
- const found = output.includes(config.expected);
9
+ // Cap expected to prevent huge strings from inflating returned objects
10
+ const expected = typeof config.expected === 'string' ? config.expected.slice(0, 200) : '';
11
+ const found = output.includes(expected);
10
12
  return {
11
13
  type: 'contains_expected',
12
14
  passed: found,
13
- actual: found ? config.expected : null,
14
- expected: config.expected,
15
+ actual: found ? expected : null,
16
+ expected,
15
17
  message: found
16
- ? `Output contains expected string "${config.expected}"`
17
- : `Output missing expected string "${config.expected}"`,
18
+ ? `Output contains expected string "${expected}"`
19
+ : `Output missing expected string "${expected}"`,
18
20
  };
19
21
  }
20
22
  /**
@@ -38,16 +40,20 @@ export function lengthRange(output, config) {
38
40
  */
39
41
  export function noHallucination(output, config) {
40
42
  const lowerOutput = output.toLowerCase();
41
- const found = config.forbidden.filter((word) => lowerOutput.includes(word.toLowerCase()));
43
+ // Cap forbidden array to 200 entries to prevent unbounded O(n) scan
44
+ const forbidden = Array.isArray(config.forbidden) ? config.forbidden.slice(0, 200) : [];
45
+ const found = forbidden.filter((word) => typeof word === 'string' && lowerOutput.includes(word.toLowerCase()));
42
46
  const passed = found.length === 0;
47
+ // Truncate reflected words to avoid inflated messages
48
+ const truncatedFound = found.map((w) => w.slice(0, 50));
43
49
  return {
44
50
  type: 'no_hallucination',
45
51
  passed,
46
- actual: found.length > 0 ? found : null,
52
+ actual: found.length > 0 ? truncatedFound : null,
47
53
  expected: null,
48
54
  message: passed
49
55
  ? 'No forbidden words found in output'
50
- : `Forbidden words found: ${found.join(', ')}`,
56
+ : `Forbidden words found: ${truncatedFound.join(', ')}`,
51
57
  };
52
58
  }
53
59
  /**
@@ -56,8 +62,13 @@ export function noHallucination(output, config) {
56
62
  export function jsonValid(output) {
57
63
  let passed = false;
58
64
  let parsedType = null;
65
+ // Cap output before JSON.parse to prevent OOM on huge strings
66
+ const MAX_JSON_BYTES = 1 * 1024 * 1024; // 1 MB
67
+ const bounded = typeof output === 'string' && output.length > MAX_JSON_BYTES
68
+ ? output.slice(0, MAX_JSON_BYTES)
69
+ : output;
59
70
  try {
60
- const parsed = JSON.parse(output);
71
+ const parsed = JSON.parse(bounded);
61
72
  passed = true;
62
73
  parsedType = typeof parsed;
63
74
  }
@@ -0,0 +1,45 @@
1
+ export interface BenchmarkResult {
2
+ name: string;
3
+ iterations: number;
4
+ meanMs: number;
5
+ medianMs: number;
6
+ p95Ms: number;
7
+ p99Ms: number;
8
+ minMs: number;
9
+ maxMs: number;
10
+ stdDev: number;
11
+ opsPerSecond: number;
12
+ targetMet: boolean;
13
+ targetMs?: number;
14
+ }
15
+ export interface BenchmarkSuite {
16
+ name: string;
17
+ results: BenchmarkResult[];
18
+ totalDurationMs: number;
19
+ timestamp: string;
20
+ environment: {
21
+ nodeVersion: string;
22
+ platform: string;
23
+ arch: string;
24
+ cpuCount: number;
25
+ };
26
+ }
27
+ export interface BenchmarkConfig {
28
+ iterations: number;
29
+ warmupIterations: number;
30
+ targetMs?: number;
31
+ verbose?: boolean;
32
+ }
33
+ export declare function formatBenchmarkResult(result: BenchmarkResult): string;
34
+ export declare function runBenchmark(name: string, fn: () => Promise<void> | void, config: BenchmarkConfig): Promise<BenchmarkResult>;
35
+ export declare function benchmarkSONAAdaptation(config: BenchmarkConfig): Promise<BenchmarkResult>;
36
+ export declare function benchmarkPatternLearning(config: BenchmarkConfig): Promise<BenchmarkResult>;
37
+ export declare function benchmarkEWCConsolidation(config: BenchmarkConfig): Promise<BenchmarkResult>;
38
+ export declare function benchmarkMemoryRetrieval(config: BenchmarkConfig): Promise<BenchmarkResult>;
39
+ export declare function benchmarkEmbeddingGeneration(config: BenchmarkConfig): Promise<BenchmarkResult>;
40
+ export declare function benchmarkMoERouting(config: BenchmarkConfig): Promise<BenchmarkResult>;
41
+ export declare function benchmarkBatchCosine(config: BenchmarkConfig): Promise<BenchmarkResult>;
42
+ export declare function benchmarkPretrainPipeline(config: BenchmarkConfig): Promise<BenchmarkResult>;
43
+ export declare function runPretrainBenchmarkSuite(config?: Partial<BenchmarkConfig>): Promise<BenchmarkSuite>;
44
+ export default runPretrainBenchmarkSuite;
45
+ //# sourceMappingURL=index.d.ts.map