@flyingrobots/graft 0.7.0 → 0.8.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 (561) hide show
  1. package/CHANGELOG.md +153 -0
  2. package/README.md +33 -17
  3. package/bin/graft.js +26 -26
  4. package/dist/api/index.d.ts +3 -0
  5. package/dist/api/index.d.ts.map +1 -1
  6. package/dist/api/index.js +2 -0
  7. package/dist/api/index.js.map +1 -1
  8. package/dist/cli/cli-error.d.ts.map +1 -1
  9. package/dist/cli/cli-error.js +22 -3
  10. package/dist/cli/cli-error.js.map +1 -1
  11. package/dist/cli/command-parser.d.ts.map +1 -1
  12. package/dist/cli/command-parser.js +62 -6
  13. package/dist/cli/command-parser.js.map +1 -1
  14. package/dist/cli/dead-symbols-render.d.ts +2 -0
  15. package/dist/cli/dead-symbols-render.d.ts.map +1 -0
  16. package/dist/cli/dead-symbols-render.js +23 -0
  17. package/dist/cli/dead-symbols-render.js.map +1 -0
  18. package/dist/cli/doctor-render.d.ts +2 -0
  19. package/dist/cli/doctor-render.d.ts.map +1 -0
  20. package/dist/cli/doctor-render.js +80 -0
  21. package/dist/cli/doctor-render.js.map +1 -0
  22. package/dist/cli/entrypoint.d.ts +1 -0
  23. package/dist/cli/entrypoint.d.ts.map +1 -1
  24. package/dist/cli/entrypoint.js +1 -0
  25. package/dist/cli/entrypoint.js.map +1 -1
  26. package/dist/cli/git-graft-enhance-model.d.ts +33 -3
  27. package/dist/cli/git-graft-enhance-model.d.ts.map +1 -1
  28. package/dist/cli/git-graft-enhance-model.js +38 -0
  29. package/dist/cli/git-graft-enhance-model.js.map +1 -1
  30. package/dist/cli/git-graft-enhance-render.d.ts.map +1 -1
  31. package/dist/cli/git-graft-enhance-render.js +13 -0
  32. package/dist/cli/git-graft-enhance-render.js.map +1 -1
  33. package/dist/cli/git-graft-enhance.d.ts.map +1 -1
  34. package/dist/cli/git-graft-enhance.js +44 -1
  35. package/dist/cli/git-graft-enhance.js.map +1 -1
  36. package/dist/cli/index-cmd.d.ts +1 -0
  37. package/dist/cli/index-cmd.d.ts.map +1 -1
  38. package/dist/cli/index-cmd.js +3 -0
  39. package/dist/cli/index-cmd.js.map +1 -1
  40. package/dist/cli/init-client-config.d.ts.map +1 -1
  41. package/dist/cli/init-client-config.js +40 -4
  42. package/dist/cli/init-client-config.js.map +1 -1
  43. package/dist/cli/init-model.js +2 -2
  44. package/dist/cli/init-model.js.map +1 -1
  45. package/dist/cli/json-document.d.ts +1 -0
  46. package/dist/cli/json-document.d.ts.map +1 -1
  47. package/dist/cli/json-document.js +3 -0
  48. package/dist/cli/json-document.js.map +1 -1
  49. package/dist/cli/main.d.ts +2 -0
  50. package/dist/cli/main.d.ts.map +1 -1
  51. package/dist/cli/main.js +24 -2
  52. package/dist/cli/main.js.map +1 -1
  53. package/dist/cli/peer-command.d.ts.map +1 -1
  54. package/dist/cli/peer-command.js +25 -0
  55. package/dist/cli/peer-command.js.map +1 -1
  56. package/dist/cli/review-cooldown.d.ts +15 -0
  57. package/dist/cli/review-cooldown.d.ts.map +1 -0
  58. package/dist/cli/review-cooldown.js +136 -0
  59. package/dist/cli/review-cooldown.js.map +1 -0
  60. package/dist/cli/structural-blame-render.d.ts +2 -0
  61. package/dist/cli/structural-blame-render.d.ts.map +1 -0
  62. package/dist/cli/structural-blame-render.js +39 -0
  63. package/dist/cli/structural-blame-render.js.map +1 -0
  64. package/dist/cli/structural-review-render.d.ts +2 -0
  65. package/dist/cli/structural-review-render.d.ts.map +1 -0
  66. package/dist/cli/structural-review-render.js +56 -0
  67. package/dist/cli/structural-review-render.js.map +1 -0
  68. package/dist/cli/structural-test-coverage-render.d.ts +2 -0
  69. package/dist/cli/structural-test-coverage-render.d.ts.map +1 -0
  70. package/dist/cli/structural-test-coverage-render.js +46 -0
  71. package/dist/cli/structural-test-coverage-render.js.map +1 -0
  72. package/dist/contracts/capabilities.d.ts +9 -6
  73. package/dist/contracts/capabilities.d.ts.map +1 -1
  74. package/dist/contracts/capabilities.js +40 -1
  75. package/dist/contracts/capabilities.js.map +1 -1
  76. package/dist/contracts/causal-ontology.d.ts +17 -17
  77. package/dist/contracts/output-schema-cli.d.ts +103 -41
  78. package/dist/contracts/output-schema-cli.d.ts.map +1 -1
  79. package/dist/contracts/output-schema-cli.js +29 -0
  80. package/dist/contracts/output-schema-cli.js.map +1 -1
  81. package/dist/contracts/output-schema-fragments.d.ts +76 -76
  82. package/dist/contracts/output-schema-mcp.d.ts +87 -62
  83. package/dist/contracts/output-schema-mcp.d.ts.map +1 -1
  84. package/dist/contracts/output-schema-mcp.js +43 -21
  85. package/dist/contracts/output-schema-mcp.js.map +1 -1
  86. package/dist/contracts/output-schema-meta.d.ts +2 -2
  87. package/dist/contracts/output-schema-meta.d.ts.map +1 -1
  88. package/dist/contracts/output-schemas.d.ts +7 -7
  89. package/dist/contracts/output-schemas.d.ts.map +1 -1
  90. package/dist/contracts/output-schemas.js +69 -1
  91. package/dist/contracts/output-schemas.js.map +1 -1
  92. package/dist/git/version-guard.d.ts +17 -0
  93. package/dist/git/version-guard.d.ts.map +1 -0
  94. package/dist/git/version-guard.js +51 -0
  95. package/dist/git/version-guard.js.map +1 -0
  96. package/dist/hooks/posttooluse-read.js +3 -3
  97. package/dist/hooks/posttooluse-read.js.map +1 -1
  98. package/dist/hooks/pretooluse-read.js +1 -1
  99. package/dist/hooks/pretooluse-read.js.map +1 -1
  100. package/dist/mcp/burden.d.ts.map +1 -1
  101. package/dist/mcp/burden.js +2 -0
  102. package/dist/mcp/burden.js.map +1 -1
  103. package/dist/mcp/daemon-server.d.ts.map +1 -1
  104. package/dist/mcp/daemon-server.js +2 -0
  105. package/dist/mcp/daemon-server.js.map +1 -1
  106. package/dist/mcp/daemon-worker-child-pool.d.ts +2 -0
  107. package/dist/mcp/daemon-worker-child-pool.d.ts.map +1 -1
  108. package/dist/mcp/daemon-worker-child-pool.js +10 -3
  109. package/dist/mcp/daemon-worker-child-pool.js.map +1 -1
  110. package/dist/mcp/daemon-worker-pool.d.ts +1 -1
  111. package/dist/mcp/daemon-worker-pool.d.ts.map +1 -1
  112. package/dist/mcp/daemon-worker-pool.js +1 -1
  113. package/dist/mcp/daemon-worker-pool.js.map +1 -1
  114. package/dist/mcp/persisted-local-history-graph.d.ts.map +1 -1
  115. package/dist/mcp/persisted-local-history-graph.js +2 -1
  116. package/dist/mcp/persisted-local-history-graph.js.map +1 -1
  117. package/dist/mcp/persisted-local-history.d.ts +5 -5
  118. package/dist/mcp/repo-tool-job.d.ts.map +1 -1
  119. package/dist/mcp/repo-tool-job.js +2 -0
  120. package/dist/mcp/repo-tool-job.js.map +1 -1
  121. package/dist/mcp/server-invocation.d.ts.map +1 -1
  122. package/dist/mcp/server-invocation.js +206 -147
  123. package/dist/mcp/server-invocation.js.map +1 -1
  124. package/dist/mcp/server.d.ts.map +1 -1
  125. package/dist/mcp/server.js +184 -116
  126. package/dist/mcp/server.js.map +1 -1
  127. package/dist/mcp/stdio-server.d.ts.map +1 -1
  128. package/dist/mcp/stdio-server.js +2 -0
  129. package/dist/mcp/stdio-server.js.map +1 -1
  130. package/dist/mcp/tool-registry.d.ts.map +1 -1
  131. package/dist/mcp/tool-registry.js +4 -0
  132. package/dist/mcp/tool-registry.js.map +1 -1
  133. package/dist/mcp/tools/changed-since.d.ts.map +1 -1
  134. package/dist/mcp/tools/changed-since.js +10 -3
  135. package/dist/mcp/tools/changed-since.js.map +1 -1
  136. package/dist/mcp/tools/dead-symbols.d.ts +3 -0
  137. package/dist/mcp/tools/dead-symbols.d.ts.map +1 -0
  138. package/dist/mcp/tools/dead-symbols.js +33 -0
  139. package/dist/mcp/tools/dead-symbols.js.map +1 -0
  140. package/dist/mcp/tools/map.d.ts.map +1 -1
  141. package/dist/mcp/tools/map.js +2 -0
  142. package/dist/mcp/tools/map.js.map +1 -1
  143. package/dist/mcp/tools/precision-warp.d.ts.map +1 -1
  144. package/dist/mcp/tools/precision-warp.js +2 -6
  145. package/dist/mcp/tools/precision-warp.js.map +1 -1
  146. package/dist/mcp/tools/refactor-difficulty.d.ts.map +1 -1
  147. package/dist/mcp/tools/refactor-difficulty.js +2 -0
  148. package/dist/mcp/tools/refactor-difficulty.js.map +1 -1
  149. package/dist/mcp/tools/safe-read.d.ts.map +1 -1
  150. package/dist/mcp/tools/safe-read.js +10 -105
  151. package/dist/mcp/tools/safe-read.js.map +1 -1
  152. package/dist/mcp/tools/structural-test-coverage.d.ts +3 -0
  153. package/dist/mcp/tools/structural-test-coverage.d.ts.map +1 -0
  154. package/dist/mcp/tools/structural-test-coverage.js +35 -0
  155. package/dist/mcp/tools/structural-test-coverage.js.map +1 -0
  156. package/dist/operations/cached-file.d.ts +6 -2
  157. package/dist/operations/cached-file.d.ts.map +1 -1
  158. package/dist/operations/cached-file.js +30 -6
  159. package/dist/operations/cached-file.js.map +1 -1
  160. package/dist/operations/export-surface-diff.d.ts.map +1 -1
  161. package/dist/operations/export-surface-diff.js +2 -0
  162. package/dist/operations/export-surface-diff.js.map +1 -1
  163. package/dist/operations/file-outline.js +2 -2
  164. package/dist/operations/file-outline.js.map +1 -1
  165. package/dist/operations/graft-diff.d.ts.map +1 -1
  166. package/dist/operations/graft-diff.js +2 -0
  167. package/dist/operations/graft-diff.js.map +1 -1
  168. package/dist/operations/projection-safety.d.ts.map +1 -1
  169. package/dist/operations/projection-safety.js +2 -0
  170. package/dist/operations/projection-safety.js.map +1 -1
  171. package/dist/operations/repo-workspace.d.ts.map +1 -1
  172. package/dist/operations/repo-workspace.js +26 -8
  173. package/dist/operations/repo-workspace.js.map +1 -1
  174. package/dist/operations/review-cooldown-status.d.ts +27 -0
  175. package/dist/operations/review-cooldown-status.d.ts.map +1 -0
  176. package/dist/operations/review-cooldown-status.js +115 -0
  177. package/dist/operations/review-cooldown-status.js.map +1 -0
  178. package/dist/operations/safe-read.js +2 -2
  179. package/dist/operations/safe-read.js.map +1 -1
  180. package/dist/operations/sludge-detector.d.ts.map +1 -1
  181. package/dist/operations/sludge-detector.js +2 -1
  182. package/dist/operations/sludge-detector.js.map +1 -1
  183. package/dist/operations/structural-review.js +8 -8
  184. package/dist/operations/structural-review.js.map +1 -1
  185. package/dist/operations/structural-test-coverage-map.d.ts +44 -0
  186. package/dist/operations/structural-test-coverage-map.d.ts.map +1 -0
  187. package/dist/operations/structural-test-coverage-map.js +331 -0
  188. package/dist/operations/structural-test-coverage-map.js.map +1 -0
  189. package/dist/operations/structured-buffer-compare.d.ts.map +1 -1
  190. package/dist/operations/structured-buffer-compare.js +4 -1
  191. package/dist/operations/structured-buffer-compare.js.map +1 -1
  192. package/dist/operations/structured-buffer-model.d.ts +15 -13
  193. package/dist/operations/structured-buffer-model.d.ts.map +1 -1
  194. package/dist/operations/structured-buffer-model.js +24 -5
  195. package/dist/operations/structured-buffer-model.js.map +1 -1
  196. package/dist/operations/structured-buffer-query.d.ts.map +1 -1
  197. package/dist/operations/structured-buffer-query.js +21 -12
  198. package/dist/operations/structured-buffer-query.js.map +1 -1
  199. package/dist/parser/extractors/common.d.ts +16 -0
  200. package/dist/parser/extractors/common.d.ts.map +1 -0
  201. package/dist/parser/extractors/common.js +23 -0
  202. package/dist/parser/extractors/common.js.map +1 -0
  203. package/dist/parser/extractors/go.d.ts +18 -0
  204. package/dist/parser/extractors/go.d.ts.map +1 -0
  205. package/dist/parser/extractors/go.js +200 -0
  206. package/dist/parser/extractors/go.js.map +1 -0
  207. package/dist/parser/extractors/graphql.d.ts +26 -0
  208. package/dist/parser/extractors/graphql.d.ts.map +1 -0
  209. package/dist/parser/extractors/graphql.js +239 -0
  210. package/dist/parser/extractors/graphql.js.map +1 -0
  211. package/dist/parser/extractors/index.d.ts +4 -0
  212. package/dist/parser/extractors/index.d.ts.map +1 -0
  213. package/dist/parser/extractors/index.js +26 -0
  214. package/dist/parser/extractors/index.js.map +1 -0
  215. package/dist/parser/extractors/json.d.ts +10 -0
  216. package/dist/parser/extractors/json.d.ts.map +1 -0
  217. package/dist/parser/extractors/json.js +75 -0
  218. package/dist/parser/extractors/json.js.map +1 -0
  219. package/dist/parser/extractors/python.d.ts +16 -0
  220. package/dist/parser/extractors/python.d.ts.map +1 -0
  221. package/dist/parser/extractors/python.js +145 -0
  222. package/dist/parser/extractors/python.js.map +1 -0
  223. package/dist/parser/extractors/rust.d.ts +12 -0
  224. package/dist/parser/extractors/rust.d.ts.map +1 -0
  225. package/dist/parser/extractors/rust.js +122 -0
  226. package/dist/parser/extractors/rust.js.map +1 -0
  227. package/dist/parser/extractors/toml.d.ts +10 -0
  228. package/dist/parser/extractors/toml.d.ts.map +1 -0
  229. package/dist/parser/extractors/toml.js +74 -0
  230. package/dist/parser/extractors/toml.js.map +1 -0
  231. package/dist/parser/extractors/typescript.d.ts +13 -0
  232. package/dist/parser/extractors/typescript.d.ts.map +1 -0
  233. package/dist/parser/extractors/typescript.js +179 -0
  234. package/dist/parser/extractors/typescript.js.map +1 -0
  235. package/dist/parser/extractors/yaml.d.ts +13 -0
  236. package/dist/parser/extractors/yaml.d.ts.map +1 -0
  237. package/dist/parser/extractors/yaml.js +93 -0
  238. package/dist/parser/extractors/yaml.js.map +1 -0
  239. package/dist/parser/lang.d.ts +2 -2
  240. package/dist/parser/lang.d.ts.map +1 -1
  241. package/dist/parser/lang.js +19 -1
  242. package/dist/parser/lang.js.map +1 -1
  243. package/dist/parser/outline.d.ts +4 -0
  244. package/dist/parser/outline.d.ts.map +1 -1
  245. package/dist/parser/outline.js +32 -221
  246. package/dist/parser/outline.js.map +1 -1
  247. package/dist/parser/runtime.d.ts +7 -0
  248. package/dist/parser/runtime.d.ts.map +1 -1
  249. package/dist/parser/runtime.js +99 -10
  250. package/dist/parser/runtime.js.map +1 -1
  251. package/dist/parser/types.d.ts +1 -1
  252. package/dist/parser/types.d.ts.map +1 -1
  253. package/dist/parser/types.js.map +1 -1
  254. package/dist/ports/provenance-timeline.d.ts +10 -0
  255. package/dist/ports/provenance-timeline.d.ts.map +1 -0
  256. package/dist/ports/provenance-timeline.js +17 -0
  257. package/dist/ports/provenance-timeline.js.map +1 -0
  258. package/dist/ports/semantic-enrichment.d.ts +47 -0
  259. package/dist/ports/semantic-enrichment.d.ts.map +1 -0
  260. package/dist/ports/semantic-enrichment.js +2 -0
  261. package/dist/ports/semantic-enrichment.js.map +1 -0
  262. package/dist/version.d.ts.map +1 -1
  263. package/dist/version.js +3 -1
  264. package/dist/version.js.map +1 -1
  265. package/dist/warp/ast-import-resolver.d.ts.map +1 -1
  266. package/dist/warp/ast-import-resolver.js +2 -1
  267. package/dist/warp/ast-import-resolver.js.map +1 -1
  268. package/dist/warp/dead-symbols.d.ts.map +1 -1
  269. package/dist/warp/dead-symbols.js +4 -7
  270. package/dist/warp/dead-symbols.js.map +1 -1
  271. package/dist/warp/index-head.d.ts +4 -0
  272. package/dist/warp/index-head.d.ts.map +1 -1
  273. package/dist/warp/index-head.js +255 -22
  274. package/dist/warp/index-head.js.map +1 -1
  275. package/dist/warp/observers.d.ts.map +1 -1
  276. package/dist/warp/observers.js +3 -2
  277. package/dist/warp/observers.js.map +1 -1
  278. package/dist/warp/refactor-difficulty.d.ts.map +1 -1
  279. package/dist/warp/refactor-difficulty.js +4 -9
  280. package/dist/warp/refactor-difficulty.js.map +1 -1
  281. package/dist/warp/references.d.ts.map +1 -1
  282. package/dist/warp/references.js +2 -1
  283. package/dist/warp/references.js.map +1 -1
  284. package/dist/warp/semantic-enrichment.d.ts +14 -0
  285. package/dist/warp/semantic-enrichment.d.ts.map +1 -0
  286. package/dist/warp/semantic-enrichment.js +55 -0
  287. package/dist/warp/semantic-enrichment.js.map +1 -0
  288. package/dist/warp/structural-queries.d.ts.map +1 -1
  289. package/dist/warp/structural-queries.js +7 -14
  290. package/dist/warp/structural-queries.js.map +1 -1
  291. package/dist/warp/sym-id-codec.d.ts +14 -0
  292. package/dist/warp/sym-id-codec.d.ts.map +1 -0
  293. package/dist/warp/sym-id-codec.js +47 -0
  294. package/dist/warp/sym-id-codec.js.map +1 -0
  295. package/dist/warp/symbol-timeline.d.ts.map +1 -1
  296. package/dist/warp/symbol-timeline.js +6 -14
  297. package/dist/warp/symbol-timeline.js.map +1 -1
  298. package/dist/warp/warp-structural-churn.d.ts.map +1 -1
  299. package/dist/warp/warp-structural-churn.js +6 -10
  300. package/dist/warp/warp-structural-churn.js.map +1 -1
  301. package/dist/warp/warp-structural-log.d.ts.map +1 -1
  302. package/dist/warp/warp-structural-log.js +8 -10
  303. package/dist/warp/warp-structural-log.js.map +1 -1
  304. package/docs/CLI.md +63 -5
  305. package/docs/MCP.md +2 -1
  306. package/docs/SETUP.md +11 -7
  307. package/package.json +12 -4
  308. package/src/adapters/canonical-json.ts +0 -56
  309. package/src/adapters/json-text-decoder.ts +0 -11
  310. package/src/adapters/node-fs.ts +0 -43
  311. package/src/adapters/node-git.ts +0 -47
  312. package/src/adapters/node-paths.ts +0 -35
  313. package/src/adapters/node-process-runner.ts +0 -27
  314. package/src/adapters/repo-paths.ts +0 -63
  315. package/src/adapters/rotating-ndjson-log.ts +0 -66
  316. package/src/api/index.ts +0 -107
  317. package/src/api/repo-local-graft.ts +0 -21
  318. package/src/api/repo-workspace.ts +0 -34
  319. package/src/api/tool-bridge.ts +0 -22
  320. package/src/cli/activity-render.ts +0 -112
  321. package/src/cli/cli-error.ts +0 -192
  322. package/src/cli/command-parser.ts +0 -484
  323. package/src/cli/daemon-status-model.ts +0 -238
  324. package/src/cli/daemon-status-render.ts +0 -102
  325. package/src/cli/daemon-status.ts +0 -100
  326. package/src/cli/entrypoint.ts +0 -18
  327. package/src/cli/git-graft-enhance-model.ts +0 -131
  328. package/src/cli/git-graft-enhance-render.ts +0 -33
  329. package/src/cli/git-graft-enhance.ts +0 -54
  330. package/src/cli/index-cmd.ts +0 -90
  331. package/src/cli/index-model.ts +0 -75
  332. package/src/cli/init-bootstrap.ts +0 -47
  333. package/src/cli/init-client-config.ts +0 -428
  334. package/src/cli/init-model.ts +0 -284
  335. package/src/cli/init-render.ts +0 -54
  336. package/src/cli/init-target-hooks.ts +0 -93
  337. package/src/cli/init.ts +0 -124
  338. package/src/cli/json-document.ts +0 -155
  339. package/src/cli/local-history-dag-model.ts +0 -437
  340. package/src/cli/local-history-dag-render.ts +0 -133
  341. package/src/cli/local-history-dag.ts +0 -103
  342. package/src/cli/main.ts +0 -197
  343. package/src/cli/migrate-local-history.ts +0 -119
  344. package/src/cli/peer-command.ts +0 -60
  345. package/src/contracts/capabilities.ts +0 -540
  346. package/src/contracts/causal-ontology.ts +0 -627
  347. package/src/contracts/causal-surface-next-action.ts +0 -18
  348. package/src/contracts/json-object.ts +0 -18
  349. package/src/contracts/mcp-runtime.ts +0 -16
  350. package/src/contracts/output-schema-cli.ts +0 -103
  351. package/src/contracts/output-schema-fragments.ts +0 -881
  352. package/src/contracts/output-schema-mcp.ts +0 -501
  353. package/src/contracts/output-schema-meta.ts +0 -119
  354. package/src/contracts/output-schemas.ts +0 -1524
  355. package/src/git/diff.ts +0 -161
  356. package/src/git/target-git-hook-bootstrap.ts +0 -56
  357. package/src/guards/stream-boundary.ts +0 -110
  358. package/src/hooks/posttooluse-read.ts +0 -54
  359. package/src/hooks/pretooluse-read.ts +0 -52
  360. package/src/hooks/read-governor.ts +0 -95
  361. package/src/hooks/read-messages.ts +0 -53
  362. package/src/hooks/shared.ts +0 -168
  363. package/src/index.ts +0 -1
  364. package/src/mcp/burden.ts +0 -132
  365. package/src/mcp/cache.ts +0 -7
  366. package/src/mcp/cached-file.ts +0 -1
  367. package/src/mcp/context.ts +0 -150
  368. package/src/mcp/control-plane/authz-storage.ts +0 -129
  369. package/src/mcp/control-plane/session-registry.ts +0 -115
  370. package/src/mcp/control-plane/status-projection.ts +0 -76
  371. package/src/mcp/control-plane/types.ts +0 -144
  372. package/src/mcp/daemon-bootstrap.ts +0 -100
  373. package/src/mcp/daemon-control-plane.ts +0 -310
  374. package/src/mcp/daemon-job-scheduler.ts +0 -279
  375. package/src/mcp/daemon-repos.ts +0 -99
  376. package/src/mcp/daemon-server.ts +0 -172
  377. package/src/mcp/daemon-session-host.ts +0 -234
  378. package/src/mcp/daemon-stdio-bridge.ts +0 -262
  379. package/src/mcp/daemon-worker-child-pool.ts +0 -213
  380. package/src/mcp/daemon-worker-inline-pool.ts +0 -46
  381. package/src/mcp/daemon-worker-pool.ts +0 -7
  382. package/src/mcp/daemon-worker-process.ts +0 -52
  383. package/src/mcp/daemon-worker-types.ts +0 -66
  384. package/src/mcp/metrics.ts +0 -176
  385. package/src/mcp/monitor-health.ts +0 -83
  386. package/src/mcp/monitor-persistence.ts +0 -54
  387. package/src/mcp/monitor-tick-job.ts +0 -153
  388. package/src/mcp/monitor-types.ts +0 -103
  389. package/src/mcp/persisted-local-history-graph.ts +0 -592
  390. package/src/mcp/persisted-local-history-policy.ts +0 -501
  391. package/src/mcp/persisted-local-history-views.ts +0 -250
  392. package/src/mcp/persisted-local-history.ts +0 -1621
  393. package/src/mcp/persistent-monitor-runtime.ts +0 -482
  394. package/src/mcp/policy.ts +0 -75
  395. package/src/mcp/receipt.ts +0 -201
  396. package/src/mcp/repo-concurrency.ts +0 -392
  397. package/src/mcp/repo-overview/filter.ts +0 -44
  398. package/src/mcp/repo-overview/types.ts +0 -63
  399. package/src/mcp/repo-overview/view-projection.ts +0 -90
  400. package/src/mcp/repo-state-git.ts +0 -247
  401. package/src/mcp/repo-state-observation.ts +0 -203
  402. package/src/mcp/repo-state-transition.ts +0 -151
  403. package/src/mcp/repo-state-types.ts +0 -107
  404. package/src/mcp/repo-state.ts +0 -146
  405. package/src/mcp/repo-tool-job.ts +0 -102
  406. package/src/mcp/repo-tool-worker-context.ts +0 -215
  407. package/src/mcp/repo-workspace.ts +0 -21
  408. package/src/mcp/run-capture-config.ts +0 -33
  409. package/src/mcp/runtime-causal-context.ts +0 -72
  410. package/src/mcp/runtime-observability.ts +0 -217
  411. package/src/mcp/runtime-staged-target.ts +0 -161
  412. package/src/mcp/runtime-workspace-overlay.ts +0 -255
  413. package/src/mcp/secret-scrub.ts +0 -89
  414. package/src/mcp/semantic-transition-guidance.ts +0 -60
  415. package/src/mcp/semantic-transition-summary.ts +0 -130
  416. package/src/mcp/server-context.ts +0 -236
  417. package/src/mcp/server-invocation.ts +0 -388
  418. package/src/mcp/server-tool-access.ts +0 -148
  419. package/src/mcp/server.ts +0 -270
  420. package/src/mcp/stdio-server.ts +0 -26
  421. package/src/mcp/stdio.ts +0 -3
  422. package/src/mcp/tool-registry.ts +0 -98
  423. package/src/mcp/tools/activity-view.ts +0 -325
  424. package/src/mcp/tools/budget.ts +0 -23
  425. package/src/mcp/tools/causal-attach.ts +0 -67
  426. package/src/mcp/tools/causal-status.ts +0 -58
  427. package/src/mcp/tools/changed-since.ts +0 -71
  428. package/src/mcp/tools/code-find.ts +0 -192
  429. package/src/mcp/tools/code-refs.ts +0 -470
  430. package/src/mcp/tools/code-show.ts +0 -289
  431. package/src/mcp/tools/daemon-monitors.ts +0 -14
  432. package/src/mcp/tools/daemon-repos.ts +0 -22
  433. package/src/mcp/tools/daemon-sessions.ts +0 -14
  434. package/src/mcp/tools/daemon-status.ts +0 -12
  435. package/src/mcp/tools/diagnostic-models.ts +0 -97
  436. package/src/mcp/tools/doctor.ts +0 -83
  437. package/src/mcp/tools/explain.ts +0 -84
  438. package/src/mcp/tools/export-surface-diff.ts +0 -26
  439. package/src/mcp/tools/file-outline.ts +0 -67
  440. package/src/mcp/tools/git-files.ts +0 -73
  441. package/src/mcp/tools/graft-diff.ts +0 -35
  442. package/src/mcp/tools/graft-edit.ts +0 -276
  443. package/src/mcp/tools/knowledge-map.ts +0 -34
  444. package/src/mcp/tools/map-collector.ts +0 -338
  445. package/src/mcp/tools/map.ts +0 -185
  446. package/src/mcp/tools/monitor-nudge.ts +0 -19
  447. package/src/mcp/tools/monitor-pause.ts +0 -18
  448. package/src/mcp/tools/monitor-resume.ts +0 -18
  449. package/src/mcp/tools/monitor-start.ts +0 -20
  450. package/src/mcp/tools/monitor-stop.ts +0 -18
  451. package/src/mcp/tools/precision-live.ts +0 -158
  452. package/src/mcp/tools/precision-match.ts +0 -54
  453. package/src/mcp/tools/precision-paths.ts +0 -59
  454. package/src/mcp/tools/precision-query.ts +0 -127
  455. package/src/mcp/tools/precision-show.ts +0 -86
  456. package/src/mcp/tools/precision-visibility.ts +0 -44
  457. package/src/mcp/tools/precision-warp.ts +0 -101
  458. package/src/mcp/tools/precision.ts +0 -21
  459. package/src/mcp/tools/read-range.ts +0 -28
  460. package/src/mcp/tools/refactor-difficulty.ts +0 -42
  461. package/src/mcp/tools/run-capture.ts +0 -149
  462. package/src/mcp/tools/safe-read.ts +0 -148
  463. package/src/mcp/tools/since.ts +0 -53
  464. package/src/mcp/tools/state.ts +0 -39
  465. package/src/mcp/tools/stats.ts +0 -24
  466. package/src/mcp/tools/structural-blame.ts +0 -55
  467. package/src/mcp/tools/structural-churn.ts +0 -28
  468. package/src/mcp/tools/structural-log.ts +0 -41
  469. package/src/mcp/tools/structural-review.ts +0 -63
  470. package/src/mcp/tools/workspace-authorizations.ts +0 -14
  471. package/src/mcp/tools/workspace-authorize.ts +0 -20
  472. package/src/mcp/tools/workspace-bind.ts +0 -25
  473. package/src/mcp/tools/workspace-rebind.ts +0 -25
  474. package/src/mcp/tools/workspace-revoke.ts +0 -18
  475. package/src/mcp/tools/workspace-status.ts +0 -12
  476. package/src/mcp/warp-pool.ts +0 -36
  477. package/src/mcp/workspace-read-observation-model.ts +0 -48
  478. package/src/mcp/workspace-read-observation.ts +0 -103
  479. package/src/mcp/workspace-router-capability.ts +0 -32
  480. package/src/mcp/workspace-router-history.ts +0 -233
  481. package/src/mcp/workspace-router-model.ts +0 -131
  482. package/src/mcp/workspace-router-resolution.ts +0 -71
  483. package/src/mcp/workspace-router-runtime.ts +0 -246
  484. package/src/mcp/workspace-router.ts +0 -688
  485. package/src/metrics/logger.ts +0 -40
  486. package/src/metrics/types.ts +0 -40
  487. package/src/operations/adaptive-projection.ts +0 -54
  488. package/src/operations/agent-handoff.ts +0 -59
  489. package/src/operations/cached-file.ts +0 -40
  490. package/src/operations/capture-range.ts +0 -64
  491. package/src/operations/conversation-primer.ts +0 -82
  492. package/src/operations/cross-session-resume.ts +0 -104
  493. package/src/operations/deterministic-replay.ts +0 -143
  494. package/src/operations/diff-identity.ts +0 -127
  495. package/src/operations/export-surface-diff.ts +0 -355
  496. package/src/operations/file-outline.ts +0 -48
  497. package/src/operations/footprint-parallelism.ts +0 -98
  498. package/src/operations/graft-diff.ts +0 -169
  499. package/src/operations/horizon-of-readability.ts +0 -60
  500. package/src/operations/import-reference-impact.ts +0 -143
  501. package/src/operations/knowledge-map.ts +0 -96
  502. package/src/operations/observation-cache.ts +0 -165
  503. package/src/operations/projection-safety.ts +0 -111
  504. package/src/operations/read-range.ts +0 -64
  505. package/src/operations/repo-workspace.ts +0 -339
  506. package/src/operations/result-dto.ts +0 -23
  507. package/src/operations/safe-read.ts +0 -118
  508. package/src/operations/semantic-drift.ts +0 -70
  509. package/src/operations/session-filtration.ts +0 -76
  510. package/src/operations/session-replay.ts +0 -73
  511. package/src/operations/sludge-detector.ts +0 -356
  512. package/src/operations/state.ts +0 -66
  513. package/src/operations/structural-blame.ts +0 -197
  514. package/src/operations/structural-review.ts +0 -317
  515. package/src/operations/structured-buffer-compare.ts +0 -429
  516. package/src/operations/structured-buffer-model.ts +0 -456
  517. package/src/operations/structured-buffer-query.ts +0 -794
  518. package/src/operations/structured-buffer.ts +0 -181
  519. package/src/operations/teaching-hints.ts +0 -52
  520. package/src/parser/diff.ts +0 -320
  521. package/src/parser/lang.ts +0 -71
  522. package/src/parser/markdown.ts +0 -197
  523. package/src/parser/outline.ts +0 -316
  524. package/src/parser/runtime.ts +0 -71
  525. package/src/parser/types.ts +0 -75
  526. package/src/policy/evaluate.ts +0 -178
  527. package/src/policy/graftignore.ts +0 -6
  528. package/src/policy/types.ts +0 -87
  529. package/src/ports/codec.ts +0 -13
  530. package/src/ports/filesystem.ts +0 -18
  531. package/src/ports/git.ts +0 -16
  532. package/src/ports/guards.ts +0 -68
  533. package/src/ports/paths.ts +0 -22
  534. package/src/ports/process-runner.ts +0 -22
  535. package/src/release/security-gate.ts +0 -102
  536. package/src/session/tracker.ts +0 -145
  537. package/src/session/types.ts +0 -23
  538. package/src/version.ts +0 -3
  539. package/src/warp/ast-emitter.ts +0 -133
  540. package/src/warp/ast-import-resolver.ts +0 -333
  541. package/src/warp/commit-meta.ts +0 -19
  542. package/src/warp/context.ts +0 -48
  543. package/src/warp/dead-symbols.ts +0 -174
  544. package/src/warp/drift-sentinel.ts +0 -101
  545. package/src/warp/index-head.ts +0 -348
  546. package/src/warp/observers.ts +0 -101
  547. package/src/warp/open.ts +0 -67
  548. package/src/warp/outline-diff-trailer.ts +0 -100
  549. package/src/warp/plumbing.d.ts +0 -24
  550. package/src/warp/refactor-difficulty.ts +0 -257
  551. package/src/warp/references.ts +0 -77
  552. package/src/warp/stale-docs.ts +0 -210
  553. package/src/warp/structural-drift-detection.ts +0 -97
  554. package/src/warp/structural-queries.ts +0 -258
  555. package/src/warp/symbol-timeline.ts +0 -209
  556. package/src/warp/traverse-hydrate.ts +0 -61
  557. package/src/warp/warp-reference-count.ts +0 -47
  558. package/src/warp/warp-structural-blame.ts +0 -65
  559. package/src/warp/warp-structural-churn.ts +0 -309
  560. package/src/warp/warp-structural-log.ts +0 -149
  561. package/src/warp/writer-id.ts +0 -30
