@flyingrobots/graft 0.6.1 → 0.7.1

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 (665) hide show
  1. package/CHANGELOG.md +148 -0
  2. package/README.md +1 -2
  3. package/bin/graft.js +26 -26
  4. package/dist/adapters/json-text-decoder.d.ts +3 -0
  5. package/dist/adapters/json-text-decoder.d.ts.map +1 -0
  6. package/dist/adapters/json-text-decoder.js +12 -0
  7. package/dist/adapters/json-text-decoder.js.map +1 -0
  8. package/dist/adapters/node-paths.d.ts +3 -0
  9. package/dist/adapters/node-paths.d.ts.map +1 -0
  10. package/dist/adapters/node-paths.js +29 -0
  11. package/dist/adapters/node-paths.js.map +1 -0
  12. package/dist/adapters/repo-paths.d.ts.map +1 -1
  13. package/dist/adapters/repo-paths.js +40 -5
  14. package/dist/adapters/repo-paths.js.map +1 -1
  15. package/dist/api/tool-bridge.d.ts +1 -1
  16. package/dist/api/tool-bridge.d.ts.map +1 -1
  17. package/dist/api/tool-bridge.js +1 -1
  18. package/dist/api/tool-bridge.js.map +1 -1
  19. package/dist/cli/cli-error.d.ts.map +1 -1
  20. package/dist/cli/cli-error.js +47 -10
  21. package/dist/cli/cli-error.js.map +1 -1
  22. package/dist/cli/command-parser.d.ts +12 -3
  23. package/dist/cli/command-parser.d.ts.map +1 -1
  24. package/dist/cli/command-parser.js +161 -2
  25. package/dist/cli/command-parser.js.map +1 -1
  26. package/dist/cli/daemon-status-model.d.ts +87 -0
  27. package/dist/cli/daemon-status-model.d.ts.map +1 -0
  28. package/dist/cli/daemon-status-model.js +142 -0
  29. package/dist/cli/daemon-status-model.js.map +1 -0
  30. package/dist/cli/daemon-status-render.d.ts +3 -0
  31. package/dist/cli/daemon-status-render.d.ts.map +1 -0
  32. package/dist/cli/daemon-status-render.js +100 -0
  33. package/dist/cli/daemon-status-render.js.map +1 -0
  34. package/dist/cli/daemon-status.d.ts +7 -0
  35. package/dist/cli/daemon-status.d.ts.map +1 -0
  36. package/dist/cli/daemon-status.js +79 -0
  37. package/dist/cli/daemon-status.js.map +1 -0
  38. package/dist/cli/git-graft-enhance-model.d.ts +67 -0
  39. package/dist/cli/git-graft-enhance-model.d.ts.map +1 -0
  40. package/dist/cli/git-graft-enhance-model.js +55 -0
  41. package/dist/cli/git-graft-enhance-model.js.map +1 -0
  42. package/dist/cli/git-graft-enhance-render.d.ts +3 -0
  43. package/dist/cli/git-graft-enhance-render.d.ts.map +1 -0
  44. package/dist/cli/git-graft-enhance-render.js +29 -0
  45. package/dist/cli/git-graft-enhance-render.js.map +1 -0
  46. package/dist/cli/git-graft-enhance.d.ts +14 -0
  47. package/dist/cli/git-graft-enhance.d.ts.map +1 -0
  48. package/dist/cli/git-graft-enhance.js +29 -0
  49. package/dist/cli/git-graft-enhance.js.map +1 -0
  50. package/dist/cli/index-cmd.d.ts.map +1 -1
  51. package/dist/cli/index-cmd.js +18 -21
  52. package/dist/cli/index-cmd.js.map +1 -1
  53. package/dist/cli/index-model.d.ts +5 -9
  54. package/dist/cli/index-model.d.ts.map +1 -1
  55. package/dist/cli/index-model.js +20 -18
  56. package/dist/cli/index-model.js.map +1 -1
  57. package/dist/cli/init-client-config.d.ts +12 -7
  58. package/dist/cli/init-client-config.d.ts.map +1 -1
  59. package/dist/cli/init-client-config.js +145 -47
  60. package/dist/cli/init-client-config.js.map +1 -1
  61. package/dist/cli/init-model.d.ts +9 -2
  62. package/dist/cli/init-model.d.ts.map +1 -1
  63. package/dist/cli/init-model.js +54 -6
  64. package/dist/cli/init-model.js.map +1 -1
  65. package/dist/cli/init-render.d.ts.map +1 -1
  66. package/dist/cli/init-render.js +2 -2
  67. package/dist/cli/init-render.js.map +1 -1
  68. package/dist/cli/init.d.ts.map +1 -1
  69. package/dist/cli/init.js +11 -9
  70. package/dist/cli/init.js.map +1 -1
  71. package/dist/cli/json-document.d.ts +6 -0
  72. package/dist/cli/json-document.d.ts.map +1 -1
  73. package/dist/cli/json-document.js +12 -0
  74. package/dist/cli/json-document.js.map +1 -1
  75. package/dist/cli/main.d.ts +7 -0
  76. package/dist/cli/main.d.ts.map +1 -1
  77. package/dist/cli/main.js +49 -7
  78. package/dist/cli/main.js.map +1 -1
  79. package/dist/cli/migrate-local-history.d.ts.map +1 -1
  80. package/dist/cli/migrate-local-history.js +3 -2
  81. package/dist/cli/migrate-local-history.js.map +1 -1
  82. package/dist/cli/peer-command.d.ts +1 -1
  83. package/dist/cli/peer-command.d.ts.map +1 -1
  84. package/dist/cli/peer-command.js +1 -1
  85. package/dist/cli/peer-command.js.map +1 -1
  86. package/dist/contracts/capabilities.d.ts +5 -5
  87. package/dist/contracts/capabilities.d.ts.map +1 -1
  88. package/dist/contracts/capabilities.js +89 -0
  89. package/dist/contracts/capabilities.js.map +1 -1
  90. package/dist/contracts/causal-ontology.d.ts +17 -17
  91. package/dist/contracts/json-object.d.ts +0 -1
  92. package/dist/contracts/json-object.d.ts.map +1 -1
  93. package/dist/contracts/json-object.js +0 -10
  94. package/dist/contracts/json-object.js.map +1 -1
  95. package/dist/contracts/output-schema-cli.d.ts +277 -25
  96. package/dist/contracts/output-schema-cli.d.ts.map +1 -1
  97. package/dist/contracts/output-schema-cli.js +35 -3
  98. package/dist/contracts/output-schema-cli.js.map +1 -1
  99. package/dist/contracts/output-schema-fragments.d.ts +212 -87
  100. package/dist/contracts/output-schema-fragments.d.ts.map +1 -1
  101. package/dist/contracts/output-schema-fragments.js +49 -2
  102. package/dist/contracts/output-schema-fragments.js.map +1 -1
  103. package/dist/contracts/output-schema-mcp.d.ts +372 -47
  104. package/dist/contracts/output-schema-mcp.d.ts.map +1 -1
  105. package/dist/contracts/output-schema-mcp.js +217 -1
  106. package/dist/contracts/output-schema-mcp.js.map +1 -1
  107. package/dist/contracts/output-schema-meta.d.ts +2 -2
  108. package/dist/contracts/output-schema-meta.d.ts.map +1 -1
  109. package/dist/contracts/output-schemas.d.ts +7 -7
  110. package/dist/contracts/output-schemas.d.ts.map +1 -1
  111. package/dist/contracts/output-schemas.js +294 -6
  112. package/dist/contracts/output-schemas.js.map +1 -1
  113. package/dist/git/diff.d.ts +11 -0
  114. package/dist/git/diff.d.ts.map +1 -1
  115. package/dist/git/diff.js +50 -6
  116. package/dist/git/diff.js.map +1 -1
  117. package/dist/hooks/posttooluse-read.js +1 -1
  118. package/dist/hooks/posttooluse-read.js.map +1 -1
  119. package/dist/hooks/pretooluse-read.js +1 -1
  120. package/dist/hooks/pretooluse-read.js.map +1 -1
  121. package/dist/mcp/burden.d.ts.map +1 -1
  122. package/dist/mcp/burden.js +9 -0
  123. package/dist/mcp/burden.js.map +1 -1
  124. package/dist/mcp/context.d.ts +3 -2
  125. package/dist/mcp/context.d.ts.map +1 -1
  126. package/dist/mcp/context.js +2 -37
  127. package/dist/mcp/context.js.map +1 -1
  128. package/dist/mcp/daemon-server.d.ts +2 -0
  129. package/dist/mcp/daemon-server.d.ts.map +1 -1
  130. package/dist/mcp/daemon-server.js +6 -1
  131. package/dist/mcp/daemon-server.js.map +1 -1
  132. package/dist/mcp/daemon-session-host.d.ts +1 -0
  133. package/dist/mcp/daemon-session-host.d.ts.map +1 -1
  134. package/dist/mcp/daemon-session-host.js +3 -0
  135. package/dist/mcp/daemon-session-host.js.map +1 -1
  136. package/dist/mcp/daemon-stdio-bridge.d.ts +1 -0
  137. package/dist/mcp/daemon-stdio-bridge.d.ts.map +1 -1
  138. package/dist/mcp/daemon-stdio-bridge.js +1 -0
  139. package/dist/mcp/daemon-stdio-bridge.js.map +1 -1
  140. package/dist/mcp/daemon-worker-child-pool.d.ts +2 -0
  141. package/dist/mcp/daemon-worker-child-pool.d.ts.map +1 -1
  142. package/dist/mcp/daemon-worker-child-pool.js +10 -3
  143. package/dist/mcp/daemon-worker-child-pool.js.map +1 -1
  144. package/dist/mcp/daemon-worker-pool.d.ts +1 -1
  145. package/dist/mcp/daemon-worker-pool.d.ts.map +1 -1
  146. package/dist/mcp/daemon-worker-pool.js +1 -1
  147. package/dist/mcp/daemon-worker-pool.js.map +1 -1
  148. package/dist/mcp/monitor-tick-job.d.ts +1 -0
  149. package/dist/mcp/monitor-tick-job.d.ts.map +1 -1
  150. package/dist/mcp/monitor-tick-job.js +84 -29
  151. package/dist/mcp/monitor-tick-job.js.map +1 -1
  152. package/dist/mcp/monitor-types.d.ts +1 -1
  153. package/dist/mcp/monitor-types.d.ts.map +1 -1
  154. package/dist/mcp/persisted-local-history-graph.d.ts +2 -2
  155. package/dist/mcp/persisted-local-history-graph.d.ts.map +1 -1
  156. package/dist/mcp/persisted-local-history-graph.js +3 -2
  157. package/dist/mcp/persisted-local-history-graph.js.map +1 -1
  158. package/dist/mcp/persisted-local-history.d.ts +5 -5
  159. package/dist/mcp/persisted-local-history.js +2 -2
  160. package/dist/mcp/persisted-local-history.js.map +1 -1
  161. package/dist/mcp/persistent-monitor-runtime.d.ts +1 -0
  162. package/dist/mcp/persistent-monitor-runtime.d.ts.map +1 -1
  163. package/dist/mcp/persistent-monitor-runtime.js +35 -0
  164. package/dist/mcp/persistent-monitor-runtime.js.map +1 -1
  165. package/dist/mcp/repo-tool-worker-context.d.ts.map +1 -1
  166. package/dist/mcp/repo-tool-worker-context.js +5 -2
  167. package/dist/mcp/repo-tool-worker-context.js.map +1 -1
  168. package/dist/mcp/server-context.d.ts.map +1 -1
  169. package/dist/mcp/server-context.js +13 -0
  170. package/dist/mcp/server-context.js.map +1 -1
  171. package/dist/mcp/server-tool-access.d.ts +1 -1
  172. package/dist/mcp/server-tool-access.d.ts.map +1 -1
  173. package/dist/mcp/server-tool-access.js +3 -1
  174. package/dist/mcp/server-tool-access.js.map +1 -1
  175. package/dist/mcp/server.d.ts +3 -0
  176. package/dist/mcp/server.d.ts.map +1 -1
  177. package/dist/mcp/server.js +5 -3
  178. package/dist/mcp/server.js.map +1 -1
  179. package/dist/mcp/tool-registry.d.ts.map +1 -1
  180. package/dist/mcp/tool-registry.js +18 -0
  181. package/dist/mcp/tool-registry.js.map +1 -1
  182. package/dist/mcp/tools/code-find.d.ts.map +1 -1
  183. package/dist/mcp/tools/code-find.js +20 -0
  184. package/dist/mcp/tools/code-find.js.map +1 -1
  185. package/dist/mcp/tools/code-show.d.ts.map +1 -1
  186. package/dist/mcp/tools/code-show.js +24 -0
  187. package/dist/mcp/tools/code-show.js.map +1 -1
  188. package/dist/mcp/tools/diagnostic-models.d.ts +2 -0
  189. package/dist/mcp/tools/diagnostic-models.d.ts.map +1 -1
  190. package/dist/mcp/tools/doctor.d.ts.map +1 -1
  191. package/dist/mcp/tools/doctor.js +18 -1
  192. package/dist/mcp/tools/doctor.js.map +1 -1
  193. package/dist/mcp/tools/export-surface-diff.d.ts +3 -0
  194. package/dist/mcp/tools/export-surface-diff.d.ts.map +1 -0
  195. package/dist/mcp/tools/export-surface-diff.js +24 -0
  196. package/dist/mcp/tools/export-surface-diff.js.map +1 -0
  197. package/dist/mcp/tools/file-outline.js +1 -1
  198. package/dist/mcp/tools/file-outline.js.map +1 -1
  199. package/dist/mcp/tools/graft-edit.d.ts +3 -0
  200. package/dist/mcp/tools/graft-edit.d.ts.map +1 -0
  201. package/dist/mcp/tools/graft-edit.js +192 -0
  202. package/dist/mcp/tools/graft-edit.js.map +1 -0
  203. package/dist/mcp/tools/knowledge-map.d.ts +3 -0
  204. package/dist/mcp/tools/knowledge-map.d.ts.map +1 -0
  205. package/dist/mcp/tools/knowledge-map.js +31 -0
  206. package/dist/mcp/tools/knowledge-map.js.map +1 -0
  207. package/dist/mcp/tools/monitor-nudge.d.ts +3 -0
  208. package/dist/mcp/tools/monitor-nudge.d.ts.map +1 -0
  209. package/dist/mcp/tools/monitor-nudge.js +17 -0
  210. package/dist/mcp/tools/monitor-nudge.js.map +1 -0
  211. package/dist/mcp/tools/precision-warp.d.ts +3 -3
  212. package/dist/mcp/tools/precision-warp.d.ts.map +1 -1
  213. package/dist/mcp/tools/precision-warp.js +24 -15
  214. package/dist/mcp/tools/precision-warp.js.map +1 -1
  215. package/dist/mcp/tools/refactor-difficulty.d.ts +3 -0
  216. package/dist/mcp/tools/refactor-difficulty.d.ts.map +1 -0
  217. package/dist/mcp/tools/refactor-difficulty.js +36 -0
  218. package/dist/mcp/tools/refactor-difficulty.js.map +1 -0
  219. package/dist/mcp/tools/safe-read.js +2 -2
  220. package/dist/mcp/tools/safe-read.js.map +1 -1
  221. package/dist/mcp/tools/structural-blame.d.ts +3 -0
  222. package/dist/mcp/tools/structural-blame.d.ts.map +1 -0
  223. package/dist/mcp/tools/structural-blame.js +44 -0
  224. package/dist/mcp/tools/structural-blame.js.map +1 -0
  225. package/dist/mcp/tools/structural-churn.d.ts +3 -0
  226. package/dist/mcp/tools/structural-churn.d.ts.map +1 -0
  227. package/dist/mcp/tools/structural-churn.js +28 -0
  228. package/dist/mcp/tools/structural-churn.js.map +1 -0
  229. package/dist/mcp/tools/structural-log.d.ts +3 -0
  230. package/dist/mcp/tools/structural-log.d.ts.map +1 -0
  231. package/dist/mcp/tools/structural-log.js +38 -0
  232. package/dist/mcp/tools/structural-log.js.map +1 -0
  233. package/dist/mcp/tools/structural-review.d.ts +3 -0
  234. package/dist/mcp/tools/structural-review.d.ts.map +1 -0
  235. package/dist/mcp/tools/structural-review.js +55 -0
  236. package/dist/mcp/tools/structural-review.js.map +1 -0
  237. package/dist/mcp/warp-pool.d.ts +4 -4
  238. package/dist/mcp/warp-pool.d.ts.map +1 -1
  239. package/dist/mcp/warp-pool.js.map +1 -1
  240. package/dist/mcp/workspace-router-model.d.ts +2 -2
  241. package/dist/mcp/workspace-router-model.d.ts.map +1 -1
  242. package/dist/mcp/workspace-router-runtime.d.ts +3 -3
  243. package/dist/mcp/workspace-router-runtime.d.ts.map +1 -1
  244. package/dist/mcp/workspace-router-runtime.js +4 -1
  245. package/dist/mcp/workspace-router-runtime.js.map +1 -1
  246. package/dist/mcp/workspace-router.d.ts +3 -2
  247. package/dist/mcp/workspace-router.d.ts.map +1 -1
  248. package/dist/mcp/workspace-router.js +6 -0
  249. package/dist/mcp/workspace-router.js.map +1 -1
  250. package/dist/operations/adaptive-projection.d.ts +22 -0
  251. package/dist/operations/adaptive-projection.d.ts.map +1 -0
  252. package/dist/operations/adaptive-projection.js +36 -0
  253. package/dist/operations/adaptive-projection.js.map +1 -0
  254. package/dist/operations/agent-handoff.d.ts +25 -0
  255. package/dist/operations/agent-handoff.d.ts.map +1 -0
  256. package/dist/operations/agent-handoff.js +36 -0
  257. package/dist/operations/agent-handoff.js.map +1 -0
  258. package/dist/operations/capture-range.d.ts +33 -0
  259. package/dist/operations/capture-range.d.ts.map +1 -0
  260. package/dist/operations/capture-range.js +45 -0
  261. package/dist/operations/capture-range.js.map +1 -0
  262. package/dist/operations/conversation-primer.d.ts +27 -0
  263. package/dist/operations/conversation-primer.d.ts.map +1 -0
  264. package/dist/operations/conversation-primer.js +52 -0
  265. package/dist/operations/conversation-primer.js.map +1 -0
  266. package/dist/operations/cross-session-resume.d.ts +28 -0
  267. package/dist/operations/cross-session-resume.d.ts.map +1 -0
  268. package/dist/operations/cross-session-resume.js +79 -0
  269. package/dist/operations/cross-session-resume.js.map +1 -0
  270. package/dist/operations/deterministic-replay.d.ts +39 -0
  271. package/dist/operations/deterministic-replay.d.ts.map +1 -0
  272. package/dist/operations/deterministic-replay.js +90 -0
  273. package/dist/operations/deterministic-replay.js.map +1 -0
  274. package/dist/operations/export-surface-diff.d.ts +36 -0
  275. package/dist/operations/export-surface-diff.d.ts.map +1 -0
  276. package/dist/operations/export-surface-diff.js +298 -0
  277. package/dist/operations/export-surface-diff.js.map +1 -0
  278. package/dist/operations/footprint-parallelism.d.ts +25 -0
  279. package/dist/operations/footprint-parallelism.d.ts.map +1 -0
  280. package/dist/operations/footprint-parallelism.js +79 -0
  281. package/dist/operations/footprint-parallelism.js.map +1 -0
  282. package/dist/operations/graft-diff.d.ts.map +1 -1
  283. package/dist/operations/graft-diff.js +14 -7
  284. package/dist/operations/graft-diff.js.map +1 -1
  285. package/dist/operations/horizon-of-readability.d.ts +23 -0
  286. package/dist/operations/horizon-of-readability.d.ts.map +1 -0
  287. package/dist/operations/horizon-of-readability.js +39 -0
  288. package/dist/operations/horizon-of-readability.js.map +1 -0
  289. package/dist/operations/import-reference-impact.d.ts +13 -0
  290. package/dist/operations/import-reference-impact.d.ts.map +1 -0
  291. package/dist/operations/import-reference-impact.js +101 -0
  292. package/dist/operations/import-reference-impact.js.map +1 -0
  293. package/dist/operations/knowledge-map.d.ts +30 -0
  294. package/dist/operations/knowledge-map.d.ts.map +1 -0
  295. package/dist/operations/knowledge-map.js +64 -0
  296. package/dist/operations/knowledge-map.js.map +1 -0
  297. package/dist/operations/observation-cache.d.ts +8 -2
  298. package/dist/operations/observation-cache.d.ts.map +1 -1
  299. package/dist/operations/observation-cache.js +17 -5
  300. package/dist/operations/observation-cache.js.map +1 -1
  301. package/dist/operations/projection-safety.d.ts +31 -0
  302. package/dist/operations/projection-safety.d.ts.map +1 -0
  303. package/dist/operations/projection-safety.js +77 -0
  304. package/dist/operations/projection-safety.js.map +1 -0
  305. package/dist/operations/repo-workspace.js +3 -3
  306. package/dist/operations/repo-workspace.js.map +1 -1
  307. package/dist/operations/semantic-drift.d.ts +27 -0
  308. package/dist/operations/semantic-drift.d.ts.map +1 -0
  309. package/dist/operations/semantic-drift.js +46 -0
  310. package/dist/operations/semantic-drift.js.map +1 -0
  311. package/dist/operations/session-filtration.d.ts +36 -0
  312. package/dist/operations/session-filtration.d.ts.map +1 -0
  313. package/dist/operations/session-filtration.js +48 -0
  314. package/dist/operations/session-filtration.js.map +1 -0
  315. package/dist/operations/session-replay.d.ts +17 -0
  316. package/dist/operations/session-replay.d.ts.map +1 -0
  317. package/dist/operations/session-replay.js +59 -0
  318. package/dist/operations/session-replay.js.map +1 -0
  319. package/dist/operations/sludge-detector.d.ts +45 -0
  320. package/dist/operations/sludge-detector.d.ts.map +1 -0
  321. package/dist/operations/sludge-detector.js +278 -0
  322. package/dist/operations/sludge-detector.js.map +1 -0
  323. package/dist/operations/structural-blame.d.ts +67 -0
  324. package/dist/operations/structural-blame.d.ts.map +1 -0
  325. package/dist/operations/structural-blame.js +111 -0
  326. package/dist/operations/structural-blame.js.map +1 -0
  327. package/dist/operations/structural-review.d.ts +47 -0
  328. package/dist/operations/structural-review.d.ts.map +1 -0
  329. package/dist/operations/structural-review.js +225 -0
  330. package/dist/operations/structural-review.js.map +1 -0
  331. package/dist/operations/teaching-hints.d.ts +18 -0
  332. package/dist/operations/teaching-hints.d.ts.map +1 -0
  333. package/dist/operations/teaching-hints.js +35 -0
  334. package/dist/operations/teaching-hints.js.map +1 -0
  335. package/dist/parser/diff.d.ts +2 -0
  336. package/dist/parser/diff.d.ts.map +1 -1
  337. package/dist/parser/diff.js +7 -0
  338. package/dist/parser/diff.js.map +1 -1
  339. package/dist/ports/paths.d.ts +17 -0
  340. package/dist/ports/paths.d.ts.map +1 -0
  341. package/dist/ports/{warp.js → paths.js} +2 -2
  342. package/dist/ports/paths.js.map +1 -0
  343. package/dist/version.d.ts.map +1 -1
  344. package/dist/version.js +3 -1
  345. package/dist/version.js.map +1 -1
  346. package/dist/warp/ast-emitter.d.ts +28 -0
  347. package/dist/warp/ast-emitter.d.ts.map +1 -0
  348. package/dist/warp/ast-emitter.js +90 -0
  349. package/dist/warp/ast-emitter.js.map +1 -0
  350. package/dist/warp/ast-import-resolver.d.ts +13 -0
  351. package/dist/warp/ast-import-resolver.d.ts.map +1 -0
  352. package/dist/warp/ast-import-resolver.js +259 -0
  353. package/dist/warp/ast-import-resolver.js.map +1 -0
  354. package/dist/warp/commit-meta.d.ts +8 -0
  355. package/dist/warp/commit-meta.d.ts.map +1 -0
  356. package/dist/warp/commit-meta.js +13 -0
  357. package/dist/warp/commit-meta.js.map +1 -0
  358. package/dist/warp/context.d.ts +10 -0
  359. package/dist/warp/context.d.ts.map +1 -0
  360. package/dist/warp/context.js +26 -0
  361. package/dist/warp/context.js.map +1 -0
  362. package/dist/warp/dead-symbols.d.ts +40 -0
  363. package/dist/warp/dead-symbols.d.ts.map +1 -0
  364. package/dist/warp/dead-symbols.js +127 -0
  365. package/dist/warp/dead-symbols.js.map +1 -0
  366. package/dist/warp/drift-sentinel.d.ts +30 -0
  367. package/dist/warp/drift-sentinel.d.ts.map +1 -0
  368. package/dist/warp/drift-sentinel.js +65 -0
  369. package/dist/warp/drift-sentinel.js.map +1 -0
  370. package/dist/warp/index-head.d.ts +32 -0
  371. package/dist/warp/index-head.d.ts.map +1 -0
  372. package/dist/warp/index-head.js +245 -0
  373. package/dist/warp/index-head.js.map +1 -0
  374. package/dist/warp/observers.d.ts +6 -6
  375. package/dist/warp/observers.d.ts.map +1 -1
  376. package/dist/warp/observers.js +5 -4
  377. package/dist/warp/observers.js.map +1 -1
  378. package/dist/warp/open.d.ts +5 -4
  379. package/dist/warp/open.d.ts.map +1 -1
  380. package/dist/warp/open.js +24 -49
  381. package/dist/warp/open.js.map +1 -1
  382. package/dist/warp/outline-diff-trailer.d.ts +26 -0
  383. package/dist/warp/outline-diff-trailer.d.ts.map +1 -0
  384. package/dist/warp/outline-diff-trailer.js +68 -0
  385. package/dist/warp/outline-diff-trailer.js.map +1 -0
  386. package/dist/warp/refactor-difficulty.d.ts +38 -0
  387. package/dist/warp/refactor-difficulty.d.ts.map +1 -0
  388. package/dist/warp/refactor-difficulty.js +169 -0
  389. package/dist/warp/refactor-difficulty.js.map +1 -0
  390. package/dist/warp/references.d.ts +22 -0
  391. package/dist/warp/references.d.ts.map +1 -0
  392. package/dist/warp/references.js +57 -0
  393. package/dist/warp/references.js.map +1 -0
  394. package/dist/warp/stale-docs.d.ts +56 -0
  395. package/dist/warp/stale-docs.d.ts.map +1 -0
  396. package/dist/warp/stale-docs.js +149 -0
  397. package/dist/warp/stale-docs.js.map +1 -0
  398. package/dist/warp/structural-drift-detection.d.ts +49 -0
  399. package/dist/warp/structural-drift-detection.d.ts.map +1 -0
  400. package/dist/warp/structural-drift-detection.js +51 -0
  401. package/dist/warp/structural-drift-detection.js.map +1 -0
  402. package/dist/warp/structural-queries.d.ts +49 -0
  403. package/dist/warp/structural-queries.d.ts.map +1 -0
  404. package/dist/warp/structural-queries.js +175 -0
  405. package/dist/warp/structural-queries.js.map +1 -0
  406. package/dist/warp/symbol-timeline.d.ts +34 -0
  407. package/dist/warp/symbol-timeline.d.ts.map +1 -0
  408. package/dist/warp/symbol-timeline.js +127 -0
  409. package/dist/warp/symbol-timeline.js.map +1 -0
  410. package/dist/warp/traverse-hydrate.d.ts +23 -0
  411. package/dist/warp/traverse-hydrate.d.ts.map +1 -0
  412. package/dist/warp/traverse-hydrate.js +39 -0
  413. package/dist/warp/traverse-hydrate.js.map +1 -0
  414. package/dist/warp/warp-reference-count.d.ts +19 -0
  415. package/dist/warp/warp-reference-count.d.ts.map +1 -0
  416. package/dist/warp/warp-reference-count.js +32 -0
  417. package/dist/warp/warp-reference-count.js.map +1 -0
  418. package/dist/warp/warp-structural-blame.d.ts +20 -0
  419. package/dist/warp/warp-structural-blame.d.ts.map +1 -0
  420. package/dist/warp/warp-structural-blame.js +43 -0
  421. package/dist/warp/warp-structural-blame.js.map +1 -0
  422. package/dist/warp/warp-structural-churn.d.ts +30 -0
  423. package/dist/warp/warp-structural-churn.d.ts.map +1 -0
  424. package/dist/warp/warp-structural-churn.js +213 -0
  425. package/dist/warp/warp-structural-churn.js.map +1 -0
  426. package/dist/warp/warp-structural-log.d.ts +35 -0
  427. package/dist/warp/warp-structural-log.d.ts.map +1 -0
  428. package/dist/warp/warp-structural-log.js +104 -0
  429. package/dist/warp/warp-structural-log.js.map +1 -0
  430. package/docs/CLI.md +68 -4
  431. package/docs/MCP.md +23 -0
  432. package/docs/SETUP.md +112 -27
  433. package/package.json +13 -6
  434. package/dist/ports/warp.d.ts +0 -45
  435. package/dist/ports/warp.d.ts.map +0 -1
  436. package/dist/ports/warp.js.map +0 -1
  437. package/dist/warp/identity-resolver.d.ts +0 -14
  438. package/dist/warp/identity-resolver.d.ts.map +0 -1
  439. package/dist/warp/identity-resolver.js +0 -31
  440. package/dist/warp/identity-resolver.js.map +0 -1
  441. package/dist/warp/indexer-git.d.ts +0 -22
  442. package/dist/warp/indexer-git.d.ts.map +0 -1
  443. package/dist/warp/indexer-git.js +0 -148
  444. package/dist/warp/indexer-git.js.map +0 -1
  445. package/dist/warp/indexer-graph.d.ts +0 -17
  446. package/dist/warp/indexer-graph.d.ts.map +0 -1
  447. package/dist/warp/indexer-graph.js +0 -179
  448. package/dist/warp/indexer-graph.js.map +0 -1
  449. package/dist/warp/indexer-model.d.ts +0 -51
  450. package/dist/warp/indexer-model.d.ts.map +0 -1
  451. package/dist/warp/indexer-model.js +0 -21
  452. package/dist/warp/indexer-model.js.map +0 -1
  453. package/dist/warp/indexer.d.ts +0 -9
  454. package/dist/warp/indexer.d.ts.map +0 -1
  455. package/dist/warp/indexer.js +0 -112
  456. package/dist/warp/indexer.js.map +0 -1
  457. package/dist/warp/symbol-identity.d.ts +0 -11
  458. package/dist/warp/symbol-identity.d.ts.map +0 -1
  459. package/dist/warp/symbol-identity.js +0 -67
  460. package/dist/warp/symbol-identity.js.map +0 -1
  461. package/src/adapters/canonical-json.ts +0 -56
  462. package/src/adapters/node-fs.ts +0 -43
  463. package/src/adapters/node-git.ts +0 -47
  464. package/src/adapters/node-process-runner.ts +0 -27
  465. package/src/adapters/repo-paths.ts +0 -22
  466. package/src/adapters/rotating-ndjson-log.ts +0 -66
  467. package/src/api/index.ts +0 -107
  468. package/src/api/repo-local-graft.ts +0 -21
  469. package/src/api/repo-workspace.ts +0 -34
  470. package/src/api/tool-bridge.ts +0 -21
  471. package/src/cli/activity-render.ts +0 -112
  472. package/src/cli/cli-error.ts +0 -153
  473. package/src/cli/command-parser.ts +0 -302
  474. package/src/cli/entrypoint.ts +0 -18
  475. package/src/cli/index-cmd.ts +0 -94
  476. package/src/cli/index-model.ts +0 -76
  477. package/src/cli/init-bootstrap.ts +0 -47
  478. package/src/cli/init-client-config.ts +0 -299
  479. package/src/cli/init-model.ts +0 -229
  480. package/src/cli/init-render.ts +0 -54
  481. package/src/cli/init-target-hooks.ts +0 -93
  482. package/src/cli/init.ts +0 -122
  483. package/src/cli/json-document.ts +0 -144
  484. package/src/cli/local-history-dag-model.ts +0 -437
  485. package/src/cli/local-history-dag-render.ts +0 -133
  486. package/src/cli/local-history-dag.ts +0 -103
  487. package/src/cli/main.ts +0 -150
  488. package/src/cli/migrate-local-history.ts +0 -118
  489. package/src/cli/peer-command.ts +0 -59
  490. package/src/contracts/capabilities.ts +0 -450
  491. package/src/contracts/causal-ontology.ts +0 -627
  492. package/src/contracts/causal-surface-next-action.ts +0 -18
  493. package/src/contracts/json-object.ts +0 -28
  494. package/src/contracts/mcp-runtime.ts +0 -16
  495. package/src/contracts/output-schema-cli.ts +0 -70
  496. package/src/contracts/output-schema-fragments.ts +0 -831
  497. package/src/contracts/output-schema-mcp.ts +0 -282
  498. package/src/contracts/output-schema-meta.ts +0 -119
  499. package/src/contracts/output-schemas.ts +0 -1230
  500. package/src/git/diff.ts +0 -100
  501. package/src/git/target-git-hook-bootstrap.ts +0 -56
  502. package/src/guards/stream-boundary.ts +0 -110
  503. package/src/hooks/posttooluse-read.ts +0 -54
  504. package/src/hooks/pretooluse-read.ts +0 -52
  505. package/src/hooks/read-governor.ts +0 -95
  506. package/src/hooks/read-messages.ts +0 -53
  507. package/src/hooks/shared.ts +0 -168
  508. package/src/index.ts +0 -1
  509. package/src/mcp/burden.ts +0 -123
  510. package/src/mcp/cache.ts +0 -7
  511. package/src/mcp/cached-file.ts +0 -1
  512. package/src/mcp/context.ts +0 -187
  513. package/src/mcp/control-plane/authz-storage.ts +0 -129
  514. package/src/mcp/control-plane/session-registry.ts +0 -115
  515. package/src/mcp/control-plane/status-projection.ts +0 -76
  516. package/src/mcp/control-plane/types.ts +0 -144
  517. package/src/mcp/daemon-bootstrap.ts +0 -100
  518. package/src/mcp/daemon-control-plane.ts +0 -310
  519. package/src/mcp/daemon-job-scheduler.ts +0 -279
  520. package/src/mcp/daemon-repos.ts +0 -99
  521. package/src/mcp/daemon-server.ts +0 -165
  522. package/src/mcp/daemon-session-host.ts +0 -230
  523. package/src/mcp/daemon-stdio-bridge.ts +0 -260
  524. package/src/mcp/daemon-worker-child-pool.ts +0 -213
  525. package/src/mcp/daemon-worker-inline-pool.ts +0 -46
  526. package/src/mcp/daemon-worker-pool.ts +0 -7
  527. package/src/mcp/daemon-worker-process.ts +0 -52
  528. package/src/mcp/daemon-worker-types.ts +0 -66
  529. package/src/mcp/metrics.ts +0 -176
  530. package/src/mcp/monitor-health.ts +0 -83
  531. package/src/mcp/monitor-persistence.ts +0 -54
  532. package/src/mcp/monitor-tick-job.ts +0 -102
  533. package/src/mcp/monitor-types.ts +0 -103
  534. package/src/mcp/persisted-local-history-graph.ts +0 -591
  535. package/src/mcp/persisted-local-history-policy.ts +0 -501
  536. package/src/mcp/persisted-local-history-views.ts +0 -250
  537. package/src/mcp/persisted-local-history.ts +0 -1621
  538. package/src/mcp/persistent-monitor-runtime.ts +0 -445
  539. package/src/mcp/policy.ts +0 -75
  540. package/src/mcp/receipt.ts +0 -201
  541. package/src/mcp/repo-concurrency.ts +0 -392
  542. package/src/mcp/repo-overview/filter.ts +0 -44
  543. package/src/mcp/repo-overview/types.ts +0 -63
  544. package/src/mcp/repo-overview/view-projection.ts +0 -90
  545. package/src/mcp/repo-state-git.ts +0 -247
  546. package/src/mcp/repo-state-observation.ts +0 -203
  547. package/src/mcp/repo-state-transition.ts +0 -151
  548. package/src/mcp/repo-state-types.ts +0 -107
  549. package/src/mcp/repo-state.ts +0 -146
  550. package/src/mcp/repo-tool-job.ts +0 -102
  551. package/src/mcp/repo-tool-worker-context.ts +0 -212
  552. package/src/mcp/repo-workspace.ts +0 -21
  553. package/src/mcp/run-capture-config.ts +0 -33
  554. package/src/mcp/runtime-causal-context.ts +0 -72
  555. package/src/mcp/runtime-observability.ts +0 -217
  556. package/src/mcp/runtime-staged-target.ts +0 -161
  557. package/src/mcp/runtime-workspace-overlay.ts +0 -255
  558. package/src/mcp/secret-scrub.ts +0 -89
  559. package/src/mcp/semantic-transition-guidance.ts +0 -60
  560. package/src/mcp/semantic-transition-summary.ts +0 -130
  561. package/src/mcp/server-context.ts +0 -223
  562. package/src/mcp/server-invocation.ts +0 -388
  563. package/src/mcp/server-tool-access.ts +0 -145
  564. package/src/mcp/server.ts +0 -265
  565. package/src/mcp/stdio-server.ts +0 -26
  566. package/src/mcp/stdio.ts +0 -3
  567. package/src/mcp/tool-registry.ts +0 -80
  568. package/src/mcp/tools/activity-view.ts +0 -325
  569. package/src/mcp/tools/budget.ts +0 -23
  570. package/src/mcp/tools/causal-attach.ts +0 -67
  571. package/src/mcp/tools/causal-status.ts +0 -58
  572. package/src/mcp/tools/changed-since.ts +0 -71
  573. package/src/mcp/tools/code-find.ts +0 -169
  574. package/src/mcp/tools/code-refs.ts +0 -470
  575. package/src/mcp/tools/code-show.ts +0 -262
  576. package/src/mcp/tools/daemon-monitors.ts +0 -14
  577. package/src/mcp/tools/daemon-repos.ts +0 -22
  578. package/src/mcp/tools/daemon-sessions.ts +0 -14
  579. package/src/mcp/tools/daemon-status.ts +0 -12
  580. package/src/mcp/tools/diagnostic-models.ts +0 -95
  581. package/src/mcp/tools/doctor.ts +0 -66
  582. package/src/mcp/tools/explain.ts +0 -84
  583. package/src/mcp/tools/file-outline.ts +0 -67
  584. package/src/mcp/tools/git-files.ts +0 -73
  585. package/src/mcp/tools/graft-diff.ts +0 -35
  586. package/src/mcp/tools/map-collector.ts +0 -338
  587. package/src/mcp/tools/map.ts +0 -185
  588. package/src/mcp/tools/monitor-pause.ts +0 -18
  589. package/src/mcp/tools/monitor-resume.ts +0 -18
  590. package/src/mcp/tools/monitor-start.ts +0 -20
  591. package/src/mcp/tools/monitor-stop.ts +0 -18
  592. package/src/mcp/tools/precision-live.ts +0 -158
  593. package/src/mcp/tools/precision-match.ts +0 -54
  594. package/src/mcp/tools/precision-paths.ts +0 -59
  595. package/src/mcp/tools/precision-query.ts +0 -127
  596. package/src/mcp/tools/precision-show.ts +0 -86
  597. package/src/mcp/tools/precision-visibility.ts +0 -44
  598. package/src/mcp/tools/precision-warp.ts +0 -90
  599. package/src/mcp/tools/precision.ts +0 -21
  600. package/src/mcp/tools/read-range.ts +0 -28
  601. package/src/mcp/tools/run-capture.ts +0 -149
  602. package/src/mcp/tools/safe-read.ts +0 -148
  603. package/src/mcp/tools/since.ts +0 -53
  604. package/src/mcp/tools/state.ts +0 -39
  605. package/src/mcp/tools/stats.ts +0 -24
  606. package/src/mcp/tools/workspace-authorizations.ts +0 -14
  607. package/src/mcp/tools/workspace-authorize.ts +0 -20
  608. package/src/mcp/tools/workspace-bind.ts +0 -25
  609. package/src/mcp/tools/workspace-rebind.ts +0 -25
  610. package/src/mcp/tools/workspace-revoke.ts +0 -18
  611. package/src/mcp/tools/workspace-status.ts +0 -12
  612. package/src/mcp/warp-pool.ts +0 -36
  613. package/src/mcp/workspace-read-observation-model.ts +0 -48
  614. package/src/mcp/workspace-read-observation.ts +0 -103
  615. package/src/mcp/workspace-router-capability.ts +0 -32
  616. package/src/mcp/workspace-router-history.ts +0 -233
  617. package/src/mcp/workspace-router-model.ts +0 -131
  618. package/src/mcp/workspace-router-resolution.ts +0 -71
  619. package/src/mcp/workspace-router-runtime.ts +0 -243
  620. package/src/mcp/workspace-router.ts +0 -681
  621. package/src/metrics/logger.ts +0 -40
  622. package/src/metrics/types.ts +0 -40
  623. package/src/operations/cached-file.ts +0 -40
  624. package/src/operations/diff-identity.ts +0 -127
  625. package/src/operations/file-outline.ts +0 -48
  626. package/src/operations/graft-diff.ts +0 -162
  627. package/src/operations/observation-cache.ts +0 -149
  628. package/src/operations/read-range.ts +0 -64
  629. package/src/operations/repo-workspace.ts +0 -339
  630. package/src/operations/result-dto.ts +0 -23
  631. package/src/operations/safe-read.ts +0 -118
  632. package/src/operations/state.ts +0 -66
  633. package/src/operations/structured-buffer-compare.ts +0 -429
  634. package/src/operations/structured-buffer-model.ts +0 -456
  635. package/src/operations/structured-buffer-query.ts +0 -794
  636. package/src/operations/structured-buffer.ts +0 -181
  637. package/src/parser/diff.ts +0 -313
  638. package/src/parser/lang.ts +0 -71
  639. package/src/parser/markdown.ts +0 -197
  640. package/src/parser/outline.ts +0 -316
  641. package/src/parser/runtime.ts +0 -71
  642. package/src/parser/types.ts +0 -75
  643. package/src/policy/evaluate.ts +0 -178
  644. package/src/policy/graftignore.ts +0 -6
  645. package/src/policy/types.ts +0 -87
  646. package/src/ports/codec.ts +0 -13
  647. package/src/ports/filesystem.ts +0 -18
  648. package/src/ports/git.ts +0 -16
  649. package/src/ports/guards.ts +0 -68
  650. package/src/ports/process-runner.ts +0 -22
  651. package/src/ports/warp.ts +0 -55
  652. package/src/release/security-gate.ts +0 -102
  653. package/src/session/tracker.ts +0 -145
  654. package/src/session/types.ts +0 -23
  655. package/src/version.ts +0 -3
  656. package/src/warp/identity-resolver.ts +0 -35
  657. package/src/warp/indexer-git.ts +0 -182
  658. package/src/warp/indexer-graph.ts +0 -276
  659. package/src/warp/indexer-model.ts +0 -69
  660. package/src/warp/indexer.ts +0 -186
  661. package/src/warp/observers.ts +0 -100
  662. package/src/warp/open.ts +0 -93
  663. package/src/warp/plumbing.d.ts +0 -15
  664. package/src/warp/symbol-identity.ts +0 -100
  665. package/src/warp/writer-id.ts +0 -30
