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