@monoes/monomindcli 1.18.15 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. package/.claude/agents/core/researcher.md +29 -24
  2. package/.claude/agents/github/code-review-swarm.md +1 -1
  3. package/.claude/agents/github/github-modes.md +1 -1
  4. package/.claude/agents/github/issue-tracker.md +1 -3
  5. package/.claude/agents/github/multi-repo-swarm.md +1 -1
  6. package/.claude/agents/github/pr-manager.md +1 -3
  7. package/.claude/agents/github/project-board-sync.md +1 -1
  8. package/.claude/agents/github/release-manager.md +1 -1
  9. package/.claude/agents/github/repo-architect.md +4 -12
  10. package/.claude/agents/github/swarm-issue.md +1 -1
  11. package/.claude/agents/github/swarm-pr.md +1 -1
  12. package/.claude/agents/github/sync-coordinator.md +1 -1
  13. package/.claude/agents/github/workflow-automation.md +1 -1
  14. package/.claude/agents/goal/goal-planner.md +1 -2
  15. package/.claude/agents/specialized/specialized-workflow-architect.md +11 -14
  16. package/.claude/agents/testing/production-validator.md +8 -7
  17. package/.claude/agents/testing/testing-evidence-collector.md +3 -1
  18. package/.claude/commands/github/issue-tracker.md +0 -2
  19. package/.claude/commands/github/pr-manager.md +0 -2
  20. package/.claude/commands/github/repo-architect.md +3 -10
  21. package/.claude/commands/mastermind/code-review.md +4 -4
  22. package/.claude/commands/mastermind/help.md +5 -5
  23. package/.claude/commands/mastermind/okf-export.md +14 -0
  24. package/.claude/commands/mastermind/okf-import.md +15 -0
  25. package/.claude/commands/workflows/README.md +0 -1
  26. package/.claude/commands/workflows/workflow-create.md +0 -1
  27. package/.claude/commands/workflows/workflow-execute.md +1 -3
  28. package/.claude/commands/workflows/workflow-export.md +0 -2
  29. package/.claude/helpers/handlers/agent-start-handler.cjs +28 -36
  30. package/.claude/helpers/handlers/capture-handler.cjs +110 -0
  31. package/.claude/helpers/handlers/edit-handler.cjs +15 -0
  32. package/.claude/helpers/handlers/gates-handler.cjs +2 -8
  33. package/.claude/helpers/handlers/route-handler.cjs +314 -245
  34. package/.claude/helpers/handlers/session-handler.cjs +182 -163
  35. package/.claude/helpers/handlers/session-restore-handler.cjs +95 -53
  36. package/.claude/helpers/handlers/task-handler.cjs +17 -160
  37. package/.claude/helpers/hook-handler.cjs +153 -16
  38. package/.claude/helpers/intelligence.cjs +255 -15
  39. package/.claude/helpers/learning-service.mjs +1 -0
  40. package/.claude/helpers/mastermind-activate.cjs +33 -51
  41. package/.claude/helpers/monolean-activate.cjs +13 -3
  42. package/.claude/helpers/monolean-propagate.cjs +7 -3
  43. package/.claude/helpers/router.cjs +122 -11
  44. package/.claude/helpers/skill-registry.json +0 -189
  45. package/.claude/skills/github-toolkit/SKILL.md +60 -0
  46. package/.claude/skills/hive-mind-advanced/SKILL.md +0 -15
  47. package/.claude/skills/hooks-automation/SKILL.md +0 -1
  48. package/.claude/skills/mastermind-skills/_protocol.md +1 -1
  49. package/.claude/skills/mastermind-skills/architect.md +5 -6
  50. package/.claude/skills/mastermind-skills/autodev.md +8 -5
  51. package/.claude/skills/mastermind-skills/build.md +1 -2
  52. package/.claude/skills/mastermind-skills/review.md +8 -5
  53. package/.claude/skills/mastermind-skills/techport.md +37 -3
  54. package/.claude/skills/memory-toolkit/SKILL.md +75 -0
  55. package/.claude/skills/monodesign/document.md +9 -6
  56. package/.claude/skills/monodesign/extract.md +1 -1
  57. package/.claude/skills/monodesign/reference/document.md +1 -1
  58. package/.claude/skills/monodesign/reference/live.md +1 -1
  59. package/.claude/skills/monolean/SKILL.md +1 -1
  60. package/.claude/skills/specialagent/SKILL.md +2 -4
  61. package/.claude/skills/swarm-advanced/SKILL.md +0 -1
  62. package/README.md +2 -5
  63. package/bin/mcp-server.js +11 -1
  64. package/dist/src/autopilot-state.d.ts.map +1 -1
  65. package/dist/src/autopilot-state.js +4 -5
  66. package/dist/src/autopilot-state.js.map +1 -1
  67. package/dist/src/browser/dashboard/server.d.ts.map +1 -1
  68. package/dist/src/browser/dashboard/server.js +69 -1
  69. package/dist/src/browser/dashboard/server.js.map +1 -1
  70. package/dist/src/browser/dashboard/ui.html +214 -1764
  71. package/dist/src/capabilities/index.d.ts +0 -2
  72. package/dist/src/capabilities/index.d.ts.map +1 -1
  73. package/dist/src/capabilities/index.js +0 -1
  74. package/dist/src/capabilities/index.js.map +1 -1
  75. package/dist/src/commands/agent-lifecycle.d.ts.map +1 -1
  76. package/dist/src/commands/agent-lifecycle.js +2 -6
  77. package/dist/src/commands/agent-lifecycle.js.map +1 -1
  78. package/dist/src/commands/agent-ops.d.ts +1 -2
  79. package/dist/src/commands/agent-ops.d.ts.map +1 -1
  80. package/dist/src/commands/agent-ops.js +1 -59
  81. package/dist/src/commands/agent-ops.js.map +1 -1
  82. package/dist/src/commands/agent.d.ts.map +1 -1
  83. package/dist/src/commands/agent.js +2 -3
  84. package/dist/src/commands/agent.js.map +1 -1
  85. package/dist/src/commands/analyze-diff.js +1 -1
  86. package/dist/src/commands/analyze-diff.js.map +1 -1
  87. package/dist/src/commands/analyze.d.ts +0 -4
  88. package/dist/src/commands/analyze.d.ts.map +1 -1
  89. package/dist/src/commands/analyze.js +1 -29
  90. package/dist/src/commands/analyze.js.map +1 -1
  91. package/dist/src/commands/browse-action.d.ts.map +1 -1
  92. package/dist/src/commands/browse-action.js +94 -2
  93. package/dist/src/commands/browse-action.js.map +1 -1
  94. package/dist/src/commands/completions.d.ts.map +1 -1
  95. package/dist/src/commands/completions.js +12 -76
  96. package/dist/src/commands/completions.js.map +1 -1
  97. package/dist/src/commands/config.d.ts.map +1 -1
  98. package/dist/src/commands/config.js +0 -6
  99. package/dist/src/commands/config.js.map +1 -1
  100. package/dist/src/commands/doctor-project-checks.d.ts +13 -3
  101. package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
  102. package/dist/src/commands/doctor-project-checks.js +131 -23
  103. package/dist/src/commands/doctor-project-checks.js.map +1 -1
  104. package/dist/src/commands/doctor.d.ts.map +1 -1
  105. package/dist/src/commands/doctor.js +6 -5
  106. package/dist/src/commands/doctor.js.map +1 -1
  107. package/dist/src/commands/guidance.d.ts +5 -1
  108. package/dist/src/commands/guidance.d.ts.map +1 -1
  109. package/dist/src/commands/guidance.js +11 -556
  110. package/dist/src/commands/guidance.js.map +1 -1
  111. package/dist/src/commands/hive-mind-comms.d.ts.map +1 -1
  112. package/dist/src/commands/hive-mind-comms.js +11 -4
  113. package/dist/src/commands/hive-mind-comms.js.map +1 -1
  114. package/dist/src/commands/hive-mind-helpers.js +2 -2
  115. package/dist/src/commands/hive-mind-helpers.js.map +1 -1
  116. package/dist/src/commands/hive-mind-ops.d.ts +1 -3
  117. package/dist/src/commands/hive-mind-ops.d.ts.map +1 -1
  118. package/dist/src/commands/hive-mind-ops.js +2 -116
  119. package/dist/src/commands/hive-mind-ops.js.map +1 -1
  120. package/dist/src/commands/hive-mind.d.ts +4 -4
  121. package/dist/src/commands/hive-mind.d.ts.map +1 -1
  122. package/dist/src/commands/hive-mind.js +11 -11
  123. package/dist/src/commands/hive-mind.js.map +1 -1
  124. package/dist/src/commands/hooks-coverage-commands.d.ts.map +1 -1
  125. package/dist/src/commands/hooks-coverage-commands.js +8 -7
  126. package/dist/src/commands/hooks-coverage-commands.js.map +1 -1
  127. package/dist/src/commands/hooks-coverage-gaps.js +1 -1
  128. package/dist/src/commands/hooks-coverage-gaps.js.map +1 -1
  129. package/dist/src/commands/hooks-coverage-routing.js +2 -2
  130. package/dist/src/commands/hooks-coverage-routing.js.map +1 -1
  131. package/dist/src/commands/hooks-extended-commands.d.ts +0 -3
  132. package/dist/src/commands/hooks-extended-commands.d.ts.map +1 -1
  133. package/dist/src/commands/hooks-extended-commands.js +0 -307
  134. package/dist/src/commands/hooks-extended-commands.js.map +1 -1
  135. package/dist/src/commands/hooks-formatting.d.ts +1 -5
  136. package/dist/src/commands/hooks-formatting.d.ts.map +1 -1
  137. package/dist/src/commands/hooks-formatting.js +1 -18
  138. package/dist/src/commands/hooks-formatting.js.map +1 -1
  139. package/dist/src/commands/hooks-workers.d.ts +1 -1
  140. package/dist/src/commands/hooks-workers.d.ts.map +1 -1
  141. package/dist/src/commands/hooks-workers.js +82 -330
  142. package/dist/src/commands/hooks-workers.js.map +1 -1
  143. package/dist/src/commands/hooks.d.ts.map +1 -1
  144. package/dist/src/commands/hooks.js +1 -12
  145. package/dist/src/commands/hooks.js.map +1 -1
  146. package/dist/src/commands/index.d.ts +2 -55
  147. package/dist/src/commands/index.d.ts.map +1 -1
  148. package/dist/src/commands/index.js +23 -216
  149. package/dist/src/commands/index.js.map +1 -1
  150. package/dist/src/commands/init-wizard.d.ts.map +1 -1
  151. package/dist/src/commands/init-wizard.js +3 -5
  152. package/dist/src/commands/init-wizard.js.map +1 -1
  153. package/dist/src/commands/init.d.ts.map +1 -1
  154. package/dist/src/commands/init.js +4 -24
  155. package/dist/src/commands/init.js.map +1 -1
  156. package/dist/src/commands/mcp.d.ts.map +1 -1
  157. package/dist/src/commands/mcp.js +32 -4
  158. package/dist/src/commands/mcp.js.map +1 -1
  159. package/dist/src/commands/memory-admin.d.ts +1 -2
  160. package/dist/src/commands/memory-admin.d.ts.map +1 -1
  161. package/dist/src/commands/memory-admin.js +1 -118
  162. package/dist/src/commands/memory-admin.js.map +1 -1
  163. package/dist/src/commands/memory-transfer.d.ts +1 -2
  164. package/dist/src/commands/memory-transfer.d.ts.map +1 -1
  165. package/dist/src/commands/memory-transfer.js +5 -171
  166. package/dist/src/commands/memory-transfer.js.map +1 -1
  167. package/dist/src/commands/memory.d.ts.map +1 -1
  168. package/dist/src/commands/memory.js +3 -6
  169. package/dist/src/commands/memory.js.map +1 -1
  170. package/dist/src/commands/neural-core.d.ts +3 -1
  171. package/dist/src/commands/neural-core.d.ts.map +1 -1
  172. package/dist/src/commands/neural-core.js +154 -15
  173. package/dist/src/commands/neural-core.js.map +1 -1
  174. package/dist/src/commands/neural-optimize.d.ts.map +1 -1
  175. package/dist/src/commands/neural-optimize.js +13 -15
  176. package/dist/src/commands/neural-optimize.js.map +1 -1
  177. package/dist/src/commands/neural-registry.d.ts +1 -1
  178. package/dist/src/commands/neural-registry.js +14 -14
  179. package/dist/src/commands/neural-registry.js.map +1 -1
  180. package/dist/src/commands/neural.d.ts +1 -1
  181. package/dist/src/commands/neural.js +6 -6
  182. package/dist/src/commands/neural.js.map +1 -1
  183. package/dist/src/commands/performance.d.ts.map +1 -1
  184. package/dist/src/commands/performance.js +68 -58
  185. package/dist/src/commands/performance.js.map +1 -1
  186. package/dist/src/commands/providers.d.ts.map +1 -1
  187. package/dist/src/commands/providers.js +77 -117
  188. package/dist/src/commands/providers.js.map +1 -1
  189. package/dist/src/commands/search-universal.d.ts +7 -1
  190. package/dist/src/commands/search-universal.d.ts.map +1 -1
  191. package/dist/src/commands/search-universal.js +59 -5
  192. package/dist/src/commands/search-universal.js.map +1 -1
  193. package/dist/src/commands/security-cve.d.ts.map +1 -1
  194. package/dist/src/commands/security-cve.js +3 -5
  195. package/dist/src/commands/security-cve.js.map +1 -1
  196. package/dist/src/commands/security-misc.d.ts +0 -1
  197. package/dist/src/commands/security-misc.d.ts.map +1 -1
  198. package/dist/src/commands/security-misc.js +69 -45
  199. package/dist/src/commands/security-misc.js.map +1 -1
  200. package/dist/src/commands/security.d.ts.map +1 -1
  201. package/dist/src/commands/security.js +2 -4
  202. package/dist/src/commands/security.js.map +1 -1
  203. package/dist/src/commands/session.d.ts.map +1 -1
  204. package/dist/src/commands/session.js +137 -281
  205. package/dist/src/commands/session.js.map +1 -1
  206. package/dist/src/commands/start.d.ts.map +1 -1
  207. package/dist/src/commands/start.js +2 -59
  208. package/dist/src/commands/start.js.map +1 -1
  209. package/dist/src/commands/status.d.ts.map +1 -1
  210. package/dist/src/commands/status.js +18 -29
  211. package/dist/src/commands/status.js.map +1 -1
  212. package/dist/src/commands/swarm.d.ts.map +1 -1
  213. package/dist/src/commands/swarm.js +113 -66
  214. package/dist/src/commands/swarm.js.map +1 -1
  215. package/dist/src/commands/task.d.ts.map +1 -1
  216. package/dist/src/commands/task.js +2 -49
  217. package/dist/src/commands/task.js.map +1 -1
  218. package/dist/src/consensus/audit-writer.d.ts.map +1 -1
  219. package/dist/src/consensus/audit-writer.js +43 -1
  220. package/dist/src/consensus/audit-writer.js.map +1 -1
  221. package/dist/src/consensus/tally.d.ts +19 -0
  222. package/dist/src/consensus/tally.d.ts.map +1 -0
  223. package/dist/src/consensus/tally.js +34 -0
  224. package/dist/src/consensus/tally.js.map +1 -0
  225. package/dist/src/index.d.ts +3 -2
  226. package/dist/src/index.d.ts.map +1 -1
  227. package/dist/src/index.js +13 -9
  228. package/dist/src/index.js.map +1 -1
  229. package/dist/src/init/claudemd-generator.d.ts.map +1 -1
  230. package/dist/src/init/claudemd-generator.js +10 -14
  231. package/dist/src/init/claudemd-generator.js.map +1 -1
  232. package/dist/src/init/executor.d.ts.map +1 -1
  233. package/dist/src/init/executor.js +42 -100
  234. package/dist/src/init/executor.js.map +1 -1
  235. package/dist/src/init/helpers-generator.d.ts.map +1 -1
  236. package/dist/src/init/helpers-generator.js +2 -22
  237. package/dist/src/init/helpers-generator.js.map +1 -1
  238. package/dist/src/init/settings-generator.d.ts.map +1 -1
  239. package/dist/src/init/settings-generator.js +0 -13
  240. package/dist/src/init/settings-generator.js.map +1 -1
  241. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  242. package/dist/src/init/statusline-generator.js +62 -0
  243. package/dist/src/init/statusline-generator.js.map +1 -1
  244. package/dist/src/init/types.d.ts +3 -9
  245. package/dist/src/init/types.d.ts.map +1 -1
  246. package/dist/src/init/types.js +0 -5
  247. package/dist/src/init/types.js.map +1 -1
  248. package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
  249. package/dist/src/knowledge/document-pipeline.js +18 -8
  250. package/dist/src/knowledge/document-pipeline.js.map +1 -1
  251. package/dist/src/mcp-client.d.ts.map +1 -1
  252. package/dist/src/mcp-client.js +0 -8
  253. package/dist/src/mcp-client.js.map +1 -1
  254. package/dist/src/mcp-server.d.ts.map +1 -1
  255. package/dist/src/mcp-server.js +14 -0
  256. package/dist/src/mcp-server.js.map +1 -1
  257. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
  258. package/dist/src/mcp-tools/agent-tools.js +0 -17
  259. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  260. package/dist/src/mcp-tools/coherence/causal-infer.d.ts +5 -5
  261. package/dist/src/mcp-tools/coherence/causal-infer.d.ts.map +1 -1
  262. package/dist/src/mcp-tools/coherence/causal-infer.js +32 -46
  263. package/dist/src/mcp-tools/coherence/causal-infer.js.map +1 -1
  264. package/dist/src/mcp-tools/coherence/coherence-check.d.ts.map +1 -1
  265. package/dist/src/mcp-tools/coherence/coherence-check.js +1 -19
  266. package/dist/src/mcp-tools/coherence/coherence-check.js.map +1 -1
  267. package/dist/src/mcp-tools/coherence/consensus-verify.d.ts +2 -3
  268. package/dist/src/mcp-tools/coherence/consensus-verify.d.ts.map +1 -1
  269. package/dist/src/mcp-tools/coherence/consensus-verify.js +22 -20
  270. package/dist/src/mcp-tools/coherence/consensus-verify.js.map +1 -1
  271. package/dist/src/mcp-tools/coherence/memory-gate.d.ts +3 -2
  272. package/dist/src/mcp-tools/coherence/memory-gate.d.ts.map +1 -1
  273. package/dist/src/mcp-tools/coherence/memory-gate.js +32 -19
  274. package/dist/src/mcp-tools/coherence/memory-gate.js.map +1 -1
  275. package/dist/src/mcp-tools/coherence/quantum-topology.d.ts +4 -4
  276. package/dist/src/mcp-tools/coherence/quantum-topology.d.ts.map +1 -1
  277. package/dist/src/mcp-tools/coherence/quantum-topology.js +11 -17
  278. package/dist/src/mcp-tools/coherence/quantum-topology.js.map +1 -1
  279. package/dist/src/mcp-tools/coherence/spectral-analyze.d.ts +2 -3
  280. package/dist/src/mcp-tools/coherence/spectral-analyze.d.ts.map +1 -1
  281. package/dist/src/mcp-tools/coherence/spectral-analyze.js +51 -32
  282. package/dist/src/mcp-tools/coherence/spectral-analyze.js.map +1 -1
  283. package/dist/src/mcp-tools/coherence/types.d.ts +8 -11
  284. package/dist/src/mcp-tools/coherence/types.d.ts.map +1 -1
  285. package/dist/src/mcp-tools/coherence/types.js +3 -18
  286. package/dist/src/mcp-tools/coherence/types.js.map +1 -1
  287. package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -1
  288. package/dist/src/mcp-tools/embeddings-tools.js +1 -7
  289. package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
  290. package/dist/src/mcp-tools/graphify-tools.js +2 -2
  291. package/dist/src/mcp-tools/graphify-tools.js.map +1 -1
  292. package/dist/src/mcp-tools/guidance-tools.d.ts.map +1 -1
  293. package/dist/src/mcp-tools/guidance-tools.js +9 -19
  294. package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
  295. package/dist/src/mcp-tools/hive-mind-tools.d.ts +8 -1
  296. package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
  297. package/dist/src/mcp-tools/hive-mind-tools.js +198 -40
  298. package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
  299. package/dist/src/mcp-tools/hooks-advanced.d.ts +18 -0
  300. package/dist/src/mcp-tools/hooks-advanced.d.ts.map +1 -0
  301. package/dist/src/mcp-tools/hooks-advanced.js +25 -0
  302. package/dist/src/mcp-tools/hooks-advanced.js.map +1 -0
  303. package/dist/src/mcp-tools/hooks-intelligence.d.ts +4 -8
  304. package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -1
  305. package/dist/src/mcp-tools/hooks-intelligence.js +33 -482
  306. package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -1
  307. package/dist/src/mcp-tools/hooks-routing.d.ts +1 -3
  308. package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
  309. package/dist/src/mcp-tools/hooks-routing.js +96 -202
  310. package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
  311. package/dist/src/mcp-tools/hooks-synthesis.d.ts +31 -0
  312. package/dist/src/mcp-tools/hooks-synthesis.d.ts.map +1 -0
  313. package/dist/src/mcp-tools/hooks-synthesis.js +196 -0
  314. package/dist/src/mcp-tools/hooks-synthesis.js.map +1 -0
  315. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  316. package/dist/src/mcp-tools/hooks-tools.js +10 -11
  317. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  318. package/dist/src/mcp-tools/index.d.ts +0 -3
  319. package/dist/src/mcp-tools/index.d.ts.map +1 -1
  320. package/dist/src/mcp-tools/index.js +0 -4
  321. package/dist/src/mcp-tools/index.js.map +1 -1
  322. package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
  323. package/dist/src/mcp-tools/memory-tools.js +24 -9
  324. package/dist/src/mcp-tools/memory-tools.js.map +1 -1
  325. package/dist/src/mcp-tools/monograph-tools.d.ts +6 -0
  326. package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
  327. package/dist/src/mcp-tools/monograph-tools.js +370 -95
  328. package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
  329. package/dist/src/mcp-tools/neural-tools.d.ts +8 -9
  330. package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
  331. package/dist/src/mcp-tools/neural-tools.js +249 -539
  332. package/dist/src/mcp-tools/neural-tools.js.map +1 -1
  333. package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -1
  334. package/dist/src/mcp-tools/performance-tools.js +5 -17
  335. package/dist/src/mcp-tools/performance-tools.js.map +1 -1
  336. package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js +2 -2
  337. package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js.map +1 -1
  338. package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts +4 -4
  339. package/dist/src/mcp-tools/quality-tools.d.ts +7 -2
  340. package/dist/src/mcp-tools/quality-tools.d.ts.map +1 -1
  341. package/dist/src/mcp-tools/quality-tools.js +7 -257
  342. package/dist/src/mcp-tools/quality-tools.js.map +1 -1
  343. package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
  344. package/dist/src/mcp-tools/security-tools.js +103 -0
  345. package/dist/src/mcp-tools/security-tools.js.map +1 -1
  346. package/dist/src/memory/intelligence.d.ts +9 -9
  347. package/dist/src/memory/intelligence.d.ts.map +1 -1
  348. package/dist/src/memory/intelligence.js +71 -59
  349. package/dist/src/memory/intelligence.js.map +1 -1
  350. package/dist/src/memory/memory-bridge.d.ts +1 -0
  351. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  352. package/dist/src/memory/memory-bridge.js +47 -5
  353. package/dist/src/memory/memory-bridge.js.map +1 -1
  354. package/dist/src/memory/memory-read.d.ts.map +1 -1
  355. package/dist/src/memory/memory-read.js +1 -19
  356. package/dist/src/memory/memory-read.js.map +1 -1
  357. package/dist/src/suggest.d.ts.map +1 -1
  358. package/dist/src/suggest.js +1 -12
  359. package/dist/src/suggest.js.map +1 -1
  360. package/dist/src/transfer/store/discovery.d.ts +3 -2
  361. package/dist/src/transfer/store/discovery.d.ts.map +1 -1
  362. package/dist/src/transfer/store/discovery.js +22 -70
  363. package/dist/src/transfer/store/discovery.js.map +1 -1
  364. package/dist/src/update/checker.d.ts.map +1 -1
  365. package/dist/src/update/checker.js +0 -1
  366. package/dist/src/update/checker.js.map +1 -1
  367. package/dist/src/utils/cosine-similarity.d.ts +22 -0
  368. package/dist/src/utils/cosine-similarity.d.ts.map +1 -0
  369. package/dist/src/utils/cosine-similarity.js +38 -0
  370. package/dist/src/utils/cosine-similarity.js.map +1 -0
  371. package/dist/src/utils/input-guards.d.ts +51 -0
  372. package/dist/src/utils/input-guards.d.ts.map +1 -0
  373. package/dist/src/utils/input-guards.js +223 -0
  374. package/dist/src/utils/input-guards.js.map +1 -0
  375. package/dist/src/utils/json-file.d.ts +33 -0
  376. package/dist/src/utils/json-file.d.ts.map +1 -0
  377. package/dist/src/utils/json-file.js +57 -0
  378. package/dist/src/utils/json-file.js.map +1 -0
  379. package/dist/tsconfig.tsbuildinfo +1 -1
  380. package/package.json +9 -6
  381. package/scripts/sync-claude-assets.sh +16 -20
  382. package/.claude/agents/generated/case-analyst.md +0 -50
  383. package/.claude/agents/generated/channel-intelligence-director.md +0 -87
  384. package/.claude/agents/generated/chief-growth-officer.md +0 -88
  385. package/.claude/agents/generated/churn-analyst.md +0 -53
  386. package/.claude/agents/generated/code-reviewer.md +0 -55
  387. package/.claude/agents/generated/code-validator.md +0 -57
  388. package/.claude/agents/generated/complexity-scanner.md +0 -56
  389. package/.claude/agents/generated/content-seo-strategist.md +0 -90
  390. package/.claude/agents/generated/copy-editor.md +0 -45
  391. package/.claude/agents/generated/court-reporter.md +0 -50
  392. package/.claude/agents/generated/defender.md +0 -51
  393. package/.claude/agents/generated/devbot-orchestrator.md +0 -58
  394. package/.claude/agents/generated/devbot-planner.md +0 -63
  395. package/.claude/agents/generated/developer-community-strategist.md +0 -91
  396. package/.claude/agents/generated/editor-in-chief.md +0 -45
  397. package/.claude/agents/generated/fact-checker.md +0 -45
  398. package/.claude/agents/generated/impact-assessor.md +0 -54
  399. package/.claude/agents/generated/judge.md +0 -51
  400. package/.claude/agents/generated/outreach-partnership-strategist.md +0 -90
  401. package/.claude/agents/generated/prosecutor.md +0 -51
  402. package/.claude/agents/generated/reporter.md +0 -45
  403. package/.claude/agents/generated/social-media-strategist.md +0 -91
  404. package/.claude/agents/generated/video-visual-strategist.md +0 -90
  405. package/.claude/agents/reengineer-squad/boss.md +0 -113
  406. package/.claude/agents/reengineer-squad/critic-architect.md +0 -132
  407. package/.claude/agents/reengineer-squad/git-manager.md +0 -145
  408. package/.claude/agents/reengineer-squad/idea-generator.md +0 -95
  409. package/.claude/agents/reengineer-squad/implementer.md +0 -112
  410. package/.claude/agents/reengineer-squad/integration-planner.md +0 -112
  411. package/.claude/agents/reengineer-squad/source-analyst.md +0 -103
  412. package/.claude/agents/reengineer-squad/target-analyst.md +0 -118
  413. package/.claude/agents/reengineer-squad/tester.md +0 -105
  414. package/.claude/agents/sparc/architecture.md +0 -453
  415. package/.claude/agents/sparc/pseudocode.md +0 -299
  416. package/.claude/agents/sparc/refinement.md +0 -504
  417. package/.claude/agents/sparc/specification.md +0 -258
  418. package/.claude/agents/templates/implementer-sparc-coder.md +0 -231
  419. package/.claude/commands/sparc/analyzer.md +0 -35
  420. package/.claude/commands/sparc/architect.md +0 -36
  421. package/.claude/commands/sparc/ask.md +0 -56
  422. package/.claude/commands/sparc/batch-executor.md +0 -37
  423. package/.claude/commands/sparc/code.md +0 -48
  424. package/.claude/commands/sparc/coder.md +0 -37
  425. package/.claude/commands/sparc/debug.md +0 -42
  426. package/.claude/commands/sparc/debugger.md +0 -37
  427. package/.claude/commands/sparc/designer.md +0 -36
  428. package/.claude/commands/sparc/devops.md +0 -68
  429. package/.claude/commands/sparc/docs-writer.md +0 -39
  430. package/.claude/commands/sparc/documenter.md +0 -37
  431. package/.claude/commands/sparc/innovator.md +0 -37
  432. package/.claude/commands/sparc/integration.md +0 -42
  433. package/.claude/commands/sparc/mcp.md +0 -76
  434. package/.claude/commands/sparc/memory-manager.md +0 -57
  435. package/.claude/commands/sparc/optimizer.md +0 -37
  436. package/.claude/commands/sparc/orchestrator.md +0 -70
  437. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +0 -42
  438. package/.claude/commands/sparc/refinement-optimization-mode.md +0 -42
  439. package/.claude/commands/sparc/researcher.md +0 -37
  440. package/.claude/commands/sparc/reviewer.md +0 -37
  441. package/.claude/commands/sparc/security-review.md +0 -39
  442. package/.claude/commands/sparc/sparc-modes.md +0 -120
  443. package/.claude/commands/sparc/sparc.md +0 -71
  444. package/.claude/commands/sparc/spec-pseudocode.md +0 -39
  445. package/.claude/commands/sparc/supabase-admin.md +0 -301
  446. package/.claude/commands/sparc/swarm-coordinator.md +0 -50
  447. package/.claude/commands/sparc/tdd.md +0 -37
  448. package/.claude/commands/sparc/tester.md +0 -37
  449. package/.claude/commands/sparc/tutorial.md +0 -38
  450. package/.claude/commands/sparc/workflow-manager.md +0 -37
  451. package/.claude/commands/sparc.md +0 -112
  452. package/.claude/helpers/auto-memory-hook.mjs +0 -503
  453. package/.claude/skills/sparc-methodology/SKILL.md +0 -950
  454. package/dist/src/capabilities/enrichment.d.ts +0 -44
  455. package/dist/src/capabilities/enrichment.d.ts.map +0 -1
  456. package/dist/src/capabilities/enrichment.js +0 -141
  457. package/dist/src/capabilities/enrichment.js.map +0 -1
  458. package/dist/src/commands/analyze-boundaries.d.ts +0 -14
  459. package/dist/src/commands/analyze-boundaries.d.ts.map +0 -1
  460. package/dist/src/commands/analyze-boundaries.js +0 -295
  461. package/dist/src/commands/analyze-boundaries.js.map +0 -1
  462. package/dist/src/commands/analyze-graph.d.ts +0 -14
  463. package/dist/src/commands/analyze-graph.d.ts.map +0 -1
  464. package/dist/src/commands/analyze-graph.js +0 -304
  465. package/dist/src/commands/analyze-graph.js.map +0 -1
  466. package/dist/src/commands/claims.d.ts +0 -10
  467. package/dist/src/commands/claims.d.ts.map +0 -1
  468. package/dist/src/commands/claims.js +0 -650
  469. package/dist/src/commands/claims.js.map +0 -1
  470. package/dist/src/commands/daemon.d.ts +0 -8
  471. package/dist/src/commands/daemon.d.ts.map +0 -1
  472. package/dist/src/commands/daemon.js +0 -681
  473. package/dist/src/commands/daemon.js.map +0 -1
  474. package/dist/src/commands/deployment.d.ts +0 -10
  475. package/dist/src/commands/deployment.d.ts.map +0 -1
  476. package/dist/src/commands/deployment.js +0 -706
  477. package/dist/src/commands/deployment.js.map +0 -1
  478. package/dist/src/commands/enrich.d.ts +0 -10
  479. package/dist/src/commands/enrich.d.ts.map +0 -1
  480. package/dist/src/commands/enrich.js +0 -58
  481. package/dist/src/commands/enrich.js.map +0 -1
  482. package/dist/src/commands/issues.d.ts +0 -21
  483. package/dist/src/commands/issues.d.ts.map +0 -1
  484. package/dist/src/commands/issues.js +0 -575
  485. package/dist/src/commands/issues.js.map +0 -1
  486. package/dist/src/commands/workflow.d.ts +0 -8
  487. package/dist/src/commands/workflow.d.ts.map +0 -1
  488. package/dist/src/commands/workflow.js +0 -677
  489. package/dist/src/commands/workflow.js.map +0 -1
  490. package/dist/src/mcp-tools/workflow-tools.d.ts +0 -8
  491. package/dist/src/mcp-tools/workflow-tools.d.ts.map +0 -1
  492. package/dist/src/mcp-tools/workflow-tools.js +0 -717
  493. package/dist/src/mcp-tools/workflow-tools.js.map +0 -1
  494. package/dist/src/services/claim-service.d.ts +0 -198
  495. package/dist/src/services/claim-service.d.ts.map +0 -1
  496. package/dist/src/services/claim-service.js +0 -890
  497. package/dist/src/services/claim-service.js.map +0 -1
  498. package/dist/src/services/headless-worker-executor.d.ts +0 -311
  499. package/dist/src/services/headless-worker-executor.d.ts.map +0 -1
  500. package/dist/src/services/headless-worker-executor.js +0 -1183
  501. package/dist/src/services/headless-worker-executor.js.map +0 -1
  502. package/dist/src/services/worker-daemon.d.ts +0 -248
  503. package/dist/src/services/worker-daemon.d.ts.map +0 -1
  504. package/dist/src/services/worker-daemon.js +0 -1417
  505. package/dist/src/services/worker-daemon.js.map +0 -1
  506. package/dist/src/ui/.monomind/capture/active-run.json +0 -1
  507. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.convs.jsonl +0 -3
  508. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/real-events-1782290897.jsonl +0 -11
  509. package/dist/src/ui/.monomind/orgs/system-trial-qa/runs/rigid-qa-restart-1782288201.jsonl +0 -540
  510. package/dist/src/ui/.monomind/orgs/system-trial-qa-threads.jsonl +0 -3
  511. package/dist/src/ui/.monomind/orgs/test-event-fix/runs/rigid-qa-restart-1782288201.jsonl +0 -2
