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
@@ -177,7 +177,14 @@ export declare class SONAOptimizer {
177
177
  */
178
178
  private prunePatterns;
179
179
  /**
180
- * Validate pattern structure
180
+ * Validate pattern structure with strict bounds.
181
+ * SECURITY: confidence/keywords/agent fields must be bounds-checked to
182
+ * defeat poisoning. typeof NaN === 'number' and typeof Infinity === 'number'
183
+ * pass the loose typeof check; without bounds, an attacker who writes
184
+ * sona-patterns.json (poisoned bundle, malicious test fixture, co-located
185
+ * compromise) can inject `confidence: 1e308` to deterministically win
186
+ * every routing decision via findBestPatternMatch's `score = matchRatio *
187
+ * confidence`. Mirrors the pattern in intelligence.ts:loadFromDisk.
181
188
  */
182
189
  private validatePattern;
183
190
  /**
@@ -13,7 +13,7 @@
13
13
  *
14
14
  * @module v1/cli/memory/sona-optimizer
15
15
  */
16
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
16
+ import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'fs';
17
17
  import { dirname, join } from 'path';
18
18
  // ============================================================================
19
19
  // Constants
@@ -483,17 +483,32 @@ export class SONAOptimizer {
483
483
  }
484
484
  }
485
485
  /**
486
- * Validate pattern structure
486
+ * Validate pattern structure with strict bounds.
487
+ * SECURITY: confidence/keywords/agent fields must be bounds-checked to
488
+ * defeat poisoning. typeof NaN === 'number' and typeof Infinity === 'number'
489
+ * pass the loose typeof check; without bounds, an attacker who writes
490
+ * sona-patterns.json (poisoned bundle, malicious test fixture, co-located
491
+ * compromise) can inject `confidence: 1e308` to deterministically win
492
+ * every routing decision via findBestPatternMatch's `score = matchRatio *
493
+ * confidence`. Mirrors the pattern in intelligence.ts:loadFromDisk.
487
494
  */
488
495
  validatePattern(pattern) {
489
496
  if (!pattern || typeof pattern !== 'object')
490
497
  return false;
491
498
  const p = pattern;
492
- return (Array.isArray(p.keywords) &&
493
- typeof p.agent === 'string' &&
494
- typeof p.confidence === 'number' &&
495
- typeof p.successCount === 'number' &&
496
- typeof p.failureCount === 'number');
499
+ if (!Array.isArray(p.keywords) || p.keywords.length > 64)
500
+ return false;
501
+ if (!p.keywords.every(k => typeof k === 'string' && k.length > 0 && k.length <= 128))
502
+ return false;
503
+ if (typeof p.agent !== 'string' || p.agent.length === 0 || p.agent.length > 128)
504
+ return false;
505
+ if (typeof p.confidence !== 'number' || !Number.isFinite(p.confidence) || p.confidence < 0 || p.confidence > 1)
506
+ return false;
507
+ if (typeof p.successCount !== 'number' || !Number.isFinite(p.successCount) || p.successCount < 0 || p.successCount > 1e9)
508
+ return false;
509
+ if (typeof p.failureCount !== 'number' || !Number.isFinite(p.failureCount) || p.failureCount < 0 || p.failureCount > 1e9)
510
+ return false;
511
+ return true;
497
512
  }
