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
@@ -17,6 +17,21 @@ function validatePackageName(spec) {
17
17
  throw new Error(`Invalid package name: ${spec}`);
18
18
  }
19
19
  }
20
+ const VALID_VERSION_RE = /^[a-zA-Z0-9._\-^~>=<*]+$/;
21
+ function validateVersion(version) {
22
+ if (!VALID_VERSION_RE.test(version) || version.length > 50) {
23
+ throw new Error(`Invalid version specifier: ${version}`);
24
+ }
25
+ }
26
+ /** Forbidden manifest keys (prototype pollution defense) */
27
+ const FORBIDDEN_PLUGIN_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
28
+ function isValidPluginKey(name) {
29
+ return typeof name === 'string'
30
+ && name.length > 0
31
+ && name.length <= 214
32
+ && !FORBIDDEN_PLUGIN_KEYS.has(name)
33
+ && VALID_PACKAGE_RE.test(name);
34
+ }
20
35
  // ============================================================================
21
36
  // Plugin Manager
22
37
  // ============================================================================
@@ -60,7 +75,13 @@ export class PluginManager {
60
75
  try {
61
76
  if (fs.existsSync(this.config.manifestPath)) {
62
77
  const content = fs.readFileSync(this.config.manifestPath, 'utf-8');
63
- return JSON.parse(content);
78
+ const parsed = JSON.parse(content);
79
+ if (Object.prototype.hasOwnProperty.call(parsed, '__proto__') ||
80
+ Object.prototype.hasOwnProperty.call(parsed, 'constructor') ||
81
+ Object.prototype.hasOwnProperty.call(parsed, 'prototype')) {
82
+ throw new Error('Manifest contains forbidden keys');
83
+ }
84
+ return parsed;
64
85
  }
65
86
  }
66
87
  catch (error) {
@@ -77,7 +98,10 @@ export class PluginManager {
77
98
  return;
78
99
  this.manifest.lastUpdated = new Date().toISOString();
79
100
  await this.ensureDirectory(path.dirname(this.config.manifestPath));
80
- fs.writeFileSync(this.config.manifestPath, JSON.stringify(this.manifest, null, 2), 'utf-8');
101
+ // Atomic write to prevent corruption on crash
102
+ const tmp = this.config.manifestPath + '.tmp';
103
+ fs.writeFileSync(tmp, JSON.stringify(this.manifest, null, 2), 'utf-8');
104
+ fs.renameSync(tmp, this.config.manifestPath);
81
105
  }
82
106
  // =========================================================================
83
107
  // Installation
@@ -89,10 +113,21 @@ export class PluginManager {
89
113
  if (!this.manifest) {
90
114
  await this.initialize();
91
115
  }
116
+ if (!isValidPluginKey(packageName)) {
117
+ return { success: false, error: `Invalid package name: ${packageName}` };
118
+ }
119
+ if (version) {
120
+ try {
121
+ validateVersion(version);
122
+ }
123
+ catch {
124
+ return { success: false, error: `Invalid version specifier: ${version}` };
125
+ }
126
+ }
92
127
  const versionSpec = version ? `${packageName}@${version}` : packageName;
93
128
  try {
94
129
  // Check if already installed
95
- if (this.manifest.plugins[packageName]) {
130
+ if (Object.hasOwn(this.manifest.plugins, packageName)) {
96
131
  return {
97
132
  success: false,
98
133
  error: `Plugin ${packageName} is already installed. Use upgrade to update.`,
@@ -103,9 +138,11 @@ export class PluginManager {
103
138
  await this.ensureDirectory(installDir);
104
139
  // Validate package name to prevent injection (S-3)
105
140
  validatePackageName(versionSpec);
106
- // Use npm to install (array form prevents shell injection)
141
+ // Use npm to install. --ignore-scripts blocks pre/post-install lifecycle hooks
142
+ // from the plugin package, which would otherwise execute arbitrary code at
143
+ // install time (the canonical npm supply-chain attack vector).
107
144
  console.log(`[PluginManager] Installing ${versionSpec}...`);
108
- await execFileAsync('npm', ['install', '--prefix', this.config.pluginsDir, versionSpec], { timeout: 120000 });
145
+ await execFileAsync('npm', ['install', '--ignore-scripts', '--prefix', this.config.pluginsDir, versionSpec], { timeout: 120000 });
109
146
  // Get installed version
110
147
  const packageJsonPath = path.join(installDir, packageName, 'package.json');
111
148
  let installedVersion = version || 'latest';
@@ -116,8 +153,8 @@ export class PluginManager {
116
153
  installedVersion = pkg.version;
117
154
  // Check for monomind plugin metadata
118
155
  if (pkg['monomind']) {
119
- commands = pkg['monomind'].commands || [];
120
- hooks = pkg['monomind'].hooks || [];
156
+ commands = Array.isArray(pkg['monomind'].commands) ? pkg['monomind'].commands : [];
157
+ hooks = Array.isArray(pkg['monomind'].hooks) ? pkg['monomind'].hooks : [];
121
158
  }
122
159
  }
123
160
  // Create plugin entry
@@ -152,6 +189,14 @@ export class PluginManager {
152
189
  }
153
190
  try {
154
191
  const absolutePath = path.resolve(sourcePath);
192
+ // Restrict local installs to paths under cwd or $HOME to prevent path traversal
193
+ const cwd = process.cwd();
194
+ const home = process.env.HOME ?? process.env.USERPROFILE ?? '';
195
+ const underCwd = absolutePath.startsWith(cwd + path.sep) || absolutePath === cwd;
196
+ const underHome = home && (absolutePath.startsWith(home + path.sep) || absolutePath === home);
197
+ if (!underCwd && !underHome) {
198
+ return { success: false, error: `Local path must be within the current directory or home: ${absolutePath}` };
199
+ }
155
200
  if (!fs.existsSync(absolutePath)) {
156
201
  return { success: false, error: `Path does not exist: ${absolutePath}` };
157
202
  }
@@ -162,8 +207,11 @@ export class PluginManager {
162
207
  }
163
208
  const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
164
209
  const packageName = pkg.name;
210
+ if (!isValidPluginKey(packageName)) {
211
+ return { success: false, error: `Invalid package.json: name is missing or invalid` };
212
+ }
165
213
  // Check if already installed
166
- if (this.manifest.plugins[packageName]) {
214
+ if (Object.hasOwn(this.manifest.plugins, packageName)) {
167
215
  return {
168
216
  success: false,
169
217
  error: `Plugin ${packageName} is already installed`,
@@ -202,7 +250,12 @@ export class PluginManager {
202
250
  if (!this.manifest) {
203
251
  await this.initialize();
204
252
  }
205
- const plugin = this.manifest.plugins[packageName];
253
+ if (!isValidPluginKey(packageName)) {
254
+ return { success: false, error: `Invalid package name` };
255
+ }
256
+ const plugin = Object.hasOwn(this.manifest.plugins, packageName)
257
+ ? this.manifest.plugins[packageName]
258
+ : undefined;
206
259
  if (!plugin) {
207
260
  return { success: false, error: `Plugin ${packageName} is not installed` };
208
261
  }
@@ -210,7 +263,7 @@ export class PluginManager {
210
263
  // For npm-installed plugins, remove from node_modules
211
264
  if (plugin.source === 'npm') {
212
265
  validatePackageName(packageName);
213
- await execFileAsync('npm', ['uninstall', '--prefix', this.config.pluginsDir, packageName], { timeout: 60000 });
266
+ await execFileAsync('npm', ['uninstall', '--ignore-scripts', '--prefix', this.config.pluginsDir, packageName], { timeout: 60000 });
214
267
  }
215
268
  // Remove from manifest
216
269
  delete this.manifest.plugins[packageName];
@@ -234,7 +287,12 @@ export class PluginManager {
234
287
  if (!this.manifest) {
235
288
  await this.initialize();
236
289
  }
237
- const plugin = this.manifest.plugins[packageName];
290
+ if (!isValidPluginKey(packageName)) {
291
+ return { success: false, error: `Invalid package name` };
292
+ }
293
+ const plugin = Object.hasOwn(this.manifest.plugins, packageName)
294
+ ? this.manifest.plugins[packageName]
295
+ : undefined;
238
296
  if (!plugin) {
239
297
  return { success: false, error: `Plugin ${packageName} is not installed` };
240
298
  }
@@ -249,7 +307,12 @@ export class PluginManager {
249
307
  if (!this.manifest) {
250
308
  await this.initialize();
251
309
  }
252
- const plugin = this.manifest.plugins[packageName];
310
+ if (!isValidPluginKey(packageName)) {
311
+ return { success: false, error: `Invalid package name` };
312
+ }
313
+ const plugin = Object.hasOwn(this.manifest.plugins, packageName)
314
+ ? this.manifest.plugins[packageName]
315
+ : undefined;
253
316
  if (!plugin) {
254
317
  return { success: false, error: `Plugin ${packageName} is not installed` };
255
318
  }
@@ -264,7 +327,12 @@ export class PluginManager {
264
327
  if (!this.manifest) {
265
328
  await this.initialize();
266
329
  }
267
- const plugin = this.manifest.plugins[packageName];
330
+ if (!isValidPluginKey(packageName)) {
331
+ return { success: false, error: `Invalid package name` };
332
+ }
333
+ const plugin = Object.hasOwn(this.manifest.plugins, packageName)
334
+ ? this.manifest.plugins[packageName]
335
+ : undefined;
268
336
  if (!plugin) {
269
337
  return { success: false, error: `Plugin ${packageName} is not installed` };
270
338
  }
@@ -298,7 +366,9 @@ export class PluginManager {
298
366
  if (!this.manifest) {
299
367
  await this.initialize();
300
368
  }
301
- return packageName in this.manifest.plugins;
369
+ if (!isValidPluginKey(packageName))
370
+ return false;
371
+ return Object.hasOwn(this.manifest.plugins, packageName);
302
372
  }
303
373
  /**
304
374
  * Get a specific installed plugin
@@ -307,7 +377,11 @@ export class PluginManager {
307
377
  if (!this.manifest) {
308
378
  await this.initialize();
309
379
  }
310
- return this.manifest.plugins[packageName];
380
+ if (!isValidPluginKey(packageName))
381
+ return undefined;
382
+ return Object.hasOwn(this.manifest.plugins, packageName)
383
+ ? this.manifest.plugins[packageName]
384
+ : undefined;
311
385
  }
312
386
  // =========================================================================
313
387
  // Upgrade
@@ -319,7 +393,20 @@ export class PluginManager {
319
393
  if (!this.manifest) {
320
394
  await this.initialize();
321
395
  }
322
- const existing = this.manifest.plugins[packageName];
396
+ if (!isValidPluginKey(packageName)) {
397
+ return { success: false, error: `Invalid package name` };
398
+ }
399
+ if (version) {
400
+ try {
401
+ validateVersion(version);
402
+ }
403
+ catch {
404
+ return { success: false, error: `Invalid version specifier: ${version}` };
405
+ }
406
+ }
407
+ const existing = Object.hasOwn(this.manifest.plugins, packageName)
408
+ ? this.manifest.plugins[packageName]
409
+ : undefined;
323
410
  if (!existing) {
324
411
  return { success: false, error: `Plugin ${packageName} is not installed` };
325
412
  }
@@ -330,8 +417,9 @@ export class PluginManager {
330
417
  const versionSpec = version ? `${packageName}@${version}` : `${packageName}@latest`;
331
418
  // Validate package name to prevent injection (S-3)
332
419
  validatePackageName(versionSpec);
333
- // Reinstall with new version (array form prevents shell injection)
334
- await execFileAsync('npm', ['install', '--prefix', this.config.pluginsDir, versionSpec], { timeout: 120000 });
420
+ // Reinstall with new version. --ignore-scripts blocks pre/post-install
421
+ // lifecycle hooks from the plugin package.
422
+ await execFileAsync('npm', ['install', '--ignore-scripts', '--prefix', this.config.pluginsDir, versionSpec], { timeout: 120000 });
335
423
  // Update manifest
336
424
  const installDir = path.join(this.config.pluginsDir, 'node_modules');
337
425
  const packageJsonPath = path.join(installDir, packageName, 'package.json');
@@ -360,7 +448,12 @@ export class PluginManager {
360
448
  if (!this.manifest) {
361
449
  await this.initialize();
362
450
  }
363
- const plugin = this.manifest.plugins[packageName];
451
+ if (!isValidPluginKey(packageName)) {
452
+ return { success: false, error: `Invalid package name` };
453
+ }
454
+ const plugin = Object.hasOwn(this.manifest.plugins, packageName)
455
+ ? this.manifest.plugins[packageName]
456
+ : undefined;
364
457
  if (!plugin) {
365
458
  return { success: false, error: `Plugin ${packageName} is not installed` };
366
459
  }
@@ -54,7 +54,7 @@ export declare class PluginDiscoveryService {
54
54
  */
55
55
  private getDemoPluginsWithStats;
56
56
  /**
57
- * Verify registry signature
57
+ * Verify registry signature using real Ed25519
58
58
  */
59
59
  private verifyRegistrySignature;
60
60
  /**
@@ -104,8 +104,8 @@ export class PluginDiscoveryService {
104
104
  };
105
105
  }
106
106
  console.log(`[PluginDiscovery] Resolving ${registry.name} via IPNS...`);
107
- // Check cache first
108
- const cached = this.cache.get(registry.ipnsName);
107
+ // Check cache first — key by registry.name (not ipnsName which can be shared)
108
+ const cached = this.cache.get(registry.name);
109
109
  if (cached && Date.now() - cached.timestamp < this.config.cacheExpiry) {
110
110
  console.log(`[PluginDiscovery] Cache hit for ${registry.name}`);
111
111
  return {
@@ -138,15 +138,17 @@ export class PluginDiscoveryService {
138
138
  if (!registryData) {
139
139
  return this.createDemoRegistryAsync(registry);
140
140
  }
141
- // Verify registry signature if required
141
+ // Verify registry signature if required — treat failure as fatal to prevent
142
+ // a tampered registry from being served when requireVerification is enabled.
142
143
  if (this.config.requireVerification && registryData.registrySignature) {
143
- const verified = this.verifyRegistrySignature(registryData, registry.publicKey);
144
+ const verified = await this.verifyRegistrySignature(registryData, registry.publicKey);
144
145
  if (!verified) {
145
- console.warn(`[PluginDiscovery] Registry signature verification failed`);
146
+ console.error(`[PluginDiscovery] Registry signature verification failed — falling back to demo registry`);
147
+ return this.createDemoRegistryAsync(registry);
146
148
  }
147
149
  }
148
- // Cache the result
149
- this.cache.set(registry.ipnsName, {
150
+ // Cache the result — key by registry.name so separate registries don't share a slot
151
+ this.cache.set(registry.name, {
150
152
  registry: registryData,
151
153
  timestamp: Date.now(),
152
154
  });
@@ -197,17 +199,17 @@ export class PluginDiscoveryService {
197
199
  totalPlugins: plugins.length,
198
200
  totalDownloads: plugins.reduce((sum, p) => sum + p.downloads, 0),
199
201
  totalAuthors: 1,
200
- featured: ['@monoes/plugin-agentic-qe', '@monoes/plugin-prime-radiant', '@monoes/security', '@monoes/claims', '@monoes/teammate-plugin'],
201
- trending: ['@monoes/plugin-agentic-qe', '@monoes/plugin-prime-radiant'],
202
- newest: ['@monoes/plugin-agentic-qe', '@monoes/plugin-prime-radiant'],
203
- official: ['@monoes/plugin-agentic-qe', '@monoes/plugin-prime-radiant', '@monoes/security', '@monoes/claims'],
202
+ featured: ['@monomind/plugin-agentic-qe', '@monomind/plugin-prime-radiant', '@monomind/security', '@monomind/claims', '@monomind/teammate-plugin'],
203
+ trending: ['@monomind/plugin-agentic-qe', '@monomind/plugin-prime-radiant'],
204
+ newest: ['@monomind/plugin-agentic-qe', '@monomind/plugin-prime-radiant'],
205
+ official: ['@monomind/plugin-agentic-qe', '@monomind/plugin-prime-radiant', '@monomind/security', '@monomind/claims'],
204
206
  compatibilityMatrix: [
205
- { pluginId: '@monoes/neural', pluginVersion: '3.0.0', monomindVersions: ['3.x'], tested: true },
206
- { pluginId: '@monoes/security', pluginVersion: '3.0.0', monomindVersions: ['3.x'], tested: true },
207
+ { pluginId: '@monomind/neural', pluginVersion: '3.0.0', monomindVersions: ['3.x'], tested: true },
208
+ { pluginId: '@monomind/security', pluginVersion: '3.0.0', monomindVersions: ['3.x'], tested: true },
207
209
  ],
208
210
  };
209
211
  // Cache the demo registry
210
- this.cache.set(registry.ipnsName, {
212
+ this.cache.set(registry.name, {
211
213
  registry: demoRegistry,
212
214
  timestamp: Date.now(),
213
215
  });
@@ -242,8 +244,8 @@ export class PluginDiscoveryService {
242
244
  };
243
245
  return [
244
246
  {
245
- id: '@monoes/neural',
246
- name: '@monoes/neural',
247
+ id: '@monomind/neural',
248
+ name: '@monomind/neural',
247
249
  displayName: 'Neural Patterns',
248
250
  description: 'Neural pattern training and inference with WASM SIMD acceleration, MoE routing, and Flash Attention optimization',
249
251
  version: '3.0.0',
@@ -261,7 +263,7 @@ export class PluginDiscoveryService {
261
263
  lastUpdated: baseTime,
262
264
  createdAt: '2024-01-01T00:00:00Z',
263
265
  minMonomindVersion: '3.0.0',
264
- dependencies: [{ name: '@monoes/core', version: '^3.0.0' }],
266
+ dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
265
267
  type: 'core',
266
268
  hooks: ['neural:train', 'neural:inference', 'pattern:learn'],
267
269
  commands: ['neural train', 'neural predict', 'neural patterns'],
@@ -271,8 +273,8 @@ export class PluginDiscoveryService {
271
273
  trustLevel: 'official',
272
274
  },
273
275
  {
274
- id: '@monoes/security',
275
- name: '@monoes/security',
276
+ id: '@monomind/security',
277
+ name: '@monomind/security',
276
278
  displayName: 'Security Scanner',
277
279
  description: 'Security scanning, CVE detection, and compliance auditing with threat modeling',
278
280
  version: '3.0.0',
@@ -290,7 +292,7 @@ export class PluginDiscoveryService {
290
292
  lastUpdated: baseTime,
291
293
  createdAt: '2024-01-15T00:00:00Z',
292
294
  minMonomindVersion: '3.0.0',
293
- dependencies: [{ name: '@monoes/core', version: '^3.0.0' }],
295
+ dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
294
296
  type: 'command',
295
297
  hooks: ['security:scan', 'security:audit'],
296
298
  commands: ['security scan', 'security audit', 'security cve', 'security threats'],
@@ -307,8 +309,8 @@ export class PluginDiscoveryService {
307
309
  },
308
310
  },
309
311
  {
310
- id: '@monoes/embeddings',
311
- name: '@monoes/embeddings',
312
+ id: '@monomind/embeddings',
313
+ name: '@monomind/embeddings',
312
314
  displayName: 'Vector Embeddings',
313
315
  description: 'Vector embeddings service with sql.js, document chunking, and hyperbolic embeddings',
314
316
  version: '3.0.0',
@@ -327,7 +329,7 @@ export class PluginDiscoveryService {
327
329
  createdAt: '2024-02-01T00:00:00Z',
328
330
  minMonomindVersion: '3.0.0',
329
331
  dependencies: [
330
- { name: '@monoes/core', version: '^3.0.0' },
332
+ { name: '@monomind/core', version: '^3.0.0' },
331
333
  { name: 'sql.js', version: '^1.8.0' },
332
334
  ],
333
335
  type: 'core',
@@ -339,8 +341,8 @@ export class PluginDiscoveryService {
339
341
  trustLevel: 'official',
340
342
  },
341
343
  {
342
- id: '@monoes/claims',
343
- name: '@monoes/claims',
344
+ id: '@monomind/claims',
345
+ name: '@monomind/claims',
344
346
  displayName: 'Claims Authorization',
345
347
  description: 'Claims-based authorization system for fine-grained access control',
346
348
  version: '3.0.0',
@@ -358,7 +360,7 @@ export class PluginDiscoveryService {
358
360
  lastUpdated: baseTime,
359
361
  createdAt: '2024-02-15T00:00:00Z',
360
362
  minMonomindVersion: '3.0.0',
361
- dependencies: [{ name: '@monoes/core', version: '^3.0.0' }],
363
+ dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
362
364
  type: 'core',
363
365
  hooks: ['claims:check', 'claims:grant'],
364
366
  commands: ['claims check', 'claims grant', 'claims revoke', 'claims list'],
@@ -368,8 +370,8 @@ export class PluginDiscoveryService {
368
370
  trustLevel: 'official',
369
371
  },
370
372
  {
371
- id: '@monoes/performance',
372
- name: '@monoes/performance',
373
+ id: '@monomind/performance',
374
+ name: '@monomind/performance',
373
375
  displayName: 'Performance Profiler',
374
376
  description: 'Performance profiling, benchmarking, and optimization recommendations',
375
377
  version: '3.0.0',
@@ -387,7 +389,7 @@ export class PluginDiscoveryService {
387
389
  lastUpdated: baseTime,
388
390
  createdAt: '2024-03-01T00:00:00Z',
389
391
  minMonomindVersion: '3.0.0',
390
- dependencies: [{ name: '@monoes/core', version: '^3.0.0' }],
392
+ dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
391
393
  type: 'command',
392
394
  hooks: ['performance:start', 'performance:stop'],
393
395
  commands: ['performance benchmark', 'performance profile', 'performance metrics'],
@@ -416,7 +418,7 @@ export class PluginDiscoveryService {
416
418
  lastUpdated: baseTime,
417
419
  createdAt: '2024-06-01T00:00:00Z',
418
420
  minMonomindVersion: '3.0.0',
419
- dependencies: [{ name: '@monoes/core', version: '^3.0.0' }],
421
+ dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
420
422
  type: 'integration',
421
423
  hooks: ['analytics:track', 'analytics:report'],
422
424
  commands: ['analytics dashboard', 'analytics export'],
@@ -445,7 +447,7 @@ export class PluginDiscoveryService {
445
447
  lastUpdated: baseTime,
446
448
  createdAt: '2024-08-01T00:00:00Z',
447
449
  minMonomindVersion: '3.0.0',
448
- dependencies: [{ name: '@monoes/core', version: '^3.0.0' }],
450
+ dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
449
451
  type: 'agent',
450
452
  hooks: ['agent:spawn', 'agent:complete'],
451
453
  commands: ['agents custom list', 'agents custom spawn'],
@@ -475,7 +477,7 @@ export class PluginDiscoveryService {
475
477
  createdAt: '2024-09-01T00:00:00Z',
476
478
  minMonomindVersion: '3.0.0',
477
479
  dependencies: [
478
- { name: '@monoes/core', version: '^3.0.0' },
480
+ { name: '@monomind/core', version: '^3.0.0' },
479
481
  { name: '@slack/web-api', version: '^6.0.0' },
480
482
  ],
481
483
  type: 'integration',
@@ -488,8 +490,8 @@ export class PluginDiscoveryService {
488
490
  },
489
491
  // Plugin SDK - Unified Plugin SDK for creating plugins
490
492
  {
491
- id: '@monoes/plugins',
492
- name: '@monoes/plugins',
493
+ id: '@monomind/plugins',
494
+ name: '@monomind/plugins',
493
495
  displayName: 'Plugin SDK',
494
496
  description: 'Unified Plugin SDK for Monomind - Worker, Hook, and Provider Integration. Create, test, and publish MonoMind plugins.',
495
497
  version: '3.0.0-alpha.2',
@@ -508,7 +510,7 @@ export class PluginDiscoveryService {
508
510
  createdAt: '2024-04-01T00:00:00Z',
509
511
  minMonomindVersion: '3.0.0',
510
512
  dependencies: [
511
- { name: '@monoes/core', version: '^3.0.0' },
513
+ { name: '@monomind/core', version: '^3.0.0' },
512
514
  ],
513
515
  type: 'core',
514
516
  hooks: [
@@ -533,8 +535,8 @@ export class PluginDiscoveryService {
533
535
  },
534
536
  // Agentic QE - AI-powered quality engineering
535
537
  {
536
- id: '@monoes/plugin-agentic-qe',
537
- name: '@monoes/plugin-agentic-qe',
538
+ id: '@monomind/plugin-agentic-qe',
539
+ name: '@monomind/plugin-agentic-qe',
538
540
  displayName: 'Agentic Quality Engineering',
539
541
  description: 'AI-powered quality engineering with 58 agents that write tests, find bugs, predict defects, scan security, and perform chaos engineering safely.',
540
542
  version: '3.0.0-alpha.3',
@@ -553,7 +555,7 @@ export class PluginDiscoveryService {
553
555
  createdAt: '2026-01-20T00:00:00Z',
554
556
  minMonomindVersion: '3.0.0',
555
557
  dependencies: [
556
- { name: '@monoes/core', version: '^3.0.0' },
558
+ { name: '@monomind/core', version: '^3.0.0' },
557
559
  ],
558
560
  type: 'integration',
559
561
  hooks: [
@@ -593,8 +595,8 @@ export class PluginDiscoveryService {
593
595
  },
594
596
  // Prime Radiant - Mathematical coherence and consensus verification
595
597
  {
596
- id: '@monoes/plugin-prime-radiant',
597
- name: '@monoes/plugin-prime-radiant',
598
+ id: '@monomind/plugin-prime-radiant',
599
+ name: '@monomind/plugin-prime-radiant',
598
600
  displayName: 'Prime Radiant',
599
601
  description: 'Mathematical AI that catches contradictions, verifies consensus, prevents hallucinations, and analyzes swarm stability using sheaf cohomology and spectral graph theory.',
600
602
  version: '0.1.5',
@@ -613,7 +615,7 @@ export class PluginDiscoveryService {
613
615
  createdAt: '2026-01-20T00:00:00Z',
614
616
  minMonomindVersion: '3.0.0',
615
617
  dependencies: [
616
- { name: '@monoes/core', version: '^3.0.0' },
618
+ { name: '@monomind/core', version: '^3.0.0' },
617
619
  ],
618
620
  type: 'integration',
619
621
  hooks: [
@@ -651,8 +653,8 @@ export class PluginDiscoveryService {
651
653
  },
652
654
  // Gas Town Bridge - Multi-agent orchestrator integration
653
655
  {
654
- id: '@monoes/plugin-gastown-bridge',
655
- name: '@monoes/plugin-gastown-bridge',
656
+ id: '@monomind/plugin-gastown-bridge',
657
+ name: '@monomind/plugin-gastown-bridge',
656
658
  displayName: 'Gas Town Bridge',
657
659
  description: 'Gas Town orchestrator integration with WASM-accelerated formula parsing, Beads sync, convoy management, and graph analysis (352x faster).',
658
660
  version: '0.1.0',
@@ -670,7 +672,7 @@ export class PluginDiscoveryService {
670
672
  lastUpdated: baseTime,
671
673
  createdAt: '2026-01-24T00:00:00Z',
672
674
  minMonomindVersion: '3.0.0',
673
- dependencies: [{ name: '@monoes/core', version: '^3.0.0' }],
675
+ dependencies: [{ name: '@monomind/core', version: '^3.0.0' }],
674
676
  type: 'integration',
675
677
  hooks: ['gastown:sync', 'gastown:formula', 'gastown:convoy'],
676
678
  commands: ['gastown beads', 'gastown convoy', 'gastown formula', 'gastown sync'],
@@ -688,8 +690,8 @@ export class PluginDiscoveryService {
688
690
  },
689
691
  // Teammate Plugin - Claude Code v2.1.19+ integration
690
692
  {
691
- id: '@monoes/teammate-plugin',
692
- name: '@monoes/teammate-plugin',
693
+ id: '@monomind/teammate-plugin',
694
+ name: '@monomind/teammate-plugin',
693
695
  displayName: 'Teammate Plugin',
694
696
  description: 'Native TeammateTool integration for Claude Code v2.1.19+. Multi-agent team orchestration with plan approval workflows, delegation, messaging, and BMSSP-optimized topology routing. 21 MCP tools.',
695
697
  version: '1.0.0-alpha.1',
@@ -708,7 +710,7 @@ export class PluginDiscoveryService {
708
710
  createdAt: '2026-01-25T00:00:00Z',
709
711
  minMonomindVersion: '3.0.0',
710
712
  dependencies: [
711
- { name: '@monoes/core', version: '^3.0.0' },
713
+ { name: '@monomind/core', version: '^3.0.0' },
712
714
  { name: 'eventemitter3', version: '^5.0.1' },
713
715
  ],
714
716
  type: 'integration',
@@ -735,17 +737,17 @@ export class PluginDiscoveryService {
735
737
  const basePlugins = this.getDemoPlugins();
736
738
  // Only fetch stats for real npm packages
737
739
  const realNpmPackages = [
738
- '@monoes/plugin-agentic-qe',
739
- '@monoes/plugin-prime-radiant',
740
- '@monoes/claims',
741
- '@monoes/security',
742
- '@monoes/plugins',
743
- '@monoes/embeddings',
744
- '@monoes/neural',
745
- '@monoes/performance',
746
- '@monoes/teammate-plugin',
740
+ '@monomind/plugin-agentic-qe',
741
+ '@monomind/plugin-prime-radiant',
742
+ '@monomind/claims',
743
+ '@monomind/security',
744
+ '@monomind/plugins',
745
+ '@monomind/embeddings',
746
+ '@monomind/neural',
747
+ '@monomind/performance',
748
+ '@monomind/teammate-plugin',
747
749
  // Gas Town Bridge
748
- '@monoes/plugin-gastown-bridge',
750
+ '@monomind/plugin-gastown-bridge',
749
751
  ];
750
752
  // Fetch stats in parallel
751
753
  const statsPromises = realNpmPackages.map(pkg => fetchNpmStats(pkg));
@@ -784,14 +786,30 @@ export class PluginDiscoveryService {
784
786
  });
785
787
  }
786
788
  /**
787
- * Verify registry signature
789
+ * Verify registry signature using real Ed25519
788
790
  */
789
- verifyRegistrySignature(registry, expectedPublicKey) {
790
- if (!registry.registrySignature || !registry.registryPublicKey) {
791
+ async verifyRegistrySignature(registry, expectedPublicKey) {
792
+ if (!registry.registrySignature || !registry.registryPublicKey)
793
+ return false;
794
+ if (registry.registryPublicKey !== expectedPublicKey)
795
+ return false;
796
+ const sigHex = registry.registrySignature.replace(/^ed25519:/, '');
797
+ const pubKeyHex = registry.registryPublicKey.replace(/^ed25519:/, '');
798
+ if (sigHex.length !== 128 || pubKeyHex.length !== 64)
799
+ return false;
800
+ const content = JSON.stringify({
801
+ version: registry.version,
802
+ updatedAt: registry.updatedAt,
803
+ plugins: registry.plugins.map(p => ({ id: p.id, cid: p.cid, checksum: p.checksum, version: p.version })),
804
+ totalPlugins: registry.totalPlugins,
805
+ });
806
+ try {
807
+ const ed = await import('@noble/ed25519');
808
+ return await ed.verifyAsync(Buffer.from(sigHex, 'hex'), Buffer.from(content), Buffer.from(pubKeyHex, 'hex'));
809
+ }
810
+ catch {
791
811
  return false;
792
812
  }
793
- // In production: Verify Ed25519 signature
794
- return registry.registryPublicKey.startsWith(expectedPublicKey.split(':')[0]);
795
813
  }
796
814
  /**
797
815
  * List available registries
@@ -6,7 +6,7 @@
6
6
  * - Open: Failing fast, not calling service
7
7
  * - Half-Open: Testing if service recovered
8
8
  *
9
- * @module @monoes/cli/production/circuit-breaker
9
+ * @module @monomind/cli/production/circuit-breaker
10
10
  */
11
11
  // ============================================================================
12
12
  // Default Configuration
@@ -115,6 +115,9 @@ export class CircuitBreaker {
115
115
  // If half-open and we fail, go back to open
116
116
  if (this.state === 'half-open') {
117
117
  this.transitionTo('open');
118
+ if (this.config.onOpen) {
119
+ this.config.onOpen(this.failures.length);
120
+ }
118
121
  }
119
122
  }
120
123
  /**
@@ -210,11 +213,15 @@ export class CircuitBreaker {
210
213
  // Circuit Breaker Registry
211
214
  // ============================================================================
212
215
  const circuitBreakers = new Map();
216
+ const MAX_CIRCUIT_BREAKERS = 1000;
213
217
  /**
214
218
  * Get or create a circuit breaker by name
215
219
  */
216
220
  export function getCircuitBreaker(name, config) {
217
221
  if (!circuitBreakers.has(name)) {
222
+ if (circuitBreakers.size >= MAX_CIRCUIT_BREAKERS) {
223
+ throw new Error(`Circuit breaker registry full (max ${MAX_CIRCUIT_BREAKERS})`);
224
+ }
218
225
  circuitBreakers.set(name, new CircuitBreaker(config));
219
226
  }
220
227
  return circuitBreakers.get(name);