monomind 1.7.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 (562) 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} +22 -9
  91. package/.claude/commands/monomind/help.md +118 -0
  92. package/.claude/commands/{monomind-idea.md → monomind/idea.md} +23 -29
  93. package/.claude/commands/{monomind-improve.md → monomind/improve.md} +24 -30
  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/loop-tracker.cjs +107 -0
  180. package/.claude/helpers/router.cjs +48 -68
  181. package/.claude/helpers/skill-registry.json +89 -104
  182. package/.claude/helpers/statusline.cjs +33 -2
  183. package/.claude/scheduled_tasks.lock +1 -0
  184. package/.claude/settings.json +15 -0
  185. package/.claude/skills/.monomind/data/ranked-context.json +5 -0
  186. package/.claude/skills/.monomind/sessions/current.json +13 -0
  187. package/.claude/skills/.monomind/sessions/session-1777829336455.json +15 -0
  188. package/.claude/skills/.monomind/sessions/session-1777831614725.json +15 -0
  189. package/.claude/skills/.monomind/sessions/session-1777832095857.json +15 -0
  190. package/.claude/skills/.monomind/sessions/session-1777839814183.json +15 -0
  191. package/.claude/skills/.monomind/sessions/session-1777841847131.json +15 -0
  192. package/.claude/skills/.monomind/sessions/session-1777843309463.json +15 -0
  193. package/.claude/skills/.monomind/sessions/session-1777880867159.json +15 -0
  194. package/.claude/skills/.monomind/sessions/session-1777881884593.json +15 -0
  195. package/.claude/skills/.monomind/sessions/session-1777884090471.json +15 -0
  196. package/.claude/skills/.monomind/sessions/session-1777884808221.json +15 -0
  197. package/.claude/skills/.monomind/sessions/session-1777885672155.json +15 -0
  198. package/.claude/skills/.monomind/sessions/session-1777886852818.json +15 -0
  199. package/.claude/skills/.monomind/sessions/session-1777896532690.json +15 -0
  200. package/.claude/skills/agentdb-advanced/SKILL.md +11 -12
  201. package/.claude/skills/agentdb-learning/SKILL.md +20 -21
  202. package/.claude/skills/agentdb-memory-patterns/SKILL.md +28 -30
  203. package/.claude/skills/agentdb-optimization/SKILL.md +11 -12
  204. package/.claude/skills/agentdb-vector-search/SKILL.md +37 -41
  205. package/.claude/skills/{v3-integration-deep → agentic-integration}/SKILL.md +20 -13
  206. package/.claude/skills/agentic-jujutsu/SKILL.md +22 -22
  207. package/.claude/skills/{v3-cli-modernization → cli-modernization}/SKILL.md +17 -8
  208. package/.claude/skills/{v3-core-implementation → core-implementation}/SKILL.md +33 -8
  209. package/.claude/skills/{v3-ddd-architecture → ddd-architecture}/SKILL.md +18 -25
  210. package/.claude/skills/github-code-review/SKILL.md +82 -83
  211. package/.claude/skills/github-multi-repo/SKILL.md +42 -46
  212. package/.claude/skills/github-project-management/SKILL.md +83 -88
  213. package/.claude/skills/github-release-management/SKILL.md +12 -18
  214. package/.claude/skills/github-workflow-automation/SKILL.md +70 -74
  215. package/.claude/skills/hooks-automation/SKILL.md +9 -13
  216. package/.claude/skills/mastermind/_intake.md +83 -0
  217. package/.claude/skills/mastermind/_protocol.md +275 -0
  218. package/.claude/skills/mastermind/architect.md +847 -0
  219. package/.claude/skills/mastermind/build.md +158 -0
  220. package/.claude/skills/mastermind/content.md +185 -0
  221. package/.claude/skills/mastermind/createorg.md +318 -0
  222. package/.claude/skills/mastermind/finance.md +154 -0
  223. package/.claude/skills/mastermind/idea.md +158 -0
  224. package/.claude/skills/mastermind/marketing.md +216 -0
  225. package/.claude/skills/mastermind/monotask.md +350 -0
  226. package/.claude/skills/mastermind/ops.md +156 -0
  227. package/.claude/skills/mastermind/references/copywriting-frameworks.md +181 -0
  228. package/.claude/skills/mastermind/references/persuasion-psychology.md +158 -0
  229. package/.claude/skills/mastermind/release.md +156 -0
  230. package/.claude/skills/mastermind/research.md +156 -0
  231. package/.claude/skills/mastermind/review.md +157 -0
  232. package/.claude/skills/mastermind/runorg.md +308 -0
  233. package/.claude/skills/mastermind/sales.md +158 -0
  234. package/.claude/skills/mastermind/techport.md +743 -0
  235. package/.claude/skills/{v3-mcp-optimization → mcp-optimization}/SKILL.md +35 -14
  236. package/.claude/skills/{v3-memory-unification → memory-unification}/SKILL.md +20 -4
  237. package/.claude/skills/monodesign/SKILL.md +302 -0
  238. package/.claude/skills/monodesign/reference/adapt.md +190 -0
  239. package/.claude/skills/monodesign/reference/animate.md +175 -0
  240. package/.claude/skills/monodesign/reference/antipatterns-catalog.md +187 -0
  241. package/.claude/skills/monodesign/reference/audit.md +133 -0
  242. package/.claude/skills/monodesign/reference/bolder.md +113 -0
  243. package/.claude/skills/monodesign/reference/brand-workflow.md +180 -0
  244. package/.claude/skills/monodesign/reference/brand.md +114 -0
  245. package/.claude/skills/monodesign/reference/clarify.md +174 -0
  246. package/.claude/skills/monodesign/reference/cognitive-load.md +106 -0
  247. package/.claude/skills/monodesign/reference/color-and-contrast.md +105 -0
  248. package/.claude/skills/monodesign/reference/colorize.md +154 -0
  249. package/.claude/skills/monodesign/reference/component-specs.md +260 -0
  250. package/.claude/skills/monodesign/reference/component-states.md +274 -0
  251. package/.claude/skills/monodesign/reference/component-system.md +358 -0
  252. package/.claude/skills/monodesign/reference/copy-formulas.md +160 -0
  253. package/.claude/skills/monodesign/reference/craft.md +193 -0
  254. package/.claude/skills/monodesign/reference/critique.md +213 -0
  255. package/.claude/skills/monodesign/reference/delight.md +302 -0
  256. package/.claude/skills/monodesign/reference/design-principles.md +246 -0
  257. package/.claude/skills/monodesign/reference/distill.md +111 -0
  258. package/.claude/skills/monodesign/reference/document.md +427 -0
  259. package/.claude/skills/monodesign/reference/extract.md +69 -0
  260. package/.claude/skills/monodesign/reference/harden.md +347 -0
  261. package/.claude/skills/monodesign/reference/heuristics-scoring.md +234 -0
  262. package/.claude/skills/monodesign/reference/image-prompts.md +118 -0
  263. package/.claude/skills/monodesign/reference/interaction-design.md +195 -0
  264. package/.claude/skills/monodesign/reference/layout.md +141 -0
  265. package/.claude/skills/monodesign/reference/live.md +622 -0
  266. package/.claude/skills/monodesign/reference/motion-design.md +109 -0
  267. package/.claude/skills/monodesign/reference/onboard.md +234 -0
  268. package/.claude/skills/monodesign/reference/optimize.md +258 -0
  269. package/.claude/skills/monodesign/reference/overdrive.md +130 -0
  270. package/.claude/skills/monodesign/reference/personas.md +179 -0
  271. package/.claude/skills/monodesign/reference/polish.md +233 -0
  272. package/.claude/skills/monodesign/reference/pre-delivery-checklist.md +108 -0
  273. package/.claude/skills/monodesign/reference/product.md +62 -0
  274. package/.claude/skills/monodesign/reference/quieter.md +99 -0
  275. package/.claude/skills/monodesign/reference/responsive-design.md +114 -0
  276. package/.claude/skills/monodesign/reference/shape.md +151 -0
  277. package/.claude/skills/monodesign/reference/spatial-design.md +100 -0
  278. package/.claude/skills/monodesign/reference/teach.md +156 -0
  279. package/.claude/skills/monodesign/reference/token-architecture.md +222 -0
  280. package/.claude/skills/monodesign/reference/typeset.md +124 -0
  281. package/.claude/skills/monodesign/reference/typography.md +159 -0
  282. package/.claude/skills/monodesign/reference/ux-research.md +143 -0
  283. package/.claude/skills/monodesign/reference/ux-rules.md +211 -0
  284. package/.claude/skills/monodesign/reference/ux-writing.md +107 -0
  285. package/.claude/skills/monomotion/SKILL.md +145 -0
  286. package/.claude/skills/monomotion/rules/api-control.md +139 -0
  287. package/.claude/skills/monomotion/rules/effects.md +109 -0
  288. package/.claude/skills/monomotion/rules/integration.md +140 -0
  289. package/.claude/skills/monomotion/rules/scroll.md +131 -0
  290. package/.claude/skills/monomotion/rules/sequencing.md +105 -0
  291. package/.claude/skills/monomotion/rules/svg.md +101 -0
  292. package/.claude/skills/monomotion/rules/text.md +119 -0
  293. package/.claude/skills/pair-programming/SKILL.md +1 -1
  294. package/.claude/skills/performance-analysis/SKILL.md +3 -3
  295. package/.claude/skills/{v3-performance-optimization → performance-optimization}/SKILL.md +16 -8
  296. package/.claude/skills/reasoningbank-agentdb/SKILL.md +17 -19
  297. package/.claude/skills/reasoningbank-intelligence/SKILL.md +4 -6
  298. package/.claude/skills/{v3-security-overhaul → security-hardening}/SKILL.md +13 -3
  299. package/.claude/skills/skill-builder/SKILL.md +19 -19
  300. package/.claude/skills/sparc-methodology/SKILL.md +55 -211
  301. package/.claude/skills/stop-slop/SKILL.md +67 -0
  302. package/.claude/skills/stop-slop/references/examples.md +61 -0
  303. package/.claude/skills/stop-slop/references/phrases.md +130 -0
  304. package/.claude/skills/stop-slop/references/structures.md +136 -0
  305. package/.claude/skills/swarm-advanced/SKILL.md +13 -43
  306. package/.claude/skills/{v3-swarm-coordination → swarm-coordination}/SKILL.md +39 -21
  307. package/.claude/skills/swarm-orchestration/SKILL.md +12 -12
  308. package/.claude/skills/verification-quality/SKILL.md +5 -5
  309. package/README.md +5 -5
  310. package/package.json +1 -1
  311. package/packages/@monomind/cli/README.md +5 -5
  312. package/packages/@monomind/cli/bin/cli.js +78 -13
  313. package/packages/@monomind/cli/dist/src/agents/halt-signal.js +33 -7
  314. package/packages/@monomind/cli/dist/src/agents/managed-agent.js +5 -2
  315. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.d.ts +3 -2
  316. package/packages/@monomind/cli/dist/src/agents/prompt-experiment.js +1 -1
  317. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.d.ts +5 -2
  318. package/packages/@monomind/cli/dist/src/agents/prompt-version-manager.js +26 -4
  319. package/packages/@monomind/cli/dist/src/agents/specialization-scorer.js +17 -9
  320. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.d.ts +5 -3
  321. package/packages/@monomind/cli/dist/src/agents/trigger-scanner.js +58 -10
  322. package/packages/@monomind/cli/dist/src/agents/version-store.d.ts +0 -1
  323. package/packages/@monomind/cli/dist/src/agents/version-store.js +44 -21
  324. package/packages/@monomind/cli/dist/src/autopilot-state.js +79 -28
  325. package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.d.ts +7 -2
  326. package/packages/@monomind/cli/dist/src/benchmarks/benchmark-runner.js +20 -8
  327. package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.d.ts +2 -1
  328. package/packages/@monomind/cli/dist/src/benchmarks/metric-evaluators.js +25 -2
  329. package/packages/@monomind/cli/dist/src/commands/agent.js +6 -4
  330. package/packages/@monomind/cli/dist/src/commands/appliance-advanced.js +23 -0
  331. package/packages/@monomind/cli/dist/src/commands/autopilot.js +3 -3
  332. package/packages/@monomind/cli/dist/src/commands/benchmark.js +119 -8
  333. package/packages/@monomind/cli/dist/src/commands/claims.js +22 -14
  334. package/packages/@monomind/cli/dist/src/commands/config.js +32 -0
  335. package/packages/@monomind/cli/dist/src/commands/daemon.js +13 -11
  336. package/packages/@monomind/cli/dist/src/commands/deployment.js +21 -2
  337. package/packages/@monomind/cli/dist/src/commands/doctor.js +28 -62
  338. package/packages/@monomind/cli/dist/src/commands/embeddings.js +124 -48
  339. package/packages/@monomind/cli/dist/src/commands/hive-mind.js +15 -14
  340. package/packages/@monomind/cli/dist/src/commands/hooks.js +45 -41
  341. package/packages/@monomind/cli/dist/src/commands/index.d.ts +2 -0
  342. package/packages/@monomind/cli/dist/src/commands/index.js +20 -7
  343. package/packages/@monomind/cli/dist/src/commands/init.js +53 -19
  344. package/packages/@monomind/cli/dist/src/commands/mcp.js +31 -44
  345. package/packages/@monomind/cli/dist/src/commands/memory.js +47 -15
  346. package/packages/@monomind/cli/dist/src/commands/migrate.js +156 -108
  347. package/packages/@monomind/cli/dist/src/commands/monograph.d.ts +8 -0
  348. package/packages/@monomind/cli/dist/src/commands/monograph.js +526 -0
  349. package/packages/@monomind/cli/dist/src/commands/neural.js +96 -56
  350. package/packages/@monomind/cli/dist/src/commands/performance.js +30 -8
  351. package/packages/@monomind/cli/dist/src/commands/plugins.js +13 -37
  352. package/packages/@monomind/cli/dist/src/commands/process.js +25 -2
  353. package/packages/@monomind/cli/dist/src/commands/providers.js +37 -5
  354. package/packages/@monomind/cli/dist/src/commands/replay.js +4 -4
  355. package/packages/@monomind/cli/dist/src/commands/route.js +37 -5
  356. package/packages/@monomind/cli/dist/src/commands/ruvector/import.js +12 -2
  357. package/packages/@monomind/cli/dist/src/commands/ruvector/init.js +15 -0
  358. package/packages/@monomind/cli/dist/src/commands/ruvector/status.js +16 -3
  359. package/packages/@monomind/cli/dist/src/commands/security.js +342 -193
  360. package/packages/@monomind/cli/dist/src/commands/session.js +51 -8
  361. package/packages/@monomind/cli/dist/src/commands/start.js +18 -4
  362. package/packages/@monomind/cli/dist/src/commands/swarm.js +47 -36
  363. package/packages/@monomind/cli/dist/src/commands/tokens.js +11 -11
  364. package/packages/@monomind/cli/dist/src/commands/transfer-store.js +1 -1
  365. package/packages/@monomind/cli/dist/src/commands/workflow.js +31 -4
  366. package/packages/@monomind/cli/dist/src/config-adapter.d.ts +2 -1
  367. package/packages/@monomind/cli/dist/src/consensus/audit-writer.js +46 -13
  368. package/packages/@monomind/cli/dist/src/consensus/vote-signer.d.ts +0 -3
  369. package/packages/@monomind/cli/dist/src/consensus/vote-signer.js +9 -1
  370. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.d.ts +4 -2
  371. package/packages/@monomind/cli/dist/src/dlq/dlq-reader.js +25 -8
  372. package/packages/@monomind/cli/dist/src/dlq/dlq-replayer.d.ts +10 -3
  373. package/packages/@monomind/cli/dist/src/dlq/dlq-replayer.js +50 -16
  374. package/packages/@monomind/cli/dist/src/dlq/dlq-writer.js +27 -5
  375. package/packages/@monomind/cli/dist/src/eval/dataset-manager.d.ts +2 -2
  376. package/packages/@monomind/cli/dist/src/eval/dataset-manager.js +26 -16
  377. package/packages/@monomind/cli/dist/src/eval/trace-collector.js +23 -3
  378. package/packages/@monomind/cli/dist/src/index.js +12 -10
  379. package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +8 -8
  380. package/packages/@monomind/cli/dist/src/init/executor.js +163 -137
  381. package/packages/@monomind/cli/dist/src/init/helpers-generator.js +49 -36
  382. package/packages/@monomind/cli/dist/src/init/mcp-generator.js +3 -3
  383. package/packages/@monomind/cli/dist/src/init/settings-generator.js +10 -3
  384. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +18 -3
  385. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +3 -1
  386. package/packages/@monomind/cli/dist/src/init/types.d.ts +35 -11
  387. package/packages/@monomind/cli/dist/src/init/types.js +5 -9
  388. package/packages/@monomind/cli/dist/src/interactive/interrupt.js +8 -3
  389. package/packages/@monomind/cli/dist/src/mcp/tool-registry.js +38 -4
  390. package/packages/@monomind/cli/dist/src/mcp-client.js +15 -6
  391. package/packages/@monomind/cli/dist/src/mcp-server.d.ts +9 -2
  392. package/packages/@monomind/cli/dist/src/mcp-server.js +182 -35
  393. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +66 -34
  394. package/packages/@monomind/cli/dist/src/mcp-tools/agentdb-tools.js +34 -7
  395. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.js +25 -16
  396. package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.js +4 -6
  397. package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.js +12 -2
  398. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +199 -20
  399. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.js +68 -18
  400. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.js +33 -5
  401. package/packages/@monomind/cli/dist/src/mcp-tools/coordination-tools.js +59 -4
  402. package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.js +46 -10
  403. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +46 -5
  404. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +29 -16
  405. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.d.ts +4 -67
  406. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.js +40 -1250
  407. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +38 -10
  408. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +96 -33
  409. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +70 -37
  410. package/packages/@monomind/cli/dist/src/mcp-tools/index.d.ts +1 -0
  411. package/packages/@monomind/cli/dist/src/mcp-tools/index.js +1 -0
  412. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +29 -13
  413. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.d.ts +9 -0
  414. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +6306 -0
  415. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +121 -37
  416. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.js +21 -8
  417. package/packages/@monomind/cli/dist/src/mcp-tools/progress-tools.js +10 -8
  418. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.js +4 -1
  419. package/packages/@monomind/cli/dist/src/mcp-tools/ruvllm-tools.js +19 -8
  420. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +57 -17
  421. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +35 -17
  422. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +4 -3
  423. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +53 -13
  424. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.js +63 -14
  425. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +21 -16
  426. package/packages/@monomind/cli/dist/src/mcp-tools/workflow-tools.js +92 -23
  427. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +41 -10
  428. package/packages/@monomind/cli/dist/src/memory/intelligence.d.ts +2 -2
  429. package/packages/@monomind/cli/dist/src/memory/intelligence.js +39 -13
  430. package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +1 -0
  431. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +149 -56
  432. package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +107 -45
  433. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.d.ts +8 -1
  434. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +25 -8
  435. package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +40 -0
  436. package/packages/@monomind/cli/dist/src/observability/replay-reader.js +138 -0
  437. package/packages/@monomind/cli/dist/src/orchestration/routing-modes.js +35 -5
  438. package/packages/@monomind/cli/dist/src/parser.d.ts +8 -0
  439. package/packages/@monomind/cli/dist/src/parser.js +48 -14
  440. package/packages/@monomind/cli/dist/src/plugins/manager.js +112 -19
  441. package/packages/@monomind/cli/dist/src/plugins/store/discovery.d.ts +1 -1
  442. package/packages/@monomind/cli/dist/src/plugins/store/discovery.js +80 -62
  443. package/packages/@monomind/cli/dist/src/production/circuit-breaker.js +8 -1
  444. package/packages/@monomind/cli/dist/src/production/error-handler.d.ts +4 -2
  445. package/packages/@monomind/cli/dist/src/production/error-handler.js +27 -5
  446. package/packages/@monomind/cli/dist/src/production/monitoring.js +8 -4
  447. package/packages/@monomind/cli/dist/src/production/rate-limiter.js +30 -22
  448. package/packages/@monomind/cli/dist/src/ruvector/agent-wasm.js +2 -2
  449. package/packages/@monomind/cli/dist/src/ruvector/coverage-router.js +19 -9
  450. package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.d.ts +1 -0
  451. package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.js +26 -6
  452. package/packages/@monomind/cli/dist/src/ruvector/enhanced-model-router.js +24 -2
  453. package/packages/@monomind/cli/dist/src/ruvector/index.d.ts +1 -2
  454. package/packages/@monomind/cli/dist/src/ruvector/index.js +2 -2
  455. package/packages/@monomind/cli/dist/src/ruvector/model-router.d.ts +4 -2
  456. package/packages/@monomind/cli/dist/src/ruvector/model-router.js +30 -6
  457. package/packages/@monomind/cli/dist/src/ruvector/moe-router.d.ts +7 -0
  458. package/packages/@monomind/cli/dist/src/ruvector/moe-router.js +35 -12
  459. package/packages/@monomind/cli/dist/src/ruvector/q-learning-router.d.ts +7 -1
  460. package/packages/@monomind/cli/dist/src/ruvector/q-learning-router.js +40 -9
  461. package/packages/@monomind/cli/dist/src/services/claim-service.d.ts +3 -1
  462. package/packages/@monomind/cli/dist/src/services/claim-service.js +33 -2
  463. package/packages/@monomind/cli/dist/src/services/config-file-manager.d.ts +16 -2
  464. package/packages/@monomind/cli/dist/src/services/config-file-manager.js +105 -17
  465. package/packages/@monomind/cli/dist/src/services/container-worker-pool.js +51 -11
  466. package/packages/@monomind/cli/dist/src/services/headless-worker-executor.d.ts +7 -0
  467. package/packages/@monomind/cli/dist/src/services/headless-worker-executor.js +188 -45
  468. package/packages/@monomind/cli/dist/src/services/registry-api.js +62 -9
  469. package/packages/@monomind/cli/dist/src/services/ruvector-training.js +8 -0
  470. package/packages/@monomind/cli/dist/src/services/worker-daemon.d.ts +4 -1
  471. package/packages/@monomind/cli/dist/src/services/worker-daemon.js +112 -28
  472. package/packages/@monomind/cli/dist/src/services/worker-queue.d.ts +9 -2
  473. package/packages/@monomind/cli/dist/src/services/worker-queue.js +86 -5
  474. package/packages/@monomind/cli/dist/src/suggest.js +9 -0
  475. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.d.ts +5 -3
  476. package/packages/@monomind/cli/dist/src/swarm/flow-enforcer.js +17 -5
  477. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.d.ts +3 -0
  478. package/packages/@monomind/cli/dist/src/swarm/flow-visualizer.js +30 -6
  479. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.js +5 -3
  480. package/packages/@monomind/cli/dist/src/transfer/export.js +5 -3
  481. package/packages/@monomind/cli/dist/src/transfer/ipfs/client.js +84 -7
  482. package/packages/@monomind/cli/dist/src/transfer/ipfs/upload.js +13 -4
  483. package/packages/@monomind/cli/dist/src/transfer/storage/gcs.js +19 -10
  484. package/packages/@monomind/cli/dist/src/transfer/store/discovery.d.ts +9 -2
  485. package/packages/@monomind/cli/dist/src/transfer/store/discovery.js +68 -13
  486. package/packages/@monomind/cli/dist/src/transfer/store/download.d.ts +15 -6
  487. package/packages/@monomind/cli/dist/src/transfer/store/download.js +113 -24
  488. package/packages/@monomind/cli/dist/src/transfer/store/publish.d.ts +1 -1
  489. package/packages/@monomind/cli/dist/src/transfer/store/publish.js +13 -14
  490. package/packages/@monomind/cli/dist/src/transfer/store/registry.d.ts +3 -3
  491. package/packages/@monomind/cli/dist/src/transfer/store/registry.js +32 -16
  492. package/packages/@monomind/cli/dist/src/update/checker.js +17 -4
  493. package/packages/@monomind/cli/dist/src/update/executor.js +25 -20
  494. package/packages/@monomind/cli/dist/src/update/rate-limiter.d.ts +11 -0
  495. package/packages/@monomind/cli/dist/src/update/rate-limiter.js +23 -3
  496. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.d.ts +6 -0
  497. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.js +22 -0
  498. package/packages/@monomind/cli/dist/src/workflow/condition-evaluator.js +37 -3
  499. package/packages/@monomind/cli/dist/src/workflow/dag-builder.js +27 -11
  500. package/packages/@monomind/cli/dist/src/workflow/dag-executor.js +51 -13
  501. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.d.ts +3 -0
  502. package/packages/@monomind/cli/dist/src/workflow/dsl-schema.js +6 -2
  503. package/packages/@monomind/cli/dist/src/workflow/template-engine.js +7 -0
  504. package/packages/@monomind/cli/dist/src/workflow/workflow-executor.js +95 -14
  505. package/packages/@monomind/cli/package.json +5 -2
  506. package/packages/@monomind/guidance/README.md +0 -3
  507. package/packages/@monomind/shared/README.md +0 -1
  508. package/packages/@monomind/shared/dist/types/consensus-audit.d.ts +3 -1
  509. package/packages/README.md +15 -16
  510. package/.claude/agents/design/design-brand-guardian.md +0 -323
  511. package/.claude/agents/design/design-image-prompt-engineer.md +0 -237
  512. package/.claude/agents/design/design-inclusive-visuals-specialist.md +0 -72
  513. package/.claude/agents/design/design-ui-designer.md +0 -384
  514. package/.claude/agents/design/design-ux-architect.md +0 -470
  515. package/.claude/agents/design/design-ux-researcher.md +0 -330
  516. package/.claude/agents/design/design-visual-storyteller.md +0 -150
  517. package/.claude/agents/design/design-whimsy-injector.md +0 -439
  518. package/.claude/agents/v3/integration-architect.md +0 -338
  519. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +0 -54
  520. package/.claude/commands/coordination/init.md +0 -44
  521. package/.claude/commands/coordination/orchestrate.md +0 -43
  522. package/.claude/commands/coordination/spawn.md +0 -45
  523. package/.claude/commands/github/code-review-swarm.md +0 -550
  524. package/.claude/commands/github/code-review.md +0 -25
  525. package/.claude/commands/github/github-swarm.md +0 -121
  526. package/.claude/commands/github/issue-triage.md +0 -25
  527. package/.claude/commands/github/multi-repo-swarm.md +0 -519
  528. package/.claude/commands/github/pr-enhance.md +0 -26
  529. package/.claude/commands/github/project-board-sync.md +0 -471
  530. package/.claude/commands/github/release-swarm.md +0 -590
  531. package/.claude/commands/github/repo-analyze.md +0 -25
  532. package/.claude/commands/github/swarm-issue.md +0 -482
  533. package/.claude/commands/github/swarm-pr.md +0 -310
  534. package/.claude/commands/github/workflow-automation.md +0 -468
  535. package/.claude/commands/hive-mind/hive-mind-metrics.md +0 -8
  536. package/.claude/commands/hive-mind/hive-mind-resume.md +0 -8
  537. package/.claude/commands/hive-mind/hive-mind-sessions.md +0 -8
  538. package/.claude/commands/hive-mind/hive-mind-wizard.md +0 -8
  539. package/.claude/commands/list-agents.md +0 -17
  540. package/.claude/commands/memory/memory-persist.md +0 -25
  541. package/.claude/commands/memory/memory-usage.md +0 -25
  542. package/.claude/commands/memory/neural.md +0 -47
  543. package/.claude/commands/metrics.md +0 -11
  544. package/.claude/commands/monitoring/real-time-view.md +0 -25
  545. package/.claude/commands/monitoring/swarm-monitor.md +0 -25
  546. package/.claude/commands/monomind-createtask.md +0 -302
  547. package/.claude/commands/monomind-help.md +0 -103
  548. package/.claude/commands/monomind-memory.md +0 -107
  549. package/.claude/commands/monomind-repeat.md +0 -149
  550. package/.claude/commands/monomind-swarm.md +0 -205
  551. package/.claude/commands/optimization/cache-manage.md +0 -25
  552. package/.claude/commands/optimization/topology-optimize.md +0 -25
  553. package/.claude/commands/pair/commands.md +0 -546
  554. package/.claude/commands/pair/config.md +0 -510
  555. package/.claude/commands/pair/start.md +0 -209
  556. package/.claude/commands/use-agent.md +0 -67
  557. package/.claude/skills/monomind-createtask/SKILL.md +0 -269
  558. package/.claude/skills/monomind-task-engine/SKILL.md +0 -358
  559. /package/.claude/agents/{v3 → specialists}/memory-specialist.md +0 -0
  560. /package/.claude/agents/{v3 → specialists}/performance-engineer.md +0 -0
  561. /package/.claude/agents/{v3 → specialists}/queen-coordinator.md +0 -0
  562. /package/.claude/agents/{v3 → specialists}/security-architect.md +0 -0