498
513
  /**
499
514
  * Load patterns from disk
@@ -557,7 +572,9 @@ export class SONAOptimizer {
557
572
  savedAt: new Date().toISOString(),
558
573
  },
559
574
  };
560
- writeFileSync(fullPath, JSON.stringify(state, null, 2));
575
+ const tmp = fullPath + '.tmp';
576
+ writeFileSync(tmp, JSON.stringify(state, null, 2));
577
+ renameSync(tmp, fullPath);
561
578
  return true;
562
579
  }
563
580
  catch (err) {
@@ -0,0 +1,40 @@
1
+ /**
2
+ * ReplayReader
3
+ *
4
+ * Reads session files from .monomind/sessions/ for replay and listing.
5
+ * Session files follow the pattern session-{id}.json. current.json is a
6
+ * regular file (not a symlink) pointing to the active session data.
7
+ */
8
+ export interface SessionSummary {
9
+ id: string;
10
+ startedAt: string;
11
+ endedAt?: string;
12
+ tokenUsage?: {
13
+ total?: number;
14
+ };
15
+ taskCount?: number;
16
+ filePath: string;
17
+ }
18
+ export interface SessionReplay extends SessionSummary {
19
+ raw: Record<string, unknown>;
20
+ }
21
+ export declare class ReplayReader {
22
+ private sessionsDir;
23
+ constructor(cwd?: string);
24
+ /**
25
+ * Find and return the session data for a given session ID.
26
+ * The ID may be a bare ID (e.g. "session-1234567890") or a timestamp number.
27
+ * Falls back to current.json if the id matches the current session.
28
+ */
29
+ show(sessionId: string): Promise<SessionReplay | null>;
30
+ /**
31
+ * List sessions ordered by startedAt descending (most recent first).
32
+ * current.json is excluded — only persisted session-*.json files are listed.
33
+ */
34
+ list(limit?: number): Promise<SessionSummary[]>;
35
+ private parseReplay;
36
+ private parseSummary;
37
+ private buildSummary;
38
+ private readJson;
39
+ }
40
+ //# sourceMappingURL=replay-reader.d.ts.map
@@ -0,0 +1,138 @@
1
+ /**
2
+ * ReplayReader
3
+ *
4
+ * Reads session files from .monomind/sessions/ for replay and listing.
5
+ * Session files follow the pattern session-{id}.json. current.json is a
6
+ * regular file (not a symlink) pointing to the active session data.
7
+ */
8
+ import { readdirSync, readFileSync, existsSync, statSync } from 'fs';
9
+ import { join, sep, resolve } from 'path';
10
+ export class ReplayReader {
11
+ sessionsDir;
12
+ constructor(cwd = process.cwd()) {
13
+ this.sessionsDir = join(cwd, '.monomind', 'sessions');
14
+ }
15
+ /**
16
+ * Find and return the session data for a given session ID.
17
+ * The ID may be a bare ID (e.g. "session-1234567890") or a timestamp number.
18
+ * Falls back to current.json if the id matches the current session.
19
+ */
20
+ async show(sessionId) {
21
+ if (!existsSync(this.sessionsDir)) {
22
+ return null;
23
+ }
24
+ // Normalize: allow bare numeric IDs or full "session-<id>" form
25
+ const normalized = sessionId.startsWith('session-')
26
+ ? sessionId
27
+ : `session-${sessionId}`;
28
+ // Guard against path traversal (e.g. sessionId = "../../../etc/passwd")
29
+ const filePath = join(this.sessionsDir, `${normalized}.json`);
30
+ if (!resolve(filePath).startsWith(resolve(this.sessionsDir) + sep))
31
+ return null;
32
+ if (existsSync(filePath)) {
33
+ return this.parseReplay(filePath);
34
+ }
35
+ // Fall back to current.json if the id matches
36
+ const currentPath = join(this.sessionsDir, 'current.json');
37
+ if (existsSync(currentPath)) {
38
+ const current = this.parseReplay(currentPath);
39
+ if (current && (current.id === sessionId || current.id === normalized)) {
40
+ return current;
41
+ }
42
+ }
43
+ return null;
44
+ }
45
+ /**
46
+ * List sessions ordered by startedAt descending (most recent first).
47
+ * current.json is excluded — only persisted session-*.json files are listed.
48
+ */
49
+ async list(limit = 20) {
50
+ if (!existsSync(this.sessionsDir)) {
51
+ return [];
52
+ }
53
+ let entries;
54
+ try {
55
+ entries = readdirSync(this.sessionsDir);
56
+ }
57
+ catch {
58
+ return [];
59
+ }
60
+ const summaries = [];
61
+ for (const entry of entries) {
62
+ if (!entry.startsWith('session-') || !entry.endsWith('.json')) {
63
+ continue;
64
+ }
65
+ const filePath = join(this.sessionsDir, entry);
66
+ const summary = this.parseSummary(filePath);
67
+ if (summary) {
68
+ summaries.push(summary);
69
+ }
70
+ }
71
+ // Sort by startedAt descending; push invalid dates to the end
72
+ summaries.sort((a, b) => {
73
+ const ta = new Date(a.startedAt).getTime();
74
+ const tb = new Date(b.startedAt).getTime();
75
+ if (isNaN(ta) && isNaN(tb))
76
+ return 0;
77
+ if (isNaN(ta))
78
+ return 1;
79
+ if (isNaN(tb))
80
+ return -1;
81
+ return tb - ta;
82
+ });
83
+ return summaries.slice(0, limit);
84
+ }
85
+ // ── private helpers ──────────────────────────────────────────────────────────
86
+ parseReplay(filePath) {
87
+ const raw = this.readJson(filePath);
88
+ if (!raw)
89
+ return null;
90
+ const summary = this.buildSummary(raw, filePath);
91
+ if (!summary)
92
+ return null;
93
+ return { ...summary, raw };
94
+ }
95
+ parseSummary(filePath) {
96
+ const raw = this.readJson(filePath);
97
+ if (!raw)
98
+ return null;
99
+ return this.buildSummary(raw, filePath);
100
+ }
101
+ buildSummary(raw, filePath) {
102
+ const id = typeof raw.id === 'string' ? raw.id : null;
103
+ const startedAt = typeof raw.startedAt === 'string' ? raw.startedAt : null;
104
+ if (!id || !startedAt)
105
+ return null;
106
+ const endedAt = typeof raw.endedAt === 'string' ? raw.endedAt : undefined;
107
+ // tokenUsage is not present in current session files but kept optional per interface
108
+ const tokenUsage = raw.tokenUsage && typeof raw.tokenUsage === 'object'
109
+ ? raw.tokenUsage
110
+ : undefined;
111
+ // taskCount comes from metrics.tasks
112
+ const metrics = raw.metrics && typeof raw.metrics === 'object'
113
+ ? raw.metrics
114
+ : undefined;
115
+ const taskCount = metrics && typeof metrics.tasks === 'number' ? metrics.tasks : undefined;
116
+ return { id, startedAt, endedAt, tokenUsage, taskCount, filePath };
117
+ }
118
+ readJson(filePath) {
119
+ try {
120
+ // Hard size cap. Without this, a single planted multi-GB session-*.json
121
+ // (or a runaway log) crashes the CLI with allocation failure when
122
+ // any code path touches `list()` or `show()`.
123
+ const stat = statSync(filePath);
124
+ if (stat.size > 25 * 1024 * 1024)
125
+ return null;
126
+ const content = readFileSync(filePath, 'utf-8');
127
+ const parsed = JSON.parse(content);
128
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
129
+ return parsed;
130
+ }
131
+ return null;
132
+ }
133
+ catch {
134
+ return null;
135
+ }
136
+ }
137
+ }
138
+ //# sourceMappingURL=replay-reader.js.map
@@ -10,6 +10,18 @@ import { SharedScratchpad } from '../../../shared/src/scratchpad.js';
10
10
  // ---------------------------------------------------------------------------
