@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,107 +0,0 @@
1
- export type WorldlineLayer = "commit_worldline" | "ref_view" | "workspace_overlay";
2
- export type RepoTransitionKind = "checkout" | "reset" | "merge" | "rebase";
3
- export type RepoSemanticTransitionKind =
4
- | "index_update"
5
- | "conflict_resolution"
6
- | "merge_phase"
7
- | "rebase_phase"
8
- | "bulk_transition"
9
- | "unknown";
10
- export type RepoSemanticTransitionAuthority =
11
- | "authoritative_git_state"
12
- | "repo_snapshot";
13
- export type RepoSemanticTransitionPhase =
14
- | "started"
15
- | "conflicted"
16
- | "resolved_waiting_commit"
17
- | "continued"
18
- | "completed_or_cleared";
19
-
20
- export interface RepoTransition {
21
- readonly kind: RepoTransitionKind;
22
- readonly fromRef: string | null;
23
- readonly toRef: string | null;
24
- readonly fromCommit: string | null;
25
- readonly toCommit: string | null;
26
- readonly evidence: {
27
- readonly reflogSubject: string | null;
28
- };
29
- }
30
-
31
- export interface RepoSemanticTransition {
32
- readonly kind: RepoSemanticTransitionKind;
33
- readonly authority: RepoSemanticTransitionAuthority;
34
- readonly phase: RepoSemanticTransitionPhase | null;
35
- readonly summary: string;
36
- readonly evidence: {
37
- readonly totalPaths: number;
38
- readonly stagedPaths: number;
39
- readonly changedPaths: number;
40
- readonly untrackedPaths: number;
41
- readonly unmergedPaths: number;
42
- readonly mergeInProgress: boolean;
43
- readonly rebaseInProgress: boolean;
44
- readonly rebaseStep: number | null;
45
- readonly rebaseTotalSteps: number | null;
46
- readonly lastTransitionKind: RepoTransitionKind | null;
47
- readonly reflogSubject: string | null;
48
- };
49
- }
50
-
51
- export interface WorkspaceOverlaySummary {
52
- readonly dirty: true;
53
- readonly totalPaths: number;
54
- readonly stagedPaths: number;
55
- readonly changedPaths: number;
56
- readonly untrackedPaths: number;
57
- readonly actorGuess: "unknown";
58
- readonly confidence: "low";
59
- readonly evidence: {
60
- readonly source: "git status --porcelain";
61
- readonly reflogSubject: string | null;
62
- readonly sample: readonly string[];
63
- };
64
- }
65
-
66
- export interface RepoObservation {
67
- readonly checkoutEpoch: number;
68
- readonly headRef: string | null;
69
- readonly headSha: string | null;
70
- readonly dirty: boolean;
71
- readonly observedAt: string;
72
- readonly lastTransition: RepoTransition | null;
73
- readonly semanticTransition: RepoSemanticTransition | null;
74
- readonly workspaceOverlayId: string | null;
75
- readonly workspaceOverlay: WorkspaceOverlaySummary | null;
76
- readonly statusLines: readonly string[];
77
- }
78
-
79
- export interface RebaseProgressState {
80
- readonly inProgress: boolean;
81
- readonly step: number | null;
82
- readonly total: number | null;
83
- }
84
-
85
- export interface RepoSnapshot {
86
- readonly headRef: string | null;
87
- readonly headSha: string | null;
88
- readonly parentShas: readonly string[];
89
- readonly observedAt: string;
90
- readonly statusLines: readonly string[];
91
- readonly dirty: boolean;
92
- readonly stagedPaths: number;
93
- readonly changedPaths: number;
94
- readonly untrackedPaths: number;
95
- readonly unmergedPaths: number;
96
- readonly mergeInProgress: boolean;
97
- readonly rebase: RebaseProgressState;
98
- readonly headReflog: HeadReflogEntry | null;
99
- }
100
-
101
- export interface HeadReflogEntry {
102
- readonly raw: string;
103
- readonly previousSha: string | null;
104
- readonly nextSha: string | null;
105
- readonly timestampSec: number | null;
106
- readonly subject: string;
107
- }
@@ -1,146 +0,0 @@
1
- import type { GitClient } from "../ports/git.js";
2
- import type { FileSystem } from "../ports/filesystem.js";
3
- import type { RepoObservation, RepoSnapshot } from "./repo-state-types.js";
4
- import { captureSnapshot } from "./repo-state-git.js";
5
- import { detectTransition } from "./repo-state-transition.js";
6
- import { buildObservation, buildSemanticTransition } from "./repo-state-observation.js";
7
-
8
- // Re-export all public types and interfaces for downstream consumers.
9
- export type {
10
- WorldlineLayer,
11
- RepoTransitionKind,
12
- RepoSemanticTransitionKind,
13
- RepoSemanticTransitionAuthority,
14
- RepoSemanticTransitionPhase,
15
- RepoTransition,
16
- RepoSemanticTransition,
17
- WorkspaceOverlaySummary,
18
- RepoObservation,
19
- } from "./repo-state-types.js";
20
-
21
- /**
22
- * Default debounce window in milliseconds for coalescing rapid observe() calls.
23
- * Set to 0 (disabled) by default — callers opt in via constructor options.
24
- */
25
- const DEFAULT_OBSERVE_DEBOUNCE_MS = 0;
26
-
27
- export class RepoStateTracker {
28
- private checkoutEpoch = 0;
29
- private snapshot: RepoSnapshot | null = null;
30
- private observation: RepoObservation = {
31
- checkoutEpoch: 0,
32
- headRef: null,
33
- headSha: null,
34
- dirty: false,
35
- observedAt: new Date(0).toISOString(),
36
- lastTransition: null,
37
- semanticTransition: null,
38
- workspaceOverlayId: null,
39
- workspaceOverlay: null,
40
- statusLines: [],
41
- };
42
- private initialization: Promise<void> | null = null;
43
- private readonly startedAtSec = Math.floor(Date.now() / 1000);
44
- private hasObservedTransition = false;
45
-
46
- /** Pending observe promise used for debounce coalescing. */
47
- private pendingObserve: Promise<RepoObservation> | null = null;
48
- /** Timestamp of the last completed observation (ms since epoch). */
49
- private lastObservedAtMs = 0;
50
-
51
- private readonly debounceMs: number;
52
-
53
- constructor(
54
- private readonly cwd: string,
55
- private readonly fs: FileSystem,
56
- private readonly gitClient: GitClient,
57
- options?: { debounceMs?: number },
58
- ) {
59
- this.debounceMs = options?.debounceMs ?? DEFAULT_OBSERVE_DEBOUNCE_MS;
60
- }
61
-
62
- /**
63
- * Observe the current repo state.
64
- *
65
- * If another observe() call is already in flight, this returns the same
66
- * pending result (coalescing). If a previous observation completed within
67
- * the debounce window, the cached result is returned immediately without
68
- * spawning new git processes.
69
- */
70
- async observe(): Promise<RepoObservation> {
71
- // Coalesce: reuse an in-flight observation.
72
- if (this.pendingObserve !== null) {
73
- return this.pendingObserve;
74
- }
75
-
76
- // Debounce: return cached result if the last observation is fresh.
77
- const elapsed = Date.now() - this.lastObservedAtMs;
78
- if (this.lastObservedAtMs > 0 && elapsed < this.debounceMs) {
79
- return this.observation;
80
- }
81
-
82
- this.pendingObserve = this.performObserve();
83
-
84
- try {
85
- return await this.pendingObserve;
86
- } finally {
87
- this.pendingObserve = null;
88
- }
89
- }
90
-
91
- async initialize(): Promise<void> {
92
- if (this.initialization !== null) {
93
- await this.initialization;
94
- return;
95
- }
96
-
97
- this.initialization = (async () => {
98
- const snapshot = await captureSnapshot(this.cwd, this.fs, this.gitClient);
99
- this.snapshot = snapshot;
100
- this.observation = buildObservation(
101
- snapshot,
102
- this.checkoutEpoch,
103
- null,
104
- buildSemanticTransition(null, snapshot, null),
105
- );
106
- })();
107
-
108
- await this.initialization;
109
- }
110
-
111
- getState(): RepoObservation {
112
- return this.observation;
113
- }
114
-
115
- /** Core observation logic, separated from debounce/coalesce control. */
116
- private async performObserve(): Promise<RepoObservation> {
117
- await this.initialize();
118
- const previousSnapshot = this.snapshot;
119
- if (previousSnapshot === null) {
120
- return this.observation;
121
- }
122
- const nextSnapshot = await captureSnapshot(this.cwd, this.fs, this.gitClient);
123
- const transition = await detectTransition(
124
- this.gitClient,
125
- this.cwd,
126
- previousSnapshot,
127
- nextSnapshot,
128
- this.startedAtSec,
129
- !this.hasObservedTransition,
130
- );
131
- if (transition !== null) {
132
- this.checkoutEpoch++;
133
- this.hasObservedTransition = true;
134
- }
135
-
136
- this.snapshot = nextSnapshot;
137
- this.observation = buildObservation(
138
- nextSnapshot,
139
- this.checkoutEpoch,
140
- transition ?? this.observation.lastTransition,
141
- buildSemanticTransition(previousSnapshot, nextSnapshot, transition),
142
- );
143
- this.lastObservedAtMs = Date.now();
144
- return this.observation;
145
- }
146
- }
@@ -1,102 +0,0 @@
1
- import { z } from "zod";
2
- import type { GovernorTrackerSnapshot } from "../session/tracker.js";
3
- import type { McpToolReceipt, McpToolResult } from "./receipt.js";
4
- import type { ToolDefinition, ToolHandler } from "./context.js";
5
- import type { MetricsDelta, MetricsSnapshot } from "./metrics.js";
6
- import type { ObservationSnapshot } from "./cache.js";
7
- import type { RepoObservation } from "./repo-state.js";
8
- import type { WorkspaceCapabilityProfile } from "./workspace-router.js";
9
- import { graftDiffTool } from "./tools/graft-diff.js";
10
- import { sinceTool } from "./tools/since.js";
11
- import { mapTool } from "./tools/map.js";
12
- import { codeRefsTool } from "./tools/code-refs.js";
13
- import { codeFindTool, runCodeFind } from "./tools/code-find.js";
14
- import { codeShowTool, runCodeShow } from "./tools/code-show.js";
15
- import { safeReadTool } from "./tools/safe-read.js";
16
- import { fileOutlineTool } from "./tools/file-outline.js";
17
- import { changedSinceTool } from "./tools/changed-since.js";
18
- import { buildRepoToolWorkerContext, wrapWithPolicyCheck } from "./repo-tool-worker-context.js";
19
-
20
- const codeFindLiveWorkerTool: ToolDefinition = {
21
- ...codeFindTool,
22
- createHandler(): ToolHandler {
23
- return (args, ctx) => runCodeFind(ctx, args, { allowWarp: false });
24
- },
25
- };
26
-
27
- const codeShowLiveWorkerTool: ToolDefinition = {
28
- ...codeShowTool,
29
- createHandler(): ToolHandler {
30
- return (args, ctx) => runCodeShow(ctx, args, { allowWarp: false });
31
- },
32
- };
33
-
34
- const OFFLOADED_REPO_TOOL_DEFINITIONS = Object.freeze({
35
- safe_read: safeReadTool,
36
- file_outline: fileOutlineTool,
37
- changed_since: changedSinceTool,
38
- graft_diff: graftDiffTool,
39
- graft_since: sinceTool,
40
- graft_map: mapTool,
41
- code_refs: codeRefsTool,
42
- code_find_live: codeFindLiveWorkerTool,
43
- code_show_live: codeShowLiveWorkerTool,
44
- });
45
-
46
- export type OffloadedRepoToolName = keyof typeof OFFLOADED_REPO_TOOL_DEFINITIONS;
47
-
48
- export const OFFLOADED_DAEMON_REPO_TOOL_NAMES = Object.freeze(
49
- Object.keys(OFFLOADED_REPO_TOOL_DEFINITIONS) as OffloadedRepoToolName[],
50
- );
51
-
52
- export interface RepoToolWorkerJob {
53
- readonly sessionId: string;
54
- readonly workspaceSliceId: string;
55
- readonly traceId: string;
56
- readonly seq: number;
57
- readonly startedAtMs: number;
58
- readonly tool: OffloadedRepoToolName;
59
- readonly args: Record<string, unknown>;
60
- readonly projectRoot: string;
61
- readonly graftDir: string;
62
- readonly graftignorePatterns: readonly string[];
63
- readonly repoId: string;
64
- readonly worktreeId: string;
65
- readonly gitCommonDir: string;
66
- readonly writerId: string;
67
- readonly capabilityProfile: WorkspaceCapabilityProfile;
68
- readonly repoState: RepoObservation;
69
- readonly governorSnapshot: GovernorTrackerSnapshot;
70
- readonly metricsSnapshot: MetricsSnapshot;
71
- readonly cacheSnapshots?: Readonly<Record<string, ObservationSnapshot>>;
72
- }
73
-
74
- export interface RepoToolWorkerResult {
75
- readonly result: McpToolResult;
76
- readonly textBytes: number;
77
- readonly receipt: McpToolReceipt;
78
- readonly tripwireSignals: readonly string[];
79
- readonly metricsDelta: MetricsDelta;
80
- readonly cacheUpdates: readonly {
81
- path: string;
82
- observation: ObservationSnapshot | null;
83
- }[];
84
- }
85
-
86
- function resolveRepoToolDefinition(tool: OffloadedRepoToolName): ToolDefinition {
87
- return OFFLOADED_REPO_TOOL_DEFINITIONS[tool];
88
- }
89
-
90
- export async function runRepoToolJob(job: RepoToolWorkerJob): Promise<RepoToolWorkerResult> {
91
- const definition = resolveRepoToolDefinition(job.tool);
92
- const { ctx, takeResponse } = buildRepoToolWorkerContext(job);
93
- const rawHandler = definition.createHandler();
94
- const handler = definition.policyCheck === true ? wrapWithPolicyCheck(definition.name, rawHandler) : rawHandler;
95
-
96
- if (definition.schema !== undefined) {
97
- z.object(definition.schema).strict().parse(job.args);
98
- }
99
-
100
- await handler(job.args, ctx);
101
- return takeResponse();
102
- }
@@ -1,212 +0,0 @@
1
- import { CanonicalJsonCodec } from "../adapters/canonical-json.js";
2
- import { nodeFs } from "../adapters/node-fs.js";
3
- import { nodeGit } from "../adapters/node-git.js";
4
- import { nodeProcessRunner } from "../adapters/node-process-runner.js";
5
- import { createRepoPathResolver } from "../adapters/repo-paths.js";
6
- import { openWarp } from "../warp/open.js";
7
- import { GovernorTracker } from "../session/tracker.js";
8
- import { RefusedResult } from "../policy/types.js";
9
- import type { WorkspaceStatus } from "./workspace-router.js";
10
- import { buildReceiptResult } from "./receipt.js";
11
- import type { ToolContext, ToolDefinition, ToolHandler } from "./context.js";
12
- import { Metrics, diffMetrics } from "./metrics.js";
13
- import { ObservationCache } from "./cache.js";
14
- import { evaluateMcpPolicy } from "./policy.js";
15
- import { resolveRunCaptureConfig } from "./run-capture-config.js";
16
- import { resolveRuntimeObservabilityState } from "./runtime-observability.js";
17
- import { buildRuntimeCausalContext } from "./runtime-causal-context.js";
18
- import type { RepoToolWorkerJob, RepoToolWorkerResult } from "./repo-tool-job.js";
19
-
20
- function unsupported(name: string): never {
21
- throw new Error(`${name} is not available in repo-tool worker mode`);
22
- }
23
-
24
- function workerStatus(job: RepoToolWorkerJob): WorkspaceStatus {
25
- return {
26
- sessionMode: "daemon",
27
- bindState: "bound",
28
- repoId: job.repoId,
29
- worktreeId: job.worktreeId,
30
- worktreeRoot: job.projectRoot,
31
- gitCommonDir: job.gitCommonDir,
32
- graftDir: job.graftDir,
33
- capabilityProfile: job.capabilityProfile,
34
- };
35
- }
36
-
37
- export function wrapWithPolicyCheck(
38
- toolName: ToolDefinition["name"],
39
- inner: ToolHandler,
40
- ): ToolHandler {
41
- return async (args: Record<string, unknown>, ctx: ToolContext) => {
42
- const rawPath = args["path"];
43
- if (typeof rawPath !== "string") return inner(args, ctx);
44
-
45
- const filePath = ctx.resolvePath(rawPath);
46
- let content: string;
47
- try {
48
- content = await ctx.fs.readFile(filePath, "utf-8");
49
- } catch {
50
- return inner(args, ctx);
51
- }
52
-
53
- const actual = { lines: content.split("\n").length, bytes: Buffer.byteLength(content) };
54
- const policy = evaluateMcpPolicy(ctx, filePath, actual);
55
- if (policy instanceof RefusedResult) {
56
- ctx.metrics.recordRefusal();
57
- return ctx.respond(toolName, {
58
- path: filePath,
59
- projection: "refused",
60
- reason: policy.reason,
61
- reasonDetail: policy.reasonDetail,
62
- next: [...policy.next],
63
- actual,
64
- });
65
- }
66
- return inner(args, ctx);
67
- };
68
- }
69
-
70
- export function buildRepoToolWorkerContext(
71
- job: RepoToolWorkerJob,
72
- ): { ctx: ToolContext; takeResponse: () => RepoToolWorkerResult } {
73
- const codec = new CanonicalJsonCodec();
74
- const governor = GovernorTracker.fromSnapshot(job.governorSnapshot);
75
- const metrics = Metrics.fromSnapshot(job.metricsSnapshot);
76
- const cache = ObservationCache.fromSnapshots(job.cacheSnapshots);
77
- const trackedCachePaths = new Set<string>(Object.keys(job.cacheSnapshots ?? {}));
78
- if (typeof job.args["path"] === "string") {
79
- trackedCachePaths.add(createRepoPathResolver(job.projectRoot)(job.args["path"]));
80
- }
81
- let response: Omit<RepoToolWorkerResult, "metricsDelta" | "cacheUpdates"> | null = null;
82
-
83
- const ctx: ToolContext = {
84
- projectRoot: job.projectRoot,
85
- graftDir: job.graftDir,
86
- graftignorePatterns: job.graftignorePatterns,
87
- governor,
88
- cache,
89
- metrics,
90
- fs: nodeFs,
91
- codec,
92
- process: nodeProcessRunner,
93
- git: nodeGit,
94
- runCapture: resolveRunCaptureConfig({}),
95
- observability: resolveRuntimeObservabilityState({ graftDir: job.graftDir }),
96
- respond(tool, data) {
97
- const tripwires = governor.checkTripwires();
98
- const built = buildReceiptResult(tool, data, {
99
- sessionId: job.sessionId,
100
- traceId: job.traceId,
101
- seq: job.seq,
102
- latencyMs: Date.now() - job.startedAtMs,
103
- codec,
104
- metrics: metrics.snapshot(),
105
- tripwires,
106
- budget: governor.getBudget(),
107
- });
108
- response = {
109
- result: built.result,
110
- textBytes: built.textBytes,
111
- receipt: built.receipt,
112
- tripwireSignals: tripwires.map((wire) => wire.signal),
113
- };
114
- return built.result;
115
- },
116
- recordFootprint() {
117
- // Worker-thread footprints are not collected — the main thread
118
- // captures footprint via AsyncLocalStorage in the invocation engine.
119
- },
120
- resolvePath: createRepoPathResolver(job.projectRoot),
121
- getWarp() {
122
- return openWarp({ cwd: job.projectRoot, writerId: job.writerId });
123
- },
124
- getRepoState() {
125
- return job.repoState;
126
- },
127
- getCausalContext() {
128
- return buildRuntimeCausalContext({
129
- transportSessionId: job.sessionId,
130
- workspaceSliceId: job.workspaceSliceId,
131
- repoId: job.repoId,
132
- worktreeId: job.worktreeId,
133
- checkoutEpoch: job.repoState.checkoutEpoch,
134
- warpWriterId: job.writerId,
135
- });
136
- },
137
- getPersistedLocalHistorySummary() {
138
- return unsupported("getPersistedLocalHistorySummary");
139
- },
140
- getPersistedLocalActivityWindow() {
141
- return unsupported("getPersistedLocalActivityWindow");
142
- },
143
- getRepoConcurrencySummary() {
144
- return Promise.resolve(null);
145
- },
146
- getWorkspaceOverlayFooting() {
147
- return unsupported("getWorkspaceOverlayFooting");
148
- },
149
- declareCausalAttach() {
150
- return unsupported("declareCausalAttach");
151
- },
152
- getWorkspaceStatus() {
153
- return workerStatus(job);
154
- },
155
- bindWorkspace() {
156
- return unsupported("bindWorkspace");
157
- },
158
- rebindWorkspace() {
159
- return unsupported("rebindWorkspace");
160
- },
161
- getDaemonStatus() {
162
- return unsupported("getDaemonStatus");
163
- },
164
- listDaemonRepos() {
165
- return unsupported("listDaemonRepos");
166
- },
167
- listDaemonSessions() {
168
- return unsupported("listDaemonSessions");
169
- },
170
- listDaemonMonitors() {
171
- return unsupported("listDaemonMonitors");
172
- },
173
- startMonitor() {
174
- return unsupported("startMonitor");
175
- },
176
- pauseMonitor() {
177
- return unsupported("pauseMonitor");
178
- },
179
- resumeMonitor() {
180
- return unsupported("resumeMonitor");
181
- },
182
- stopMonitor() {
183
- return unsupported("stopMonitor");
184
- },
185
- listWorkspaceAuthorizations() {
186
- return unsupported("listWorkspaceAuthorizations");
187
- },
188
- authorizeWorkspace() {
189
- return unsupported("authorizeWorkspace");
190
- },
191
- revokeWorkspace() {
192
- return unsupported("revokeWorkspace");
193
- },
194
- };
195
-
196
- return {
197
- ctx,
198
- takeResponse() {
199
- if (response === null) {
200
- throw new Error(`repo-tool worker ${job.tool} completed without calling respond()`);
201
- }
202
- return {
203
- ...response,
204
- metricsDelta: diffMetrics(job.metricsSnapshot, metrics.snapshot()),
205
- cacheUpdates: [...trackedCachePaths].map((filePath) => ({
206
- path: filePath,
207
- observation: cache.snapshotEntry(filePath),
208
- })),
209
- };
210
- },
211
- };
212
- }
@@ -1,21 +0,0 @@
1
- import { toRepoPolicyPath } from "../adapters/repo-paths.js";
2
- import { RepoWorkspace } from "../operations/repo-workspace.js";
3
- import type { ToolContext } from "./context.js";
4
-
5
- export function createRepoWorkspaceFromToolContext(
6
- ctx: Pick<
7
- ToolContext,
8
- "projectRoot" | "fs" | "codec" | "graftignorePatterns" | "resolvePath" | "governor" | "cache"
9
- >,
10
- ): RepoWorkspace {
11
- return new RepoWorkspace({
12
- projectRoot: ctx.projectRoot,
13
- fs: ctx.fs,
14
- codec: ctx.codec,
15
- graftignorePatterns: ctx.graftignorePatterns,
16
- resolvePath: ctx.resolvePath,
17
- toPolicyPath: (resolvedPath) => toRepoPolicyPath(ctx.projectRoot, resolvedPath),
18
- governor: ctx.governor,
19
- cache: ctx.cache,
20
- });
21
- }
@@ -1,33 +0,0 @@
1
- export interface RunCaptureConfig {
2
- readonly enabled: boolean;
3
- readonly persistLogs: boolean;
4
- readonly redactLogs: boolean;
5
- }
6
-
7
- export interface ResolveRunCaptureConfigOptions {
8
- readonly env?: Readonly<Record<string, string | undefined>>;
9
- readonly overrides?: Partial<RunCaptureConfig>;
10
- }
11
-
12
- function parseBooleanFlag(value: string | undefined, fallback: boolean): boolean {
13
- if (value === undefined) return fallback;
14
- const normalized = value.trim().toLowerCase();
15
- if ([ "0", "false", "no", "off" ].includes(normalized)) return false;
16
- if ([ "1", "true", "yes", "on" ].includes(normalized)) return true;
17
- return fallback;
18
- }
19
-
20
- export function resolveRunCaptureConfig(
21
- options: ResolveRunCaptureConfigOptions = {},
22
- ): RunCaptureConfig {
23
- const env = options.env ?? process.env;
24
- const base: RunCaptureConfig = {
25
- enabled: parseBooleanFlag(env["GRAFT_ENABLE_RUN_CAPTURE"], true),
26
- persistLogs: parseBooleanFlag(env["GRAFT_RUN_CAPTURE_PERSIST"], true),
27
- redactLogs: parseBooleanFlag(env["GRAFT_RUN_CAPTURE_REDACT"], true),
28
- };
29
- return {
30
- ...base,
31
- ...options.overrides,
32
- };
33
- }
@@ -1,72 +0,0 @@
1
- import * as crypto from "node:crypto";
2
-
3
- export interface RuntimeCausalContext {
4
- readonly transportSessionId: string;
5
- readonly workspaceSliceId: string;
6
- readonly causalSessionId: string;
7
- readonly strandId: string;
8
- readonly checkoutEpochId: string;
9
- readonly warpWriterId: string;
10
- readonly stability: "runtime_local";
11
- readonly provenanceLevel: "artifact_history";
12
- }
13
-
14
- function stableId(prefix: string, input: string): string {
15
- return `${prefix}:${crypto.createHash("sha256").update(input).digest("hex").slice(0, 16)}`;
16
- }
17
-
18
- export function buildCheckoutEpochId(
19
- repoId: string,
20
- worktreeId: string,
21
- checkoutEpoch: number,
22
- ): string {
23
- return stableId("epoch", `${repoId}:${worktreeId}:${String(checkoutEpoch)}`);
24
- }
25
-
26
- export function buildCausalSessionId(
27
- repoId: string,
28
- worktreeId: string,
29
- transportSessionId: string,
30
- workspaceSliceId: string,
31
- ): string {
32
- return stableId("causal", `${repoId}:${worktreeId}:${transportSessionId}:${workspaceSliceId}`);
33
- }
34
-
35
- export function buildStrandId(
36
- causalSessionId: string,
37
- checkoutEpochId: string,
38
- warpWriterId: string,
39
- ): string {
40
- return stableId("strand", `${causalSessionId}:${checkoutEpochId}:${warpWriterId}`);
41
- }
42
-
43
- export function buildRuntimeCausalContext(input: {
44
- readonly transportSessionId: string;
45
- readonly workspaceSliceId: string;
46
- readonly repoId: string;
47
- readonly worktreeId: string;
48
- readonly checkoutEpoch: number;
49
- readonly warpWriterId: string;
50
- }): RuntimeCausalContext {
51
- const checkoutEpochId = buildCheckoutEpochId(
52
- input.repoId,
53
- input.worktreeId,
54
- input.checkoutEpoch,
55
- );
56
- const causalSessionId = buildCausalSessionId(
57
- input.repoId,
58
- input.worktreeId,
59
- input.transportSessionId,
60
- input.workspaceSliceId,
61
- );
62
- return {
63
- transportSessionId: input.transportSessionId,
64
- workspaceSliceId: input.workspaceSliceId,
65
- causalSessionId,
66
- strandId: buildStrandId(causalSessionId, checkoutEpochId, input.warpWriterId),
67
- checkoutEpochId,
68
- warpWriterId: input.warpWriterId,
69
- stability: "runtime_local",
70
- provenanceLevel: "artifact_history",
71
- };
72
- }