monomind 1.10.47 → 1.10.55

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 (414) hide show
  1. package/.claude/agents/optimization/benchmark-suite.md +2 -0
  2. package/.claude/agents/optimization/load-balancer.md +2 -0
  3. package/.claude/agents/optimization/performance-monitor.md +2 -0
  4. package/.claude/agents/optimization/resource-allocator.md +3 -1
  5. package/.claude/agents/optimization/topology-optimizer.md +2 -0
  6. package/.claude/commands/mastermind/_repeat.md +21 -0
  7. package/.claude/commands/mastermind/_taskfile.md +235 -0
  8. package/.claude/commands/mastermind/adr.md +11 -0
  9. package/.claude/commands/mastermind/approve.md +94 -0
  10. package/.claude/commands/mastermind/autodev.md +32 -0
  11. package/.claude/commands/mastermind/budget.md +7 -0
  12. package/.claude/commands/mastermind/code-review.md +317 -0
  13. package/.claude/commands/mastermind/createorg.md +40 -1
  14. package/.claude/commands/mastermind/createtask.md +383 -0
  15. package/.claude/commands/mastermind/debug.md +22 -0
  16. package/.claude/commands/mastermind/design.md +20 -0
  17. package/.claude/commands/mastermind/do.md +526 -0
  18. package/.claude/commands/mastermind/execute.md +20 -0
  19. package/.claude/commands/mastermind/finish.md +20 -0
  20. package/.claude/commands/mastermind/graph-status.md +7 -0
  21. package/.claude/commands/mastermind/help.md +118 -0
  22. package/.claude/commands/mastermind/ideate.md +261 -0
  23. package/.claude/commands/mastermind/improve.md +345 -0
  24. package/.claude/commands/mastermind/loops.md +7 -0
  25. package/.claude/commands/mastermind/master.md +186 -6
  26. package/.claude/commands/mastermind/memory.md +230 -0
  27. package/.claude/commands/mastermind/plan.md +26 -0
  28. package/.claude/commands/mastermind/receive-review.md +20 -0
  29. package/.claude/commands/mastermind/repeat.md +257 -0
  30. package/.claude/commands/mastermind/runorg.md +3 -0
  31. package/.claude/commands/mastermind/skill-builder.md +20 -0
  32. package/.claude/commands/mastermind/specialagents.md +125 -0
  33. package/.claude/commands/mastermind/swarm.md +161 -0
  34. package/.claude/commands/mastermind/taskdev.md +26 -0
  35. package/.claude/commands/mastermind/tdd.md +22 -0
  36. package/.claude/commands/mastermind/techport.md +4 -0
  37. package/.claude/commands/mastermind/understand.md +139 -0
  38. package/.claude/commands/mastermind/verify.md +22 -0
  39. package/.claude/commands/mastermind/worktree.md +20 -0
  40. package/.claude/commands/monomind/do.md +52 -0
  41. package/.claude/commands/monomind/improve.md +2 -0
  42. package/.claude/helpers/handlers/graph-status-handler.cjs +2 -1
  43. package/.claude/helpers/handlers/route-handler.cjs +61 -11
  44. package/.claude/helpers/hook-handler.cjs +19 -0
  45. package/.claude/helpers/skill-registry.json +122 -51
  46. package/.claude/helpers/statusline.cjs +1 -1
  47. package/.claude/scheduled_tasks.lock +1 -0
  48. package/.claude/skills/agent-browser-testing/SKILL.md +522 -152
  49. package/.claude/skills/github-issue-triage/SKILL.md +354 -0
  50. package/.claude/skills/github-repo-recap/SKILL.md +207 -0
  51. package/.claude/skills/mastermind/_delegation.md +83 -0
  52. package/.claude/skills/mastermind/_protocol.md +14 -0
  53. package/.claude/skills/mastermind/approve.md +15 -7
  54. package/.claude/skills/mastermind/autodev.md +534 -0
  55. package/.claude/skills/mastermind/createorg.md +21 -5
  56. package/.claude/skills/mastermind/debug.md +232 -0
  57. package/.claude/skills/mastermind/design.md +187 -0
  58. package/.claude/skills/mastermind/execute.md +104 -0
  59. package/.claude/skills/mastermind/finish.md +251 -0
  60. package/.claude/skills/mastermind/plan.md +180 -0
  61. package/.claude/skills/mastermind/receive-review.md +213 -0
  62. package/.claude/skills/mastermind/runorg.md +23 -8
  63. package/.claude/skills/mastermind/skill-builder.md +274 -0
  64. package/.claude/skills/mastermind/taskdev.md +307 -0
  65. package/.claude/skills/mastermind/tdd.md +394 -0
  66. package/.claude/skills/mastermind/verify.md +196 -0
  67. package/.claude/skills/mastermind/worktree.md +160 -132
  68. package/.claude-plugin/docs/QUICKSTART.md +0 -3
  69. package/.claude-plugin/docs/STRUCTURE.md +1 -5
  70. package/.claude-plugin/scripts/verify.sh +0 -6
  71. package/README.md +320 -253
  72. package/package.json +1 -1
  73. package/packages/@monomind/cli/README.md +320 -253
  74. package/packages/@monomind/cli/dist/src/commands/analyze.js +9 -2
  75. package/packages/@monomind/cli/dist/src/commands/completions.js +1 -1
  76. package/packages/@monomind/cli/dist/src/commands/guidance.js +7 -7
  77. package/packages/@monomind/cli/dist/src/commands/hooks.js +16 -3
  78. package/packages/@monomind/cli/dist/src/commands/index.d.ts +3 -2
  79. package/packages/@monomind/cli/dist/src/commands/index.js +7 -0
  80. package/packages/@monomind/cli/dist/src/commands/init.js +47 -13
  81. package/packages/@monomind/cli/dist/src/commands/neural.js +100 -14
  82. package/packages/@monomind/cli/dist/src/commands/platforms.d.ts +11 -0
  83. package/packages/@monomind/cli/dist/src/commands/platforms.js +195 -0
  84. package/packages/@monomind/cli/dist/src/commands/update.js +6 -6
  85. package/packages/@monomind/cli/dist/src/init/executor.js +28 -0
  86. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +1 -1
  87. package/packages/@monomind/cli/dist/src/init/types.d.ts +1 -0
  88. package/packages/@monomind/cli/dist/src/mcp-server.js +92 -0
  89. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +52 -0
  90. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +106 -5
  91. package/packages/@monomind/cli/dist/src/mcp-tools/index.d.ts +0 -5
  92. package/packages/@monomind/cli/dist/src/mcp-tools/index.js +0 -5
  93. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +507 -5587
  94. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +64 -4
  95. package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.js +4 -4
  96. package/packages/@monomind/cli/dist/src/memory/intelligence.d.ts +2 -2
  97. package/packages/@monomind/cli/dist/src/memory/intelligence.js +108 -3
  98. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +1 -1
  99. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.d.ts +1 -10
  100. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +0 -46
  101. package/packages/@monomind/cli/dist/src/runtime/headless.js +3 -3
  102. package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.d.ts +0 -2
  103. package/packages/@monomind/cli/dist/src/ruvector/diff-classifier.js +2 -14
  104. package/packages/@monomind/cli/dist/src/ruvector/index.d.ts +26 -9
  105. package/packages/@monomind/cli/dist/src/ruvector/index.js +3 -21
  106. package/packages/@monomind/cli/dist/src/ruvector/ruvllm-wasm.js +2 -2
  107. package/packages/@monomind/cli/dist/src/types.d.ts +0 -15
  108. package/packages/@monomind/cli/dist/src/types.js +0 -18
  109. package/packages/@monomind/cli/dist/src/update/index.js +1 -1
  110. package/packages/@monomind/cli/dist/src/update/validator.js +8 -8
  111. package/packages/@monomind/cli/package.json +2 -2
  112. package/scripts/generate-agent-avatars.mjs +500 -0
  113. package/.claude/agents/academic/academic-anthropologist.md +0 -126
  114. package/.claude/agents/academic/academic-geographer.md +0 -128
  115. package/.claude/agents/academic/academic-historian.md +0 -124
  116. package/.claude/agents/academic/academic-narratologist.md +0 -119
  117. package/.claude/agents/academic/academic-psychologist.md +0 -119
  118. package/.claude/agents/analysis/analyze-code-quality.md +0 -58
  119. package/.claude/agents/analysis/code-analyzer.md +0 -189
  120. package/.claude/agents/analysis/code-review/analyze-code-quality.md +0 -58
  121. package/.claude/agents/consensus/performance-benchmarker.md +0 -831
  122. package/.claude/agents/data/ml/data-ml-model.md +0 -76
  123. package/.claude/agents/development/dev-backend-api.md +0 -178
  124. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +0 -52
  125. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +0 -63
  126. package/.claude/agents/game-development/blender/blender-addon-engineer.md +0 -235
  127. package/.claude/agents/game-development/game-audio-engineer.md +0 -265
  128. package/.claude/agents/game-development/game-designer.md +0 -168
  129. package/.claude/agents/game-development/godot/godot-gameplay-scripter.md +0 -335
  130. package/.claude/agents/game-development/godot/godot-multiplayer-engineer.md +0 -298
  131. package/.claude/agents/game-development/godot/godot-shader-developer.md +0 -267
  132. package/.claude/agents/game-development/level-designer.md +0 -209
  133. package/.claude/agents/game-development/narrative-designer.md +0 -244
  134. package/.claude/agents/game-development/roblox-studio/roblox-avatar-creator.md +0 -298
  135. package/.claude/agents/game-development/roblox-studio/roblox-experience-designer.md +0 -306
  136. package/.claude/agents/game-development/roblox-studio/roblox-systems-scripter.md +0 -326
  137. package/.claude/agents/game-development/technical-artist.md +0 -230
  138. package/.claude/agents/game-development/unity/unity-architect.md +0 -272
  139. package/.claude/agents/game-development/unity/unity-editor-tool-developer.md +0 -311
  140. package/.claude/agents/game-development/unity/unity-multiplayer-engineer.md +0 -322
  141. package/.claude/agents/game-development/unity/unity-shader-graph-artist.md +0 -270
  142. package/.claude/agents/game-development/unreal-engine/unreal-multiplayer-architect.md +0 -314
  143. package/.claude/agents/game-development/unreal-engine/unreal-systems-engineer.md +0 -311
  144. package/.claude/agents/game-development/unreal-engine/unreal-technical-artist.md +0 -257
  145. package/.claude/agents/game-development/unreal-engine/unreal-world-builder.md +0 -274
  146. package/.claude/agents/github/release-swarm.md +0 -597
  147. package/.claude/agents/goal/agent.md +0 -804
  148. package/.claude/agents/goal/code-goal-planner.md +0 -445
  149. package/.claude/agents/marketing/marketing-ai-citation-strategist.md +0 -171
  150. package/.claude/agents/marketing/marketing-app-store-optimizer.md +0 -322
  151. package/.claude/agents/marketing/marketing-baidu-seo-specialist.md +0 -227
  152. package/.claude/agents/marketing/marketing-bilibili-content-strategist.md +0 -200
  153. package/.claude/agents/marketing/marketing-book-co-author.md +0 -111
  154. package/.claude/agents/marketing/marketing-carousel-growth-engine.md +0 -200
  155. package/.claude/agents/marketing/marketing-china-ecommerce-operator.md +0 -284
  156. package/.claude/agents/marketing/marketing-content-creator.md +0 -67
  157. package/.claude/agents/marketing/marketing-cross-border-ecommerce.md +0 -260
  158. package/.claude/agents/marketing/marketing-douyin-strategist.md +0 -150
  159. package/.claude/agents/marketing/marketing-growth-hacker.md +0 -54
  160. package/.claude/agents/marketing/marketing-instagram-curator.md +0 -114
  161. package/.claude/agents/marketing/marketing-kuaishou-strategist.md +0 -224
  162. package/.claude/agents/marketing/marketing-linkedin-content-creator.md +0 -215
  163. package/.claude/agents/marketing/marketing-livestream-commerce-coach.md +0 -306
  164. package/.claude/agents/marketing/marketing-podcast-strategist.md +0 -278
  165. package/.claude/agents/marketing/marketing-private-domain-operator.md +0 -309
  166. package/.claude/agents/marketing/marketing-reddit-community-builder.md +0 -124
  167. package/.claude/agents/marketing/marketing-seo-specialist.md +0 -279
  168. package/.claude/agents/marketing/marketing-short-video-editing-coach.md +0 -413
  169. package/.claude/agents/marketing/marketing-social-media-strategist.md +0 -125
  170. package/.claude/agents/marketing/marketing-tiktok-strategist.md +0 -126
  171. package/.claude/agents/marketing/marketing-twitter-engager.md +0 -127
  172. package/.claude/agents/marketing/marketing-wechat-official-account.md +0 -146
  173. package/.claude/agents/marketing/marketing-weibo-strategist.md +0 -241
  174. package/.claude/agents/marketing/marketing-xiaohongshu-specialist.md +0 -139
  175. package/.claude/agents/marketing/marketing-zhihu-strategist.md +0 -163
  176. package/.claude/agents/neural/safla-neural.md +0 -74
  177. package/.claude/agents/paid-media/paid-media-auditor.md +0 -71
  178. package/.claude/agents/paid-media/paid-media-creative-strategist.md +0 -71
  179. package/.claude/agents/paid-media/paid-media-paid-social-strategist.md +0 -71
  180. package/.claude/agents/paid-media/paid-media-ppc-strategist.md +0 -71
  181. package/.claude/agents/paid-media/paid-media-programmatic-buyer.md +0 -71
  182. package/.claude/agents/paid-media/paid-media-search-query-analyst.md +0 -71
  183. package/.claude/agents/paid-media/paid-media-tracking-specialist.md +0 -71
  184. package/.claude/agents/payments/agentic-payments.md +0 -126
  185. package/.claude/agents/product/product-behavioral-nudge-engine.md +0 -81
  186. package/.claude/agents/product/product-feedback-synthesizer.md +0 -119
  187. package/.claude/agents/product/product-manager.md +0 -469
  188. package/.claude/agents/product/product-sprint-prioritizer.md +0 -154
  189. package/.claude/agents/product/product-trend-researcher.md +0 -159
  190. package/.claude/agents/project-management/project-management-experiment-tracker.md +0 -199
  191. package/.claude/agents/project-management/project-management-jira-workflow-steward.md +0 -231
  192. package/.claude/agents/project-management/project-management-project-shepherd.md +0 -195
  193. package/.claude/agents/project-management/project-management-studio-operations.md +0 -201
  194. package/.claude/agents/project-management/project-management-studio-producer.md +0 -204
  195. package/.claude/agents/project-management/project-manager-senior.md +0 -136
  196. package/.claude/agents/reasoning/agent.md +0 -804
  197. package/.claude/agents/reasoning/goal-planner.md +0 -73
  198. package/.claude/agents/sales/sales-account-strategist.md +0 -228
  199. package/.claude/agents/sales/sales-coach.md +0 -272
  200. package/.claude/agents/sales/sales-deal-strategist.md +0 -181
  201. package/.claude/agents/sales/sales-discovery-coach.md +0 -226
  202. package/.claude/agents/sales/sales-engineer.md +0 -183
  203. package/.claude/agents/sales/sales-outbound-strategist.md +0 -202
  204. package/.claude/agents/sales/sales-pipeline-analyst.md +0 -268
  205. package/.claude/agents/sales/sales-proposal-strategist.md +0 -218
  206. package/.claude/agents/sona/sona-learning-optimizer.md +0 -65
  207. package/.claude/agents/spatial-computing/macos-spatial-metal-engineer.md +0 -338
  208. package/.claude/agents/spatial-computing/terminal-integration-specialist.md +0 -71
  209. package/.claude/agents/spatial-computing/visionos-spatial-engineer.md +0 -55
  210. package/.claude/agents/specialists/memory-specialist.md +0 -298
  211. package/.claude/agents/specialists/performance-engineer.md +0 -387
  212. package/.claude/agents/specialists/queen-coordinator.md +0 -67
  213. package/.claude/agents/specialists/security-architect.md +0 -154
  214. package/.claude/agents/specialized/accounts-payable-agent.md +0 -186
  215. package/.claude/agents/specialized/corporate-training-designer.md +0 -193
  216. package/.claude/agents/specialized/data-consolidation-agent.md +0 -61
  217. package/.claude/agents/specialized/government-digital-presales-consultant.md +0 -364
  218. package/.claude/agents/specialized/healthcare-marketing-compliance.md +0 -396
  219. package/.claude/agents/specialized/recruitment-specialist.md +0 -510
  220. package/.claude/agents/specialized/report-distribution-agent.md +0 -66
  221. package/.claude/agents/specialized/sales-data-extraction-agent.md +0 -68
  222. package/.claude/agents/specialized/specialized-french-consulting-market.md +0 -193
  223. package/.claude/agents/specialized/specialized-korean-business-navigator.md +0 -217
  224. package/.claude/agents/specialized/specialized-salesforce-architect.md +0 -181
  225. package/.claude/agents/specialized/study-abroad-advisor.md +0 -283
  226. package/.claude/agents/specialized/supply-chain-strategist.md +0 -583
  227. package/.claude/agents/sublinear/consensus-coordinator.md +0 -333
  228. package/.claude/agents/sublinear/matrix-optimizer.md +0 -180
  229. package/.claude/agents/sublinear/pagerank-analyzer.md +0 -295
  230. package/.claude/agents/sublinear/performance-optimizer.md +0 -363
  231. package/.claude/agents/sublinear/trading-predictor.md +0 -242
  232. package/.claude/agents/support/support-analytics-reporter.md +0 -366
  233. package/.claude/agents/support/support-executive-summary-generator.md +0 -213
  234. package/.claude/agents/support/support-finance-tracker.md +0 -443
  235. package/.claude/agents/support/support-infrastructure-maintainer.md +0 -619
  236. package/.claude/agents/support/support-legal-compliance-checker.md +0 -589
  237. package/.claude/agents/support/support-support-responder.md +0 -586
  238. package/.claude/agents/swarm/adaptive-coordinator.md +0 -364
  239. package/.claude/agents/swarm/hierarchical-coordinator.md +0 -318
  240. package/.claude/agents/templates/github-pr-manager.md +0 -155
  241. package/.claude/agents/templates/memory-coordinator.md +0 -163
  242. package/.claude/agents/templates/migration-plan.md +0 -724
  243. package/.claude/agents/templates/orchestrator-task.md +0 -120
  244. package/.claude/agents/templates/performance-analyzer.md +0 -179
  245. package/.claude/agents/templates/sparc-coordinator.md +0 -163
  246. package/.claude/agents/testing/testing-reality-checker.md +0 -237
  247. package/.claude/checkpoints/1767754460.json +0 -8
  248. package/.claude/commands/analysis/token-efficiency.md +0 -42
  249. package/.claude/commands/optimization/README.md +0 -73
  250. package/.claude/commands/optimization/parallel-execution.md +0 -76
  251. package/.claude/commands/swarm/swarm-analysis.md +0 -62
  252. package/.claude/commands/swarm/swarm-background.md +0 -65
  253. package/.claude/commands/swarm/swarm-modes.md +0 -67
  254. package/.claude/commands/swarm/swarm-monitor.md +0 -54
  255. package/.claude/commands/swarm/swarm-status.md +0 -44
  256. package/.claude/commands/swarm/swarm-strategies.md +0 -76
  257. package/.claude/commands/training/model-update.md +0 -78
  258. package/.claude/commands/training/pattern-learn.md +0 -69
  259. package/.claude/commands/training/specialization.md +0 -92
  260. package/.claude/commands/verify/check.md +0 -106
  261. package/.claude/commands/verify/start.md +0 -105
  262. package/.claude/config/v1-dependency-optimization.json +0 -266
  263. package/.claude/config/v1-performance-targets.json +0 -251
  264. package/.claude/helpers/README.md +0 -105
  265. package/.claude/helpers/context-persistence-hook.mjs +0 -1988
  266. package/.claude/helpers/intelligence.cjs +0 -247
  267. package/.claude/helpers/learning-service.mjs +0 -1302
  268. package/.claude/helpers/memory-palace.cjs +0 -461
  269. package/.claude/helpers/memory.cjs +0 -84
  270. package/.claude/helpers/metrics-db.mjs +0 -488
  271. package/.claude/helpers/router.cjs +0 -559
  272. package/.claude/helpers/session.cjs +0 -126
  273. package/.claude/helpers/swarm-hooks.sh +0 -761
  274. package/.claude/helpers/toggle-statusline.cjs +0 -58
  275. package/.claude/helpers/token-tracker.cjs +0 -934
  276. package/.claude/skills/agentdb-advanced/SKILL.md +0 -549
  277. package/.claude/skills/agentdb-learning/SKILL.md +0 -544
  278. package/.claude/skills/agentdb-memory-patterns/SKILL.md +0 -337
  279. package/.claude/skills/agentdb-optimization/SKILL.md +0 -508
  280. package/.claude/skills/agentdb-vector-search/SKILL.md +0 -335
  281. package/.claude/skills/agentic-integration/SKILL.md +0 -265
  282. package/.claude/skills/cli-modernization/SKILL.md +0 -950
  283. package/.claude/skills/core-implementation/SKILL.md +0 -892
  284. package/.claude/skills/ddd-architecture/SKILL.md +0 -444
  285. package/.claude/skills/github-code-review/SKILL.md +0 -1147
  286. package/.claude/skills/github-multi-repo/SKILL.md +0 -912
  287. package/.claude/skills/github-project-management/SKILL.md +0 -1245
  288. package/.claude/skills/github-release-management/SKILL.md +0 -1118
  289. package/.claude/skills/github-workflow-automation/SKILL.md +0 -1107
  290. package/.claude/skills/mcp-optimization/SKILL.md +0 -837
  291. package/.claude/skills/memory-unification/SKILL.md +0 -196
  292. package/.claude/skills/performance-optimization/SKILL.md +0 -416
  293. package/.claude/skills/reasoningbank-agentdb/SKILL.md +0 -444
  294. package/.claude/skills/reasoningbank-intelligence/SKILL.md +0 -199
  295. package/.claude/skills/security-hardening/SKILL.md +0 -101
  296. package/.claude/skills/stream-chain/SKILL.md +0 -560
  297. package/.claude/skills/swarm-coordination/SKILL.md +0 -451
  298. package/.claude/statusline-command.sh +0 -176
  299. package/.claude/statusline.mjs +0 -109
  300. package/.claude/statusline.sh +0 -431
  301. package/packages/@monomind/cli/bundled-graph/dist/src/analyze.d.ts +0 -32
  302. package/packages/@monomind/cli/bundled-graph/dist/src/analyze.d.ts.map +0 -1
  303. package/packages/@monomind/cli/bundled-graph/dist/src/analyze.js +0 -297
  304. package/packages/@monomind/cli/bundled-graph/dist/src/analyze.js.map +0 -1
  305. package/packages/@monomind/cli/bundled-graph/dist/src/build.d.ts +0 -8
  306. package/packages/@monomind/cli/bundled-graph/dist/src/build.d.ts.map +0 -1
  307. package/packages/@monomind/cli/bundled-graph/dist/src/build.js.map +0 -1
  308. package/packages/@monomind/cli/bundled-graph/dist/src/cache.d.ts +0 -12
  309. package/packages/@monomind/cli/bundled-graph/dist/src/cache.d.ts.map +0 -1
  310. package/packages/@monomind/cli/bundled-graph/dist/src/cache.js +0 -43
  311. package/packages/@monomind/cli/bundled-graph/dist/src/cache.js.map +0 -1
  312. package/packages/@monomind/cli/bundled-graph/dist/src/cluster.d.ts +0 -5
  313. package/packages/@monomind/cli/bundled-graph/dist/src/cluster.d.ts.map +0 -1
  314. package/packages/@monomind/cli/bundled-graph/dist/src/cluster.js.map +0 -1
  315. package/packages/@monomind/cli/bundled-graph/dist/src/detect.d.ts +0 -21
  316. package/packages/@monomind/cli/bundled-graph/dist/src/detect.d.ts.map +0 -1
  317. package/packages/@monomind/cli/bundled-graph/dist/src/detect.js +0 -195
  318. package/packages/@monomind/cli/bundled-graph/dist/src/detect.js.map +0 -1
  319. package/packages/@monomind/cli/bundled-graph/dist/src/export.d.ts +0 -21
  320. package/packages/@monomind/cli/bundled-graph/dist/src/export.d.ts.map +0 -1
  321. package/packages/@monomind/cli/bundled-graph/dist/src/export.js +0 -68
  322. package/packages/@monomind/cli/bundled-graph/dist/src/export.js.map +0 -1
  323. package/packages/@monomind/cli/bundled-graph/dist/src/extract/index.d.ts +0 -20
  324. package/packages/@monomind/cli/bundled-graph/dist/src/extract/index.d.ts.map +0 -1
  325. package/packages/@monomind/cli/bundled-graph/dist/src/extract/index.js +0 -158
  326. package/packages/@monomind/cli/bundled-graph/dist/src/extract/index.js.map +0 -1
  327. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/c.d.ts +0 -3
  328. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/c.d.ts.map +0 -1
  329. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/c.js +0 -88
  330. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/c.js.map +0 -1
  331. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/cpp.d.ts +0 -3
  332. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/cpp.d.ts.map +0 -1
  333. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/cpp.js +0 -121
  334. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/cpp.js.map +0 -1
  335. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/csharp.d.ts +0 -3
  336. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/csharp.d.ts.map +0 -1
  337. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/csharp.js +0 -121
  338. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/csharp.js.map +0 -1
  339. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/go.d.ts +0 -3
  340. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/go.d.ts.map +0 -1
  341. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/go.js +0 -181
  342. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/go.js.map +0 -1
  343. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/java.d.ts +0 -3
  344. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/java.d.ts.map +0 -1
  345. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/java.js +0 -117
  346. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/java.js.map +0 -1
  347. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/kotlin.d.ts +0 -3
  348. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/kotlin.d.ts.map +0 -1
  349. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/kotlin.js +0 -112
  350. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/kotlin.js.map +0 -1
  351. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/php.d.ts +0 -3
  352. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/php.d.ts.map +0 -1
  353. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/php.js +0 -130
  354. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/php.js.map +0 -1
  355. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/python.d.ts +0 -3
  356. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/python.d.ts.map +0 -1
  357. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/python.js +0 -230
  358. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/python.js.map +0 -1
  359. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/ruby.d.ts +0 -3
  360. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/ruby.d.ts.map +0 -1
  361. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/ruby.js +0 -120
  362. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/ruby.js.map +0 -1
  363. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/rust.d.ts +0 -3
  364. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/rust.d.ts.map +0 -1
  365. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/rust.js +0 -195
  366. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/rust.js.map +0 -1
  367. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/scala.d.ts +0 -3
  368. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/scala.d.ts.map +0 -1
  369. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/scala.js +0 -110
  370. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/scala.js.map +0 -1
  371. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/swift.d.ts +0 -3
  372. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/swift.d.ts.map +0 -1
  373. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/swift.js +0 -122
  374. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/swift.js.map +0 -1
  375. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/typescript.d.ts +0 -3
  376. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/typescript.d.ts.map +0 -1
  377. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/typescript.js +0 -295
  378. package/packages/@monomind/cli/bundled-graph/dist/src/extract/languages/typescript.js.map +0 -1
  379. package/packages/@monomind/cli/bundled-graph/dist/src/extract/semantic.d.ts +0 -38
  380. package/packages/@monomind/cli/bundled-graph/dist/src/extract/semantic.d.ts.map +0 -1
  381. package/packages/@monomind/cli/bundled-graph/dist/src/extract/semantic.js +0 -242
  382. package/packages/@monomind/cli/bundled-graph/dist/src/extract/semantic.js.map +0 -1
  383. package/packages/@monomind/cli/bundled-graph/dist/src/extract/tree-sitter-runner.d.ts +0 -48
  384. package/packages/@monomind/cli/bundled-graph/dist/src/extract/tree-sitter-runner.d.ts.map +0 -1
  385. package/packages/@monomind/cli/bundled-graph/dist/src/extract/tree-sitter-runner.js +0 -137
  386. package/packages/@monomind/cli/bundled-graph/dist/src/extract/tree-sitter-runner.js.map +0 -1
  387. package/packages/@monomind/cli/bundled-graph/dist/src/extract/types.d.ts +0 -7
  388. package/packages/@monomind/cli/bundled-graph/dist/src/extract/types.d.ts.map +0 -1
  389. package/packages/@monomind/cli/bundled-graph/dist/src/extract/types.js +0 -2
  390. package/packages/@monomind/cli/bundled-graph/dist/src/extract/types.js.map +0 -1
  391. package/packages/@monomind/cli/bundled-graph/dist/src/index.d.ts +0 -28
  392. package/packages/@monomind/cli/bundled-graph/dist/src/index.d.ts.map +0 -1
  393. package/packages/@monomind/cli/bundled-graph/dist/src/index.js +0 -26
  394. package/packages/@monomind/cli/bundled-graph/dist/src/index.js.map +0 -1
  395. package/packages/@monomind/cli/bundled-graph/dist/src/pipeline.d.ts +0 -27
  396. package/packages/@monomind/cli/bundled-graph/dist/src/pipeline.d.ts.map +0 -1
  397. package/packages/@monomind/cli/bundled-graph/dist/src/pipeline.js +0 -269
  398. package/packages/@monomind/cli/bundled-graph/dist/src/pipeline.js.map +0 -1
  399. package/packages/@monomind/cli/bundled-graph/dist/src/report.d.ts +0 -26
  400. package/packages/@monomind/cli/bundled-graph/dist/src/report.d.ts.map +0 -1
  401. package/packages/@monomind/cli/bundled-graph/dist/src/report.js +0 -214
  402. package/packages/@monomind/cli/bundled-graph/dist/src/report.js.map +0 -1
  403. package/packages/@monomind/cli/bundled-graph/dist/src/types.d.ts +0 -124
  404. package/packages/@monomind/cli/bundled-graph/dist/src/types.d.ts.map +0 -1
  405. package/packages/@monomind/cli/bundled-graph/dist/src/types.js +0 -2
  406. package/packages/@monomind/cli/bundled-graph/dist/src/types.js.map +0 -1
  407. package/packages/@monomind/cli/bundled-graph/dist/src/visualize.d.ts +0 -4
  408. package/packages/@monomind/cli/bundled-graph/dist/src/visualize.d.ts.map +0 -1
  409. package/packages/@monomind/cli/bundled-graph/dist/src/visualize.js +0 -574
  410. package/packages/@monomind/cli/bundled-graph/dist/src/visualize.js.map +0 -1
  411. package/packages/@monomind/cli/bundled-graph/dist/tsconfig.tsbuildinfo +0 -1
  412. package/packages/@monomind/shared/README.md +0 -322
  413. package/packages/@monomind/shared/package.json +0 -42
  414. package/packages/README.md +0 -513