@@ -7,8 +7,10 @@
7
7
  import { join, resolve, sep } from 'path';
8
8
  import { execSync } from 'child_process';
9
9
  import { statSync } from 'fs';
10
+ import { randomUUID } from 'crypto';
10
11
  import { getProjectCwd } from './types.js';
11
12
  let _cachedDbPath;
13
+ let _cachedCwd;
12
14
  function _isValidDb(p) {
13
15
  try {
14
16
  return statSync(p).size >= 100;
@@ -18,15 +20,19 @@ function _isValidDb(p) {
18
20
  }
19
21
  }
20
22
  function getDbPath() {
21
- if (_cachedDbPath !== undefined)
22
- return _cachedDbPath ?? join(getProjectCwd(), '.monomind', 'monograph.db');
23
- const direct = join(getProjectCwd(), '.monomind', 'monograph.db');
23
+ const cwd = getProjectCwd();
24
+ // Invalidate cache when project root changes (e.g. MONOMIND_CWD set after initialize)
25
+ if (_cachedDbPath && _cachedCwd === cwd)
26
+ return _cachedDbPath;
27
+ _cachedCwd = cwd;
28
+ _cachedDbPath = undefined;
29
+ const direct = join(cwd, '.monomind', 'monograph.db');
24
30
  if (_isValidDb(direct)) {
25
31
  _cachedDbPath = direct;
26
32
  return direct;
27
33
  }
28
34
  try {
29
- const root = execSync('git rev-parse --show-toplevel', { cwd: getProjectCwd(), encoding: 'utf8' }).trim();
35
+ const root = execSync('git rev-parse --show-toplevel', { cwd, encoding: 'utf8' }).trim();
30
36
  const candidate = join(root, '.monomind', 'monograph.db');
31
37
  if (_isValidDb(candidate)) {
32
38
  _cachedDbPath = candidate;
@@ -34,12 +40,60 @@ function getDbPath() {
34
40
  }
35
41
  }
36
42
  catch { /* not in a git repo */ }
37
- _cachedDbPath = null;
43
+ // Don't cache failures — the DB may be created by a subsequent build
38
44
  return direct;
39
45
  }
40
46
  function text(t) {
41
47
  return { content: [{ type: 'text', text: t }] };
42
48
  }
49
+ function ensureDbExists() {
50
+ const p = getDbPath();
51
+ if (!_isValidDb(p)) {
52
+ throw new Error(`Monograph index not built yet. Run monograph_build first (path: ${p}).`);
53
+ }
54
+ return p;
55
+ }
56
+ // ── Active watcher registry ──────────────────────────────────────────────────
57
+ const _activeWatchers = new Map();
58
+ function applyPprRerank(db, seedNodes, damping, maxResults) {
59
+ const propagated = new Map();
60
+ for (const r of seedNodes) {
61
+ propagated.set(r.id, r.score);
62
+ }
63
+ const neighborStmt = db.prepare('SELECT target_id FROM edges WHERE source_id = @id');
64
+ for (const r of seedNodes) {
65
+ const neighbors = neighborStmt.all({ id: r.id });
66
+ for (const n of neighbors) {
67
+ const boost = r.score * damping;
68
+ const current = propagated.get(n.target_id) ?? 0;
69
+ propagated.set(n.target_id, Math.max(current, boost));
70
+ }
71
+ }
72
+ const seedIds = new Set(seedNodes.map(r => r.id));
73
+ const ranked = seedNodes.map(r => ({
74
+ ...r,
75
+ combinedScore: Math.max(r.score, propagated.get(r.id) ?? 0),
76
+ boostedByNeighbors: false,
77
+ }));
78
+ for (const [id, score] of propagated) {
79
+ if (!seedIds.has(id)) {
80
+ const node = db.prepare('SELECT id, name, label, file_path, start_line FROM nodes WHERE id = @id').get({ id });
81
+ if (node) {
82
+ ranked.push({
83
+ id: node.id, name: node.name, label: node.label,
84
+ filePath: node.file_path, startLine: node.start_line,
85
+ score: 0, combinedScore: score, boostedByNeighbors: true,
86
+ });
87
+ }
88
+ }
89
+ }
90
+ ranked.sort((a, b) => b.combinedScore - a.combinedScore);
91
+ return ranked.slice(0, maxResults).map(r => ({
92
+ id: r.id, name: r.name, label: r.label,
93
+ filePath: r.filePath, startLine: r.startLine,
94
+ score: r.combinedScore, boostedByNeighbors: r.boostedByNeighbors,
95
+ }));
96
+ }
43
97
  // ── monograph_build ───────────────────────────────────────────────────────────
44
98
  const monographBuildTool = {
45
99
  name: 'monograph_build',
@@ -78,13 +132,18 @@ const monographQueryTool = {
78
132
  query: { type: 'string', description: 'Search terms' },
79
133
  limit: { type: 'number', description: 'Max results (default 20)' },
80
134
  label: { type: 'string', description: 'Filter by node type: Class, Function, Method, etc.' },
135
+ rerank: { type: 'boolean', description: 'Apply HippoRAG-style PPR graph reranking to boost neighbors of top hits (default: true)' },
136
+ damping: { type: 'number', description: 'PPR damping factor when rerank=true (0-1, default 0.5)' },
81
137
  },
82
138
  required: ['query'],
83
139
  },
84
140
  handler: async (input) => {
141
+ const dbPath = getDbPath();
142
+ if (!_isValidDb(dbPath))
143
+ return text('Monograph index not built yet. Run monograph_build first.');
85
144
  const { openDb, closeDb, ftsSearch } = await import('@monoes/monograph');
86
145
  const { hybridQuery } = await import('@monoes/monograph');
87
- const db = openDb(getDbPath());
146
+ const db = openDb(dbPath);
88
147
  try {
89
148
  // Cap limit: passed directly to SQLite queries and hybridQuery; an
90
149
  // unlimited value saturates memory with rows.
@@ -101,19 +160,49 @@ const monographQueryTool = {
101
160
  ? rawQuery.slice(0, MAX_MONOGRAPH_QUERY_LEN)
102
161
  : rawQuery;
103
162
  const label = input.label;
163
+ const rerank = input.rerank ?? true;
164
+ const damping = input.damping ?? 0.5;
104
165
  if (process.env['MONOGRAPH_EMBEDDINGS'] === 'true') {
105
- const results = await hybridQuery(db, query, { limit, label });
166
+ const results = await hybridQuery(db, query, { limit: rerank ? limit * 2 : limit, label });
106
167
  if (results.length === 0)
107
168
  return text('No results found.');
169
+ if (rerank) {
170
+ const seeds = results.map(r => ({
171
+ id: r.id, name: r.name ?? r.id, label: r.label ?? '?',
172
+ filePath: r.filePath ?? '', startLine: r.startLine ?? null,
173
+ score: r.score,
174
+ }));
175
+ const reranked = applyPprRerank(db, seeds, damping, limit);
176
+ const lines = reranked.map(r => {
177
+ const loc = r.filePath ? (r.startLine != null ? `${r.filePath}:${r.startLine}` : r.filePath) : '';
178
+ const tag = r.boostedByNeighbors ? ' [PPR-boosted]' : '';
179
+ return `[${r.label}] ${r.name} ${loc} (score: ${r.score.toFixed(4)})${tag}`;
180
+ });
181
+ return text(lines.join('\n'));
182
+ }
108
183
  const lines = results.map(r => {
109
184
  const loc = r.filePath ? (r.startLine != null ? `${r.filePath}:${r.startLine}` : r.filePath) : '';
110
185
  return `[${r.label ?? '?'}] ${r.name ?? r.id} ${loc} (score: ${r.score.toFixed(4)})`;
111
186
  });
112
187
  return text(lines.join('\n'));
113
188
  }
114
- const results = ftsSearch(db, query, limit, label);
189
+ const results = ftsSearch(db, query, rerank ? limit * 2 : limit, label);
115
190
  if (results.length === 0)
116
191
  return text('No results found.');
192
+ if (rerank) {
193
+ const seeds = results.map(r => ({
194
+ id: r.id, name: r.name, label: r.label,
195
+ filePath: r.filePath ?? '', startLine: r.startLine ?? null,
196
+ score: Math.abs(r.rank),
197
+ }));
198
+ const reranked = applyPprRerank(db, seeds, damping, limit);
199
+ const lines = reranked.map(r => {
200
+ const loc = r.filePath ? (r.startLine != null ? `${r.filePath}:${r.startLine}` : r.filePath) : '';
201
+ const tag = r.boostedByNeighbors ? ' [PPR-boosted]' : '';
202
+ return `[${r.label}] ${r.name} ${loc} (score: ${r.score.toFixed(3)})${tag}`;
203
+ });
204
+ return text(lines.join('\n'));
205
+ }
117
206
  const lines = results.map(r => {
118
207
  const loc = r.filePath ? (r.startLine != null ? `${r.filePath}:${r.startLine}` : r.filePath) : '';
119
208
  return `[${r.label}] ${r.name} ${loc} (score: ${r.rank.toFixed(3)})`;
@@ -131,8 +220,11 @@ const monographStatsTool = {
131
220
  description: 'Show node/edge/community counts and index freshness.',
132
221
  inputSchema: { type: 'object', properties: {} },
133
222
  handler: async () => {
223
+ const dbPath = getDbPath();
224
+ if (!_isValidDb(dbPath))
225
+ return text('Monograph index not built yet. Run monograph_build first.');
134
226
  const { openDb, closeDb, countNodes, countEdges } = await import('@monoes/monograph');
135
- const db = openDb(getDbPath());
227
+ const db = openDb(dbPath);
136
228
  try {
137
229
  const nodes = countNodes(db);
138
230
  const edges = countEdges(db);
@@ -201,8 +293,11 @@ const monographGodNodesTool = {
201
293
  properties: { limit: { type: 'number', description: 'Max nodes to return (default 20)' } },
202
294
  },
203
295
  handler: async (input) => {
296
+ const dbPath = getDbPath();
297
+ if (!_isValidDb(dbPath))
298
+ return text('Monograph index not built yet. Run monograph_build first.');
204
299
  const { openDb, closeDb } = await import('@monoes/monograph');
205
- const db = openDb(getDbPath());
300
+ const db = openDb(dbPath);
206
301
  try {
207
302
  // Cap limit: passed directly to the SQL LIMIT clause.
208
303
  const MAX_GOD_NODES_LIMIT = 1_000;
@@ -388,12 +483,27 @@ const monographSuggestTool = {
388
483
  properties: {
389
484
  task: { type: 'string', description: 'Optional task description for task-relevance scoring' },
390
485
  limit: { type: 'number', description: 'Max questions (default 10)' },
486
+ checkStaleness: { type: 'boolean', description: 'Check index staleness first and trigger a background rebuild when the index is behind HEAD. Appends a _staleness annotation to the result. (default false)' },
391
487
  },
392
488
  },
393
489
  handler: async (input) => {
490
+ // Health-aware mode (formerly monograph_suggest_auto): check staleness and
491
+ // trigger a background rebuild if the index is behind HEAD.
492
+ let stalenessAnnotation = '';
493
+ if (input.checkStaleness === true) {
494
+ const repoPath = getProjectCwd();
495
+ const stalenessResult = await computeCommitsBehind(repoPath);
496
+ const commitsBehind = stalenessResult?.commitsBehind ?? 0;
497
+ const triggered = triggerBackgroundBuildIfNeeded(repoPath, commitsBehind, STALENESS_THRESHOLD + 1);
498
+ const status = triggered ? 'building' : commitsBehind === 0 ? 'fresh' : 'stale';
499
+ stalenessAnnotation = `\n_staleness: ${JSON.stringify({ commitsBehind, status, triggered })}`;
500
+ }
501
+ const dbPath = getDbPath();
502
+ if (!_isValidDb(dbPath))
503
+ return text('Monograph index not built yet. Run monograph_build first.' + stalenessAnnotation);
394
504
  const { openDb, closeDb } = await import('@monoes/monograph');
395
505
  const { hybridQuery } = await import('@monoes/monograph');
396
- const db = openDb(getDbPath());
506
+ const db = openDb(dbPath);
397
507
  try {
398
508
  // Cap limit and task: limit is passed directly to SQL LIMIT clause;
399
509
  // task is forwarded to hybridQuery (embedding path) or FTS.
@@ -421,7 +531,7 @@ const monographSuggestTool = {
421
531
  const hits = await hybridQuery(db, task, { limit: 20 });
422
532
  const hitIds = new Set(hits.map(h => h.id));
423
533
  if (hitIds.size === 0) {
424
- return text('No suggestions for this task. Run monograph_build first or try a different query.');
534
+ return text('No suggestions for this task. Run monograph_build first or try a different query.' + stalenessAnnotation);
425
535
  }
426
536
  const rows = db.prepare(`
427
537
  SELECT e.relation, e.confidence, n1.name as src, n2.name as tgt,
@@ -436,7 +546,7 @@ const monographSuggestTool = {
436
546
  LIMIT 100
437
547
  `).all(...[...hitIds], ...[...hitIds]);
438
548
  const questions = rows.map(formatSuggestion);
439
- return text(questions.slice(0, limit).join('\n') || 'No suggestions for this task. Run monograph_build first.');
549
+ return text((questions.slice(0, limit).join('\n') || 'No suggestions for this task. Run monograph_build first.') + stalenessAnnotation);
440
550
  }
441
551
  const rows = db.prepare(`
442
552
  SELECT e.relation, e.confidence, n1.name as src, n2.name as tgt,
@@ -454,7 +564,7 @@ const monographSuggestTool = {
454
564
  }));
455
565
  if (task)
456
566
  scored = scored.sort((a, b) => b.relevance - a.relevance);
457
- return text(scored.slice(0, limit).map(s => s.q).join('\n') || 'No suggestions. Run monograph_build first.');
567
+ return text((scored.slice(0, limit).map(s => s.q).join('\n') || 'No suggestions. Run monograph_build first.') + stalenessAnnotation);
458
568
  }
459
569
  finally {
460
570
  closeDb(db);
@@ -521,11 +631,15 @@ const monographWatchTool = {
521
631
  handler: async (input) => {
522
632
  const { MonographWatcher } = await import('@monoes/monograph');
523
633
  const repoPath = input.path ?? getProjectCwd();
634
+ if (_activeWatchers.has(repoPath)) {
635
+ return text(`Monograph watcher already running for ${repoPath}.`);
636
+ }
524
637
  const watcher = new MonographWatcher(repoPath);
525
638
  watcher.on('monograph:updated', (_paths) => {
526
639
  import('@monoes/monograph').then(({ buildAsync }) => buildAsync(repoPath)).catch(() => { });
527
640
  });
528
641
  await watcher.start();
642
+ _activeWatchers.set(repoPath, watcher);
529
643
  return text(`Monograph watcher started for ${repoPath}. Watching for file changes...`);
530
644
  },
531
645
  };
@@ -533,9 +647,21 @@ const monographWatchTool = {
533
647
  const monographWatchStopTool = {
534
648
  name: 'monograph_watch_stop',
535
649
  description: 'Stop the Monograph file watcher.',
536
- inputSchema: { type: 'object', properties: {} },
537
- handler: async () => {
538
- return text('Watcher stop requested. (Restart MCP server to fully clear watchers.)');
650
+ inputSchema: {
651
+ type: 'object',
652
+ properties: {
653
+ path: { type: 'string', description: 'Repo path whose watcher to stop (defaults to project cwd)' },
654
+ },
655
+ },
656
+ handler: async (input) => {
657
+ const repoPath = input.path ?? getProjectCwd();
658
+ const watcher = _activeWatchers.get(repoPath);
659
+ if (!watcher) {
660
+ return text(`No active watcher found for ${repoPath}.`);
661
+ }
662
+ await watcher.stop();
663
+ _activeWatchers.delete(repoPath);
664
+ return text(`Monograph watcher stopped for ${repoPath}.`);
539
665
  },
540
666
  };
541
667
  // ── monograph_report ──────────────────────────────────────────────────────────
@@ -620,14 +746,14 @@ async function computeCommitsBehind(repoPath) {
620
746
  }
621
747
  }
622
748
  /**
623
- * Shared staleness threshold: both monograph_staleness and monograph_suggest_auto
749
+ * Shared staleness threshold: both monograph_staleness and monograph_suggest (checkStaleness)
624
750
  * trigger a background rebuild only when the index is more than this many commits behind HEAD.
625
751
  * Using a shared constant prevents conflicting rebuild pressure during active dev sessions.
626
752
  */
627
753
  const STALENESS_THRESHOLD = 10;
628
754
  /**
629
755
  * Fire-and-forget background rebuild. Uses a module-level guard so concurrent
630
- * MCP tool calls (e.g. repeated monograph_suggest_auto) don't pile up builds.
756
+ * MCP tool calls (e.g. repeated monograph_suggest checkStaleness) don't pile up builds.
631
757
  * threshold: minimum commitsBehind to trigger (default STALENESS_THRESHOLD + 1).
632
758
  */
633
759
  function triggerBackgroundBuildIfNeeded(repoPath, commitsBehind, threshold = STALENESS_THRESHOLD + 1) {
@@ -799,7 +925,7 @@ const monographExportTool = {
799
925
  required: ['format'],
800
926
  },
801
927
  handler: async (input) => {
802
- const { openDb, closeDb, toJson, toSvg, toGraphml, toCypher } = await import('@monoes/monograph');
928
+ const { openDb, closeDb, toJson, toSvg, toGraphml, toCypher, toObsidian, toCanvas } = await import('@monoes/monograph');
803
929
  const { writeFileSync, mkdirSync } = await import('fs');
804
930
  const db = openDb(getDbPath());
805
931
  try {
@@ -833,6 +959,15 @@ const monographExportTool = {
833
959
  writeFileSync(p, toCypher(nodes, edges));
834
960
  return text(`Exported Cypher to ${p}`);
835
961
  }
962
+ if (fmt === 'obsidian') {
963
+ toObsidian(nodes, edges, outDir);
964
+ return text(`Exported Obsidian vault to ${outDir}`);
965
+ }
966
+ if (fmt === 'canvas') {
967
+ const p = join(outDir, 'graph.canvas');
968
+ writeFileSync(p, toCanvas(nodes, edges));
969
+ return text(`Exported Canvas to ${p}`);
970
+ }
836
971
  return text(`Format ${fmt} export written to ${outDir}`);
837
972
  }
838
973
  finally {
@@ -1180,21 +1315,6 @@ const monographApiImpactTool = {
1180
1315
  }
1181
1316
  },
1182
1317
  };
1183
- // ── monograph_embed ───────────────────────────────────────────────────────────
1184
- const monographEmbedTool = {
1185
- name: 'monograph_embed',
1186
- description: 'DEPRECATED — embeddings are disabled; monograph uses BM25 (FTS5) search. This tool is a no-op kept for backward compatibility.',
1187
- inputSchema: {
1188
- type: 'object',
1189
- properties: {
1190
- codeOnly: { type: 'boolean', description: 'Ignored (embeddings are disabled)' },
1191
- force: { type: 'boolean', description: 'Ignored (embeddings are disabled)' },
1192
- },
1193
- },
1194
- handler: async () => {
1195
- return text('Embeddings are disabled — monograph uses BM25 (FTS5) search; this tool is deprecated and does nothing. Use monograph_query instead.');
1196
- },
1197
- };
1198
1318
  // ── monograph_cypher ──────────────────────────────────────────────────────────
1199
1319
  const monographCypherTool = {
1200
1320
  name: 'monograph_cypher',
@@ -1814,39 +1934,6 @@ const monographNeighborsTool = {
1814
1934
  }
1815
1935
  },
1816
1936
  };
1817
- // ── monograph_suggest_auto ────────────────────────────────────────────────────
1818
- const monographSuggestAutoTool = {
1819
- name: 'monograph_suggest_auto',
1820
- description: 'Like monograph_suggest but health-aware: checks staleness first and triggers a background rebuild when the index is behind HEAD before returning suggestions. Result includes a _staleness annotation.',
1821
- inputSchema: {
1822
- type: 'object',
1823
- properties: {
1824
- task: { type: 'string', description: 'Optional task description for task-relevance scoring' },
1825
- limit: { type: 'number', description: 'Max questions (default 10)' },
1826
- },
1827
- },
1828
- handler: async (input) => {
1829
- const repoPath = getProjectCwd();
1830
- // Check staleness and trigger rebuild if needed (threshold: STALENESS_THRESHOLD commits).
1831
- const stalenessResult = await computeCommitsBehind(repoPath);
1832
- const commitsBehind = stalenessResult?.commitsBehind ?? 0;
1833
- const triggered = triggerBackgroundBuildIfNeeded(repoPath, commitsBehind, STALENESS_THRESHOLD + 1);
1834
- const stalenessStatus = triggered ? 'building' : commitsBehind === 0 ? 'fresh' : 'stale';
1835
- // Delegate to the base suggest tool — no logic duplication.
1836
- const baseResult = await monographSuggestTool.handler(input);
1837
- // Append staleness annotation to the text content.
1838
- const stalenessAnnotation = `\n_staleness: ${JSON.stringify({ commitsBehind, status: stalenessStatus, triggered })}`;
1839
- if (baseResult && Array.isArray(baseResult.content)) {
1840
- const content = baseResult.content;
1841
- if (content.length > 0 && content[0].type === 'text') {
1842
- content[0].text += stalenessAnnotation;
1843
- }
1844
- return baseResult;
1845
- }
1846
- return baseResult;
1847
- },
1848
- };
1849
- // ── Export all tools ──────────────────────────────────────────────────────────
1850
1937
  // ── monograph_dead_code ──────────────────────────────────────────────────────
1851
1938
  const monographDeadCodeTool = {
1852
1939
  name: 'monograph_dead_code',
@@ -2048,51 +2135,239 @@ function findStaleDist(repoPath) {
2048
2135
  findings,
2049
2136
  };
2050
2137
  }
2051
- export const monographTools = [
2138
+ // ── monograph_agent_history ───────────────────────────────────────────────────
2139
+ const monographAgentHistoryTool = {
2140
+ name: 'monograph_agent_history',
2141
+ description: 'Query past agent interactions by org, type, session, or time range. Returns rows ordered by timestamp descending.',
2142
+ inputSchema: {
2143
+ type: 'object',
2144
+ properties: {
2145
+ org_name: { type: 'string', description: 'Filter by org name' },
2146
+ agent_type: { type: 'string', description: 'Filter by agent type' },
2147
+ session_id: { type: 'string', description: 'Filter by session id' },
2148
+ since: { type: 'number', description: 'Unix timestamp (ms) — only interactions after this time' },
2149
+ limit: { type: 'number', description: 'Max rows to return (default 50)' },
2150
+ },
2151
+ },
2152
+ handler: async (input) => {
2153
+ const { openDb, closeDb } = await import('@monoes/monograph');
2154
+ const db = openDb(getDbPath());
2155
+ try {
2156
+ const conditions = [];
2157
+ const params = {};
2158
+ if (typeof input.org_name === 'string') {
2159
+ conditions.push('org_name = @org_name');
2160
+ params.org_name = input.org_name;
2161
+ }
2162
+ if (typeof input.agent_type === 'string') {
2163
+ conditions.push('agent_type = @agent_type');
2164
+ params.agent_type = input.agent_type;
2165
+ }
2166
+ if (typeof input.session_id === 'string') {
2167
+ conditions.push('session_id = @session_id');
2168
+ params.session_id = input.session_id;
2169
+ }
2170
+ if (typeof input.since === 'number') {
2171
+ conditions.push('timestamp >= @since');
2172
+ params.since = input.since;
2173
+ }
2174
+ const MAX_LIMIT = 1_000;
2175
+ const rawLimit = input.limit ?? 50;
2176
+ const limit = Number.isFinite(rawLimit) && rawLimit > 0
2177
+ ? Math.min(Math.floor(rawLimit), MAX_LIMIT)
2178
+ : 50;
2179
+ params.limit = limit;
2180
+ const where = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';
2181
+ const sql = `SELECT * FROM agent_interactions ${where} ORDER BY timestamp DESC LIMIT @limit`;
2182
+ const rows = db.prepare(sql).all(params);
2183
+ if (rows.length === 0)
2184
+ return text('No agent interactions found.');
2185
+ return text(JSON.stringify(rows, null, 2));
2186
+ }
2187
+ finally {
2188
+ closeDb(db);
2189
+ }
2190
+ },
2191
+ };
2192
+ // ── monograph_agent_patterns ──────────────────────────────────────────────────
2193
+ const monographAgentPatternsTool = {
2194
+ name: 'monograph_agent_patterns',
2195
+ description: 'Aggregate agent interaction patterns: success rates, costs, and token usage grouped by agent type, org, or session.',
2196
+ inputSchema: {
2197
+ type: 'object',
2198
+ properties: {
2199
+ group_by: {
2200
+ type: 'string',
2201
+ description: "Column to group by: 'agent_type' | 'org_name' | 'session_id'",
2202
+ },
2203
+ since: { type: 'number', description: 'Unix timestamp (ms) — only interactions after this time' },
2204
+ min_count: { type: 'number', description: 'Minimum interaction count to include in results (default 2)' },
2205
+ },
2206
+ required: ['group_by'],
2207
+ },
2208
+ handler: async (input) => {
2209
+ const groupBy = input.group_by;
2210
+ const ALLOWED_GROUP_COLUMNS = new Set(['agent_type', 'org_name', 'session_id']);
2211
+ if (!ALLOWED_GROUP_COLUMNS.has(groupBy)) {
2212
+ return text(`Invalid group_by: ${groupBy}. Must be one of: agent_type, org_name, session_id`);
2213
+ }
2214
+ const { openDb, closeDb } = await import('@monoes/monograph');
2215
+ const db = openDb(getDbPath());
2216
+ try {
2217
+ const params = {};
2218
+ const conditions = [];
2219
+ if (typeof input.since === 'number') {
2220
+ conditions.push('timestamp >= @since');
2221
+ params.since = input.since;
2222
+ }
2223
+ const minCount = typeof input.min_count === 'number' && input.min_count > 0
2224
+ ? Math.floor(input.min_count)
2225
+ : 2;
2226
+ params.min_count = minCount;
2227
+ const where = conditions.length ? `WHERE ${conditions.join(' AND ')}` : '';
2228
+ const sql = `
2229
+ SELECT
2230
+ ${groupBy} AS group_key,
2231
+ COUNT(*) AS interaction_count,
2232
+ AVG(success) AS success_rate,
2233
+ SUM(tokens_in) AS total_tokens_in,
2234
+ SUM(tokens_out) AS total_tokens_out,
2235
+ SUM(cost_usd) AS total_cost_usd,
2236
+ AVG(duration_ms) AS avg_duration_ms
2237
+ FROM agent_interactions
2238
+ ${where}
2239
+ GROUP BY ${groupBy}
2240
+ HAVING COUNT(*) >= @min_count
2241
+ ORDER BY interaction_count DESC
2242
+ `;
2243
+ const rows = db.prepare(sql).all(params);
2244
+ if (rows.length === 0)
2245
+ return text('No agent interaction patterns found.');
2246
+ return text(JSON.stringify(rows, null, 2));
2247
+ }
2248
+ finally {
2249
+ closeDb(db);
2250
+ }
2251
+ },
2252
+ };
2253
+ // ── monograph_agent_record ────────────────────────────────────────────────────
2254
+ const monographAgentRecordTool = {
2255
+ name: 'monograph_agent_record',
2256
+ description: 'Record an agent interaction (called by capture hooks).',
2257
+ inputSchema: {
2258
+ type: 'object',
2259
+ properties: {
2260
+ session_id: { type: 'string', description: 'Session id' },
2261
+ agent_type: { type: 'string', description: 'Agent type' },
2262
+ org_name: { type: 'string', description: 'Org name' },
2263
+ parent_agent: { type: 'string', description: 'Parent agent name/type, if spawned by another agent' },
2264
+ prompt_summary: { type: 'string', description: 'Short summary of the prompt given to the agent' },
2265
+ result_summary: { type: 'string', description: 'Short summary of the agent result' },
2266
+ tokens_in: { type: 'number', description: 'Input tokens consumed (default 0)' },
2267
+ tokens_out: { type: 'number', description: 'Output tokens produced (default 0)' },
2268
+ cost_usd: { type: 'number', description: 'Cost in USD (default 0)' },
2269
+ success: { type: 'boolean', description: 'Whether the interaction succeeded (default true)' },
2270
+ duration_ms: { type: 'number', description: 'Duration in milliseconds (default 0)' },
2271
+ },
2272
+ required: ['session_id', 'agent_type'],
2273
+ },
2274
+ handler: async (input) => {
2275
+ const { openDb, closeDb } = await import('@monoes/monograph');
2276
+ const db = openDb(getDbPath());
2277
+ try {
2278
+ const id = randomUUID();
2279
+ const timestamp = Date.now();
2280
+ db.prepare(`
2281
+ INSERT INTO agent_interactions (
2282
+ id, session_id, org_name, agent_type, parent_agent,
2283
+ prompt_summary, result_summary, tokens_in, tokens_out,
2284
+ cost_usd, success, duration_ms, timestamp
2285
+ ) VALUES (
2286
+ @id, @session_id, @org_name, @agent_type, @parent_agent,
2287
+ @prompt_summary, @result_summary, @tokens_in, @tokens_out,
2288
+ @cost_usd, @success, @duration_ms, @timestamp
2289
+ )
2290
+ `).run({
2291
+ id,
2292
+ session_id: input.session_id,
2293
+ org_name: input.org_name ?? null,
2294
+ agent_type: input.agent_type,
2295
+ parent_agent: input.parent_agent ?? null,
2296
+ prompt_summary: input.prompt_summary ?? null,
2297
+ result_summary: input.result_summary ?? null,
2298
+ tokens_in: input.tokens_in ?? 0,
2299
+ tokens_out: input.tokens_out ?? 0,
2300
+ cost_usd: input.cost_usd ?? 0,
2301
+ success: input.success === false ? 0 : 1,
2302
+ duration_ms: input.duration_ms ?? 0,
2303
+ timestamp,
2304
+ });
2305
+ return text(`Recorded agent interaction ${id} for ${input.agent_type} at ${timestamp}`);
2306
+ }
2307
+ finally {
2308
+ closeDb(db);
2309
+ }
2310
+ },
2311
+ };
2312
+ // Advanced tools are only exposed over MCP when MONOGRAPH_MCP_ADVANCED=1.
2313
+ const ADVANCED = process.env['MONOGRAPH_MCP_ADVANCED'] === '1';
2314
+ /** Default-exposed core tools (19). */
2315
+ const coreMonographTools = [
2052
2316
  monographBuildTool,
2053
2317
  monographQueryTool,
2318
+ monographSuggestTool,
2319
+ monographImpactTool,
2320
+ monographContextTool,
2321
+ monographNeighborsTool,
2322
+ monographDeadCodeTool,
2054
2323
  monographStatsTool,
2055
2324
  monographHealthTool,
2325
+ monographAugmentTool,
2056
2326
  monographGodNodesTool,
2327
+ monographDetectChangesTool,
2057
2328
  monographGetNodeTool,
2329
+ monographApiImpactTool,
2330
+ monographRouteMapTool,
2331
+ monographStalenessTool,
2332
+ monographWatchTool,
2333
+ monographWatchStopTool,
2334
+ monographDoctorTool,
2335
+ ];
2336
+ /** Advanced tools — gated behind MONOGRAPH_MCP_ADVANCED=1. */
2337
+ const advancedMonographTools = [
2338
+ monographCypherTool,
2058
2339
  monographShortestPathTool,
2059
2340
  monographCommunityTool,
2060
2341
  monographSurprisesTool,
2061
- monographSuggestTool,
2062
- monographSuggestAutoTool,
2342
+ monographShapeCheckTool,
2343
+ monographRenameTool,
2344
+ monographToolMapTool,
2345
+ monographServeTool,
2063
2346
  monographVisualizeTool,
2064
- monographWatchTool,
2065
- monographWatchStopTool,
2066
- monographReportTool,
2067
- monographStalenessTool,
2068
2347
  monographSnapshotTool,
2069
2348
  monographDiffTool,
2070
- monographNeighborsTool,
2349
+ monographReportTool,
2071
2350
  monographExportTool,
2072
- monographContextTool,
2073
- monographImpactTool,
2074
- monographDetectChangesTool,
2075
- monographRenameTool,
2076
- monographRouteMapTool,
2077
- monographApiImpactTool,
2078
- monographCypherTool,
2079
- monographEmbedTool,
2080
- monographGroupListTool,
2081
- monographGroupQueryTool,
2082
2351
  monographWikiTool,
2083
2352
  monographWikiBuildTool,
2084
- monographServeTool,
2085
- monographToolMapTool,
2086
- monographShapeCheckTool,
2087
- monographGroupSyncTool,
2088
- monographAugmentTool,
2089
- monographInjectContextTool,
2090
2353
  monographSkillGenTool,
2091
2354
  monographInstallSkillsTool,
2092
- monographDoctorTool,
2093
- monographListReposTool,
2355
+ monographInjectContextTool,
2356
+ monographGroupListTool,
2357
+ monographGroupQueryTool,
2358
+ monographGroupSyncTool,
2094
2359
  monographGroupContractsTool,
2095
2360
  monographGroupStatusTool,
2096
- monographDeadCodeTool,
2361
+ monographListReposTool,
2362
+ monographAgentHistoryTool,
2363
+ monographAgentPatternsTool,
2364
+ monographAgentRecordTool,
2097
2365
  ];
2366
+ /**
2367
+ * Full tool list regardless of gating — used by the graphify compat shims,
2368
+ * which must resolve targets (e.g. monograph_community) even when the
2369
+ * advanced set is not exposed over MCP.
2370
+ */
2371
+ export const allMonographTools = [...coreMonographTools, ...advancedMonographTools];
2372
+ export const monographTools = ADVANCED ? allMonographTools : coreMonographTools;
2098
2373
  //# sourceMappingURL=monograph-tools.js.map