@@ -1,149 +0,0 @@
1
- import * as path from "node:path";
2
- import { z } from "zod";
3
- import type { ToolDefinition, ToolContext, ToolHandler } from "../context.js";
4
-
5
- const RUN_CAPTURE_POLICY_BOUNDARY = {
6
- kind: "shell_escape_hatch",
7
- boundedReadContract: false,
8
- policyEnforced: false,
9
- } as const;
10
-
11
- const PRIVATE_KEY_BLOCK_RE = /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g;
12
- const SECRET_ASSIGNMENT_RE = /(\b(?:api[_-]?key|access[_-]?token|auth(?:orization)?|bearer|token|secret|password|passwd|private[_-]?key|client[_-]?secret|session[_-]?key)\b\s*[:=]\s*)([^\r\n]+)/gi;
13
- const BEARER_TOKEN_RE = /(\bbearer\s+)([A-Za-z0-9._~+/=-]{8,})/gi;
14
-
15
- function tailOutput(output: string, tail: number): {
16
- readonly tailed: string;
17
- readonly totalLines: number;
18
- } {
19
- const lines = output.split("\n");
20
- return {
21
- tailed: lines.slice(-tail).join("\n"),
22
- totalLines: lines.length,
23
- };
24
- }
25
-
26
- function renderCaptureError(result: {
27
- readonly status: number | null;
28
- readonly stderr: string;
29
- readonly error?: Error;
30
- }): string {
31
- if (result.error !== undefined) {
32
- return result.error.message;
33
- }
34
- const stderr = result.stderr.trim();
35
- if (stderr.length > 0) {
36
- return stderr;
37
- }
38
- return `Command exited with status ${String(result.status)}`;
39
- }
40
-
41
- function redactForLog(output: string): {
42
- readonly value: string;
43
- readonly redactions: number;
44
- } {
45
- let redactions = 0;
46
- let value = output.replace(PRIVATE_KEY_BLOCK_RE, () => {
47
- redactions++;
48
- return "[REDACTED PRIVATE KEY BLOCK]";
49
- });
50
- value = value.replace(SECRET_ASSIGNMENT_RE, (_match, prefix: string) => {
51
- redactions++;
52
- return `${prefix}[REDACTED]`;
53
- });
54
- value = value.replace(BEARER_TOKEN_RE, (_match, prefix: string) => {
55
- redactions++;
56
- return `${prefix}[REDACTED]`;
57
- });
58
- return { value, redactions };
59
- }
60
-
61
- async function persistCaptureLog(ctx: ToolContext, output: string): Promise<{
62
- readonly logPath: string | null;
63
- readonly logRedactions: number;
64
- }> {
65
- if (!ctx.runCapture.persistLogs) {
66
- return { logPath: null, logRedactions: 0 };
67
- }
68
-
69
- const logPath = path.join(ctx.graftDir, "logs", "capture.log");
70
- const persisted = ctx.runCapture.redactLogs ? redactForLog(output) : { value: output, redactions: 0 };
71
-
72
- try {
73
- await ctx.fs.mkdir(path.dirname(logPath), { recursive: true });
74
- await ctx.fs.writeFile(logPath, persisted.value, "utf-8");
75
- return {
76
- logPath,
77
- logRedactions: persisted.redactions,
78
- };
79
- } catch {
80
- return { logPath: null, logRedactions: 0 };
81
- }
82
- }
83
-
84
- export const runCaptureTool: ToolDefinition = {
85
- name: "run_capture",
86
- description:
87
- "Execute a shell command and return the last N lines of output " +
88
- "(default 60). Responses include an explicit policy boundary. " +
89
- "Persisted logs can be disabled and obvious secrets are redacted " +
90
- "before writing to .graft/logs/capture.log.",
91
- schema: { command: z.string(), tail: z.number().optional() },
92
- createHandler(): ToolHandler {
93
- return async (args, ctx) => {
94
- const command = args["command"] as string;
95
- const tail = Math.max(1, Math.floor((args["tail"] as number | undefined) ?? 60));
96
- if (!ctx.runCapture.enabled) {
97
- return ctx.respond("run_capture", {
98
- output: "",
99
- totalLines: 0,
100
- tailedLines: 0,
101
- logPath: null,
102
- logRedactions: 0,
103
- logPersistenceEnabled: false,
104
- truncated: false,
105
- disabled: true,
106
- error: "run_capture is disabled by configuration",
107
- policyBoundary: RUN_CAPTURE_POLICY_BOUNDARY,
108
- });
109
- }
110
- const result = ctx.process.run({
111
- command: "sh",
112
- args: ["-c", command],
113
- cwd: ctx.projectRoot,
114
- timeoutMs: 30000,
115
- maxBufferBytes: 10 * 1024 * 1024,
116
- });
117
-
118
- if (result.error !== undefined || result.status !== 0) {
119
- const tailedOutput = tailOutput(result.stdout, tail);
120
- return ctx.respond("run_capture", {
121
- error: renderCaptureError(result),
122
- output: tailedOutput.tailed,
123
- totalLines: tailedOutput.totalLines,
124
- tailedLines: Math.min(tail, tailedOutput.totalLines),
125
- logPath: null,
126
- logRedactions: 0,
127
- logPersistenceEnabled: ctx.runCapture.persistLogs,
128
- truncated: tailedOutput.totalLines > tail,
129
- stderr: result.stderr.slice(0, 2000),
130
- policyBoundary: RUN_CAPTURE_POLICY_BOUNDARY,
131
- });
132
- }
133
-
134
- const output = result.stdout;
135
- const tailedOutput = tailOutput(output, tail);
136
- const persisted = await persistCaptureLog(ctx, output);
137
- return ctx.respond("run_capture", {
138
- output: tailedOutput.tailed,
139
- totalLines: tailedOutput.totalLines,
140
- tailedLines: Math.min(tail, tailedOutput.totalLines),
141
- logPath: persisted.logPath,
142
- logRedactions: persisted.logRedactions,
143
- logPersistenceEnabled: ctx.runCapture.persistLogs,
144
- truncated: tailedOutput.totalLines > tail,
145
- policyBoundary: RUN_CAPTURE_POLICY_BOUNDARY,
146
- });
147
- };
148
- },
149
- };
@@ -1,148 +0,0 @@
1
- import { z } from "zod";
2
- import { safeRead, type SafeReadResult } from "../../operations/safe-read.js";
3
- import { toJsonObject } from "../../operations/result-dto.js";
4
- import { RefusedResult } from "../../policy/types.js";
5
- import { diffOutlines } from "../../parser/diff.js";
6
- import { CachedFile } from "../cached-file.js";
7
- import type { Metrics } from "../metrics.js";
8
- import { evaluateMcpPolicy } from "../policy.js";
9
- import { toRepoPolicyPath } from "../../adapters/repo-paths.js";
10
- import type { ToolDefinition, ToolHandler } from "../context.js";
11
-
12
- const PROJECTION_METRICS: Readonly<Record<string, ((m: Metrics) => void) | undefined>> = {
13
- content: (m) => { m.recordRead(); },
14
- outline: (m) => { m.recordOutline(); },
15
- refused: (m) => { m.recordRefusal(); },
16
- };
17
-
18
- const CACHEABLE_PROJECTIONS: ReadonlySet<SafeReadResult["projection"]> = new Set(["content", "outline"]);
19
-
20
- export const safeReadTool: ToolDefinition = {
21
- name: "safe_read",
22
- description:
23
- "Policy-enforced file read. Returns full content for small files, " +
24
- "structural outline with jump table for large files, or refusal with " +
25
- "reason code for banned files. Detects re-reads and returns cached " +
26
- "outlines or structural diffs.",
27
- schema: { path: z.string(), intent: z.string().optional() },
28
- createHandler(): ToolHandler {
29
- return async (args, ctx) => {
30
- const filePath = ctx.resolvePath(args["path"] as string);
31
- ctx.recordFootprint({ paths: [filePath] });
32
-
33
- // Build CachedFile once — all consumers share the same snapshot,
34
- // eliminating TOCTOU races where the file changes between reads.
35
- let cf: CachedFile | null = null;
36
- try {
37
- const rawContent = await ctx.fs.readFile(filePath, "utf-8");
38
- cf = new CachedFile(filePath, rawContent);
39
- } catch {
40
- // File doesn't exist or can't be read — proceed to safeRead for error handling
41
- }
42
-
43
- // Check cache if we could read the file
44
- if (cf?.supportsOutline === true) {
45
- const cacheResult = ctx.cache.check(filePath, cf.rawContent);
46
- if (cacheResult.hit) {
47
- // Defense: re-check policy before returning cached data.
48
- const policy = evaluateMcpPolicy(ctx, filePath, cf.actual);
49
- if (policy instanceof RefusedResult) {
50
- ctx.metrics.recordRefusal();
51
- return ctx.respond("safe_read", {
52
- path: filePath,
53
- projection: "refused",
54
- reason: policy.reason,
55
- reasonDetail: policy.reasonDetail,
56
- next: [...policy.next],
57
- actual: cf.actual,
58
- });
59
- }
60
-
61
- cacheResult.obs.touch();
62
- ctx.metrics.recordCacheHit(cf.actual.bytes);
63
- ctx.recordFootprint({
64
- symbols: cacheResult.obs.outline.map((e) => e.name),
65
- });
66
- return ctx.respond("safe_read", {
67
- path: filePath,
68
- projection: "cache_hit",
69
- reason: "REREAD_UNCHANGED",
70
- outline: cacheResult.obs.outline,
71
- jumpTable: cacheResult.obs.jumpTable,
72
- actual: cf.actual,
73
- readCount: cacheResult.obs.readCount,
74
- estimatedBytesAvoided: cf.actual.bytes,
75
- lastReadAt: cacheResult.obs.lastReadAt,
76
- });
77
- }
78
-
79
- // File changed since last observation — compute structural diff
80
- if (cacheResult.stale !== null) {
81
- // Defense: re-check policy before returning structural data.
82
- const policy = evaluateMcpPolicy(ctx, filePath, cf.actual);
83
- if (policy instanceof RefusedResult) {
84
- ctx.metrics.recordRefusal();
85
- return ctx.respond("safe_read", {
86
- path: filePath,
87
- projection: "refused",
88
- reason: policy.reason,
89
- reasonDetail: policy.reasonDetail,
90
- next: [...policy.next],
91
- actual: cf.actual,
92
- });
93
- }
94
-
95
- const diff = diffOutlines(cacheResult.stale.outline, cf.outline);
96
- const newReadCount = cacheResult.stale.readCount + 1;
97
- ctx.cache.record(filePath, cf.hash, cf.outline, cf.jumpTable, cf.actual);
98
- ctx.recordFootprint({
99
- symbols: cf.outline.map((e) => e.name),
100
- });
101
- const updatedObs = ctx.cache.get(filePath);
102
- return ctx.respond("safe_read", {
103
- path: filePath,
104
- projection: "diff",
105
- reason: "CHANGED_SINCE_LAST_READ",
106
- diff,
107
- outline: cf.outline,
108
- jumpTable: cf.jumpTable,
109
- actual: cf.actual,
110
- readCount: newReadCount,
111
- lastReadAt: updatedObs?.lastReadAt ?? new Date().toISOString(),
112
- });
113
- }
114
- }
115
-
116
- // First read — pass rawContent to avoid double-read (TOCTOU)
117
- const result = await safeRead(filePath, {
118
- fs: ctx.fs,
119
- codec: ctx.codec,
120
- content: cf?.rawContent,
121
- intent: args["intent"] as string | undefined,
122
- policyPath: toRepoPolicyPath(ctx.projectRoot, filePath),
123
- graftignorePatterns: [...ctx.graftignorePatterns],
124
- sessionDepth: ctx.governor.getGovernorDepth(),
125
- budgetRemaining: ctx.governor.getBudget()?.remaining,
126
- });
127
-
128
- PROJECTION_METRICS[result.projection]?.(ctx.metrics);
129
- if (result.outline !== undefined) {
130
- ctx.recordFootprint({ symbols: result.outline.map((e) => e.name) });
131
- }
132
-
133
- // Record observation for cacheable projections — uses CachedFile
134
- // outline (no re-read) to eliminate the snapshot race.
135
- if (
136
- cf !== null &&
137
- cf.supportsOutline &&
138
- result.actual !== undefined &&
139
- CACHEABLE_PROJECTIONS.has(result.projection) &&
140
- result.reason !== "UNSUPPORTED_LANGUAGE"
141
- ) {
142
- ctx.cache.record(filePath, cf.hash, cf.outline, cf.jumpTable, result.actual);
143
- }
144
-
145
- return ctx.respond("safe_read", toJsonObject(result));
146
- };
147
- },
148
- };
@@ -1,53 +0,0 @@
1
- import { z } from "zod";
2
- import { graftDiff } from "../../operations/graft-diff.js";
3
- import type { ToolDefinition, ToolHandler } from "../context.js";
4
- import { evaluateMcpRefusal } from "../policy.js";
5
-
6
- export const sinceTool: ToolDefinition = {
7
- name: "graft_since",
8
- description:
9
- "Structural changes since a git ref. Shows symbols added, removed, " +
10
- "and changed per file — not line hunks. Includes per-file summary " +
11
- "lines for quick triage. Defaults to HEAD as the comparison target.",
12
- schema: {
13
- base: z.string(),
14
- head: z.string().optional(),
15
- },
16
- createHandler(): ToolHandler {
17
- return async (args, ctx) => {
18
- const base = args["base"] as string;
19
- const head = (args["head"] as string | undefined) ?? "HEAD";
20
-
21
- const result = await graftDiff({
22
- cwd: ctx.projectRoot,
23
- fs: ctx.fs,
24
- git: ctx.git,
25
- resolveWorkingTreePath: (filePath) => ctx.resolvePath(filePath),
26
- base,
27
- head,
28
- refusalCheck: (filePath, actual) => evaluateMcpRefusal(ctx, filePath, actual),
29
- });
30
-
31
- // Aggregate symbol-level changes across all files
32
- let totalAdded = 0;
33
- let totalRemoved = 0;
34
- let totalChanged = 0;
35
-
36
- for (const file of result.files) {
37
- totalAdded += file.diff.added.length;
38
- totalRemoved += file.diff.removed.length;
39
- totalChanged += file.diff.changed.length;
40
- }
41
-
42
- ctx.recordFootprint({
43
- paths: result.files.map((f) => f.path),
44
- });
45
-
46
- return ctx.respond("graft_since", {
47
- ...result,
48
- summary: `+${String(totalAdded)} added, -${String(totalRemoved)} removed, ~${String(totalChanged)} changed across ${String(result.files.length)} files`,
49
- layer: "ref_view",
50
- });
51
- };
52
- },
53
- };
@@ -1,39 +0,0 @@
1
- import * as path from "node:path";
2
- import { z } from "zod";
3
- import { STATE_FILENAME, stateSave, stateLoad } from "../../operations/state.js";
4
- import type { ToolDefinition, ToolHandler } from "../context.js";
5
- import { toJsonObject } from "../../operations/result-dto.js";
6
-
7
- export const stateSaveTool: ToolDefinition = {
8
- name: "state_save",
9
- description:
10
- "Save session working state (max 8 KB). Use for session bookmarks: " +
11
- "current task, files modified, next planned actions.",
12
- schema: { content: z.string() },
13
- createHandler(): ToolHandler {
14
- return async (args, ctx) => {
15
- const result = await stateSave(args["content"] as string, {
16
- stateDir: ctx.graftDir,
17
- statePath: path.join(ctx.graftDir, STATE_FILENAME),
18
- fs: ctx.fs,
19
- });
20
- return ctx.respond("state_save", toJsonObject(result));
21
- };
22
- },
23
- };
24
-
25
- export const stateLoadTool: ToolDefinition = {
26
- name: "state_load",
27
- description:
28
- "Load previously saved session state. Returns null if no state has " +
29
- "been saved.",
30
- createHandler(): ToolHandler {
31
- return async (_args, ctx) => {
32
- const result = await stateLoad({
33
- statePath: path.join(ctx.graftDir, STATE_FILENAME),
34
- fs: ctx.fs,
35
- });
36
- return ctx.respond("state_load", toJsonObject(result));
37
- };
38
- },
39
- };
@@ -1,24 +0,0 @@
1
- import { totalNonReadBytesReturned } from "../burden.js";
2
- import type { ToolDefinition, ToolHandler } from "../context.js";
3
-
4
- export const statsTool: ToolDefinition = {
5
- name: "stats",
6
- description:
7
- "Decision metrics for the current session. Total reads, outlines, " +
8
- "refusals, cache hits, bytes avoided, and burden by tool kind.",
9
- createHandler(): ToolHandler {
10
- return (_args, ctx) => {
11
- const snap = ctx.metrics.snapshot();
12
- return ctx.respond("stats", {
13
- totalReads: snap.reads,
14
- totalOutlines: snap.outlines,
15
- totalRefusals: snap.refusals,
16
- totalCacheHits: snap.cacheHits,
17
- totalBytesReturned: snap.bytesReturned,
18
- totalBytesAvoidedByCache: snap.bytesAvoided,
19
- totalNonReadBytesReturned: totalNonReadBytesReturned(snap.burdenByKind),
20
- burdenByKind: snap.burdenByKind,
21
- });
22
- };
23
- },
24
- };
@@ -1,14 +0,0 @@
1
- import type { ToolDefinition, ToolHandler } from "../context.js";
2
-
3
- export const workspaceAuthorizationsTool: ToolDefinition = {
4
- name: "workspace_authorizations",
5
- description:
6
- "List daemon-authorized workspaces, their capability posture, and active bound-session counts.",
7
- createHandler(): ToolHandler {
8
- return async (_args, ctx) => {
9
- return ctx.respond("workspace_authorizations", {
10
- workspaces: await ctx.listWorkspaceAuthorizations(),
11
- });
12
- };
13
- },
14
- };
@@ -1,20 +0,0 @@
1
- import { z } from "zod";
2
- import type { ToolDefinition, ToolHandler } from "../context.js";
3
-
4
- export const workspaceAuthorizeTool: ToolDefinition = {
5
- name: "workspace_authorize",
6
- description:
7
- "Authorize a workspace for daemon binding and optionally change its daemon capability posture.",
8
- schema: {
9
- cwd: z.string(),
10
- runCapture: z.boolean().optional(),
11
- },
12
- createHandler(): ToolHandler {
13
- return async (args, ctx) => {
14
- return ctx.respond("workspace_authorize", { ...await ctx.authorizeWorkspace({
15
- cwd: args["cwd"] as string,
16
- runCapture: args["runCapture"] as boolean | undefined,
17
- }) });
18
- };
19
- },
20
- };
@@ -1,25 +0,0 @@
1
- import { z } from "zod";
2
- import type { ToolDefinition, ToolHandler } from "../context.js";
3
-
4
- export const workspaceBindTool: ToolDefinition = {
5
- name: "workspace_bind",
6
- description:
7
- "Bind the current daemon session to a workspace by resolving repo and worktree identity server-side.",
8
- schema: {
9
- cwd: z.string(),
10
- worktreeRoot: z.string().optional(),
11
- gitCommonDir: z.string().optional(),
12
- repoId: z.string().optional(),
13
- },
14
- createHandler(): ToolHandler {
15
- return async (args, ctx) => {
16
- const result = await ctx.bindWorkspace({
17
- cwd: args["cwd"] as string,
18
- worktreeRoot: args["worktreeRoot"] as string | undefined,
19
- gitCommonDir: args["gitCommonDir"] as string | undefined,
20
- repoId: args["repoId"] as string | undefined,
21
- }, "workspace_bind");
22
- return ctx.respond("workspace_bind", { ...result });
23
- };
24
- },
25
- };
@@ -1,25 +0,0 @@
1
- import { z } from "zod";
2
- import type { ToolDefinition, ToolHandler } from "../context.js";
3
-
4
- export const workspaceRebindTool: ToolDefinition = {
5
- name: "workspace_rebind",
6
- description:
7
- "Rebind the current daemon session to a different workspace and start a fresh session-local slice.",
8
- schema: {
9
- cwd: z.string(),
10
- worktreeRoot: z.string().optional(),
11
- gitCommonDir: z.string().optional(),
12
- repoId: z.string().optional(),
13
- },
14
- createHandler(): ToolHandler {
15
- return async (args, ctx) => {
16
- const result = await ctx.rebindWorkspace({
17
- cwd: args["cwd"] as string,
18
- worktreeRoot: args["worktreeRoot"] as string | undefined,
19
- gitCommonDir: args["gitCommonDir"] as string | undefined,
20
- repoId: args["repoId"] as string | undefined,
21
- }, "workspace_rebind");
22
- return ctx.respond("workspace_rebind", { ...result });
23
- };
24
- },
25
- };
@@ -1,18 +0,0 @@
1
- import { z } from "zod";
2
- import type { ToolDefinition, ToolHandler } from "../context.js";
3
-
4
- export const workspaceRevokeTool: ToolDefinition = {
5
- name: "workspace_revoke",
6
- description:
7
- "Revoke daemon authorization for a workspace while leaving any already-open sessions visible to the control plane.",
8
- schema: {
9
- cwd: z.string(),
10
- },
11
- createHandler(): ToolHandler {
12
- return async (args, ctx) => {
13
- return ctx.respond("workspace_revoke", { ...await ctx.revokeWorkspace({
14
- cwd: args["cwd"] as string,
15
- }) });
16
- };
17
- },
18
- };
@@ -1,12 +0,0 @@
1
- import type { ToolDefinition, ToolHandler } from "../context.js";
2
-
3
- export const workspaceStatusTool: ToolDefinition = {
4
- name: "workspace_status",
5
- description:
6
- "Return the current daemon workspace binding state and resolved capability profile.",
7
- createHandler(): ToolHandler {
8
- return (_args, ctx) => {
9
- return ctx.respond("workspace_status", { ...ctx.getWorkspaceStatus() });
10
- };
11
- },
12
- };
@@ -1,36 +0,0 @@
1
- import type { WarpHandle } from "../ports/warp.js";
2
- import { DEFAULT_WARP_WRITER_ID } from "../warp/writer-id.js";
3
-
4
- export interface WarpPool {
5
- getOrOpen(repoId: string, worktreeRoot: string, writerId?: string): Promise<WarpHandle>;
6
- size(): number;
7
- }
8
-
9
- export class InMemoryWarpPool implements WarpPool {
10
- private readonly opened = new Map<string, Map<string, Promise<WarpHandle>>>();
11
-
12
- constructor(private readonly openWarp: (worktreeRoot: string, writerId: string) => Promise<WarpHandle>) {}
13
-
14
- getOrOpen(repoId: string, worktreeRoot: string, writerId: string = DEFAULT_WARP_WRITER_ID): Promise<WarpHandle> {
15
- const repoHandles = this.opened.get(repoId);
16
- const cached = repoHandles?.get(writerId);
17
- if (cached !== undefined) return cached;
18
-
19
- const nextRepoHandles = repoHandles ?? new Map<string, Promise<WarpHandle>>();
20
- const opened = this.openWarp(worktreeRoot, writerId).catch((error: unknown) => {
21
- const current = this.opened.get(repoId);
22
- current?.delete(writerId);
23
- if (current?.size === 0) {
24
- this.opened.delete(repoId);
25
- }
26
- throw error;
27
- });
28
- nextRepoHandles.set(writerId, opened);
29
- this.opened.set(repoId, nextRepoHandles);
30
- return opened;
31
- }
32
-
33
- size(): number {
34
- return this.opened.size;
35
- }
36
- }
@@ -1,48 +0,0 @@
1
- import { z } from "zod";
2
- import type { JsonObject } from "../contracts/json-object.js";
3
-
4
- export const attributedReadArgsSchema = z.object({
5
- path: z.string(),
6
- }).catchall(z.unknown());
7
-
8
- const safeReadObservationResultSchema = z.object({
9
- projection: z.enum(["content", "outline", "cache_hit", "diff"]),
10
- reason: z.string().optional(),
11
- }).catchall(z.unknown());
12
-
13
- const fileOutlineObservationResultSchema = z.object({
14
- reason: z.string().optional(),
15
- error: z.string().optional(),
16
- }).catchall(z.unknown());
17
-
18
- const readRangeObservationResultSchema = z.object({
19
- content: z.string(),
20
- startLine: z.number().int(),
21
- endLine: z.number().int(),
22
- reason: z.string().optional(),
23
- }).catchall(z.unknown());
24
-
25
- export type AttributedReadArgs = z.infer<typeof attributedReadArgsSchema>;
26
- export type SafeReadObservationResult = z.infer<typeof safeReadObservationResultSchema>;
27
- export type FileOutlineObservationResult = z.infer<typeof fileOutlineObservationResultSchema>;
28
- export type ReadRangeObservationResult = z.infer<typeof readRangeObservationResultSchema>;
29
-
30
- export function parseAttributedReadArgs(args: JsonObject): AttributedReadArgs | null {
31
- const parsed = attributedReadArgsSchema.safeParse(args);
32
- return parsed.success ? parsed.data : null;
33
- }
34
-
35
- export function parseSafeReadObservationResult(result: JsonObject): SafeReadObservationResult | null {
36
- const parsed = safeReadObservationResultSchema.safeParse(result);
37
- return parsed.success ? parsed.data : null;
38
- }
39
-
40
- export function parseFileOutlineObservationResult(result: JsonObject): FileOutlineObservationResult | null {
41
- const parsed = fileOutlineObservationResultSchema.safeParse(result);
42
- return parsed.success ? parsed.data : null;
43
- }
44
-
45
- export function parseReadRangeObservationResult(result: JsonObject): ReadRangeObservationResult | null {
46
- const parsed = readRangeObservationResultSchema.safeParse(result);
47
- return parsed.success ? parsed.data : null;
48
- }