@@ -1,559 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Monomind Agent Router
4
- * Routes tasks to optimal agents based on learned patterns.
5
- * Also does keyword-matching against skill-registry.json (dev skills)
6
- * and extras-registry.json (non-dev specialist agents).
7
- */
8
-
9
- const path = require('path');
10
- const fs = require('fs');
11
-
12
- const AGENT_CAPABILITIES = {
13
- coder: ['code-generation', 'refactoring', 'debugging', 'implementation'],
14
- tester: ['unit-testing', 'integration-testing', 'coverage', 'test-generation'],
15
- reviewer: ['code-review', 'security-audit', 'quality-check', 'best-practices'],
16
- researcher: ['web-search', 'documentation', 'analysis', 'summarization'],
17
- architect: ['system-design', 'architecture', 'patterns', 'scalability'],
18
- 'backend-dev': ['api', 'database', 'server', 'authentication'],
19
- 'frontend-dev': ['ui', 'react', 'css', 'components'],
20
- devops: ['ci-cd', 'docker', 'deployment', 'infrastructure'],
21
- };
22
-
23
- // Maps generic role → specific specialized agents available in the system
24
- const SPECIFIC_AGENTS_MAP = {
25
- coder: [
26
- { slug: 'sparc-coder', label: 'sparc-coder', note: 'TDD + SPARC methodology' },
27
- { slug: 'backend-dev', label: 'backend-dev', note: 'API, DB, server-side' },
28
- { slug: 'frontend-dev', label: 'Frontend Developer', note: 'React/Vue/CSS' },
29
- { slug: 'mobile-dev', label: 'mobile-dev', note: 'React Native iOS/Android' },
30
- { slug: 'ml-developer', label: 'ml-developer', note: 'ML model dev & training' },
31
- ],
32
- tester: [
33
- { slug: 'tdd-london-swarm', label: 'tdd-london-swarm', note: 'Mock-driven TDD' },
34
- { slug: 'API Tester', label: 'API Tester', note: 'API validation & performance' },
35
- { slug: 'production-validator', label: 'production-validator', note: 'Deployment readiness' },
36
- { slug: 'Evidence Collector', label: 'Evidence Collector', note: 'Screenshot-backed QA' },
37
- { slug: 'agent-browser-testing', label: 'agent-browser-testing', note: 'UI/browser automation testing' },
38
- ],
39
- reviewer: [
40
- { slug: 'Code Reviewer', label: 'Code Reviewer', note: 'Correctness, security, perf' },
41
- { slug: 'code-analyzer', label: 'code-analyzer', note: 'Quality metrics & smells' },
42
- { slug: 'feature-dev:code-reviewer', label: 'feature-dev:code-reviewer',note: 'Bug & logic error detection' },
43
- { slug: 'Reality Checker', label: 'Reality Checker', note: 'Evidence-based certification' },
44
- { slug: 'Accessibility Auditor', label: 'Accessibility Auditor', note: 'WCAG & assistive tech' },
45
- ],
46
- researcher: [
47
- { slug: 'sparc:researcher', label: 'sparc:researcher', note: 'Parallel web search + memory' },
48
- { slug: 'Explore', label: 'Explore', note: 'Fast codebase exploration' },
49
- { slug: 'Trend Researcher', label: 'Trend Researcher', note: 'Market intelligence' },
50
- { slug: 'UX Researcher', label: 'UX Researcher', note: 'User behaviour & usability' },
51
- ],
52
- architect: [
53
- { slug: 'system-architect', label: 'system-architect', note: 'High-level system design' },
54
- { slug: 'Software Architect', label: 'Software Architect', note: 'DDD, patterns, decisions' },
55
- { slug: 'Backend Architect', label: 'Backend Architect', note: 'Scalable server-side design' },
56
- { slug: 'Plan', label: 'Plan', note: 'Implementation strategy' },
57
- ],
58
- 'backend-dev': [
59
- { slug: 'backend-dev', label: 'backend-dev', note: 'API & server patterns' },
60
- { slug: 'Database Optimizer', label: 'Database Optimizer', note: 'Schema, indexes, query tuning' },
61
- { slug: 'Data Engineer', label: 'Data Engineer', note: 'Pipelines, ETL, lakehouse' },
62
- { slug: 'Security Engineer', label: 'Security Engineer', note: 'Threat modelling, secure code' },
63
- ],
64
- 'frontend-dev': [
65
- { slug: 'Frontend Developer', label: 'Frontend Developer', note: 'React/Vue/Angular' },
66
- { slug: 'UI Designer', label: 'UI Designer', note: 'Design systems & components' },
67
- { slug: 'UX Architect', label: 'UX Architect', note: 'CSS systems & interaction' },
68
- { slug: 'mobile-dev', label: 'mobile-dev', note: 'Cross-platform mobile' },
69
- ],
70
- devops: [
71
- { slug: 'DevOps Automator', label: 'DevOps Automator', note: 'CI/CD, infra automation' },
72
- { slug: 'SRE', label: 'SRE', note: 'SLOs, reliability, on-call' },
73
- { slug: 'cicd-engineer', label: 'cicd-engineer', note: 'GitHub Actions pipelines' },
74
- { slug: 'Incident Response Commander', label: 'Incident Response Commander', note: 'Prod incident mgmt' },
75
- ],
76
- };
77
-
78
- const TASK_PATTERNS = {
79
- '\\bimplement\\b|\\bcreate\\b|\\bbuild\\b|\\badd\\b|\\bwrite\\s+code\\b': 'coder',
80
- '\\btest\\b|\\bspec\\b|\\bcoverage\\b|unit test|\\bintegration\\b': 'tester',
81
- '\\breview\\b|\\baudit\\b|\\bcheck\\b|\\bvalidate\\b|\\bsecurity\\b': 'reviewer',
82
- '\\bresearch\\b|\\bfind\\b|\\bsearch\\b|\\bdocumentation\\b|\\bexplore\\b|\\bexplain\\b|\\bunderstand\\b|\\bhow does\\b|\\bhow do\\b|\\bwhat is\\b': 'researcher',
83
- '\\bdesign\\b|\\barchitect\\b|\\bstructure\\b|\\bplan\\b': 'architect',
84
- '\\bapi\\b|\\bendpoint\\b|\\bserver\\b|\\bbackend\\b|\\bdatabase\\b': 'backend-dev',
85
- '\\bui\\b|\\bfrontend\\b|\\bcomponent\\b|\\breact\\b|\\bcss\\b|\\bstyle\\b': 'frontend-dev',
86
- '\\bdeploy\\b|\\bdocker\\b|\\bci\\b|\\bcd\\b|\\bpipeline\\b|\\binfrastructure\\b': 'devops',
87
- };
88
-
89
- // Non-dev domain keywords — if matched, skip dev routing and go to extras
90
- const NON_DEV_PATTERNS = [
91
- 'marketing', 'campaign', 'social media', 'tiktok', 'instagram', 'twitter', 'linkedin',
92
- 'seo', 'content creation', 'viral', 'growth hacking', 'brand', 'influencer', 'ecommerce',
93
- 'sales', 'crm', 'sales pipeline', 'leads', 'prospects', 'quota', 'outbound',
94
- 'paid media', 'ppc', 'google ads', 'facebook ads', 'programmatic', 'display ads',
95
- 'product management', 'product roadmap', 'sprint', 'backlog', 'user story', 'customer feedback',
96
- 'project management', 'milestone', 'stakeholder', 'jira', 'agile', 'scrum',
97
- 'ux research', 'user research', 'usability', 'wireframe', 'prototype', 'figma',
98
- 'ui design', 'visual design', 'illustration', 'branding',
99
- 'academic', 'anthropology', 'history', 'geography', 'psychology', 'narrative theory',
100
- 'blockchain', 'salesforce', 'healthcare', 'compliance', 'supply chain',
101
- 'recruitment', 'hiring', 'human resources', 'finance tracking', 'invoice', 'executive summary',
102
- 'customer support', 'helpdesk', 'podcast', 'video editing', 'short video',
103
- ];
104
-
105
- // ─── Skill registry (dev skills) ────────────────────────────────────────────
106
- let _skillRegistry = null;
107
- function loadSkillRegistry() {
108
- if (_skillRegistry) return _skillRegistry;
109
- try {
110
- _skillRegistry = JSON.parse(fs.readFileSync(path.join(__dirname, 'skill-registry.json'), 'utf8'));
111
- } catch (e) { _skillRegistry = { skills: [] }; }
112
- return _skillRegistry;
113
- }
114
-
115
- // ─── Extras registry (non-dev agents) ───────────────────────────────────────
116
- let _extrasRegistry = null;
117
- function loadExtrasRegistry() {
118
- if (_extrasRegistry) return _extrasRegistry;
119
- try {
120
- _extrasRegistry = JSON.parse(fs.readFileSync(path.join(__dirname, 'extras-registry.json'), 'utf8'));
121
- } catch (e) { _extrasRegistry = { extras: [] }; }
122
- return _extrasRegistry;
123
- }
124
-
125
- // ─── Scoring helpers ─────────────────────────────────────────────────────────
126
- function scoreEntry(keywords, taskLower) {
127
- if (!Array.isArray(keywords)) return 0;
128
- let score = 0;
129
- for (const kw of keywords) {
130
- if (typeof kw === 'string' && taskLower.includes(kw.toLowerCase())) score++;
131
- }
132
- return score;
133
- }
134
-
135
- function matchSkills(task, topN = 5) {
136
- if (typeof task !== 'string') return [];
137
- const registry = loadSkillRegistry();
138
- const taskLower = task.toLowerCase();
139
- return registry.skills
140
- .map(s => ({ skill: s.skill, invoke: s.invoke, description: s.description, category: s.category, score: scoreEntry(s.keywords, taskLower) }))
141
- .filter(s => s.score > 0)
142
- .sort((a, b) => b.score - a.score)
143
- .slice(0, topN);
144
- }
145
-
146
- // Categories that are almost never relevant in a software project context.
147
- // We exclude these from extras suggestions UNLESS the prompt has explicit
148
- // keywords that opt them back in. Default-conservative: in a code repo,
149
- // an "Anthropologist" for "community docs" or "Unity Architect" for a
150
- // "community module" is noise, not signal.
151
- const _NON_DEV_EXTRA_CATEGORIES = new Set([
152
- 'academic', // Anthropologist, Geographer, Historian, Narratologist, Psychologist
153
- 'game-development', // Unity/Unreal/Godot/Blender — irrelevant for non-game codebases
154
- 'marketing',
155
- 'sales',
156
- 'paid-media',
157
- 'design', // brand/UI/UX specialists — irrelevant for code reviews
158
- ]);
159
-
160
- // Per-category opt-in keywords. If the prompt mentions one of these, that
161
- // category is allowed back into extras.
162
- const _CATEGORY_OPTIN_KEYWORDS = {
163
- 'academic': /\b(anthropolog|sociolog|cultural|ritual|kinship|ethnograph|histor(?:y|ical|ian)|geograph|narratolog|psycholog|belief\s*system)\b/i,
164
- 'game-development': /\b(unity|unreal|godot|blender|game\s*(?:design|dev|engine)|gameplay|shader\s*graph|level\s*design|ugc|roblox)\b/i,
165
- 'marketing': /\b(marketing|advertis|seo|tiktok|instagram|linkedin\s*content|brand|campaign|growth\s*hack|copywrit|blog\s*post|press\s*release|launch\s*strategy|pitch|investor)\b/i,
166
- 'sales': /\b(sales|prospect|outbound|pipeline|crm|cold\s*email|deal|account\s*strategy|quota|forecast|qbr)\b/i,
167
- 'paid-media': /\b(paid\s*media|ads?|google\s*ads|meta\s*ads|programmatic|ppc|cpa|conversion\s*tracking)\b/i,
168
- 'design': /\b(figma|brand\s*identity|design\s*system|ux\s*research|persona|usability|wireframe|prototype|color\s*palette|typography|moodboard)\b/i,
169
- };
170
-
171
- function _allowedExtraCategories(taskLower) {
172
- const allowed = new Set();
173
- for (const [cat, re] of Object.entries(_CATEGORY_OPTIN_KEYWORDS)) {
174
- if (re.test(taskLower)) allowed.add(cat);
175
- }
176
- return allowed;
177
- }
178
-
179
- function matchExtras(task, topN = 8) {
180
- if (typeof task !== 'string') return [];
181
- const registry = loadExtrasRegistry();
182
- const taskLower = task.toLowerCase();
183
- const optedIn = _allowedExtraCategories(taskLower);
184
- return registry.extras
185
- .filter(e => !_NON_DEV_EXTRA_CATEGORIES.has(e.category) || optedIn.has(e.category))
186
- .map(e => ({ slug: e.slug, name: e.name, description: e.description, category: e.category, filePath: e.filePath, score: scoreEntry(e.keywords, taskLower) }))
187
- .filter(e => e.score > 0)
188
- .sort((a, b) => b.score - a.score)
189
- .slice(0, topN);
190
- }
191
-
192
- // Pre-compiled word-boundary regexes for non-dev patterns (built once at load time)
193
- const _nonDevRegexes = NON_DEV_PATTERNS.map(function(kw) {
194
- const escaped = kw.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/\s+/g, '\\s+');
195
- return new RegExp('\\b' + escaped + '\\b', 'i');
196
- });
197
-
198
- function isNonDevTask(taskLower) {
199
- for (const re of _nonDevRegexes) {
200
- if (re.test(taskLower)) return true;
201
- }
202
- return false;
203
- }
204
-
205
- // ─── Two-Stage Keyword Router (for non-dev and ambiguous tasks) ──────────────
206
- // Stage 1: pick best category by scoring task tokens against category keywords
207
- // Stage 2: pick best agent within that category by keyword overlap
208
- // Pure in-process — no external API calls, no API key required.
209
-
210
- function buildCategoryList() {
211
- const registry = loadExtrasRegistry();
212
- const cats = {};
213
- for (const e of registry.extras) {
214
- if (!cats[e.category]) cats[e.category] = [];
215
- cats[e.category].push(e.name);
216
- }
217
- return Object.entries(cats).map(([name, agents]) => ({
218
- name,
219
- count: agents.length,
220
- examples: agents.slice(0, 4).join(', '),
221
- }));
222
- }
223
-
224
- function getAgentsInCategory(category) {
225
- const registry = loadExtrasRegistry();
226
- return registry.extras
227
- .filter(e => e.category === category)
228
- .map(e => ({ slug: e.slug, name: e.name, description: (e.description || '').slice(0, 120) }));
229
- }
230
-
231
- // Score a task string against an agent entry using keyword overlap
232
- function scoreAgainstEntry(taskTokens, entry) {
233
- let score = 0;
234
- const nameTokens = (entry.name || '').toLowerCase().split(/\W+/).filter(Boolean);
235
- const descTokens = (entry.description || '').toLowerCase().split(/\W+/).filter(Boolean);
236
- const kwTokens = Array.isArray(entry.keywords) ? entry.keywords.map(k => k.toLowerCase()) : [];
237
- const allTokens = new Set([...nameTokens, ...descTokens, ...kwTokens]);
238
- for (const t of taskTokens) {
239
- if (allTokens.has(t)) score += 2;
240
- else for (const s of allTokens) { if (s.includes(t) || t.includes(s)) { score += 1; break; } }
241
- }
242
- return score;
243
- }
244
-
245
- // Category-level score: sum agent scores within the category
246
- function scoreCategoryForTask(taskTokens, category, registry) {
247
- const agents = registry.extras.filter(e => e.category === category);
248
- return agents.reduce((sum, e) => sum + scoreAgainstEntry(taskTokens, e), 0);
249
- }
250
-
251
- async function routeTaskLLM(task) {
252
- const registry = loadExtrasRegistry();
253
- if (!registry.extras.length) return null;
254
-
255
- const taskLower = task.toLowerCase();
256
- const STOP = new Set(['the','and','for','are','but','not','you','all','can','had','her','was','one','our','out','day','get','has','him','his','how','its','may','new','now','old','see','two','way','who','did','let','put','say','she','too','use','will','with','that','this','from','they','been','have','make','then','than','when','what','does','into','your']);
257
- const taskTokens = taskLower.split(/\W+/).filter(w => w.length > 3 && !STOP.has(w));
258
-
259
- // Stage 1: pick best category by aggregate keyword score
260
- const categories = [...new Set(registry.extras.map(e => e.category))];
261
- const catScores = categories.map(cat => ({
262
- cat,
263
- score: scoreCategoryForTask(taskTokens, cat, registry),
264
- })).sort((a, b) => b.score - a.score);
265
-
266
- const bestCat = catScores[0];
267
- if (!bestCat || bestCat.score === 0) return null;
268
-
269
- // Stage 2: pick best agent within the category
270
- const candidates = registry.extras.filter(e => e.category === bestCat.cat);
271
- const scored = candidates.map(e => ({ e, score: scoreAgainstEntry(taskTokens, e) }))
272
- .sort((a, b) => b.score - a.score);
273
-
274
- const top = scored[0];
275
- if (!top || top.score === 0) return null;
276
-
277
- const allInCat = candidates.map(e => ({ slug: e.slug, label: e.name, note: e.category }));
278
- return {
279
- agent: top.e.name,
280
- agentSlug: top.e.slug,
281
- confidence: Math.min(0.85, 0.5 + top.score * 0.05),
282
- reason: `Keyword 2-stage: ${bestCat.cat} → ${top.e.name}`,
283
- category: bestCat.cat,
284
- allInCategory: allInCat,
285
- };
286
- }
287
-
288
- /**
289
- * Route multiple subtasks for swarm agent selection.
290
- * Each subtask description gets its own 2-stage LLM routing.
291
- * Returns array of { subtask, agent, agentSlug, confidence, reason }.
292
- */
293
- async function routeSwarmAgents(subtasks) {
294
- if (!Array.isArray(subtasks) || !subtasks.length) return [];
295
- const results = await Promise.all(subtasks.map(async (sub) => {
296
- const desc = typeof sub === 'string' ? sub : sub.description || sub.task || '';
297
- if (!desc) return { subtask: desc, agent: 'coder', agentSlug: 'coder', confidence: 0.5, reason: 'empty subtask' };
298
- const llm = await routeTaskLLM(desc);
299
- if (llm) return { subtask: desc, agent: llm.agent, agentSlug: llm.agentSlug, confidence: llm.confidence, reason: llm.reason };
300
- const kw = routeTask(desc);
301
- return { subtask: desc, agent: kw.agent, agentSlug: kw.agentSlug, confidence: kw.confidence, reason: kw.reason };
302
- }));
303
- return results;
304
- }
305
-
306
- // ─── RouteLayer bridge (GAP-002) ─────────────────────────────────────────────
307
- // Cache a Promise so concurrent callers all await the same load operation.
308
- var _routeLayerPromise = null;
309
-
310
- async function tryLoadRouteLayer() {
311
- if (!_routeLayerPromise) {
312
- _routeLayerPromise = (async function() {
313
- try {
314
- var routingModule = await import('@monomind/routing');
315
- if (routingModule && routingModule.RouteLayer && routingModule.ALL_ROUTES) {
316
- return new routingModule.RouteLayer({ routes: routingModule.ALL_ROUTES });
317
- }
318
- } catch (e) { /* @monomind/routing not compiled — keyword fallback will be used */ }
319
- return null;
320
- })();
321
- }
322
- return _routeLayerPromise;
323
- }
324
-
325
- /**
326
- * Async variant — tries LLM 2-stage routing for non-dev tasks,
327
- * RouteLayer semantic routing for dev tasks, falls back to keywords.
328
- */
329
- async function routeTaskSemantic(task) {
330
- if (typeof task !== 'string' || !task) return routeTask(task);
331
- const taskLower = task.toLowerCase();
332
-
333
- // For non-dev tasks or ambiguous defaults, try LLM 2-stage routing first
334
- if (isNonDevTask(taskLower)) {
335
- const llmResult = await routeTaskLLM(task);
336
- if (llmResult) {
337
- const extrasMatches = matchExtras(task);
338
- return {
339
- agent: llmResult.agent,
340
- agentSlug: llmResult.agentSlug,
341
- confidence: llmResult.confidence,
342
- reason: llmResult.reason,
343
- skillMatches: [],
344
- extrasMatches,
345
- specificAgents: llmResult.allInCategory.slice(0, 5),
346
- llmRouting: true,
347
- };
348
- }
349
- // LLM failed — fall through to keyword-based extras matching
350
- }
351
-
352
- // Dev tasks: try RouteLayer semantic routing
353
- const rl = await tryLoadRouteLayer();
354
- if (rl && rl.route) {
355
- try {
356
- const semantic = await rl.route(task);
357
- if (semantic && semantic.agentSlug && semantic.confidence > 0.6) {
358
- const mapEntry = SPECIFIC_AGENTS_MAP[semantic.agentSlug];
359
- const isDevDomain = !!(mapEntry && mapEntry.length > 0);
360
- const extrasForTask = isDevDomain ? [] : matchExtras(task);
361
- const semanticSpecificAgents = (mapEntry && mapEntry.length > 0)
362
- ? mapEntry
363
- : extrasForTask.slice(0, 5).map(e => ({ slug: e.slug, label: e.name, note: e.category }));
364
- return {
365
- agent: semantic.agentSlug,
366
- agentSlug: semantic.agentSlug,
367
- confidence: semantic.confidence,
368
- reason: 'RouteLayer semantic (' + (semantic.method || 'semantic') + '): ' + semantic.routeName,
369
- skillMatches: matchSkills(task),
370
- extrasMatches: extrasForTask,
371
- specificAgents: semanticSpecificAgents,
372
- semanticRouting: true,
373
- };
374
- }
375
- } catch (e) { /* fall through to keyword */ }
376
- }
377
-
378
- // Default keyword fallback — also try LLM if no dev pattern matched
379
- const keywordResult = routeTask(task);
380
- if (keywordResult.confidence <= 0.5) {
381
- const llmResult = await routeTaskLLM(task);
382
- if (llmResult) {
383
- return {
384
- agent: llmResult.agent,
385
- agentSlug: llmResult.agentSlug,
386
- confidence: llmResult.confidence,
387
- reason: llmResult.reason,
388
- skillMatches: keywordResult.skillMatches,
389
- extrasMatches: matchExtras(task),
390
- specificAgents: llmResult.allInCategory.slice(0, 5),
391
- llmRouting: true,
392
- };
393
- }
394
- }
395
- return keywordResult;
396
- }
397
-
398
- // ─── Feedback weight loader ───────────────────────────────────────────────────
399
- // Reads .monomind/routing-feedback.jsonl to compute per-agent success-rate
400
- // weights. Weights are memoized with a 60-second TTL.
401
- //
402
- // Signal source: routing-feedback.jsonl entries with a non-null intelligenceFeedback
403
- // boolean. Derived at session-end from intelligence-outcomes.jsonl (30-minute window,
404
- // majority-vote). Requires MIN_FEEDBACK_SAMPLES entries per agent to activate.
405
- //
406
- // To verify: copy .monomind/test-fixtures/routing-feedback-seeded.jsonl to
407
- // .monomind/routing-feedback.jsonl, then call loadFeedbackWeights() in a REPL.
408
-
409
- var _feedbackWeightsCache = null;
410
- var _feedbackWeightsCacheTime = 0;
411
- var FEEDBACK_CACHE_TTL_MS = 60000;
412
- var MIN_FEEDBACK_SAMPLES = 10;
413
-
414
- function loadFeedbackWeights() {
415
- var now = Date.now();
416
- if (_feedbackWeightsCache && now - _feedbackWeightsCacheTime < FEEDBACK_CACHE_TTL_MS) {
417
- return _feedbackWeightsCache;
418
- }
419
- var feedbackPath = path.join(process.cwd(), '.monomind', 'routing-feedback.jsonl');
420
- if (!fs.existsSync(feedbackPath)) {
421
- _feedbackWeightsCache = new Map();
422
- _feedbackWeightsCacheTime = now;
423
- return _feedbackWeightsCache;
424
- }
425
- var lines;
426
- try {
427
- lines = fs.readFileSync(feedbackPath, 'utf8').trim().split('\n').filter(Boolean);
428
- } catch {
429
- _feedbackWeightsCache = new Map();
430
- _feedbackWeightsCacheTime = now;
431
- return _feedbackWeightsCache;
432
- }
433
- var agentStats = {};
434
- for (var i = 0; i < lines.length; i++) {
435
- try {
436
- var entry = JSON.parse(lines[i]);
437
- var agent = entry.suggestedAgent || entry.agent;
438
- if (!agent) continue;
439
- if (!agentStats[agent]) agentStats[agent] = { total: 0, successTotal: 0, withSignal: 0 };
440
- agentStats[agent].total++;
441
- // Only count entries where intelligenceFeedback is non-null as having signal
442
- var fb = entry.intelligenceFeedback;
443
- if (fb !== null && fb !== undefined) {
444
- agentStats[agent].withSignal++;
445
- var success = fb === true || (fb && fb.success === true);
446
- if (success) agentStats[agent].successTotal++;
447
- }
448
- } catch { /* skip malformed lines */ }
449
- }
450
- var weights = new Map();
451
- for (var agentName in agentStats) {
452
- var stats = agentStats[agentName];
453
- // Only activate weight when we have enough non-null signal entries
454
- if (stats.withSignal >= MIN_FEEDBACK_SAMPLES) {
455
- var rate = stats.successTotal / stats.withSignal;
456
- // Clamp to [0.5, 1.5]: bad agents get penalized, good agents boosted slightly
457
- weights.set(agentName, Math.max(0.5, Math.min(1.5, rate * 2)));
458
- }
459
- }
460
- _feedbackWeightsCache = weights;
461
- _feedbackWeightsCacheTime = now;
462
- return weights;
463
- }
464
-
465
- // ─── Main routing ─────────────────────────────────────────────────────────────
466
- function routeTask(task) {
467
- if (typeof task !== 'string' || !task) {
468
- return { agent: 'coder', agentSlug: 'coder', confidence: 0, reason: 'Empty task', skillMatches: [], extrasMatches: [], specificAgents: SPECIFIC_AGENTS_MAP['coder'] || [] };
469
- }
470
- const taskLower = task.toLowerCase();
471
-
472
- // Check non-dev first — resolve to the top-matched specialist agent name (never "extras")
473
- if (isNonDevTask(taskLower)) {
474
- const extrasMatches = matchExtras(task);
475
- const top = extrasMatches[0];
476
- const agentName = top ? top.name : 'Specialist Agent';
477
- const agentSlug = top ? top.slug : 'specialist-agent';
478
- return {
479
- agent: agentName,
480
- agentSlug: agentSlug,
481
- confidence: top ? 0.85 : 0.5,
482
- reason: 'Domain: ' + (top ? top.category : 'non-dev') + ' | /specialagent',
483
- skillMatches: [],
484
- extrasMatches,
485
- specificAgents: extrasMatches.slice(0, 5).map(e => ({ slug: e.slug, label: e.name, note: e.category })),
486
- };
487
- }
488
-
489
- var feedbackWeights = loadFeedbackWeights();
490
-
491
- // Dev task pattern matching
492
- for (const [pattern, agent] of Object.entries(TASK_PATTERNS)) {
493
- const regex = new RegExp(pattern, 'i');
494
- if (regex.test(taskLower)) {
495
- // Apply feedback weight to confidence (defaults to 1.0 = no change)
496
- var baseConfidence = 0.8;
497
- var weight = feedbackWeights.get(agent) || 1.0;
498
- return {
499
- agent,
500
- agentSlug: agent,
501
- confidence: Math.min(1.0, baseConfidence * weight),
502
- reason: `Matched pattern: ${pattern}`,
503
- skillMatches: matchSkills(task),
504
- extrasMatches: [],
505
- specificAgents: SPECIFIC_AGENTS_MAP[agent] || [],
506
- };
507
- }
508
- }
509
-
510
- // Default — low confidence, show both skill and extras suggestions
511
- var defaultAgent = 'coder';
512
- var defaultWeight = feedbackWeights.get(defaultAgent) || 1.0;
513
- return {
514
- agent: defaultAgent,
515
- agentSlug: defaultAgent,
516
- confidence: Math.min(1.0, 0.5 * defaultWeight),
517
- reason: 'Default routing - no specific pattern matched',
518
- skillMatches: matchSkills(task),
519
- extrasMatches: matchExtras(task),
520
- specificAgents: SPECIFIC_AGENTS_MAP[defaultAgent] || [],
521
- };
522
- }
523
-
524
- /**
525
- * Load the full text of an extras agent by slug.
526
- * Used when Claude picks an agent to activate.
527
- */
528
- function loadExtrasAgent(slug) {
529
- if (typeof slug !== 'string' || !slug) return null;
530
- const registry = loadExtrasRegistry();
531
- const slugLower = slug.toLowerCase();
532
- const entry = registry.extras.find(e =>
533
- e.slug === slug || (typeof e.name === 'string' && e.name.toLowerCase() === slugLower)
534
- );
535
- if (!entry) return null;
536
- try {
537
- const resolvedPath = path.isAbsolute(entry.filePath)
538
- ? entry.filePath
539
- : path.resolve(__dirname, entry.filePath);
540
- return { ...entry, content: fs.readFileSync(resolvedPath, 'utf8') };
541
- } catch (e) { return null; }
542
- }
543
-
544
- module.exports = { routeTask, routeTaskSemantic, routeTaskLLM, routeSwarmAgents, matchSkills, matchExtras, loadExtrasAgent, loadExtrasRegistry, loadSkillRegistry, buildCategoryList, getAgentsInCategory, AGENT_CAPABILITIES, TASK_PATTERNS };
545
-
546
- // CLI
547
- if (require.main === module) {
548
- const args = process.argv.slice(2);
549
- if (args[0] === '--load-agent') {
550
- const agent = loadExtrasAgent(args.slice(1).join(' '));
551
- if (agent) { console.log(agent.content); }
552
- else { console.error('Agent not found'); process.exit(1); }
553
- } else if (args.length) {
554
- const result = routeTask(args.join(' '));
555
- console.log(JSON.stringify(result, null, 2));
556
- } else {
557
- console.log('Usage: router.cjs <task> OR router.cjs --load-agent <slug>');
558
- }
559
- }
@@ -1,126 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Monomind Cross-Platform Session Manager
4
- * Works on Windows, macOS, and Linux
5
- */
6
-
7
- const fs = require('fs');
8
- const path = require('path');
9
- const os = require('os');
10
-
11
- const platform = os.platform();
12
- const homeDir = os.homedir();
13
-
14
- function getDataDir() {
15
- const baseDir = process.env.CLAUDE_PROJECT_DIR || process.cwd();
16
- const localDir = path.join(baseDir, '.monomind', 'sessions');
17
- if (fs.existsSync(path.dirname(localDir))) {
18
- return localDir;
19
- }
20
-
21
- switch (platform) {
22
- case 'win32':
23
- return path.join(process.env.APPDATA || homeDir, 'monomind', 'sessions');
24
- case 'darwin':
25
- return path.join(homeDir, 'Library', 'Application Support', 'monomind', 'sessions');
26
- default:
27
- return path.join(homeDir, '.monomind', 'sessions');
28
- }
29
- }
30
-
31
- const SESSION_DIR = getDataDir();
32
- const SESSION_FILE = path.join(SESSION_DIR, 'current.json');
33
-
34
- function ensureDir(dir) {
35
- if (!fs.existsSync(dir)) {
36
- fs.mkdirSync(dir, { recursive: true });
37
- }
38
- }
39
-
40
- const commands = {
41
- start: () => {
42
- ensureDir(SESSION_DIR);
43
- const sessionId = `session-${Date.now()}`;
44
- const session = {
45
- id: sessionId,
46
- startedAt: new Date().toISOString(),
47
- platform: platform,
48
- cwd: process.cwd(),
49
- context: {},
50
- metrics: { edits: 0, commands: 0, tasks: 0, errors: 0 }
51
- };
52
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
53
- console.log(`Session started: ${sessionId}`);
54
- return session;
55
- },
56
-
57
- restore: () => {
58
- if (!fs.existsSync(SESSION_FILE)) {
59
- console.log('No session to restore');
60
- return null;
61
- }
62
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
63
- session.restoredAt = new Date().toISOString();
64
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
65
- console.log(`Session restored: ${session.id}`);
66
- return session;
67
- },
68
-
69
- end: () => {
70
- if (!fs.existsSync(SESSION_FILE)) {
71
- console.log('No active session');
72
- return null;
73
- }
74
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
75
- session.endedAt = new Date().toISOString();
76
- session.duration = Date.now() - new Date(session.startedAt).getTime();
77
-
78
- const archivePath = path.join(SESSION_DIR, `${session.id}.json`);
79
- fs.writeFileSync(archivePath, JSON.stringify(session, null, 2));
80
- fs.unlinkSync(SESSION_FILE);
81
-
82
- console.log(`Session ended: ${session.id}`);
83
- console.log(`Duration: ${Math.round(session.duration / 1000 / 60)} minutes`);
84
- return session;
85
- },
86
-
87
- status: () => {
88
- if (!fs.existsSync(SESSION_FILE)) {
89
- console.log('No active session');
90
- return null;
91
- }
92
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
93
- const duration = Date.now() - new Date(session.startedAt).getTime();
94
- console.log(`Session: ${session.id}`);
95
- console.log(`Platform: ${session.platform}`);
96
- console.log(`Started: ${session.startedAt}`);
97
- console.log(`Duration: ${Math.round(duration / 1000 / 60)} minutes`);
98
- return session;
99
- },
100
-
101
- metric: (name) => {
102
- if (!fs.existsSync(SESSION_FILE)) {
103
- return null;
104
- }
105
- const session = JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
106
- if (session.metrics[name] !== undefined) {
107
- session.metrics[name]++;
108
- fs.writeFileSync(SESSION_FILE, JSON.stringify(session, null, 2));
109
- }
110
- return session;
111
- }
112
- };
113
-
114
- module.exports = commands;
115
-
116
- // CLI - only run when executed directly
117
- if (require.main === module) {
118
- const [,, command, ...args] = process.argv;
119
- if (command && commands[command]) {
120
- commands[command](...args);
121
- } else {
122
- console.log('Usage: session.js <start|restore|end|status|metric>');
123
- console.log(`Platform: ${platform}`);
124
- console.log(`Data dir: ${SESSION_DIR}`);
125
- }
126
- }