@@ -1,482 +0,0 @@
1
- import * as path from "node:path";
2
- import type { DaemonMonitorCounts } from "./daemon-control-plane.js";
3
- import {
4
- resolveWorkspaceRequest,
5
- type WorkspaceBindRequest,
6
- } from "./workspace-router.js";
7
- import { buildMonitorWarpWriterId } from "../warp/writer-id.js";
8
-
9
- import {
10
- CONTROL_PLANE_DIR,
11
- MONITORS_FILE,
12
- type MonitorTimerEntry,
13
- type PersistedMonitorRecord,
14
- type MonitorStatusView,
15
- type MonitorActionResult,
16
- type MonitorStartRequest,
17
- type MonitorAction,
18
- type MonitorLifecycleState,
19
- type PersistentMonitorRuntimeOptions,
20
- } from "./monitor-types.js";
21
-
22
- import {
23
- loadMonitorRecords,
24
- persistMonitorRecords,
25
- } from "./monitor-persistence.js";
26
-
27
- import {
28
- deriveHealth,
29
- deriveTransitionHealth,
30
- normalizePollIntervalMs,
31
- sortStatuses,
32
- toStatusView,
33
- } from "./monitor-health.js";
34
-
35
- // ── Barrel re-exports (preserve downstream import paths) ──────────
36
-
37
- export type {
38
- MonitorLifecycleState,
39
- MonitorHealth,
40
- MonitorWorkerKind,
41
- MonitorAction,
42
- MonitorStatusView,
43
- MonitorActionResult,
44
- MonitorStartRequest,
45
- PersistentMonitorRuntimeOptions,
46
- } from "./monitor-types.js";
47
-
48
- // ── Runtime class ──────────────────────────────────────────────────
49
-
50
- export class PersistentMonitorRuntime {
51
- private readonly statePath: string;
52
- private readonly records = new Map<string, PersistedMonitorRecord>();
53
- private readonly timers = new Map<string, MonitorTimerEntry>();
54
- private readonly runningTicks = new Map<string, Promise<void>>();
55
- private readonly defaultPollIntervalMs: number;
56
- private loadPromise: Promise<void> | null = null;
57
- private closing = false;
58
-
59
- constructor(private readonly options: PersistentMonitorRuntimeOptions) {
60
- this.statePath = path.join(
61
- path.resolve(options.graftDir),
62
- CONTROL_PLANE_DIR,
63
- MONITORS_FILE,
64
- );
65
- this.defaultPollIntervalMs = options.defaultPollIntervalMs ?? 5_000;
66
- }
67
-
68
- async initialize(): Promise<void> {
69
- await this.ensureLoaded();
70
- for (const record of this.records.values()) {
71
- if (record.lifecycleState === "running") {
72
- this.schedule(record.repoId, 0);
73
- }
74
- }
75
- }
76
-
77
- async close(): Promise<void> {
78
- this.closing = true;
79
- for (const timer of this.timers.values()) {
80
- clearTimeout(timer.timeout);
81
- }
82
- this.timers.clear();
83
- await Promise.all([...this.runningTicks.values()].map((tick) => tick.catch(() => undefined)));
84
- }
85
-
86
- getCounts(): DaemonMonitorCounts {
87
- let runningMonitors = 0;
88
- let pausedMonitors = 0;
89
- let stoppedMonitors = 0;
90
- let failingMonitors = 0;
91
- let backlogMonitors = 0;
92
-
93
- for (const record of this.records.values()) {
94
- if (record.lifecycleState === "running") runningMonitors++;
95
- if (record.lifecycleState === "paused") pausedMonitors++;
96
- if (record.lifecycleState === "stopped") stoppedMonitors++;
97
- if (record.health === "error" || record.health === "unauthorized") failingMonitors++;
98
- if (record.backlogCommits > 0) backlogMonitors++;
99
- }
100
-
101
- return {
102
- totalMonitors: this.records.size,
103
- runningMonitors,
104
- pausedMonitors,
105
- stoppedMonitors,
106
- failingMonitors,
107
- backlogMonitors,
108
- };
109
- }
110
-
111
- async listStatuses(): Promise<readonly MonitorStatusView[]> {
112
- await this.ensureLoaded();
113
- const authorized = await this.options.controlPlane.listAuthorizedWorkspaceRecords();
114
- return sortStatuses([...this.records.values()].map((record) => {
115
- const count = authorized.filter((workspace) => workspace.repoId === record.repoId).length;
116
- return toStatusView(record, count);
117
- }));
118
- }
119
-
120
- async startMonitor(request: MonitorStartRequest): Promise<MonitorActionResult> {
121
- const authorizedWorkspace = await this.options.controlPlane.getAuthorizedWorkspace(request);
122
- if (authorizedWorkspace === null) {
123
- return {
124
- ok: false,
125
- action: "start",
126
- created: false,
127
- changed: false,
128
- errorCode: "WORKSPACE_NOT_AUTHORIZED",
129
- error: `Workspace ${request.cwd} is not authorized for monitoring. Call workspace_authorize first.`,
130
- };
131
- }
132
-
133
- await this.ensureLoaded();
134
- const current = this.records.get(authorizedWorkspace.repoId);
135
- const pollIntervalMs = normalizePollIntervalMs(
136
- request.pollIntervalMs,
137
- current?.pollIntervalMs ?? this.defaultPollIntervalMs,
138
- );
139
- const next: PersistedMonitorRecord = {
140
- repoId: authorizedWorkspace.repoId,
141
- gitCommonDir: authorizedWorkspace.gitCommonDir,
142
- anchorWorktreeRoot: authorizedWorkspace.worktreeRoot,
143
- workerKind: "git_poll_indexer",
144
- lifecycleState: "running",
145
- health: "lagging",
146
- pollIntervalMs,
147
- lastStartedAt: new Date().toISOString(),
148
- lastTickAt: current?.lastTickAt ?? null,
149
- lastSuccessAt: current?.lastSuccessAt ?? null,
150
- lastError: current?.lastError ?? null,
151
- lastIndexedCommit: current?.lastIndexedCommit ?? null,
152
- lastHeadCommit: current?.lastHeadCommit ?? null,
153
- backlogCommits: current?.backlogCommits ?? 0,
154
- lastRunCommitsIndexed: current?.lastRunCommitsIndexed ?? 0,
155
- lastRunPatchesWritten: current?.lastRunPatchesWritten ?? 0,
156
- };
157
- const created = current === undefined;
158
- const changed = created
159
- || current.lifecycleState !== "running"
160
- || current.anchorWorktreeRoot !== next.anchorWorktreeRoot
161
- || current.pollIntervalMs !== next.pollIntervalMs;
162
-
163
- this.records.set(next.repoId, next);
164
- await this.persist();
165
- await this.runTick(next.repoId).catch(() => {
166
- return undefined;
167
- });
168
-
169
- return {
170
- ok: true,
171
- action: "start",
172
- created,
173
- changed,
174
- status: await this.getStatusByRepoId(next.repoId),
175
- };
176
- }
177
-
178
- async pauseMonitor(request: WorkspaceBindRequest): Promise<MonitorActionResult> {
179
- return this.transitionMonitor("pause", request, "paused");
180
- }
181
-
182
- async resumeMonitor(request: WorkspaceBindRequest): Promise<MonitorActionResult> {
183
- const transition = await this.transitionMonitor("resume", request, "running");
184
- if (!transition.ok || transition.status === undefined) {
185
- return transition;
186
- }
187
- const current = this.records.get(transition.status.repoId);
188
- if (current !== undefined) {
189
- await this.runTick(current.repoId).catch(() => {
190
- return undefined;
191
- });
192
- }
193
- return {
194
- ...transition,
195
- status: await this.getStatusByRepoId(transition.status.repoId),
196
- };
197
- }
198
-
199
- async stopMonitor(request: WorkspaceBindRequest): Promise<MonitorActionResult> {
200
- return this.transitionMonitor("stop", request, "stopped");
201
- }
202
-
203
- async nudgeMonitor(request: WorkspaceBindRequest): Promise<MonitorActionResult> {
204
- await this.ensureLoaded();
205
- const resolved = await this.resolveAuthorizedRepo(request);
206
- if ("errorCode" in resolved) {
207
- return {
208
- ok: false,
209
- action: "nudge",
210
- created: false,
211
- changed: false,
212
- errorCode: resolved.errorCode,
213
- error: resolved.error,
214
- };
215
- }
216
- const { repoId } = resolved;
217
- const record = this.records.get(repoId);
218
- if (record?.lifecycleState !== "running") {
219
- return {
220
- ok: false,
221
- action: "nudge",
222
- created: false,
223
- changed: false,
224
- errorCode: "not_running",
225
- error: "Monitor is not running — start it first.",
226
- };
227
- }
228
- // Fire an immediate tick without changing lifecycle state
229
- await this.runTick(repoId).catch(() => undefined);
230
- return {
231
- ok: true,
232
- action: "nudge" as MonitorAction,
233
- created: false,
234
- changed: false,
235
- status: await this.getStatusByRepoId(repoId),
236
- };
237
- }
238
-
239
-
240
- // ── Private: lifecycle transitions ─────────────────────────────
241
-
242
- private async transitionMonitor(
243
- action: Exclude<MonitorAction, "start">,
244
- request: WorkspaceBindRequest,
245
- lifecycleState: MonitorLifecycleState,
246
- ): Promise<MonitorActionResult> {
247
- await this.ensureLoaded();
248
- const resolved = await this.resolveAuthorizedRepo(request);
249
- if ("errorCode" in resolved) {
250
- return {
251
- ok: false,
252
- action,
253
- created: false,
254
- changed: false,
255
- errorCode: resolved.errorCode,
256
- error: resolved.error,
257
- };
258
- }
259
-
260
- const current = this.records.get(resolved.repoId);
261
- if (current === undefined) {
262
- return {
263
- ok: false,
264
- action,
265
- created: false,
266
- changed: false,
267
- errorCode: "MONITOR_NOT_FOUND",
268
- error: `No monitor exists for repo ${resolved.repoId}.`,
269
- };
270
- }
271
-
272
- if (lifecycleState !== "running") {
273
- this.clearTimer(current.repoId);
274
- }
275
- this.records.set(current.repoId, {
276
- ...current,
277
- lifecycleState,
278
- health: deriveTransitionHealth(lifecycleState),
279
- lastError: lifecycleState === "stopped" ? null : current.lastError,
280
- });
281
- await this.persist();
282
-
283
- return {
284
- ok: true,
285
- action,
286
- created: false,
287
- changed: current.lifecycleState !== lifecycleState,
288
- status: await this.getStatusByRepoId(current.repoId),
289
- };
290
- }
291
-
292
- // ── Private: tick scheduling ───────────────────────────────────
293
-
294
- private async runTick(repoId: string): Promise<void> {
295
- const existing = this.runningTicks.get(repoId);
296
- if (existing !== undefined) {
297
- await existing;
298
- return;
299
- }
300
-
301
- const tick = this.options.scheduler.enqueue({
302
- sessionId: null,
303
- sliceId: null,
304
- repoId,
305
- worktreeId: null,
306
- tool: "monitor_tick",
307
- kind: "persistent_monitor",
308
- priority: "background",
309
- writerId: buildMonitorWarpWriterId(repoId),
310
- }, async () => {
311
- const record = this.records.get(repoId);
312
- if (record?.lifecycleState !== "running" || this.closing) {
313
- return;
314
- }
315
-
316
- const tickStartedAt = new Date().toISOString();
317
- const anchor = await this.options.controlPlane.getAuthorizedWorkspaceForRepo(repoId, record.anchorWorktreeRoot);
318
- if (anchor === null) {
319
- const latest = this.records.get(repoId) ?? record;
320
- this.records.set(repoId, {
321
- ...latest,
322
- lastTickAt: tickStartedAt,
323
- health: deriveHealth(latest.lifecycleState, "unauthorized"),
324
- lastError: "No authorized workspace is currently available for this repo monitor.",
325
- backlogCommits: 0,
326
- });
327
- await this.persist();
328
- return;
329
- }
330
-
331
- try {
332
- const result = await this.options.workerPool.runMonitorTick({
333
- repoId,
334
- worktreeRoot: anchor.worktreeRoot,
335
- writerId: buildMonitorWarpWriterId(repoId),
336
- lastIndexedCommit: record.lastIndexedCommit,
337
- });
338
- const latest = this.records.get(repoId) ?? record;
339
- if (result.ok) {
340
- const activeHealth = result.backlogCommits > 0 ? "lagging" : "ok";
341
- this.records.set(repoId, {
342
- ...latest,
343
- anchorWorktreeRoot: anchor.worktreeRoot,
344
- gitCommonDir: anchor.gitCommonDir,
345
- lastTickAt: tickStartedAt,
346
- lastSuccessAt: new Date().toISOString(),
347
- lastError: null,
348
- lastIndexedCommit: result.lastIndexedCommit,
349
- lastHeadCommit: result.currentHead,
350
- backlogCommits: result.backlogCommits,
351
- health: deriveHealth(latest.lifecycleState, activeHealth),
352
- lastRunCommitsIndexed: result.commitsIndexed,
353
- lastRunPatchesWritten: result.patchesWritten,
354
- });
355
- } else {
356
- this.records.set(repoId, {
357
- ...latest,
358
- anchorWorktreeRoot: anchor.worktreeRoot,
359
- gitCommonDir: anchor.gitCommonDir,
360
- lastTickAt: tickStartedAt,
361
- lastError: result.error,
362
- lastHeadCommit: result.currentHead,
363
- backlogCommits: result.backlogCommits,
364
- health: deriveHealth(latest.lifecycleState, "error"),
365
- });
366
- }
367
- } catch (error) {
368
- const latest = this.records.get(repoId) ?? record;
369
- this.records.set(repoId, {
370
- ...latest,
371
- anchorWorktreeRoot: anchor.worktreeRoot,
372
- gitCommonDir: anchor.gitCommonDir,
373
- lastTickAt: tickStartedAt,
374
- lastError: error instanceof Error ? error.message : String(error),
375
- health: deriveHealth(latest.lifecycleState, "error"),
376
- });
377
- } finally {
378
- await this.persist();
379
- }
380
- }).finally(() => {
381
- this.runningTicks.delete(repoId);
382
- const current = this.records.get(repoId);
383
- if (current?.lifecycleState === "running" && !this.closing) {
384
- this.schedule(repoId, current.pollIntervalMs);
385
- }
386
- });
387
-
388
- this.runningTicks.set(repoId, tick);
389
- await tick;
390
- }
391
-
392
- private schedule(repoId: string, delayMs: number): void {
393
- if (this.closing) return;
394
- const record = this.records.get(repoId);
395
- if (record?.lifecycleState !== "running") return;
396
- this.clearTimer(repoId);
397
- this.timers.set(repoId, {
398
- timeout: setTimeout(() => {
399
- this.timers.delete(repoId);
400
- void this.runTick(repoId);
401
- }, delayMs),
402
- });
403
- }
404
-
405
- private clearTimer(repoId: string): void {
406
- const timer = this.timers.get(repoId);
407
- if (timer === undefined) return;
408
- clearTimeout(timer.timeout);
409
- this.timers.delete(repoId);
410
- }
411
-
412
- // ── Private: status lookup ─────────────────────────────────────
413
-
414
- private async getStatusByRepoId(repoId: string): Promise<MonitorStatusView> {
415
- const statuses = await this.listStatuses();
416
- const status = statuses.find((candidate) => candidate.repoId === repoId);
417
- if (status === undefined) {
418
- throw new Error(`Missing monitor status for repo ${repoId}`);
419
- }
420
- return status;
421
- }
422
-
423
- // ── Private: workspace resolution ──────────────────────────────
424
-
425
- private resolveRepo(
426
- request: WorkspaceBindRequest,
427
- ): Promise<{ repoId: string } | { errorCode: string; error: string }> {
428
- return resolveWorkspaceRequest(this.options.git, request).then((resolved) => {
429
- if ("code" in resolved) {
430
- return {
431
- errorCode: resolved.code,
432
- error: resolved.message,
433
- };
434
- }
435
- return {
436
- errorCode: "WORKSPACE_NOT_AUTHORIZED",
437
- error: `Workspace ${resolved.worktreeRoot} is not authorized for monitoring. Call workspace_authorize first.`,
438
- };
439
- });
440
- }
441
-
442
- private async resolveAuthorizedRepo(
443
- request: WorkspaceBindRequest,
444
- ): Promise<{ repoId: string } | { errorCode: string; error: string }> {
445
- const authorized = await this.options.controlPlane.getAuthorizedWorkspace(request);
446
- if (authorized !== null) {
447
- return { repoId: authorized.repoId };
448
- }
449
- return this.resolveRepo(request);
450
- }
451
-
452
- // ── Private: persistence ───────────────────────────────────────
453
-
454
- private async ensureLoaded(): Promise<void> {
455
- if (this.loadPromise !== null) {
456
- await this.loadPromise;
457
- return;
458
- }
459
-
460
- this.loadPromise = (async () => {
461
- const loaded = await loadMonitorRecords(
462
- this.options.fs,
463
- this.options.codec,
464
- this.statePath,
465
- );
466
- for (const record of loaded) {
467
- this.records.set(record.repoId, record);
468
- }
469
- })();
470
-
471
- await this.loadPromise;
472
- }
473
-
474
- private async persist(): Promise<void> {
475
- await persistMonitorRecords(
476
- this.options.fs,
477
- this.options.codec,
478
- this.statePath,
479
- this.records,
480
- );
481
- }
482
- }
package/src/mcp/policy.ts DELETED
@@ -1,75 +0,0 @@
1
- import { toRepoPolicyPath } from "../adapters/repo-paths.js";
2
- import { evaluatePolicy } from "../policy/evaluate.js";
3
- import { loadGraftignore } from "../policy/graftignore.js";
4
- import { RefusedResult, type PolicyOptions, type PolicyResult } from "../policy/types.js";
5
- import type { FileSystem } from "../ports/filesystem.js";
6
- import type { GovernorTracker } from "../session/tracker.js";
7
-
8
- export interface McpPolicyContext {
9
- readonly projectRoot: string;
10
- readonly graftignorePatterns: readonly string[];
11
- readonly governor: GovernorTracker;
12
- }
13
-
14
- export interface McpPolicyRefusal {
15
- path: string;
16
- reason: string;
17
- reasonDetail: string;
18
- next: readonly string[];
19
- actual: { lines: number; bytes: number };
20
- }
21
-
22
- export async function loadProjectGraftignore(
23
- fs: Pick<FileSystem, "readFile">,
24
- projectRoot: string,
25
- ): Promise<string[]> {
26
- try {
27
- return loadGraftignore(await fs.readFile(`${projectRoot}/.graftignore`, "utf-8"));
28
- } catch {
29
- return [];
30
- }
31
- }
32
-
33
- export function buildMcpPolicyOptions(
34
- ctx: Pick<McpPolicyContext, "graftignorePatterns" | "governor">,
35
- ): PolicyOptions {
36
- return {
37
- graftignorePatterns: ctx.graftignorePatterns.length > 0 ? [...ctx.graftignorePatterns] : undefined,
38
- sessionDepth: ctx.governor.getGovernorDepth(),
39
- budgetRemaining: ctx.governor.getBudget()?.remaining,
40
- };
41
- }
42
-
43
- export function evaluateMcpPolicy(
44
- ctx: McpPolicyContext,
45
- filePath: string,
46
- actual: { lines: number; bytes: number },
47
- ): PolicyResult {
48
- return evaluatePolicy(
49
- {
50
- path: toRepoPolicyPath(ctx.projectRoot, filePath),
51
- lines: actual.lines,
52
- bytes: actual.bytes,
53
- },
54
- buildMcpPolicyOptions(ctx),
55
- );
56
- }
57
-
58
- export function evaluateMcpRefusal(
59
- ctx: McpPolicyContext,
60
- filePath: string,
61
- actual: { lines: number; bytes: number },
62
- ): McpPolicyRefusal | null {
63
- const policy = evaluateMcpPolicy(ctx, filePath, actual);
64
- if (!(policy instanceof RefusedResult)) {
65
- return null;
66
- }
67
-
68
- return {
69
- path: filePath,
70
- reason: policy.reason,
71
- reasonDetail: policy.reasonDetail,
72
- next: [...policy.next],
73
- actual,
74
- };
75
- }