@monoes/monomindcli 1.10.54 → 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 (441) 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/helpers/handlers/graph-status-handler.cjs +2 -1
  41. package/.claude/helpers/hook-handler.cjs +19 -0
  42. package/.claude/helpers/skill-registry.json +23 -0
  43. package/.claude/helpers/statusline.cjs +1 -1
  44. package/.claude/skills/mastermind/approve.md +15 -7
  45. package/.claude/skills/mastermind/autodev.md +534 -0
  46. package/.claude/skills/mastermind/createorg.md +21 -5
  47. package/.claude/skills/mastermind/debug.md +232 -0
  48. package/.claude/skills/mastermind/design.md +187 -0
  49. package/.claude/skills/mastermind/execute.md +104 -0
  50. package/.claude/skills/mastermind/finish.md +251 -0
  51. package/.claude/skills/mastermind/plan.md +180 -0
  52. package/.claude/skills/mastermind/receive-review.md +213 -0
  53. package/.claude/skills/mastermind/runorg.md +23 -8
  54. package/.claude/skills/mastermind/skill-builder.md +274 -0
  55. package/.claude/skills/mastermind/taskdev.md +307 -0
  56. package/.claude/skills/mastermind/tdd.md +394 -0
  57. package/.claude/skills/mastermind/verify.md +196 -0
  58. package/.claude/skills/mastermind/worktree.md +160 -132
  59. package/README.md +320 -253
  60. package/dist/src/commands/analyze.d.ts.map +1 -1
  61. package/dist/src/commands/analyze.js +9 -2
  62. package/dist/src/commands/analyze.js.map +1 -1
  63. package/dist/src/commands/benchmark.js.map +1 -1
  64. package/dist/src/commands/completions.js +1 -1
  65. package/dist/src/commands/guidance.js +7 -7
  66. package/dist/src/commands/hooks.d.ts.map +1 -1
  67. package/dist/src/commands/hooks.js +16 -3
  68. package/dist/src/commands/hooks.js.map +1 -1
  69. package/dist/src/commands/index.d.ts +3 -2
  70. package/dist/src/commands/index.d.ts.map +1 -1
  71. package/dist/src/commands/index.js +7 -0
  72. package/dist/src/commands/index.js.map +1 -1
  73. package/dist/src/commands/init.d.ts.map +1 -1
  74. package/dist/src/commands/init.js +47 -13
  75. package/dist/src/commands/init.js.map +1 -1
  76. package/dist/src/commands/neural.d.ts.map +1 -1
  77. package/dist/src/commands/neural.js +100 -14
  78. package/dist/src/commands/neural.js.map +1 -1
  79. package/dist/src/commands/platforms.d.ts +11 -0
  80. package/dist/src/commands/platforms.d.ts.map +1 -0
  81. package/dist/src/commands/platforms.js +195 -0
  82. package/dist/src/commands/platforms.js.map +1 -0
  83. package/dist/src/commands/ruvector/backup.js.map +1 -1
  84. package/dist/src/commands/ruvector/benchmark.js.map +1 -1
  85. package/dist/src/commands/ruvector/init.js.map +1 -1
  86. package/dist/src/commands/ruvector/migrate.js.map +1 -1
  87. package/dist/src/commands/ruvector/optimize.js.map +1 -1
  88. package/dist/src/commands/ruvector/status.js.map +1 -1
  89. package/dist/src/commands/update.js +6 -6
  90. package/dist/src/init/executor.d.ts.map +1 -1
  91. package/dist/src/init/executor.js +28 -0
  92. package/dist/src/init/executor.js.map +1 -1
  93. package/dist/src/init/statusline-generator.js +1 -1
  94. package/dist/src/init/types.d.ts +1 -0
  95. package/dist/src/init/types.d.ts.map +1 -1
  96. package/dist/src/mcp-server.d.ts.map +1 -1
  97. package/dist/src/mcp-server.js +92 -0
  98. package/dist/src/mcp-server.js.map +1 -1
  99. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
  100. package/dist/src/mcp-tools/hive-mind-tools.js +52 -0
  101. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  102. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  103. package/dist/src/mcp-tools/hooks-tools.js +106 -5
  104. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  105. package/dist/src/mcp-tools/index.d.ts +0 -5
  106. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  107. package/dist/src/mcp-tools/index.js +0 -5
  108. package/dist/src/mcp-tools/index.js.map +1 -1
  109. package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
  110. package/dist/src/mcp-tools/monograph-tools.js +507 -5587
  111. package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
  112. package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
  113. package/dist/src/mcp-tools/neural-tools.js +64 -4
  114. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  115. package/dist/src/mcp-tools/security-tools.js +4 -4
  116. package/dist/src/memory/intelligence.d.ts +2 -2
  117. package/dist/src/memory/intelligence.d.ts.map +1 -1
  118. package/dist/src/memory/intelligence.js +108 -3
  119. package/dist/src/memory/intelligence.js.map +1 -1
  120. package/dist/src/memory/memory-bridge.js +1 -1
  121. package/dist/src/memory/memory-bridge.js.map +1 -1
  122. package/dist/src/memory/sona-optimizer.d.ts +1 -10
  123. package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
  124. package/dist/src/memory/sona-optimizer.js +0 -46
  125. package/dist/src/memory/sona-optimizer.js.map +1 -1
  126. package/dist/src/runtime/headless.js +3 -3
  127. package/dist/src/ruvector/diff-classifier.d.ts +0 -2
  128. package/dist/src/ruvector/diff-classifier.d.ts.map +1 -1
  129. package/dist/src/ruvector/diff-classifier.js +2 -14
  130. package/dist/src/ruvector/diff-classifier.js.map +1 -1
  131. package/dist/src/ruvector/index.d.ts +26 -9
  132. package/dist/src/ruvector/index.d.ts.map +1 -1
  133. package/dist/src/ruvector/index.js +3 -21
  134. package/dist/src/ruvector/index.js.map +1 -1
  135. package/dist/src/ruvector/ruvllm-wasm.js +2 -2
  136. package/dist/src/ruvector/ruvllm-wasm.js.map +1 -1
  137. package/dist/src/types.d.ts +0 -15
  138. package/dist/src/types.d.ts.map +1 -1
  139. package/dist/src/types.js +0 -18
  140. package/dist/src/types.js.map +1 -1
  141. package/dist/src/ui/dashboard.html +8763 -9766
  142. package/dist/src/ui/orgs.html +1 -1
  143. package/dist/src/ui/server.mjs +504 -35
  144. package/dist/src/update/index.js +1 -1
  145. package/dist/src/update/validator.js +8 -8
  146. package/dist/tsconfig.tsbuildinfo +1 -1
  147. package/package.json +2 -2
  148. package/.claude/agents/academic/academic-anthropologist.md +0 -126
  149. package/.claude/agents/academic/academic-geographer.md +0 -128
  150. package/.claude/agents/academic/academic-historian.md +0 -124
  151. package/.claude/agents/academic/academic-narratologist.md +0 -119
  152. package/.claude/agents/academic/academic-psychologist.md +0 -119
  153. package/.claude/agents/analysis/analyze-code-quality.md +0 -58
  154. package/.claude/agents/analysis/code-analyzer.md +0 -189
  155. package/.claude/agents/analysis/code-review/analyze-code-quality.md +0 -58
  156. package/.claude/agents/consensus/performance-benchmarker.md +0 -831
  157. package/.claude/agents/data/ml/data-ml-model.md +0 -76
  158. package/.claude/agents/development/dev-backend-api.md +0 -178
  159. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +0 -52
  160. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +0 -63
  161. package/.claude/agents/game-development/blender/blender-addon-engineer.md +0 -235
  162. package/.claude/agents/game-development/game-audio-engineer.md +0 -265
  163. package/.claude/agents/game-development/game-designer.md +0 -168
  164. package/.claude/agents/game-development/godot/godot-gameplay-scripter.md +0 -335
  165. package/.claude/agents/game-development/godot/godot-multiplayer-engineer.md +0 -298
  166. package/.claude/agents/game-development/godot/godot-shader-developer.md +0 -267
  167. package/.claude/agents/game-development/level-designer.md +0 -209
  168. package/.claude/agents/game-development/narrative-designer.md +0 -244
  169. package/.claude/agents/game-development/roblox-studio/roblox-avatar-creator.md +0 -298
  170. package/.claude/agents/game-development/roblox-studio/roblox-experience-designer.md +0 -306
  171. package/.claude/agents/game-development/roblox-studio/roblox-systems-scripter.md +0 -326
  172. package/.claude/agents/game-development/technical-artist.md +0 -230
  173. package/.claude/agents/game-development/unity/unity-architect.md +0 -272
  174. package/.claude/agents/game-development/unity/unity-editor-tool-developer.md +0 -311
  175. package/.claude/agents/game-development/unity/unity-multiplayer-engineer.md +0 -322
  176. package/.claude/agents/game-development/unity/unity-shader-graph-artist.md +0 -270
  177. package/.claude/agents/game-development/unreal-engine/unreal-multiplayer-architect.md +0 -314
  178. package/.claude/agents/game-development/unreal-engine/unreal-systems-engineer.md +0 -311
  179. package/.claude/agents/game-development/unreal-engine/unreal-technical-artist.md +0 -257
  180. package/.claude/agents/game-development/unreal-engine/unreal-world-builder.md +0 -274
  181. package/.claude/agents/github/release-swarm.md +0 -597
  182. package/.claude/agents/goal/agent.md +0 -804
  183. package/.claude/agents/goal/code-goal-planner.md +0 -445
  184. package/.claude/agents/marketing/marketing-ai-citation-strategist.md +0 -171
  185. package/.claude/agents/marketing/marketing-app-store-optimizer.md +0 -322
  186. package/.claude/agents/marketing/marketing-baidu-seo-specialist.md +0 -227
  187. package/.claude/agents/marketing/marketing-bilibili-content-strategist.md +0 -200
  188. package/.claude/agents/marketing/marketing-book-co-author.md +0 -111
  189. package/.claude/agents/marketing/marketing-carousel-growth-engine.md +0 -200
  190. package/.claude/agents/marketing/marketing-china-ecommerce-operator.md +0 -284
  191. package/.claude/agents/marketing/marketing-content-creator.md +0 -67
  192. package/.claude/agents/marketing/marketing-cross-border-ecommerce.md +0 -260
  193. package/.claude/agents/marketing/marketing-douyin-strategist.md +0 -150
  194. package/.claude/agents/marketing/marketing-growth-hacker.md +0 -54
  195. package/.claude/agents/marketing/marketing-instagram-curator.md +0 -114
  196. package/.claude/agents/marketing/marketing-kuaishou-strategist.md +0 -224
  197. package/.claude/agents/marketing/marketing-linkedin-content-creator.md +0 -215
  198. package/.claude/agents/marketing/marketing-livestream-commerce-coach.md +0 -306
  199. package/.claude/agents/marketing/marketing-podcast-strategist.md +0 -278
  200. package/.claude/agents/marketing/marketing-private-domain-operator.md +0 -309
  201. package/.claude/agents/marketing/marketing-reddit-community-builder.md +0 -124
  202. package/.claude/agents/marketing/marketing-seo-specialist.md +0 -279
  203. package/.claude/agents/marketing/marketing-short-video-editing-coach.md +0 -413
  204. package/.claude/agents/marketing/marketing-social-media-strategist.md +0 -125
  205. package/.claude/agents/marketing/marketing-tiktok-strategist.md +0 -126
  206. package/.claude/agents/marketing/marketing-twitter-engager.md +0 -127
  207. package/.claude/agents/marketing/marketing-wechat-official-account.md +0 -146
  208. package/.claude/agents/marketing/marketing-weibo-strategist.md +0 -241
  209. package/.claude/agents/marketing/marketing-xiaohongshu-specialist.md +0 -139
  210. package/.claude/agents/marketing/marketing-zhihu-strategist.md +0 -163
  211. package/.claude/agents/neural/safla-neural.md +0 -74
  212. package/.claude/agents/paid-media/paid-media-auditor.md +0 -71
  213. package/.claude/agents/paid-media/paid-media-creative-strategist.md +0 -71
  214. package/.claude/agents/paid-media/paid-media-paid-social-strategist.md +0 -71
  215. package/.claude/agents/paid-media/paid-media-ppc-strategist.md +0 -71
  216. package/.claude/agents/paid-media/paid-media-programmatic-buyer.md +0 -71
  217. package/.claude/agents/paid-media/paid-media-search-query-analyst.md +0 -71
  218. package/.claude/agents/paid-media/paid-media-tracking-specialist.md +0 -71
  219. package/.claude/agents/payments/agentic-payments.md +0 -126
  220. package/.claude/agents/product/product-behavioral-nudge-engine.md +0 -81
  221. package/.claude/agents/product/product-feedback-synthesizer.md +0 -119
  222. package/.claude/agents/product/product-manager.md +0 -469
  223. package/.claude/agents/product/product-sprint-prioritizer.md +0 -154
  224. package/.claude/agents/product/product-trend-researcher.md +0 -159
  225. package/.claude/agents/project-management/project-management-experiment-tracker.md +0 -199
  226. package/.claude/agents/project-management/project-management-jira-workflow-steward.md +0 -231
  227. package/.claude/agents/project-management/project-management-project-shepherd.md +0 -195
  228. package/.claude/agents/project-management/project-management-studio-operations.md +0 -201
  229. package/.claude/agents/project-management/project-management-studio-producer.md +0 -204
  230. package/.claude/agents/project-management/project-manager-senior.md +0 -136
  231. package/.claude/agents/reasoning/agent.md +0 -804
  232. package/.claude/agents/reasoning/goal-planner.md +0 -73
  233. package/.claude/agents/sales/sales-account-strategist.md +0 -228
  234. package/.claude/agents/sales/sales-coach.md +0 -272
  235. package/.claude/agents/sales/sales-deal-strategist.md +0 -181
  236. package/.claude/agents/sales/sales-discovery-coach.md +0 -226
  237. package/.claude/agents/sales/sales-engineer.md +0 -183
  238. package/.claude/agents/sales/sales-outbound-strategist.md +0 -202
  239. package/.claude/agents/sales/sales-pipeline-analyst.md +0 -268
  240. package/.claude/agents/sales/sales-proposal-strategist.md +0 -218
  241. package/.claude/agents/sona/sona-learning-optimizer.md +0 -65
  242. package/.claude/agents/spatial-computing/macos-spatial-metal-engineer.md +0 -338
  243. package/.claude/agents/spatial-computing/terminal-integration-specialist.md +0 -71
  244. package/.claude/agents/spatial-computing/visionos-spatial-engineer.md +0 -55
  245. package/.claude/agents/specialists/memory-specialist.md +0 -298
  246. package/.claude/agents/specialists/performance-engineer.md +0 -387
  247. package/.claude/agents/specialists/queen-coordinator.md +0 -67
  248. package/.claude/agents/specialists/security-architect.md +0 -154
  249. package/.claude/agents/specialized/accounts-payable-agent.md +0 -186
  250. package/.claude/agents/specialized/corporate-training-designer.md +0 -193
  251. package/.claude/agents/specialized/data-consolidation-agent.md +0 -61
  252. package/.claude/agents/specialized/government-digital-presales-consultant.md +0 -364
  253. package/.claude/agents/specialized/healthcare-marketing-compliance.md +0 -396
  254. package/.claude/agents/specialized/recruitment-specialist.md +0 -510
  255. package/.claude/agents/specialized/report-distribution-agent.md +0 -66
  256. package/.claude/agents/specialized/sales-data-extraction-agent.md +0 -68
  257. package/.claude/agents/specialized/specialized-french-consulting-market.md +0 -193
  258. package/.claude/agents/specialized/specialized-korean-business-navigator.md +0 -217
  259. package/.claude/agents/specialized/specialized-salesforce-architect.md +0 -181
  260. package/.claude/agents/specialized/study-abroad-advisor.md +0 -283
  261. package/.claude/agents/specialized/supply-chain-strategist.md +0 -583
  262. package/.claude/agents/sublinear/consensus-coordinator.md +0 -333
  263. package/.claude/agents/sublinear/matrix-optimizer.md +0 -180
  264. package/.claude/agents/sublinear/pagerank-analyzer.md +0 -295
  265. package/.claude/agents/sublinear/performance-optimizer.md +0 -363
  266. package/.claude/agents/sublinear/trading-predictor.md +0 -242
  267. package/.claude/agents/support/support-analytics-reporter.md +0 -366
  268. package/.claude/agents/support/support-executive-summary-generator.md +0 -213
  269. package/.claude/agents/support/support-finance-tracker.md +0 -443
  270. package/.claude/agents/support/support-infrastructure-maintainer.md +0 -619
  271. package/.claude/agents/support/support-legal-compliance-checker.md +0 -589
  272. package/.claude/agents/support/support-support-responder.md +0 -586
  273. package/.claude/agents/swarm/adaptive-coordinator.md +0 -364
  274. package/.claude/agents/swarm/hierarchical-coordinator.md +0 -318
  275. package/.claude/agents/templates/github-pr-manager.md +0 -155
  276. package/.claude/agents/templates/memory-coordinator.md +0 -163
  277. package/.claude/agents/templates/migration-plan.md +0 -724
  278. package/.claude/agents/templates/orchestrator-task.md +0 -120
  279. package/.claude/agents/templates/performance-analyzer.md +0 -179
  280. package/.claude/agents/templates/sparc-coordinator.md +0 -163
  281. package/.claude/agents/testing/testing-reality-checker.md +0 -237
  282. package/.claude/commands/analysis/token-efficiency.md +0 -42
  283. package/.claude/commands/optimization/README.md +0 -73
  284. package/.claude/commands/optimization/parallel-execution.md +0 -76
  285. package/.claude/commands/swarm/swarm-analysis.md +0 -62
  286. package/.claude/commands/swarm/swarm-background.md +0 -65
  287. package/.claude/commands/swarm/swarm-modes.md +0 -67
  288. package/.claude/commands/swarm/swarm-monitor.md +0 -54
  289. package/.claude/commands/swarm/swarm-status.md +0 -44
  290. package/.claude/commands/swarm/swarm-strategies.md +0 -76
  291. package/.claude/commands/training/model-update.md +0 -78
  292. package/.claude/commands/training/pattern-learn.md +0 -69
  293. package/.claude/commands/training/specialization.md +0 -92
  294. package/.claude/commands/verify/check.md +0 -106
  295. package/.claude/commands/verify/start.md +0 -105
  296. package/.claude/helpers/README.md +0 -105
  297. package/.claude/helpers/context-persistence-hook.mjs +0 -1988
  298. package/.claude/helpers/intelligence.cjs +0 -247
  299. package/.claude/helpers/learning-service.mjs +0 -1302
  300. package/.claude/helpers/memory-palace.cjs +0 -461
  301. package/.claude/helpers/memory.cjs +0 -84
  302. package/.claude/helpers/metrics-db.mjs +0 -488
  303. package/.claude/helpers/router.cjs +0 -559
  304. package/.claude/helpers/session.cjs +0 -126
  305. package/.claude/helpers/swarm-hooks.sh +0 -761
  306. package/.claude/helpers/toggle-statusline.cjs +0 -58
  307. package/.claude/helpers/token-tracker.cjs +0 -934
  308. package/.claude/skills/agentdb-advanced/SKILL.md +0 -549
  309. package/.claude/skills/agentdb-learning/SKILL.md +0 -544
  310. package/.claude/skills/agentdb-memory-patterns/SKILL.md +0 -337
  311. package/.claude/skills/agentdb-optimization/SKILL.md +0 -508
  312. package/.claude/skills/agentdb-vector-search/SKILL.md +0 -335
  313. package/.claude/skills/agentic-integration/SKILL.md +0 -265
  314. package/.claude/skills/cli-modernization/SKILL.md +0 -950
  315. package/.claude/skills/core-implementation/SKILL.md +0 -892
  316. package/.claude/skills/ddd-architecture/SKILL.md +0 -444
  317. package/.claude/skills/github-code-review/SKILL.md +0 -1147
  318. package/.claude/skills/github-multi-repo/SKILL.md +0 -912
  319. package/.claude/skills/github-project-management/SKILL.md +0 -1245
  320. package/.claude/skills/github-release-management/SKILL.md +0 -1118
  321. package/.claude/skills/github-workflow-automation/SKILL.md +0 -1107
  322. package/.claude/skills/mcp-optimization/SKILL.md +0 -837
  323. package/.claude/skills/memory-unification/SKILL.md +0 -196
  324. package/.claude/skills/performance-optimization/SKILL.md +0 -416
  325. package/.claude/skills/reasoningbank-agentdb/SKILL.md +0 -444
  326. package/.claude/skills/reasoningbank-intelligence/SKILL.md +0 -199
  327. package/.claude/skills/security-hardening/SKILL.md +0 -101
  328. package/.claude/skills/stream-chain/SKILL.md +0 -560
  329. package/.claude/skills/swarm-coordination/SKILL.md +0 -451
  330. package/bundled-graph/dist/src/analyze.d.ts +0 -32
  331. package/bundled-graph/dist/src/analyze.d.ts.map +0 -1
  332. package/bundled-graph/dist/src/analyze.js +0 -297
  333. package/bundled-graph/dist/src/analyze.js.map +0 -1
  334. package/bundled-graph/dist/src/build.d.ts +0 -8
  335. package/bundled-graph/dist/src/build.d.ts.map +0 -1
  336. package/bundled-graph/dist/src/build.js.map +0 -1
  337. package/bundled-graph/dist/src/cache.d.ts +0 -12
  338. package/bundled-graph/dist/src/cache.d.ts.map +0 -1
  339. package/bundled-graph/dist/src/cache.js +0 -43
  340. package/bundled-graph/dist/src/cache.js.map +0 -1
  341. package/bundled-graph/dist/src/cluster.d.ts +0 -5
  342. package/bundled-graph/dist/src/cluster.d.ts.map +0 -1
  343. package/bundled-graph/dist/src/cluster.js.map +0 -1
  344. package/bundled-graph/dist/src/detect.d.ts +0 -21
  345. package/bundled-graph/dist/src/detect.d.ts.map +0 -1
  346. package/bundled-graph/dist/src/detect.js +0 -195
  347. package/bundled-graph/dist/src/detect.js.map +0 -1
  348. package/bundled-graph/dist/src/export.d.ts +0 -21
  349. package/bundled-graph/dist/src/export.d.ts.map +0 -1
  350. package/bundled-graph/dist/src/export.js +0 -68
  351. package/bundled-graph/dist/src/export.js.map +0 -1
  352. package/bundled-graph/dist/src/extract/index.d.ts +0 -20
  353. package/bundled-graph/dist/src/extract/index.d.ts.map +0 -1
  354. package/bundled-graph/dist/src/extract/index.js +0 -158
  355. package/bundled-graph/dist/src/extract/index.js.map +0 -1
  356. package/bundled-graph/dist/src/extract/languages/c.d.ts +0 -3
  357. package/bundled-graph/dist/src/extract/languages/c.d.ts.map +0 -1
  358. package/bundled-graph/dist/src/extract/languages/c.js +0 -88
  359. package/bundled-graph/dist/src/extract/languages/c.js.map +0 -1
  360. package/bundled-graph/dist/src/extract/languages/cpp.d.ts +0 -3
  361. package/bundled-graph/dist/src/extract/languages/cpp.d.ts.map +0 -1
  362. package/bundled-graph/dist/src/extract/languages/cpp.js +0 -121
  363. package/bundled-graph/dist/src/extract/languages/cpp.js.map +0 -1
  364. package/bundled-graph/dist/src/extract/languages/csharp.d.ts +0 -3
  365. package/bundled-graph/dist/src/extract/languages/csharp.d.ts.map +0 -1
  366. package/bundled-graph/dist/src/extract/languages/csharp.js +0 -121
  367. package/bundled-graph/dist/src/extract/languages/csharp.js.map +0 -1
  368. package/bundled-graph/dist/src/extract/languages/go.d.ts +0 -3
  369. package/bundled-graph/dist/src/extract/languages/go.d.ts.map +0 -1
  370. package/bundled-graph/dist/src/extract/languages/go.js +0 -181
  371. package/bundled-graph/dist/src/extract/languages/go.js.map +0 -1
  372. package/bundled-graph/dist/src/extract/languages/java.d.ts +0 -3
  373. package/bundled-graph/dist/src/extract/languages/java.d.ts.map +0 -1
  374. package/bundled-graph/dist/src/extract/languages/java.js +0 -117
  375. package/bundled-graph/dist/src/extract/languages/java.js.map +0 -1
  376. package/bundled-graph/dist/src/extract/languages/kotlin.d.ts +0 -3
  377. package/bundled-graph/dist/src/extract/languages/kotlin.d.ts.map +0 -1
  378. package/bundled-graph/dist/src/extract/languages/kotlin.js +0 -112
  379. package/bundled-graph/dist/src/extract/languages/kotlin.js.map +0 -1
  380. package/bundled-graph/dist/src/extract/languages/php.d.ts +0 -3
  381. package/bundled-graph/dist/src/extract/languages/php.d.ts.map +0 -1
  382. package/bundled-graph/dist/src/extract/languages/php.js +0 -130
  383. package/bundled-graph/dist/src/extract/languages/php.js.map +0 -1
  384. package/bundled-graph/dist/src/extract/languages/python.d.ts +0 -3
  385. package/bundled-graph/dist/src/extract/languages/python.d.ts.map +0 -1
  386. package/bundled-graph/dist/src/extract/languages/python.js +0 -230
  387. package/bundled-graph/dist/src/extract/languages/python.js.map +0 -1
  388. package/bundled-graph/dist/src/extract/languages/ruby.d.ts +0 -3
  389. package/bundled-graph/dist/src/extract/languages/ruby.d.ts.map +0 -1
  390. package/bundled-graph/dist/src/extract/languages/ruby.js +0 -120
  391. package/bundled-graph/dist/src/extract/languages/ruby.js.map +0 -1
  392. package/bundled-graph/dist/src/extract/languages/rust.d.ts +0 -3
  393. package/bundled-graph/dist/src/extract/languages/rust.d.ts.map +0 -1
  394. package/bundled-graph/dist/src/extract/languages/rust.js +0 -195
  395. package/bundled-graph/dist/src/extract/languages/rust.js.map +0 -1
  396. package/bundled-graph/dist/src/extract/languages/scala.d.ts +0 -3
  397. package/bundled-graph/dist/src/extract/languages/scala.d.ts.map +0 -1
  398. package/bundled-graph/dist/src/extract/languages/scala.js +0 -110
  399. package/bundled-graph/dist/src/extract/languages/scala.js.map +0 -1
  400. package/bundled-graph/dist/src/extract/languages/swift.d.ts +0 -3
  401. package/bundled-graph/dist/src/extract/languages/swift.d.ts.map +0 -1
  402. package/bundled-graph/dist/src/extract/languages/swift.js +0 -122
  403. package/bundled-graph/dist/src/extract/languages/swift.js.map +0 -1
  404. package/bundled-graph/dist/src/extract/languages/typescript.d.ts +0 -3
  405. package/bundled-graph/dist/src/extract/languages/typescript.d.ts.map +0 -1
  406. package/bundled-graph/dist/src/extract/languages/typescript.js +0 -295
  407. package/bundled-graph/dist/src/extract/languages/typescript.js.map +0 -1
  408. package/bundled-graph/dist/src/extract/semantic.d.ts +0 -38
  409. package/bundled-graph/dist/src/extract/semantic.d.ts.map +0 -1
  410. package/bundled-graph/dist/src/extract/semantic.js +0 -242
  411. package/bundled-graph/dist/src/extract/semantic.js.map +0 -1
  412. package/bundled-graph/dist/src/extract/tree-sitter-runner.d.ts +0 -48
  413. package/bundled-graph/dist/src/extract/tree-sitter-runner.d.ts.map +0 -1
  414. package/bundled-graph/dist/src/extract/tree-sitter-runner.js +0 -137
  415. package/bundled-graph/dist/src/extract/tree-sitter-runner.js.map +0 -1
  416. package/bundled-graph/dist/src/extract/types.d.ts +0 -7
  417. package/bundled-graph/dist/src/extract/types.d.ts.map +0 -1
  418. package/bundled-graph/dist/src/extract/types.js +0 -2
  419. package/bundled-graph/dist/src/extract/types.js.map +0 -1
  420. package/bundled-graph/dist/src/index.d.ts +0 -28
  421. package/bundled-graph/dist/src/index.d.ts.map +0 -1
  422. package/bundled-graph/dist/src/index.js +0 -26
  423. package/bundled-graph/dist/src/index.js.map +0 -1
  424. package/bundled-graph/dist/src/pipeline.d.ts +0 -27
  425. package/bundled-graph/dist/src/pipeline.d.ts.map +0 -1
  426. package/bundled-graph/dist/src/pipeline.js +0 -269
  427. package/bundled-graph/dist/src/pipeline.js.map +0 -1
  428. package/bundled-graph/dist/src/report.d.ts +0 -26
  429. package/bundled-graph/dist/src/report.d.ts.map +0 -1
  430. package/bundled-graph/dist/src/report.js +0 -214
  431. package/bundled-graph/dist/src/report.js.map +0 -1
  432. package/bundled-graph/dist/src/types.d.ts +0 -124
  433. package/bundled-graph/dist/src/types.d.ts.map +0 -1
  434. package/bundled-graph/dist/src/types.js +0 -2
  435. package/bundled-graph/dist/src/types.js.map +0 -1
  436. package/bundled-graph/dist/src/visualize.d.ts +0 -4
  437. package/bundled-graph/dist/src/visualize.d.ts.map +0 -1
  438. package/bundled-graph/dist/src/visualize.js +0 -574
  439. package/bundled-graph/dist/src/visualize.js.map +0 -1
  440. package/bundled-graph/dist/tsconfig.tsbuildinfo +0 -1
  441. package/dist/src/ui/dashboard-v2.html +0 -5316
@@ -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
- }