@@ -7,6 +7,10 @@
7
7
  * ADR-072: Autopilot Integration
8
8
  * Security: Addresses prototype pollution, NaN bypass, input validation
9
9
  */
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import * as os from 'os';
13
+ import { randomUUID } from 'crypto';
10
14
  // ── Constants ─────────────────────────────────────────────────
11
15
  export const STATE_DIR = '.monomind/data';
12
16
  export const STATE_FILE = `${STATE_DIR}/autopilot-state.json`;
@@ -71,9 +75,8 @@ export function validateTaskSources(sources) {
71
75
  }
72
76
  // ── State Management ──────────────────────────────────────────
73
77
  export function getDefaultState() {
74
- const crypto = require('crypto');
75
78
  return {
76
- sessionId: crypto.randomUUID(),
79
+ sessionId: randomUUID(),
77
80
  enabled: false,
78
81
  startTime: Date.now(),
79
82
  iterations: 0,
@@ -85,8 +88,6 @@ export function getDefaultState() {
85
88
  };
86
89
  }
87
90
  export function loadState() {
88
- const fs = require('fs');
89
- const path = require('path');
90
91
  const filePath = path.resolve(STATE_FILE);
91
92
  const defaults = getDefaultState();
92
93
  try {
@@ -111,8 +112,6 @@ export function loadState() {
111
112
  return defaults;
112
113
  }
113
114
  export function saveState(state) {
114
- const fs = require('fs');
115
- const path = require('path');
116
115
  const dir = path.resolve(STATE_DIR);
117
116
  if (!fs.existsSync(dir))
118
117
  fs.mkdirSync(dir, { recursive: true });
@@ -120,43 +119,98 @@ export function saveState(state) {
120
119
  if (state.history.length > MAX_HISTORY_ENTRIES) {
121
120
  state.history = state.history.slice(-MAX_HISTORY_ENTRIES);
122
121
  }
123
- const tmpFile = path.resolve(STATE_FILE) + '.tmp';
122
+ // Unique tmp filename concurrent autopilot_enable/disable/reset calls
123
+ // must not collide on the same .tmp path.
124
+ const tmpFile = `${path.resolve(STATE_FILE)}.${process.pid}.${Date.now()}.tmp`;
124
125
  fs.writeFileSync(tmpFile, JSON.stringify(state, null, 2));
125
126
  fs.renameSync(tmpFile, path.resolve(STATE_FILE));
126
127
  }
127
128
  export function appendLog(entry) {
128
- const fs = require('fs');
129
- const path = require('path');
130
129
  const filePath = path.resolve(LOG_FILE);
131
130
  const dir = path.resolve(STATE_DIR);
132
131
  if (!fs.existsSync(dir))
133
132
  fs.mkdirSync(dir, { recursive: true });
134
- let log = [];
133
+ // Append-only NDJSON: atomic at the OS level for individual lines, no
134
+ // read-modify-write race between concurrent MCP tool calls. Compaction is
135
+ // handled lazily by `compactLog()` which the daemon can call periodically.
136
+ // Previously this function did read → push → tmp-write → rename, which
137
+ // under concurrent autopilot_enable/disable/reset calls silently lost
138
+ // entries (last writer wins) and could truncate the log to a single entry
139
+ // if a peer crashed mid-write and the next caller's safeJsonParse threw.
135
140
  try {
136
- if (fs.existsSync(filePath)) {
137
- log = safeJsonParse(fs.readFileSync(filePath, 'utf-8'));
138
- if (!Array.isArray(log))
139
- log = [];
141
+ fs.appendFileSync(filePath, JSON.stringify(entry) + '\n', { flag: 'a' });
142
+ }
143
+ catch {
144
+ // Best-effort logging; do not throw from a non-critical observability path.
145
+ }
146
+ // Opportunistic compaction so the file doesn't grow without bound.
147
+ try {
148
+ const stat = fs.statSync(filePath);
149
+ if (stat.size > 4 * 1024 * 1024) {
150
+ compactLog(filePath);
140
151
  }
141
152
  }
153
+ catch { /* ignore */ }
154
+ }
155
+ /**
156
+ * Compact NDJSON log down to MAX_LOG_ENTRIES. On parse failure for any line,
157
+ * preserve the corrupt file aside (do not silently destroy data).
158
+ */
159
+ function compactLog(filePath) {
160
+ let lines;
161
+ try {
162
+ lines = fs.readFileSync(filePath, 'utf-8').split('\n').filter(l => l.trim().length > 0);
163
+ }
142
164
  catch {
143
- log = [];
165
+ return;
144
166
  }
145
- log.push(entry);
146
- if (log.length > MAX_LOG_ENTRIES)
147
- log = log.slice(-MAX_LOG_ENTRIES);
148
- const tmpFile = filePath + '.tmp';
149
- fs.writeFileSync(tmpFile, JSON.stringify(log, null, 2));
150
- fs.renameSync(tmpFile, filePath);
167
+ const entries = [];
168
+ let corrupt = 0;
169
+ for (const line of lines) {
170
+ try {
171
+ const e = safeJsonParse(line);
172
+ if (e && typeof e === 'object')
173
+ entries.push(e);
174
+ }
175
+ catch {
176
+ corrupt++;
177
+ }
178
+ }
179
+ if (corrupt > 0) {
180
+ try {
181
+ fs.copyFileSync(filePath, `${filePath}.corrupt-${Date.now()}`);
182
+ }
183
+ catch { /* ignore */ }
184
+ }
185
+ const trimmed = entries.length > MAX_LOG_ENTRIES ? entries.slice(-MAX_LOG_ENTRIES) : entries;
186
+ const tmp = `${filePath}.${process.pid}.${Date.now()}.tmp`;
187
+ fs.writeFileSync(tmp, trimmed.map(e => JSON.stringify(e)).join('\n') + '\n');
188
+ fs.renameSync(tmp, filePath);
151
189
  }
152
190
  export function loadLog() {
153
- const fs = require('fs');
154
- const path = require('path');
155
191
  const filePath = path.resolve(LOG_FILE);
156
192
  try {
157
193
  if (fs.existsSync(filePath)) {
158
- const result = safeJsonParse(fs.readFileSync(filePath, 'utf-8'));
159
- return Array.isArray(result) ? result : [];
194
+ const raw = fs.readFileSync(filePath, 'utf-8');
195
+ // Backward compatible: support both old JSON-array form and the new
196
+ // append-only NDJSON form. Prefer NDJSON if the file looks line-based.
197
+ const trimmed = raw.trim();
198
+ if (trimmed.startsWith('[')) {
199
+ const result = safeJsonParse(raw);
200
+ return Array.isArray(result) ? result : [];
201
+ }
202
+ const out = [];
203
+ for (const line of trimmed.split('\n')) {
204
+ if (!line)
205
+ continue;
206
+ try {
207
+ const entry = safeJsonParse(line);
208
+ if (entry && typeof entry === 'object')
209
+ out.push(entry);
210
+ }
211
+ catch { /* skip corrupt line */ }
212
+ }
213
+ return out;
160
214
  }
161
215
  }
162
216
  catch {
@@ -166,9 +220,6 @@ export function loadLog() {
166
220
  }
167
221
  // ── Task Discovery ────────────────────────────────────────────
168
222
  export function discoverTasks(sources) {
169
- const fs = require('fs');
170
- const path = require('path');
171
- const os = require('os');
172
223
  const tasks = [];
173
224
  // Only process valid sources
174
225
  const validSources = sources.filter(s => VALID_TASK_SOURCES.has(s));
@@ -2,7 +2,11 @@
2
2
  * Benchmark Runner for Regression Testing (Task 34)
3
3
  * Loads benchmark definitions, evaluates quality metrics, and detects regressions.
4
4
  */
5
- import type { BenchmarkDefinition, BenchmarkResult, BenchmarkBaseline, QualityMetric, MetricResult } from '@monoes/shared';
5
+ type BenchmarkDefinition = any;
6
+ type BenchmarkResult = any;
7
+ type BenchmarkBaseline = any;
8
+ type QualityMetric = any;
9
+ type MetricResult = any;
6
10
  export declare class BenchmarkRunner {
7
11
  private baselines;
8
12
  /**
@@ -34,7 +38,7 @@ export declare class BenchmarkRunner {
34
38
  private evaluateSingleMetric;
35
39
  }
36
40
  /** Minimal local type aliases so SwarmBench doesn't depend on the broken
37
- * @monoes/shared exports at the top of this file. */
41
+ * @monomind/shared exports at the top of this file. */
38
42
  export interface SwarmBenchTask {
39
43
  /** Unique task ID */
40
44
  id: string;
@@ -79,4 +83,5 @@ export declare class SwarmBenchRunner {
79
83
  /** Expose underlying BenchmarkRunner for general benchmarks. */
80
84
  get benchmarkRunner(): BenchmarkRunner;
81
85
  }
86
+ export {};
82
87
  //# sourceMappingURL=benchmark-runner.d.ts.map
@@ -14,19 +14,31 @@ export class BenchmarkRunner {
14
14
  */
15
15
  loadBenchmarks(dir) {
16
16
  const benchmarks = [];
17
- if (!fs.existsSync(dir)) {
17
+ // Safe-root constraint: reject any path that escapes the working directory
18
+ const safeRoot = path.resolve(process.cwd());
19
+ const resolved = path.resolve(dir);
20
+ const rel = path.relative(safeRoot, resolved);
21
+ if (rel.startsWith('..') || path.isAbsolute(rel))
22
+ return [];
23
+ if (!fs.existsSync(resolved)) {
18
24
  return benchmarks;
19
25
  }
20
- const files = fs.readdirSync(dir).filter((f) => f.endsWith('.json'));
26
+ const files = fs.readdirSync(resolved).filter((f) => f.endsWith('.json'));
21
27
  for (const file of files) {
22
- const filePath = path.join(dir, file);
28
+ const filePath = path.join(resolved, file);
23
29
  const raw = fs.readFileSync(filePath, 'utf-8');
24
- const parsed = JSON.parse(raw);
25
- if (Array.isArray(parsed)) {
26
- benchmarks.push(...parsed);
30
+ try {
31
+ const parsed = JSON.parse(raw);
32
+ if (Array.isArray(parsed)) {
33
+ benchmarks.push(...parsed);
34
+ }
35
+ else {
36
+ benchmarks.push(parsed);
37
+ }
27
38
  }
28
- else {
29
- benchmarks.push(parsed);
39
+ catch {
40
+ // skip malformed file
41
+ continue;
30
42
  }
31
43
  }
32
44
  return benchmarks;
@@ -2,7 +2,7 @@
2
2
  * Metric Evaluators for Benchmark Runner (Task 34)
3
3
  * Individual metric evaluation functions for quality assessment.
4
4
  */
5
- import type { MetricResult } from '@monoes/shared';
5
+ type MetricResult = any;
6
6
  /**
7
7
  * Checks whether the output contains the expected substring.
8
8
  */
@@ -32,4 +32,5 @@ export declare function jsonValid(output: string): MetricResult;
32
32
  export declare function customRegex(output: string, config: {
33
33
  pattern: string;
34
34
  }): MetricResult;
35
+ export {};
35
36
  //# sourceMappingURL=metric-evaluators.d.ts.map
@@ -76,12 +76,35 @@ export function jsonValid(output) {
76
76
  * Checks whether the output matches a custom regex pattern.
77
77
  */
78
78
  export function customRegex(output, config) {
79
+ // Reject overly long patterns and those with nested/repeated quantifiers
80
+ // (catastrophic backtracking — a malicious benchmark definition could
81
+ // pin CI runners with `^(a+)+$` against a long output string).
82
+ if (typeof config.pattern !== 'string' || config.pattern.length > 200) {
83
+ return {
84
+ type: 'custom_regex',
85
+ passed: false,
86
+ actual: null,
87
+ expected: config.pattern,
88
+ message: 'Pattern rejected: too long or invalid',
89
+ };
90
+ }
91
+ if (/(\(.*[+*?].*\)|[+*?]){2,}|\{[0-9,]+\}.*[+*?]|\([^)]*\|[^)]*\)[+*?{]/.test(config.pattern)) {
92
+ return {
93
+ type: 'custom_regex',
94
+ passed: false,
95
+ actual: null,
96
+ expected: config.pattern,
97
+ message: 'Pattern rejected: nested quantifiers risk catastrophic backtracking',
98
+ };
99
+ }
100
+ // Cap output length so even slow patterns can't burn unlimited CPU
101
+ const boundedOutput = output.length > 1024 * 1024 ? output.slice(0, 1024 * 1024) : output;
79
102
  const regex = new RegExp(config.pattern);
80
- const match = regex.test(output);
103
+ const match = regex.test(boundedOutput);
81
104
  return {
82
105
  type: 'custom_regex',
83
106
  passed: match,
84
- actual: match ? output.match(regex)?.[0] ?? null : null,
107
+ actual: match ? boundedOutput.match(regex)?.[0] ?? null : null,
85
108
  expected: config.pattern,
86
109
  message: match
87
110
  ? `Output matches pattern /${config.pattern}/`
@@ -34,7 +34,9 @@ function updateSwarmActivityMetrics(agentCountDelta) {
34
34
  swarm.coordination_active = newCount > 0;
35
35
  data.swarm = swarm;
36
36
  data.timestamp = new Date().toISOString();
37
- fs.writeFileSync(activityPath, JSON.stringify(data, null, 2));
37
+ const tmpPath = activityPath + '.tmp';
38
+ fs.writeFileSync(tmpPath, JSON.stringify(data, null, 2));
39
+ fs.renameSync(tmpPath, activityPath);
38
40
  }
39
41
  catch {
40
42
  // Non-critical — don't fail the command if metrics update fails
@@ -125,7 +127,7 @@ const spawnCommand = {
125
127
  const taskDescription = ctx.flags.task;
126
128
  if (!agentType && taskDescription) {
127
129
  try {
128
- const { RouteLayer, ALL_ROUTES } = await import('@monoes/routing');
130
+ const { RouteLayer, ALL_ROUTES } = await import('@monomind/routing');
129
131
  const layer = new RouteLayer({ routes: ALL_ROUTES });
130
132
  const routeResult = await layer.route(taskDescription);
131
133
  agentType = routeResult.agentSlug;
@@ -154,7 +156,7 @@ const spawnCommand = {
154
156
  model: ctx.flags.model,
155
157
  task: ctx.flags.task,
156
158
  timeout: ctx.flags.timeout,
157
- autoTools: ctx.flags.autoTools,
159
+ autoTools: ctx.flags['auto-tools'],
158
160
  },
159
161
  priority: 'normal',
160
162
  metadata: {
@@ -602,7 +604,7 @@ const poolCommand = {
602
604
  size: ctx.flags.size,
603
605
  min: ctx.flags.min,
604
606
  max: ctx.flags.max,
605
- autoScale: ctx.flags.autoScale ?? true,
607
+ autoScale: ctx.flags['auto-scale'] ?? true,
606
608
  });
607
609
  if (ctx.flags.format === 'json') {
608
610
  output.printJson(result);
@@ -3,6 +3,7 @@
3
3
  * Sign, publish, and hot-patch RVFA appliances.
4
4
  */
5
5
  import { output } from '../output.js';
6
+ import * as path from 'node:path';
6
7
  function fmtSize(bytes) {
7
8
  if (bytes < 1024)
8
9
  return `${bytes} B`;
@@ -15,6 +16,16 @@ function fmtSize(bytes) {
15
16
  function errMsg(err) {
16
17
  return err instanceof Error ? err.message : String(err);
17
18
  }
19
+ function checkRelativePath(userPath) {
20
+ if (!path.isAbsolute(userPath)) {
21
+ const resolved = path.resolve(userPath);
22
+ const rel = path.relative(process.cwd(), resolved);
23
+ if (rel.startsWith('..')) {
24
+ return `Relative path '${userPath}' escapes the working directory.`;
25
+ }
26
+ }
27
+ return null;
28
+ }
18
29
  const fail = (msg, detail) => {
19
30
  output.printError(msg, detail);
20
31
  return { success: false, exitCode: 1 };
@@ -69,6 +80,9 @@ export const signCommand = {
69
80
  hdr('Signing RVFA Appliance');
70
81
  let privateKey;
71
82
  if (keyPath) {
83
+ const pathErr = checkRelativePath(keyPath);
84
+ if (pathErr)
85
+ return fail(pathErr);
72
86
  const fs = await import('fs');
73
87
  privateKey = fs.readFileSync(keyPath);
74
88
  }
@@ -162,12 +176,18 @@ export const updateAppCommand = {
162
176
  output.writeln();
163
177
  let patchBuf;
164
178
  if (patchPath) {
179
+ const patchPathErr = checkRelativePath(patchPath);
180
+ if (patchPathErr)
181
+ return fail(patchPathErr);
165
182
  if (!(await requireFile(patchPath)))
166
183
  return { success: false, exitCode: 1 };
167
184
  patchBuf = fs.readFileSync(patchPath);
168
185
  output.printInfo(`Patch file: ${patchPath} (${fmtSize(patchBuf.length)})`);
169
186
  }
170
187
  else {
188
+ const dataPathErr = checkRelativePath(dataPath);
189
+ if (dataPathErr)
190
+ return fail(dataPathErr);
171
191
  if (!(await requireFile(dataPath)))
172
192
  return { success: false, exitCode: 1 };
173
193
  const newData = fs.readFileSync(dataPath);
@@ -186,6 +206,9 @@ export const updateAppCommand = {
186
206
  let pubKey;
187
207
  if (ctx.flags['public-key']) {
188
208
  const pkPath = ctx.flags['public-key'];
209
+ const pkPathErr = checkRelativePath(pkPath);
210
+ if (pkPathErr)
211
+ return fail(pkPathErr);
189
212
  if (!(await requireFile(pkPath)))
190
213
  return { success: false, exitCode: 1 };
191
214
  pubKey = fs.readFileSync(pkPath);
@@ -6,6 +6,8 @@
6
6
  */
7
7
  import { output } from '../output.js';
8
8
  import { loadState, saveState, appendLog, loadLog, discoverTasks, getProgress, calculateReward, tryLoadLearning, validateNumber, validateTaskSources, LOG_FILE, } from '../autopilot-state.js';
9
+ import { writeFileSync } from 'node:fs';
10
+ import { resolve } from 'node:path';
9
11
  // ── Check Handler (for Stop hook) ─────────────────────────────
10
12
  export async function autopilotCheck() {
11
13
  const state = loadState();
@@ -182,10 +184,8 @@ const logCommand = {
182
184
  ],
183
185
  action: async (ctx) => {
184
186
  if (ctx.flags?.clear) {
185
- const fs = require('fs');
186
- const path = require('path');
187
187
  try {
188
- fs.writeFileSync(path.resolve(LOG_FILE), '[]');
188
+ writeFileSync(resolve(LOG_FILE), '[]');
189
189
  }
190
190
  catch { /* ignore */ }
191
191
  output.writeln('Autopilot log cleared');
@@ -5,8 +5,9 @@
5
5
  * @module v1/cli/commands/benchmark
6
6
  */
7
7
  import { output } from '../output.js';
8
- import { writeFileSync, existsSync, mkdirSync } from 'node:fs';
8
+ import { writeFileSync, renameSync, readFileSync, existsSync, mkdirSync } from 'node:fs';
9
9
  import { join } from 'node:path';
10
+ import { BenchmarkRunner } from '../benchmarks/benchmark-runner.js';
10
11
  // ============================================================================
11
12
  // Pretrain Benchmark Subcommand
12
13
  // ============================================================================
@@ -50,7 +51,9 @@ const pretrainCommand = {
50
51
  mkdirSync(resultsDir, { recursive: true });
51
52
  }
52
53
  const savePath = saveFile.startsWith('/') ? saveFile : join(resultsDir, saveFile);
53
- writeFileSync(savePath, JSON.stringify(results, null, 2));
54
+ const saveTmp = savePath + '.tmp';
55
+ writeFileSync(saveTmp, JSON.stringify(results, null, 2));
56
+ renameSync(saveTmp, savePath);
54
57
  output.writeln(output.success(`Results saved to ${savePath}`));
55
58
  }
56
59
  const allPassed = results.results.every(r => r.targetMet);
@@ -276,7 +279,7 @@ const memoryCommand = {
276
279
  searchEntries = memory.searchEntries;
277
280
  }
278
281
  catch {
279
- // @monoes/memory not available — return null metrics instead of fake numbers
282
+ // @monomind/memory not available — return null metrics instead of fake numbers
280
283
  storeEntry = async () => ({ success: true });
281
284
  searchEntries = async () => ({ results: [], searchTime: 0 }); // 0 = no-op fallback, not a real benchmark
282
285
  }
@@ -410,17 +413,121 @@ const allCommand = {
410
413
  mkdirSync(resultsDir, { recursive: true });
411
414
  }
412
415
  const savePath = saveFile.startsWith('/') ? saveFile : join(resultsDir, saveFile);
413
- writeFileSync(savePath, JSON.stringify({
416
+ const saveTmp2 = savePath + '.tmp';
417
+ writeFileSync(saveTmp2, JSON.stringify({
414
418
  timestamp: new Date().toISOString(),
415
419
  duration: totalDuration,
416
420
  results: allResults,
417
421
  }, null, 2));
422
+ renameSync(saveTmp2, savePath);
418
423
  output.writeln(output.success(`Results saved to ${savePath}`));
419
424
  }
420
425
  return { success: true, message: 'All benchmarks complete' };
421
426
  },
422
427
  };
423
428
  // ============================================================================
429
+ // Regression Benchmark Subcommand
430
+ // ============================================================================
431
+ const regressionCommand = {
432
+ name: 'regression',
433
+ description: 'Quality regression testing using benchmark definitions and baselines',
434
+ options: [
435
+ { name: 'suite', short: 's', type: 'string', description: 'Path to benchmark definitions directory', default: '.monomind/benchmarks/definitions' },
436
+ { name: 'benchmark-id', short: 'b', type: 'string', description: 'Run a specific benchmark by ID' },
437
+ { name: 'agent-output', short: 'a', type: 'string', description: 'Path to file containing agent output to evaluate' },
438
+ { name: 'pin-baseline', type: 'boolean', description: 'Save current results as the new baseline', default: 'false' },
439
+ { name: 'output', short: 'o', type: 'string', description: 'Output format: text, json', default: 'text' },
440
+ ],
441
+ examples: [
442
+ { command: 'monomind benchmark regression', description: 'List all benchmark definitions' },
443
+ { command: 'monomind benchmark regression -b agent-spawn -a output.txt', description: 'Evaluate agent output against a benchmark' },
444
+ { command: 'monomind benchmark regression -b agent-spawn -a output.txt --pin-baseline', description: 'Evaluate and pin results as new baseline' },
445
+ ],
446
+ action: async (ctx) => {
447
+ const suiteDir = ctx.flags.suite || '.monomind/benchmarks/definitions';
448
+ const benchmarkId = ctx.flags['benchmark-id'];
449
+ const agentOutputFile = ctx.flags['agent-output'];
450
+ const pinBaseline = ctx.flags['pin-baseline'] === true;
451
+ const outputFormat = ctx.flags.output || 'text';
452
+ const runner = new BenchmarkRunner();
453
+ const baselinesDir = join(process.cwd(), '.monomind', 'benchmarks', 'baselines');
454
+ const definitions = runner.loadBenchmarks(join(process.cwd(), suiteDir));
455
+ if (definitions.length === 0) {
456
+ output.writeln(output.dim(`No benchmark definitions found in ${suiteDir}`));
457
+ output.writeln(output.dim('Create JSON files there to define quality benchmarks.'));
458
+ return { success: true, message: 'No benchmarks defined' };
459
+ }
460
+ // List mode — no agent output provided
461
+ if (!agentOutputFile) {
462
+ output.writeln();
463
+ output.writeln(output.bold('Benchmark Definitions'));
464
+ output.writeln(output.dim('─'.repeat(50)));
465
+ for (const def of definitions) {
466
+ output.writeln(` ${output.highlight(def.benchmarkId)} ${output.dim(def.agentSlug)} — ${def.qualityMetrics?.length ?? 0} metrics`);
467
+ }
468
+ output.writeln();
469
+ output.writeln(output.dim('Use --agent-output <file> to evaluate against a benchmark.'));
470
+ return { success: true, message: `${definitions.length} benchmarks loaded` };
471
+ }
472
+ // Evaluation mode
473
+ if (!existsSync(agentOutputFile)) {
474
+ output.writeln(output.error(`Agent output file not found: ${agentOutputFile}`));
475
+ return { success: false, message: 'Agent output file not found' };
476
+ }
477
+ const agentOutput = readFileSync(agentOutputFile, 'utf-8');
478
+ const targetDefs = benchmarkId
479
+ ? definitions.filter((d) => d.benchmarkId === benchmarkId)
480
+ : definitions;
481
+ if (targetDefs.length === 0) {
482
+ output.writeln(output.error(`No benchmark found with id: ${benchmarkId}`));
483
+ return { success: false, message: 'Benchmark not found' };
484
+ }
485
+ const results = targetDefs.map((def) => runner.runBenchmark(def, agentOutput));
486
+ if (outputFormat === 'json') {
487
+ output.writeln(JSON.stringify(results, null, 2));
488
+ }
489
+ else {
490
+ output.writeln();
491
+ output.writeln(output.bold('Regression Results'));
492
+ output.writeln(output.dim('─'.repeat(50)));
493
+ for (const result of results) {
494
+ const status = result.passed ? output.success('PASS') : output.error('FAIL');
495
+ output.writeln(` ${status} ${result.benchmarkId} ${output.dim(`${result.durationMs}ms`)}`);
496
+ for (const m of result.metricResults) {
497
+ const mStatus = m.passed ? ' ✓' : ' ✗';
498
+ output.writeln(` ${mStatus} ${m.type}`);
499
+ }
500
+ }
501
+ output.writeln();
502
+ }
503
+ // Baseline comparison
504
+ const baselinePath = join(baselinesDir, `${benchmarkId ?? 'all'}.json`);
505
+ if (existsSync(baselinePath)) {
506
+ const baseline = JSON.parse(readFileSync(baselinePath, 'utf-8'));
507
+ const hasRegression = runner.detectRegression(results, baseline);
508
+ if (hasRegression) {
509
+ output.writeln(output.error(`Regression detected — pass rate dropped below baseline (${(baseline.passRate * 100).toFixed(0)}%)`));
510
+ }
511
+ else {
512
+ output.writeln(output.success('No regression detected vs baseline'));
513
+ }
514
+ }
515
+ // Pin baseline
516
+ if (pinBaseline) {
517
+ if (!existsSync(baselinesDir))
518
+ mkdirSync(baselinesDir, { recursive: true });
519
+ const id = benchmarkId ?? 'all';
520
+ const baseline = runner.pinBaseline(id, results);
521
+ const baselineTmp = baselinePath + '.tmp';
522
+ writeFileSync(baselineTmp, JSON.stringify(baseline, null, 2));
523
+ renameSync(baselineTmp, baselinePath);
524
+ output.writeln(output.success(`Baseline pinned: ${(baseline.passRate * 100).toFixed(0)}% pass rate`));
525
+ }
526
+ const allPassed = results.every((r) => r.passed);
527
+ return { success: allPassed, message: allPassed ? 'All metrics passed' : 'Some metrics failed' };
528
+ },
529
+ };
530
+ // ============================================================================
424
531
  // Main Benchmark Command
425
532
  // ============================================================================
426
533
  export const benchmarkCommand = {
@@ -431,12 +538,15 @@ export const benchmarkCommand = {
431
538
  neuralCommand,
432
539
  memoryCommand,
433
540
  allCommand,
541
+ regressionCommand,
434
542
  ],
435
543
  examples: [
436
544
  { command: 'monomind benchmark pretrain', description: 'Benchmark pre-training system' },
437
545
  { command: 'monomind benchmark neural', description: 'Benchmark neural operations' },
438
546
  { command: 'monomind benchmark memory', description: 'Benchmark memory operations' },
439
547
  { command: 'monomind benchmark all', description: 'Run all benchmarks' },
548
+ { command: 'monomind benchmark regression', description: 'List quality regression benchmarks' },
549
+ { command: 'monomind benchmark regression -b my-bench -a output.txt', description: 'Evaluate agent output against a benchmark' },
440
550
  ],
441
551
  action: async (_ctx) => {
442
552
  output.writeln();
@@ -444,10 +554,11 @@ export const benchmarkCommand = {
444
554
  output.writeln(output.dim('─'.repeat(50)));
445
555
  output.writeln();
446
556
  output.writeln('Available subcommands:');
447
- output.writeln(` ${output.highlight('pretrain')} - Benchmark self-learning pre-training (SONA, EWC++, MoE)`);
448
- output.writeln(` ${output.highlight('neural')} - Benchmark neural operations (embeddings, WASM)`);
449
- output.writeln(` ${output.highlight('memory')} - Benchmark memory operations (HNSW, store, search)`);
450
- output.writeln(` ${output.highlight('all')} - Run all benchmark suites`);
557
+ output.writeln(` ${output.highlight('pretrain')} - Benchmark self-learning pre-training (SONA, EWC++, MoE)`);
558
+ output.writeln(` ${output.highlight('neural')} - Benchmark neural operations (embeddings, WASM)`);
559
+ output.writeln(` ${output.highlight('memory')} - Benchmark memory operations (HNSW, store, search)`);
560
+ output.writeln(` ${output.highlight('all')} - Run all benchmark suites`);
561
+ output.writeln(` ${output.highlight('regression')} - Quality regression testing with baselines`);
451
562
  output.writeln();
452
563
  output.writeln('Examples:');
453
564
  output.writeln(' monomind benchmark pretrain -i 200');