11
11
  // Abstract executor
12
12
  // ---------------------------------------------------------------------------
13
+ const SLUG_RE = /^[a-z0-9][a-z0-9\-]{0,63}$/;
14
+ const MAX_TASK_BYTES = 64 * 1024;
15
+ function assertSlug(value, name) {
16
+ if (!SLUG_RE.test(value))
17
+ throw new Error(`Invalid agent slug for ${name}: ${JSON.stringify(value)}`);
18
+ }
19
+ function assertTask(task) {
20
+ if (!task || task.trim().length === 0)
21
+ throw new Error('task must not be empty');
22
+ if (task.length > MAX_TASK_BYTES)
23
+ throw new Error(`task exceeds maximum length (${MAX_TASK_BYTES} bytes)`);
24
+ }
13
25
  export class ModeExecutor {
14
26
  dispatcher;
15
27
  constructor(dispatcher) {
@@ -21,6 +33,8 @@ export class ModeExecutor {
21
33
  // ---------------------------------------------------------------------------
22
34
  export class RouteModeExecutor extends ModeExecutor {
23
35
  async execute(config) {
36
+ assertSlug(config.agentSlug, 'agentSlug');
37
+ assertTask(config.task);
24
38
  const start = Date.now();
25
39
  const result = await this.dispatcher.dispatch(config.agentSlug, config.task);
26
40
  return {
@@ -48,7 +62,7 @@ export function parsePlan(output) {
48
62
  const parsed = JSON.parse(raw);
49
63
  if (Array.isArray(parsed))
50
64
  return parsed.map(String);
51
- if (Array.isArray(parsed.subtasks))
65
+ if (parsed !== null && typeof parsed === 'object' && Array.isArray(parsed.subtasks))
52
66
  return parsed.subtasks.map(String);
53
67
  }
54
68
  catch {
@@ -58,9 +72,12 @@ export function parsePlan(output) {
58
72
  }
59
73
  export class CoordinateModeExecutor extends ModeExecutor {
60
74
  async execute(config) {
75
+ assertTask(config.task);
61
76
  const start = Date.now();
62
77
  const plannerSlug = config.plannerSlug ?? 'planner';
63
78
  const synthesizerSlug = config.synthesizerSlug ?? 'hierarchical-coordinator';
79
+ assertSlug(plannerSlug, 'plannerSlug');
80
+ assertSlug(synthesizerSlug, 'synthesizerSlug');
64
81
  const maxSubtasks = config.maxSubtasks ?? 8;
65
82
  const totalTokens = { input: 0, output: 0 };
66
83
  const agents = [plannerSlug];
@@ -103,9 +120,18 @@ export class CoordinateModeExecutor extends ModeExecutor {
103
120
  // ---------------------------------------------------------------------------
104
121
  export class CollaborateModeExecutor extends ModeExecutor {
105
122
  async execute(config) {
123
+ assertTask(config.task);
124
+ assertSlug(config.agentA, 'agentA');
125
+ assertSlug(config.agentB, 'agentB');
106
126
  const start = Date.now();
107
- const maxIterations = config.maxIterations ?? 5;
108
- const convergencePhrase = config.convergencePhrase ?? 'APPROVED';
127
+ // Cap iterations: each iteration costs 2 LLM dispatches; an unbounded value
128
+ // turns this into an unbounded token-cost / OOM vector.
129
+ const maxIterations = Math.max(1, Math.min(config.maxIterations ?? 5, 20));
130
+ // Reject empty/short convergence phrase — empty string would make
131
+ // String(bResult.output).includes('') return true on iteration 1, bypassing
132
+ // the entire iterative review and locking in whatever Agent B produced.
133
+ const rawPhrase = (config.convergencePhrase ?? 'APPROVED').trim();
134
+ const convergencePhrase = rawPhrase.length >= 3 ? rawPhrase : 'APPROVED';
109
135
  const pad = new SharedScratchpad();
110
136
  const totalTokens = { input: 0, output: 0 };
111
137
  let lastOutput;
@@ -119,8 +145,12 @@ export class CollaborateModeExecutor extends ModeExecutor {
119
145
  pad.append(config.agentB, String(bResult.output));
120
146
  this.addTokens(totalTokens, bResult.tokenUsage);
121
147
  lastOutput = bResult.output;
122
- // Convergence check
123
- if (String(bResult.output).includes(convergencePhrase)) {
148
+ // Convergence check — require the phrase as a stand-alone token so that
149
+ // an attacker who controls Agent A's output cannot embed `APPROVED` in
150
+ // prose and force premature convergence on iteration 1.
151
+ const escaped = convergencePhrase.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
152
+ const convergenceRe = new RegExp(`(^|\\W)${escaped}(\\W|$)`);
153
+ if (convergenceRe.test(String(bResult.output))) {
124
154
  return {
125
155
  mode: 'collaborate',
126
156
  output: lastOutput,
@@ -27,6 +27,14 @@ export declare class CommandParser {
27
27
  registerCommand(command: Command): void;
28
28
  getCommand(name: string): Command | undefined;
29
29
  getAllCommands(): Command[];
30
+ /**
31
+ * Reserved keys that would either pollute the prototype chain (`__proto__`,
32
+ * `constructor`, `prototype`) or shadow `Object.prototype` methods that
33
+ * downstream consumers commonly call (`hasOwnProperty`, `toString`,
34
+ * `valueOf`, `isPrototypeOf`, `propertyIsEnumerable`). All are rejected.
35
+ */
36
+ private static readonly RESERVED_FLAG_KEYS;
37
+ private setFlagSafe;
30
38
  parse(args: string[]): ParseResult;
31
39
  private parseFlag;
32
40
  private parseValue;
@@ -96,6 +96,21 @@ export class CommandParser {
96
96
  return true;
97
97
  });
98
98
  }
99
+ /**
100
+ * Reserved keys that would either pollute the prototype chain (`__proto__`,
101
+ * `constructor`, `prototype`) or shadow `Object.prototype` methods that
102
+ * downstream consumers commonly call (`hasOwnProperty`, `toString`,
103
+ * `valueOf`, `isPrototypeOf`, `propertyIsEnumerable`). All are rejected.
104
+ */
105
+ static RESERVED_FLAG_KEYS = new Set([
106
+ '__proto__', 'constructor', 'prototype',
107
+ 'hasOwnProperty', 'toString', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable',
108
+ ]);
109
+ setFlagSafe(flags, key, value) {
110
+ if (CommandParser.RESERVED_FLAG_KEYS.has(key))
111
+ return;
112
+ flags[key] = value;
113
+ }
99
114
  parse(args) {
100
115
  const result = {
101
116
  command: [],
@@ -193,25 +208,37 @@ export class CommandParser {
193
208
  // --flag=value
194
209
  const key = arg.slice(2, equalIndex);
195
210
  const value = arg.slice(equalIndex + 1);
196
- flags[this.normalizeKey(key)] = this.parseValue(value);
211
+ this.setFlagSafe(flags, this.normalizeKey(key), this.parseValue(value));
197
212
  }
198
213
  else if (arg.startsWith('--no-')) {
199
- // --no-flag (boolean negation)
214
+ // --no-flag (boolean negation) — only accept for declared boolean flags
215
+ // so attackers can't covertly toggle off arbitrary security controls
216
+ // (--no-verify-signature, --no-confirm, etc.) when the underlying flag
217
+ // doesn't exist as a boolean option. Unknown --no-X is treated as a
218
+ // string flag passed verbatim, which validation can then reject.
200
219
  const key = arg.slice(5);
201
- flags[this.normalizeKey(key)] = false;
220
+ const normalizedKey = this.normalizeKey(key);
221
+ if (booleanFlags.has(normalizedKey)) {
222
+ this.setFlagSafe(flags, normalizedKey, false);
223
+ }
224
+ else {
225
+ // Record under the prefixed name so it surfaces as unknown rather
226
+ // than silently downgrading any flag the user happens to spell.
227
+ this.setFlagSafe(flags, this.normalizeKey('no-' + key), true);
228
+ }
202
229
  }
203
230
  else {
204
231
  const key = arg.slice(2);
205
232
  const normalizedKey = this.normalizeKey(key);
206
233
  if (booleanFlags.has(normalizedKey)) {
207
- flags[normalizedKey] = true;
234
+ this.setFlagSafe(flags, normalizedKey, true);
208
235
  }
209
236
  else if (nextIndex < args.length && !args[nextIndex].startsWith('-')) {
210
- flags[normalizedKey] = this.parseValue(args[nextIndex]);
237
+ this.setFlagSafe(flags, normalizedKey, this.parseValue(args[nextIndex]));
211
238
  nextIndex++;
212
239
  }
213
240
  else {
214
- flags[normalizedKey] = true;
241
+ this.setFlagSafe(flags, normalizedKey, true);
215
242
  }
216
243
  }
217
244
  }
@@ -223,21 +250,21 @@ export class CommandParser {
223
250
  const key = aliases[chars] || chars;
224
251
  const normalizedKey = this.normalizeKey(key);
225
252
  if (booleanFlags.has(normalizedKey)) {
226
- flags[normalizedKey] = true;
253
+ this.setFlagSafe(flags, normalizedKey, true);
227
254
  }
228
255
  else if (nextIndex < args.length && !args[nextIndex].startsWith('-')) {
229
- flags[normalizedKey] = this.parseValue(args[nextIndex]);
256
+ this.setFlagSafe(flags, normalizedKey, this.parseValue(args[nextIndex]));
230
257
  nextIndex++;
231
258
  }
232
259
  else {
233
- flags[normalizedKey] = true;
260
+ this.setFlagSafe(flags, normalizedKey, true);
234
261
  }
235
262
  }
236
263
  else {
237
264
  // Multiple short flags combined (e.g., -abc)
238
265
  for (const char of chars) {
239
266
  const key = aliases[char] || char;
240
- flags[this.normalizeKey(key)] = true;
267
+ this.setFlagSafe(flags, this.normalizeKey(key), true);
241
268
  }
242
269
  }
243
270
  }
@@ -249,10 +276,17 @@ export class CommandParser {
249
276
  return true;
250
277
  if (value.toLowerCase() === 'false')
251
278
  return false;
252
- // Number
253
- const num = Number(value);
254
- if (!isNaN(num) && value.trim() !== '')
255
- return num;
279
+ // Number — only coerce if the string is unambiguously a canonical number.
280
+ // The previous code coerced any numeric-looking string, which silently
281
+ // dropped leading zeros ("00042" 42), mangled IDs/tokens above
282
+ // Number.MAX_SAFE_INTEGER, and could cause tenant/identity mix-ups when
283
+ // downstream consumers strict-equal-compared against stored strings.
284
+ if (value.trim() !== '' && /^-?(0|[1-9]\d*)(\.\d+)?([eE][+-]?\d+)?$/.test(value)) {
285
+ const num = Number(value);
286
+ if (Number.isFinite(num) && Number.isSafeInteger(num) || (!Number.isInteger(num) && Number.isFinite(num))) {
287
+ return num;
288
+ }
289
+ }
256
290
  // String
257
291
  return value;
258
292
  }