@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,217 +0,0 @@
1
- import * as path from "node:path";
2
- import { ZodError } from "zod";
3
- import { RotatingNdjsonLog } from "../adapters/rotating-ndjson-log.js";
4
- import type { JsonCodec } from "../ports/codec.js";
5
- import type { FileSystem } from "../ports/filesystem.js";
6
- import type { MetricsSnapshot } from "./metrics.js";
7
- import type { BurdenKind } from "./burden.js";
8
- import type { GovernorDepth } from "../session/types.js";
9
-
10
- export type RuntimeLogPolicy = "metadata_only";
11
-
12
- export interface RuntimeObservabilityState {
13
- readonly enabled: boolean;
14
- readonly logPath: string;
15
- readonly maxBytes: number;
16
- readonly logPolicy: RuntimeLogPolicy;
17
- }
18
-
19
- export interface ResolveRuntimeObservabilityOptions {
20
- readonly graftDir: string;
21
- readonly env?: Readonly<Record<string, string | undefined>>;
22
- readonly overrides?: Partial<RuntimeObservabilityState>;
23
- }
24
-
25
- const DEFAULT_MAX_BYTES = 1_048_576;
26
- const DEFAULT_POLICY: RuntimeLogPolicy = "metadata_only";
27
-
28
- function parseBooleanFlag(value: string | undefined, fallback: boolean): boolean {
29
- if (value === undefined) return fallback;
30
- const normalized = value.trim().toLowerCase();
31
- if ([ "0", "false", "no", "off" ].includes(normalized)) return false;
32
- if ([ "1", "true", "yes", "on" ].includes(normalized)) return true;
33
- return fallback;
34
- }
35
-
36
- function parsePositiveInteger(value: string | undefined, fallback: number): number {
37
- if (value === undefined) return fallback;
38
- const parsed = Number.parseInt(value, 10);
39
- return Number.isInteger(parsed) && parsed > 0 ? parsed : fallback;
40
- }
41
-
42
- export function resolveRuntimeObservabilityState(
43
- options: ResolveRuntimeObservabilityOptions,
44
- ): RuntimeObservabilityState {
45
- const env = options.env ?? process.env;
46
- const base: RuntimeObservabilityState = {
47
- enabled: parseBooleanFlag(env["GRAFT_ENABLE_MCP_RUNTIME_LOG"], true),
48
- logPath: env["GRAFT_MCP_RUNTIME_LOG_PATH"]?.trim() ?? path.join(options.graftDir, "logs", "mcp-runtime.ndjson"),
49
- maxBytes: parsePositiveInteger(env["GRAFT_MCP_RUNTIME_LOG_MAX_BYTES"], DEFAULT_MAX_BYTES),
50
- logPolicy: DEFAULT_POLICY,
51
- };
52
- return {
53
- ...base,
54
- ...options.overrides,
55
- };
56
- }
57
-
58
- export interface RuntimeSessionStartedEvent {
59
- readonly event: "session_started";
60
- readonly sessionId: string;
61
- readonly logPath: string;
62
- readonly logPolicy: RuntimeLogPolicy;
63
- }
64
-
65
- export interface RuntimeToolCallStartedEvent {
66
- readonly event: "tool_call_started";
67
- readonly sessionId: string;
68
- readonly traceId: string;
69
- readonly tool: string;
70
- readonly argKeys: readonly string[];
71
- readonly sessionDepth: GovernorDepth;
72
- }
73
-
74
- /**
75
- * Per-tool-call footprint capturing which files, symbols, and regions
76
- * were observed. Enables provenance tracing at sub-file granularity.
77
- */
78
- export interface ToolCallFootprint {
79
- /** File paths read or scanned by this tool call. */
80
- readonly paths: readonly string[];
81
- /** Symbol names inspected (when available from outline/precision tools). */
82
- readonly symbols: readonly string[];
83
- /** Line regions accessed (when available from read_range). */
84
- readonly regions: readonly ToolCallFootprintRegion[];
85
- }
86
-
87
- /** A line region within a specific file. */
88
- export interface ToolCallFootprintRegion {
89
- readonly path: string;
90
- readonly startLine: number;
91
- readonly endLine: number;
92
- }
93
-
94
- export interface RuntimeToolCallCompletedEvent {
95
- readonly event: "tool_call_completed";
96
- readonly sessionId: string;
97
- readonly traceId: string;
98
- readonly seq: number;
99
- readonly tool: string;
100
- readonly latencyMs: number;
101
- readonly projection: string;
102
- readonly reason: string;
103
- readonly burdenKind: BurdenKind;
104
- readonly nonReadBurden: boolean;
105
- readonly returnedBytes: number;
106
- readonly fileBytes: number | null;
107
- readonly sessionDepth: GovernorDepth;
108
- readonly tripwireSignals: readonly string[];
109
- readonly metrics: MetricsSnapshot;
110
- /** Optional sub-file footprint for provenance granularity. */
111
- readonly footprint?: ToolCallFootprint;
112
- }
113
-
114
- export type RuntimeFailureKind = "validation_error" | "tool_error" | "unknown_error";
115
-
116
- export interface RuntimeToolCallFailedEvent {
117
- readonly event: "tool_call_failed";
118
- readonly sessionId: string;
119
- readonly traceId: string;
120
- readonly tool: string;
121
- readonly latencyMs: number;
122
- readonly sessionDepth: GovernorDepth;
123
- readonly argKeys: readonly string[];
124
- readonly errorKind: RuntimeFailureKind;
125
- readonly errorName: string;
126
- }
127
-
128
- type RuntimeEvent =
129
- | RuntimeSessionStartedEvent
130
- | RuntimeToolCallStartedEvent
131
- | RuntimeToolCallCompletedEvent
132
- | RuntimeToolCallFailedEvent;
133
-
134
- export interface RuntimeEventLoggerOptions {
135
- readonly fs: FileSystem;
136
- readonly codec: JsonCodec;
137
- readonly logPath: string;
138
- readonly maxBytes: number;
139
- }
140
-
141
- export async function ensureGraftDirExcluded(
142
- projectRoot: string,
143
- graftDir: string,
144
- fs: FileSystem,
145
- ): Promise<void> {
146
- const relative = path.relative(projectRoot, graftDir);
147
- if (relative.length === 0 || relative.startsWith("..") || path.isAbsolute(relative)) {
148
- return;
149
- }
150
-
151
- const entry = relative.replaceAll(path.sep, "/").replace(/\/?$/, "/");
152
- const excludePath = path.join(projectRoot, ".git", "info", "exclude");
153
-
154
- let existing: string;
155
- try {
156
- existing = await fs.readFile(excludePath, "utf-8");
157
- } catch {
158
- return;
159
- }
160
-
161
- const entries = existing
162
- .split(/\r?\n/u)
163
- .map((line) => line.trim())
164
- .filter((line) => line.length > 0);
165
-
166
- if (entries.includes(entry)) {
167
- return;
168
- }
169
-
170
- const prefix = existing.length === 0 || existing.endsWith("\n") ? "" : "\n";
171
- await fs.appendFile(excludePath, `${prefix}${entry}\n`, "utf-8");
172
- }
173
-
174
- export function classifyRuntimeFailure(error: unknown): {
175
- kind: RuntimeFailureKind;
176
- name: string;
177
- } {
178
- if (error instanceof ZodError) {
179
- return { kind: "validation_error", name: error.name };
180
- }
181
- if (error instanceof Error) {
182
- return { kind: "tool_error", name: error.name };
183
- }
184
- return { kind: "unknown_error", name: "UnknownError" };
185
- }
186
-
187
- export { sanitizeArgValues } from "./secret-scrub.js";
188
-
189
- export function sanitizeArgKeys(args: Record<string, unknown>): string[] {
190
- return Object.keys(args).sort();
191
- }
192
-
193
- export class RuntimeEventLogger {
194
- private readonly logWriter: RotatingNdjsonLog;
195
- private queue: Promise<void> = Promise.resolve();
196
-
197
- constructor(options: RuntimeEventLoggerOptions) {
198
- this.logWriter = new RotatingNdjsonLog({
199
- fs: options.fs,
200
- codec: options.codec,
201
- logPath: options.logPath,
202
- maxBytes: options.maxBytes,
203
- });
204
- }
205
-
206
- log(event: RuntimeEvent): Promise<void> {
207
- const prior = this.queue.catch((_error: unknown) => undefined);
208
- this.queue = prior
209
- .then(async () => {
210
- await this.logWriter.append({
211
- ts: new Date().toISOString(),
212
- ...event,
213
- });
214
- });
215
- return this.queue;
216
- }
217
- }
@@ -1,161 +0,0 @@
1
- import * as crypto from "node:crypto";
2
- import type { AttributionSummary, StagedTarget } from "../contracts/causal-ontology.js";
3
- import type { RepoObservation } from "./repo-state.js";
4
- import type { RuntimeCausalContext } from "./runtime-causal-context.js";
5
- import type { WorkspaceStatus } from "./workspace-router.js";
6
-
7
- const FULL_FILE_SAFE_STATUSES = new Set(["A", "D", "R", "C", "T"]);
8
-
9
- export interface RuntimeStagedTargetNone {
10
- readonly availability: "none";
11
- readonly stability: "runtime_local";
12
- readonly provenanceLevel: "artifact_history";
13
- }
14
-
15
- export interface RuntimeStagedTargetFullFile {
16
- readonly availability: "full_file";
17
- readonly stability: "runtime_local";
18
- readonly provenanceLevel: "artifact_history";
19
- readonly attribution: AttributionSummary;
20
- readonly target: StagedTarget;
21
- }
22
-
23
- export interface RuntimeStagedTargetAmbiguous {
24
- readonly availability: "ambiguous";
25
- readonly stability: "runtime_local";
26
- readonly provenanceLevel: "artifact_history";
27
- readonly attribution: AttributionSummary;
28
- readonly reason:
29
- | "missing_head_commit"
30
- | "missing_workspace_overlay"
31
- | "modified_path_selection_requires_deeper_evidence";
32
- readonly observedStagedPaths: number;
33
- readonly ambiguousPaths: readonly string[];
34
- }
35
-
36
- export type RuntimeStagedTarget =
37
- | RuntimeStagedTargetNone
38
- | RuntimeStagedTargetFullFile
39
- | RuntimeStagedTargetAmbiguous;
40
-
41
- interface MergedStatusEntry {
42
- readonly path: string;
43
- readonly stagedStatus: string;
44
- readonly worktreeStatus: string;
45
- }
46
-
47
- function stableId(prefix: string, input: string): string {
48
- return `${prefix}:${crypto.createHash("sha256").update(input).digest("hex").slice(0, 16)}`;
49
- }
50
-
51
- function parseMergedStatusLine(line: string): MergedStatusEntry | null {
52
- if (line.length < 4) return null;
53
- return {
54
- stagedStatus: line[0] ?? " ",
55
- worktreeStatus: line[1] ?? " ",
56
- path: line.slice(3),
57
- };
58
- }
59
-
60
- function stagedEntries(statusLines: readonly string[]): readonly MergedStatusEntry[] {
61
- return statusLines
62
- .map(parseMergedStatusLine)
63
- .filter((entry): entry is MergedStatusEntry => entry !== null && entry.stagedStatus !== " " && entry.stagedStatus !== "?");
64
- }
65
-
66
- function isFullFileSafe(entry: MergedStatusEntry): boolean {
67
- return entry.worktreeStatus === " " && FULL_FILE_SAFE_STATUSES.has(entry.stagedStatus);
68
- }
69
-
70
- export function buildRuntimeStagedTarget(
71
- status: WorkspaceStatus,
72
- causalContext: RuntimeCausalContext,
73
- repoState: RepoObservation,
74
- attribution: AttributionSummary,
75
- ): RuntimeStagedTarget {
76
- const observedEntries = stagedEntries(repoState.statusLines);
77
- if (observedEntries.length === 0) {
78
- return {
79
- availability: "none",
80
- stability: "runtime_local",
81
- provenanceLevel: "artifact_history",
82
- };
83
- }
84
-
85
- if (repoState.headSha === null) {
86
- return {
87
- availability: "ambiguous",
88
- stability: "runtime_local",
89
- provenanceLevel: "artifact_history",
90
- attribution,
91
- reason: "missing_head_commit",
92
- observedStagedPaths: observedEntries.length,
93
- ambiguousPaths: observedEntries.map((entry) => entry.path),
94
- };
95
- }
96
-
97
- if (repoState.workspaceOverlayId === null || status.repoId === null || status.worktreeId === null) {
98
- return {
99
- availability: "ambiguous",
100
- stability: "runtime_local",
101
- provenanceLevel: "artifact_history",
102
- attribution,
103
- reason: "missing_workspace_overlay",
104
- observedStagedPaths: observedEntries.length,
105
- ambiguousPaths: observedEntries.map((entry) => entry.path),
106
- };
107
- }
108
-
109
- const ambiguousEntries = observedEntries.filter((entry) => !isFullFileSafe(entry));
110
- if (ambiguousEntries.length > 0) {
111
- return {
112
- availability: "ambiguous",
113
- stability: "runtime_local",
114
- provenanceLevel: "artifact_history",
115
- attribution,
116
- reason: "modified_path_selection_requires_deeper_evidence",
117
- observedStagedPaths: observedEntries.length,
118
- ambiguousPaths: ambiguousEntries.map((entry) => entry.path),
119
- };
120
- }
121
-
122
- const selectionEntries = observedEntries.map((entry) => ({
123
- path: entry.path,
124
- symbols: [],
125
- regions: [],
126
- }));
127
-
128
- const target: StagedTarget = {
129
- targetId: stableId(
130
- "target",
131
- JSON.stringify({
132
- repoId: status.repoId,
133
- worktreeId: status.worktreeId,
134
- checkoutEpochId: causalContext.checkoutEpochId,
135
- workspaceOverlayId: repoState.workspaceOverlayId,
136
- headSha: repoState.headSha,
137
- paths: selectionEntries.map((entry) => entry.path),
138
- }),
139
- ),
140
- targetKind: "staged_target",
141
- repoId: status.repoId,
142
- worktreeId: status.worktreeId,
143
- checkoutEpochId: causalContext.checkoutEpochId,
144
- workspaceOverlayId: repoState.workspaceOverlayId,
145
- selectedAt: repoState.observedAt,
146
- selectionKind: "full_file",
147
- selectionEntries,
148
- base: {
149
- headCommitSha: repoState.headSha,
150
- indexTreeSha: null,
151
- },
152
- };
153
-
154
- return {
155
- availability: "full_file",
156
- stability: "runtime_local",
157
- provenanceLevel: "artifact_history",
158
- attribution,
159
- target,
160
- };
161
- }
@@ -1,255 +0,0 @@
1
- import * as path from "node:path";
2
- import type { FileSystem } from "../ports/filesystem.js";
3
- import type { GitClient } from "../ports/git.js";
4
- import {
5
- isRecognizedTargetGitHook,
6
- isTargetGitTransitionHookName,
7
- resolveGitHooksPath,
8
- TARGET_GIT_TRANSITION_HOOKS,
9
- } from "../git/target-git-hook-bootstrap.js";
10
- import type {
11
- RepoTransition,
12
- WorkspaceOverlaySummary,
13
- } from "./repo-state.js";
14
-
15
- export type GitHookBootstrapPosture = "absent" | "external_unknown" | "installed";
16
- export type WorkspaceOverlayObservationMode =
17
- | "inferred_between_tool_calls"
18
- | "hook_observed_checkout_boundaries";
19
- export type WorkspaceOverlayLineagePosture =
20
- | "stable"
21
- | "forked_after_transition";
22
- export type WorkspaceOverlayBoundaryAuthority =
23
- | "none"
24
- | "repo_snapshot"
25
- | "hook_observed";
26
- export type WorkspaceOverlayDegradedReason =
27
- | "target_repo_hooks_absent"
28
- | "target_repo_hooks_unrecognized"
29
- | "local_edit_watchers_absent";
30
-
31
- export interface GitTransitionHookEvent {
32
- readonly hookName: (typeof TARGET_GIT_TRANSITION_HOOKS)[number];
33
- readonly hookArgs: readonly string[];
34
- readonly worktreeRoot: string;
35
- readonly observedAt: string;
36
- }
37
-
38
- export interface GitHookBootstrapStatus {
39
- readonly posture: GitHookBootstrapPosture;
40
- readonly configuredCoreHooksPath: string | null;
41
- readonly resolvedHooksPath: string;
42
- readonly requiredHooks: readonly string[];
43
- readonly presentHooks: readonly string[];
44
- readonly missingHooks: readonly string[];
45
- readonly supportsCheckoutBoundaries: boolean;
46
- }
47
-
48
- export interface RuntimeWorkspaceOverlayFooting {
49
- readonly observationMode: WorkspaceOverlayObservationMode;
50
- readonly lineagePosture: WorkspaceOverlayLineagePosture;
51
- readonly boundaryAuthority: WorkspaceOverlayBoundaryAuthority;
52
- readonly degraded: true;
53
- readonly degradedReason: WorkspaceOverlayDegradedReason;
54
- readonly checkoutEpoch: number;
55
- readonly lastTransition: RepoTransition | null;
56
- readonly workspaceOverlayId: string | null;
57
- readonly workspaceOverlay: WorkspaceOverlaySummary | null;
58
- readonly hookBootstrap: GitHookBootstrapStatus;
59
- readonly latestHookEvent: GitTransitionHookEvent | null;
60
- }
61
-
62
- async function readGitConfig(
63
- gitClient: GitClient,
64
- cwd: string,
65
- key: string,
66
- ): Promise<string | null> {
67
- const result = await gitClient.run({
68
- args: ["config", "--get", key],
69
- cwd,
70
- });
71
- if (result.status !== 0) {
72
- return null;
73
- }
74
- const value = result.stdout.trim();
75
- return value.length > 0 ? value : null;
76
- }
77
-
78
- async function fileExists(fs: FileSystem, targetPath: string): Promise<boolean> {
79
- try {
80
- await fs.readFile(targetPath, "utf-8");
81
- return true;
82
- } catch {
83
- return false;
84
- }
85
- }
86
-
87
- function equivalentWorktreeRoots(left: string, right: string): boolean {
88
- const leftResolved = path.resolve(left);
89
- const rightResolved = path.resolve(right);
90
- if (leftResolved === rightResolved) {
91
- return true;
92
- }
93
- return (
94
- leftResolved === `/private${rightResolved}`
95
- || rightResolved === `/private${leftResolved}`
96
- );
97
- }
98
-
99
- function parseHookEventLine(
100
- line: string,
101
- worktreeRoot: string,
102
- ): GitTransitionHookEvent | null {
103
- try {
104
- const parsed = JSON.parse(line) as Record<string, unknown>;
105
- const hookName = parsed["hookName"];
106
- const hookArgs = parsed["hookArgs"];
107
- const observedAt = parsed["observedAt"];
108
- const observedWorktreeRoot = parsed["worktreeRoot"];
109
- if (
110
- typeof hookName !== "string"
111
- || !isTargetGitTransitionHookName(hookName)
112
- || !Array.isArray(hookArgs)
113
- || !hookArgs.every((value) => typeof value === "string")
114
- || typeof observedAt !== "string"
115
- || typeof observedWorktreeRoot !== "string"
116
- || !equivalentWorktreeRoots(observedWorktreeRoot, worktreeRoot)
117
- ) {
118
- return null;
119
- }
120
- return {
121
- hookName,
122
- hookArgs,
123
- worktreeRoot: observedWorktreeRoot,
124
- observedAt,
125
- };
126
- } catch {
127
- return null;
128
- }
129
- }
130
-
131
- async function readLatestHookEvent(
132
- fs: FileSystem,
133
- worktreeRoot: string,
134
- ): Promise<GitTransitionHookEvent | null> {
135
- const logPath = path.join(worktreeRoot, ".graft", "runtime", "git-transitions.ndjson");
136
- try {
137
- const content = await fs.readFile(logPath, "utf-8");
138
- const lines = content.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0);
139
- for (let index = lines.length - 1; index >= 0; index -= 1) {
140
- const line = lines[index];
141
- if (line === undefined) continue;
142
- const parsed = parseHookEventLine(line, worktreeRoot);
143
- if (parsed !== null) {
144
- return parsed;
145
- }
146
- }
147
- return null;
148
- } catch {
149
- return null;
150
- }
151
- }
152
-
153
- export async function inspectGitHookBootstrap(
154
- fs: FileSystem,
155
- gitClient: GitClient,
156
- worktreeRoot: string,
157
- gitCommonDir: string,
158
- ): Promise<GitHookBootstrapStatus> {
159
- const configuredCoreHooksPath = await readGitConfig(
160
- gitClient,
161
- worktreeRoot,
162
- "core.hooksPath",
163
- );
164
- const resolvedHooksPath = resolveGitHooksPath(
165
- worktreeRoot,
166
- gitCommonDir,
167
- configuredCoreHooksPath,
168
- );
169
-
170
- const presentHooks: string[] = [];
171
- const missingHooks: string[] = [];
172
- let recognizedHooks = 0;
173
- let externalHooks = 0;
174
- for (const hookName of TARGET_GIT_TRANSITION_HOOKS) {
175
- const hookPath = path.join(resolvedHooksPath, hookName);
176
- if (await fileExists(fs, hookPath)) {
177
- presentHooks.push(hookName);
178
- try {
179
- const content = await fs.readFile(hookPath, "utf-8");
180
- if (isRecognizedTargetGitHook(content, hookName)) {
181
- recognizedHooks += 1;
182
- } else {
183
- externalHooks += 1;
184
- }
185
- } catch {
186
- externalHooks += 1;
187
- }
188
- } else {
189
- missingHooks.push(hookName);
190
- }
191
- }
192
-
193
- const allHooksInstalled = recognizedHooks === TARGET_GIT_TRANSITION_HOOKS.length;
194
- return {
195
- posture: allHooksInstalled
196
- ? "installed"
197
- : (presentHooks.length === 0 ? "absent" : "external_unknown"),
198
- configuredCoreHooksPath,
199
- resolvedHooksPath,
200
- requiredHooks: [...TARGET_GIT_TRANSITION_HOOKS],
201
- presentHooks,
202
- missingHooks,
203
- supportsCheckoutBoundaries: allHooksInstalled && externalHooks === 0,
204
- };
205
- }
206
-
207
- export async function buildRuntimeWorkspaceOverlayFooting(
208
- fs: FileSystem,
209
- gitClient: GitClient,
210
- worktreeRoot: string,
211
- gitCommonDir: string,
212
- repoState: {
213
- readonly checkoutEpoch: number;
214
- readonly lastTransition: RepoTransition | null;
215
- readonly workspaceOverlayId: string | null;
216
- readonly workspaceOverlay: WorkspaceOverlaySummary | null;
217
- },
218
- ): Promise<RuntimeWorkspaceOverlayFooting> {
219
- const hookBootstrap = await inspectGitHookBootstrap(
220
- fs,
221
- gitClient,
222
- worktreeRoot,
223
- gitCommonDir,
224
- );
225
- const latestHookEvent = hookBootstrap.supportsCheckoutBoundaries
226
- ? await readLatestHookEvent(fs, worktreeRoot)
227
- : null;
228
- const lineagePosture = repoState.checkoutEpoch > 0 || latestHookEvent !== null || repoState.lastTransition !== null
229
- ? "forked_after_transition"
230
- : "stable";
231
- const boundaryAuthority = latestHookEvent !== null
232
- ? "hook_observed"
233
- : (repoState.lastTransition !== null || repoState.checkoutEpoch > 0
234
- ? "repo_snapshot"
235
- : "none");
236
- return {
237
- observationMode: latestHookEvent === null
238
- ? "inferred_between_tool_calls"
239
- : "hook_observed_checkout_boundaries",
240
- lineagePosture,
241
- boundaryAuthority,
242
- degraded: true,
243
- degradedReason: hookBootstrap.supportsCheckoutBoundaries
244
- ? "local_edit_watchers_absent"
245
- : (hookBootstrap.posture === "absent"
246
- ? "target_repo_hooks_absent"
247
- : "target_repo_hooks_unrecognized"),
248
- checkoutEpoch: repoState.checkoutEpoch,
249
- lastTransition: repoState.lastTransition,
250
- workspaceOverlayId: repoState.workspaceOverlayId,
251
- workspaceOverlay: repoState.workspaceOverlay,
252
- hookBootstrap,
253
- latestHookEvent,
254
- };
255
- }