@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
package/src/mcp/burden.ts DELETED
@@ -1,123 +0,0 @@
1
- import type { McpToolName } from "../contracts/output-schemas.js";
2
-
3
- export const BURDEN_KINDS = ["read", "search", "shell", "state", "diagnostic"] as const;
4
-
5
- export type BurdenKind = typeof BURDEN_KINDS[number];
6
-
7
- export interface BurdenBucket {
8
- readonly calls: number;
9
- readonly bytesReturned: number;
10
- }
11
-
12
- export type BurdenByKind = Record<BurdenKind, BurdenBucket>;
13
-
14
- const ZERO_BUCKET: BurdenBucket = Object.freeze({ calls: 0, bytesReturned: 0 });
15
-
16
- const TOOL_BURDEN_KIND: Record<McpToolName, BurdenKind> = {
17
- safe_read: "read",
18
- file_outline: "read",
19
- read_range: "read",
20
- changed_since: "read",
21
- graft_diff: "search",
22
- graft_since: "search",
23
- graft_map: "search",
24
- code_show: "search",
25
- code_find: "search",
26
- code_refs: "search",
27
- daemon_repos: "diagnostic",
28
- daemon_status: "diagnostic",
29
- daemon_sessions: "diagnostic",
30
- daemon_monitors: "diagnostic",
31
- monitor_start: "diagnostic",
32
- monitor_pause: "diagnostic",
33
- monitor_resume: "diagnostic",
34
- monitor_stop: "diagnostic",
35
- workspace_authorize: "diagnostic",
36
- workspace_authorizations: "diagnostic",
37
- workspace_revoke: "diagnostic",
38
- workspace_bind: "diagnostic",
39
- workspace_status: "diagnostic",
40
- causal_status: "diagnostic",
41
- causal_attach: "diagnostic",
42
- activity_view: "diagnostic",
43
- workspace_rebind: "diagnostic",
44
- run_capture: "shell",
45
- state_save: "state",
46
- state_load: "state",
47
- set_budget: "diagnostic",
48
- explain: "diagnostic",
49
- doctor: "diagnostic",
50
- stats: "diagnostic",
51
- };
52
-
53
- export function emptyBurdenByKind(): BurdenByKind {
54
- return {
55
- read: ZERO_BUCKET,
56
- search: ZERO_BUCKET,
57
- shell: ZERO_BUCKET,
58
- state: ZERO_BUCKET,
59
- diagnostic: ZERO_BUCKET,
60
- };
61
- }
62
-
63
- export function cloneBurdenByKind(source: Readonly<BurdenByKind>): BurdenByKind {
64
- return {
65
- read: { ...source.read },
66
- search: { ...source.search },
67
- shell: { ...source.shell },
68
- state: { ...source.state },
69
- diagnostic: { ...source.diagnostic },
70
- };
71
- }
72
-
73
- export function freezeBurdenByKind(source: BurdenByKind): Readonly<BurdenByKind> {
74
- for (const kind of BURDEN_KINDS) {
75
- Object.freeze(source[kind]);
76
- }
77
- return Object.freeze(source);
78
- }
79
-
80
- export function burdenKindForTool(tool: McpToolName): BurdenKind {
81
- return TOOL_BURDEN_KIND[tool];
82
- }
83
-
84
- export function isNonReadBurdenKind(kind: BurdenKind): boolean {
85
- return kind !== "read";
86
- }
87
-
88
- export function projectBurdenByKind(
89
- source: Readonly<BurdenByKind>,
90
- tool: McpToolName,
91
- returnedBytes: number,
92
- ): Readonly<BurdenByKind> {
93
- const next = cloneBurdenByKind(source);
94
- const kind = burdenKindForTool(tool);
95
- const current = next[kind];
96
- next[kind] = {
97
- calls: current.calls + 1,
98
- bytesReturned: current.bytesReturned + returnedBytes,
99
- };
100
- return freezeBurdenByKind(next);
101
- }
102
-
103
- export function totalNonReadBytesReturned(source: Readonly<BurdenByKind>): number {
104
- return BURDEN_KINDS
105
- .filter((kind) => isNonReadBurdenKind(kind))
106
- .reduce((sum, kind) => sum + source[kind].bytesReturned, 0);
107
- }
108
-
109
- export function topBurdenKind(
110
- source: Readonly<BurdenByKind>,
111
- ): { kind: BurdenKind; calls: number; bytesReturned: number } | null {
112
- let best: { kind: BurdenKind; calls: number; bytesReturned: number } | null = null;
113
-
114
- for (const kind of BURDEN_KINDS) {
115
- const bucket = source[kind];
116
- if (bucket.bytesReturned === 0) continue;
117
- if (best === null || bucket.bytesReturned > best.bytesReturned) {
118
- best = { kind, calls: bucket.calls, bytesReturned: bucket.bytesReturned };
119
- }
120
- }
121
-
122
- return best;
123
- }
package/src/mcp/cache.ts DELETED
@@ -1,7 +0,0 @@
1
- export {
2
- hashContent,
3
- Observation,
4
- ObservationCache,
5
- type CacheResult,
6
- type ObservationSnapshot,
7
- } from "../operations/observation-cache.js";
@@ -1 +0,0 @@
1
- export { CachedFile } from "../operations/cached-file.js";
@@ -1,187 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // ToolContext — shared dependencies injected into every tool handler
3
- // ---------------------------------------------------------------------------
4
-
5
- import * as fs from "node:fs";
6
- import * as path from "node:path";
7
- import type { ObservationCache } from "./cache.js";
8
- import type { Metrics } from "./metrics.js";
9
- import type { GovernorTracker } from "../session/tracker.js";
10
- import type { McpToolResult } from "./receipt.js";
11
- import type { FileSystem } from "../ports/filesystem.js";
12
- import type { JsonCodec } from "../ports/codec.js";
13
- import type { ProcessRunner } from "../ports/process-runner.js";
14
- import type { GitClient } from "../ports/git.js";
15
- import type { WarpHandle } from "../ports/warp.js";
16
- import type { RepoObservation } from "./repo-state.js";
17
- import type { RunCaptureConfig } from "./run-capture-config.js";
18
- import type { RuntimeObservabilityState, ToolCallFootprintRegion } from "./runtime-observability.js";
19
- import type { RuntimeCausalContext } from "./runtime-causal-context.js";
20
- import type { RuntimeWorkspaceOverlayFooting } from "./runtime-workspace-overlay.js";
21
- import type {
22
- PersistedLocalActivityWindow,
23
- PersistedLocalHistoryAttachDeclaration,
24
- RepoConcurrencySummary,
25
- PersistedLocalHistorySummary,
26
- } from "./persisted-local-history.js";
27
- import type { McpToolName } from "../contracts/output-schemas.js";
28
- import type {
29
- DaemonSessionView,
30
- DaemonStatusView,
31
- AuthorizedWorkspaceView,
32
- WorkspaceAuthorizeRequest,
33
- WorkspaceAuthorizeResult,
34
- WorkspaceRevokeResult,
35
- } from "./daemon-control-plane.js";
36
- import type {
37
- DaemonRepoFilter,
38
- DaemonRepoListView,
39
- } from "./daemon-repos.js";
40
- import type {
41
- MonitorActionResult,
42
- MonitorStartRequest,
43
- MonitorStatusView,
44
- } from "./persistent-monitor-runtime.js";
45
- import type {
46
- WorkspaceActionResult,
47
- CausalAttachResult,
48
- WorkspaceBindRequest,
49
- WorkspaceStatus,
50
- } from "./workspace-router.js";
51
-
52
- import type { z } from "zod";
53
-
54
- export type ToolHandler = (args: Record<string, unknown>, ctx: ToolContext) => McpToolResult | Promise<McpToolResult>;
55
-
56
- export interface ToolDefinition {
57
- readonly name: McpToolName;
58
- readonly description: string;
59
- readonly schema?: Record<string, z.ZodType>;
60
- readonly policyCheck?: boolean;
61
- readonly createHandler: () => ToolHandler;
62
- }
63
-
64
- export interface ToolContext {
65
- readonly projectRoot: string;
66
- readonly graftDir: string;
67
- readonly graftignorePatterns: readonly string[];
68
- readonly governor: GovernorTracker;
69
- readonly cache: ObservationCache;
70
- readonly metrics: Metrics;
71
- readonly fs: FileSystem;
72
- readonly codec: JsonCodec;
73
- readonly process: ProcessRunner;
74
- readonly git: GitClient;
75
- readonly runCapture: RunCaptureConfig;
76
- readonly observability: RuntimeObservabilityState;
77
- respond(tool: McpToolName, data: Record<string, unknown>): McpToolResult;
78
- recordFootprint(entry: {
79
- readonly paths?: readonly string[];
80
- readonly symbols?: readonly string[];
81
- readonly regions?: readonly ToolCallFootprintRegion[];
82
- }): void;
83
- resolvePath(relative: string): string;
84
- getWarp(): Promise<WarpHandle>;
85
- getRepoState(): RepoObservation;
86
- getCausalContext(): RuntimeCausalContext;
87
- getWorkspaceOverlayFooting(): Promise<RuntimeWorkspaceOverlayFooting | null>;
88
- getPersistedLocalHistorySummary(): Promise<PersistedLocalHistorySummary>;
89
- getPersistedLocalActivityWindow(limit: number): Promise<PersistedLocalActivityWindow>;
90
- getRepoConcurrencySummary(): Promise<RepoConcurrencySummary | null>;
91
- declareCausalAttach(request: PersistedLocalHistoryAttachDeclaration): Promise<CausalAttachResult>;
92
- getWorkspaceStatus(): WorkspaceStatus;
93
- bindWorkspace(request: WorkspaceBindRequest, actionName: string): Promise<WorkspaceActionResult>;
94
- rebindWorkspace(request: WorkspaceBindRequest, actionName: string): Promise<WorkspaceActionResult>;
95
- getDaemonStatus(): Promise<DaemonStatusView>;
96
- listDaemonRepos(filter: DaemonRepoFilter): Promise<DaemonRepoListView>;
97
- listDaemonSessions(): Promise<readonly DaemonSessionView[]>;
98
- listDaemonMonitors(): Promise<readonly MonitorStatusView[]>;
99
- startMonitor(request: MonitorStartRequest): Promise<MonitorActionResult>;
100
- pauseMonitor(request: WorkspaceBindRequest): Promise<MonitorActionResult>;
101
- resumeMonitor(request: WorkspaceBindRequest): Promise<MonitorActionResult>;
102
- stopMonitor(request: WorkspaceBindRequest): Promise<MonitorActionResult>;
103
- listWorkspaceAuthorizations(): Promise<readonly AuthorizedWorkspaceView[]>;
104
- authorizeWorkspace(request: WorkspaceAuthorizeRequest): Promise<WorkspaceAuthorizeResult>;
105
- revokeWorkspace(request: WorkspaceBindRequest): Promise<WorkspaceRevokeResult>;
106
- }
107
-
108
- /**
109
- * Resolve a user-provided path against projectRoot with traversal guard.
110
- * Both absolute and relative paths are confined to the project root.
111
- * Symlinks are resolved before the confinement check to prevent escapes.
112
- */
113
- export function createPathResolver(projectRoot: string): (input: string) => string {
114
- const normalizedRoot = path.resolve(projectRoot);
115
-
116
- // Resolve the project root itself through symlinks for consistent comparison
117
- let realProjectRoot: string;
118
- try {
119
- realProjectRoot = fs.realpathSync(normalizedRoot);
120
- } catch {
121
- realProjectRoot = normalizedRoot;
122
- }
123
-
124
- return (input: string): string => {
125
- // Resolve: absolute paths are taken as-is, relative paths join to projectRoot
126
- const resolved = path.isAbsolute(input)
127
- ? path.resolve(input)
128
- : path.resolve(normalizedRoot, input);
129
-
130
- // Logical confinement check (catches ".." traversal without needing fs access)
131
- const logicalRel = path.relative(normalizedRoot, resolved);
132
- if (logicalRel.startsWith("..") || path.isAbsolute(logicalRel)) {
133
- throw new Error(`Path traversal blocked: ${input}`);
134
- }
135
-
136
- // Resolve symlinks before a second confinement check to prevent symlink escapes
137
- let real: string;
138
- try {
139
- real = fs.realpathSync(resolved);
140
- } catch {
141
- // Target doesn't exist yet — return the logical path (already passed confinement)
142
- return resolved;
143
- }
144
-
145
- // Symlink confinement check: the real path must be within the real project root
146
- const realRel = path.relative(realProjectRoot, real);
147
- if (realRel.startsWith("..") || path.isAbsolute(realRel)) {
148
- throw new Error(`Path traversal blocked: ${input}`);
149
- }
150
- return resolved;
151
- };
152
- }
153
-
154
- /**
155
- * Runtime guard: asserts that the supplied value satisfies the ToolContext
156
- * shape. Used at composition-root boundaries to catch wiring errors early.
157
- */
158
- export function assertToolContext(value: unknown): asserts value is ToolContext {
159
- if (value === null || typeof value !== "object") {
160
- throw new Error("ToolContext must be an object");
161
- }
162
- const obj = value as Record<string, unknown>;
163
-
164
- const ports = ["fs", "codec", "process", "git"] as const;
165
- for (const port of ports) {
166
- if (obj[port] === undefined || obj[port] === null) {
167
- throw new Error(`ToolContext missing port: ${port}`);
168
- }
169
- }
170
-
171
- const governanceProps = ["governor", "cache", "metrics"] as const;
172
- for (const prop of governanceProps) {
173
- if (obj[prop] === undefined || obj[prop] === null) {
174
- throw new Error(`ToolContext missing governance property: ${prop}`);
175
- }
176
- }
177
-
178
- const methods = ["respond", "resolvePath", "getWarp", "getRepoState", "getCausalContext", "getWorkspaceStatus"] as const;
179
- for (const method of methods) {
180
- if (obj[method] === undefined || obj[method] === null) {
181
- throw new Error(`ToolContext missing method: ${method}`);
182
- }
183
- if (typeof obj[method] !== "function") {
184
- throw new Error(`ToolContext missing method: ${method} (got ${typeof obj[method]})`);
185
- }
186
- }
187
- }
@@ -1,129 +0,0 @@
1
- import * as path from "node:path";
2
- import { z } from "zod";
3
- import type { JsonCodec } from "../../ports/codec.js";
4
- import type { FileSystem } from "../../ports/filesystem.js";
5
- import type {
6
- WorkspaceCapabilityProfile,
7
- } from "../workspace-router.js";
8
- import type { AuthorizedWorkspaceRecord } from "./types.js";
9
-
10
- // ---------------------------------------------------------------------------
11
- // Zod schemas for persisted authorization state
12
- // ---------------------------------------------------------------------------
13
-
14
- const workspaceCapabilityProfileSchema = z.object({
15
- boundedReads: z.boolean(),
16
- structuralTools: z.boolean(),
17
- precisionTools: z.boolean(),
18
- stateBookmarks: z.boolean(),
19
- runtimeLogs: z.literal("session_local_only"),
20
- runCapture: z.boolean(),
21
- }).strict();
22
-
23
- const authorizedWorkspaceRecordSchema = z.object({
24
- repoId: z.string(),
25
- worktreeId: z.string(),
26
- worktreeRoot: z.string(),
27
- gitCommonDir: z.string(),
28
- capabilityProfile: workspaceCapabilityProfileSchema,
29
- authorizedAt: z.string(),
30
- lastBoundAt: z.string().nullable(),
31
- }).strict();
32
-
33
- const persistedControlPlaneStateSchema = z.object({
34
- version: z.literal(1),
35
- workspaces: z.array(authorizedWorkspaceRecordSchema),
36
- }).strict();
37
-
38
- export type PersistedControlPlaneState = z.infer<typeof persistedControlPlaneStateSchema>;
39
-
40
- // ---------------------------------------------------------------------------
41
- // Capability profile helpers
42
- // ---------------------------------------------------------------------------
43
-
44
- export function cloneCapabilityProfile(
45
- profile: WorkspaceCapabilityProfile,
46
- ): WorkspaceCapabilityProfile {
47
- return { ...profile };
48
- }
49
-
50
- export function capabilityProfilesEqual(
51
- left: WorkspaceCapabilityProfile,
52
- right: WorkspaceCapabilityProfile,
53
- ): boolean {
54
- return left.boundedReads === right.boundedReads
55
- && left.structuralTools === right.structuralTools
56
- && left.precisionTools === right.precisionTools
57
- && left.stateBookmarks === right.stateBookmarks
58
- && left.runCapture === right.runCapture;
59
- }
60
-
61
- export function resolveCapabilityProfile(
62
- current: WorkspaceCapabilityProfile | undefined,
63
- defaultProfile: WorkspaceCapabilityProfile,
64
- runCapture: boolean | undefined,
65
- ): WorkspaceCapabilityProfile {
66
- return {
67
- ...(current ?? defaultProfile),
68
- ...(runCapture !== undefined ? { runCapture } : {}),
69
- };
70
- }
71
-
72
- // ---------------------------------------------------------------------------
73
- // Record helpers
74
- // ---------------------------------------------------------------------------
75
-
76
- export function sortByWorktreeRoot(records: readonly AuthorizedWorkspaceRecord[]): AuthorizedWorkspaceRecord[] {
77
- return [...records].sort((left, right) => left.worktreeRoot.localeCompare(right.worktreeRoot));
78
- }
79
-
80
- export function cloneAuthorizedWorkspaceRecord(record: AuthorizedWorkspaceRecord): AuthorizedWorkspaceRecord {
81
- return {
82
- ...record,
83
- capabilityProfile: cloneCapabilityProfile(record.capabilityProfile),
84
- };
85
- }
86
-
87
- // ---------------------------------------------------------------------------
88
- // Persistence
89
- // ---------------------------------------------------------------------------
90
-
91
- const CONTROL_PLANE_DIR = "control-plane";
92
- const AUTHORIZED_WORKSPACES_FILE = "authorized-workspaces.json";
93
-
94
- export function buildStatePath(graftDir: string): string {
95
- return path.join(
96
- path.resolve(graftDir),
97
- CONTROL_PLANE_DIR,
98
- AUTHORIZED_WORKSPACES_FILE,
99
- );
100
- }
101
-
102
- export async function loadPersistedState(
103
- statePath: string,
104
- fs: FileSystem,
105
- codec: JsonCodec,
106
- ): Promise<PersistedControlPlaneState | null> {
107
- const raw = await fs.readFile(statePath, "utf-8").catch((error: unknown) => {
108
- if (error instanceof Error && "code" in error && error.code === "ENOENT") {
109
- return null;
110
- }
111
- throw error;
112
- });
113
- if (raw === null) return null;
114
- return persistedControlPlaneStateSchema.parse(codec.decode(raw));
115
- }
116
-
117
- export async function persistState(
118
- statePath: string,
119
- fs: FileSystem,
120
- codec: JsonCodec,
121
- workspaces: ReadonlyMap<string, AuthorizedWorkspaceRecord>,
122
- ): Promise<void> {
123
- const payload: PersistedControlPlaneState = {
124
- version: 1,
125
- workspaces: sortByWorktreeRoot([...workspaces.values()]),
126
- };
127
- await fs.mkdir(path.dirname(statePath), { recursive: true });
128
- await fs.writeFile(statePath, codec.encode(payload), "utf-8");
129
- }
@@ -1,115 +0,0 @@
1
- import type { RuntimeCausalContext } from "../runtime-causal-context.js";
2
- import type { WorkspaceStatus } from "../workspace-router.js";
3
- import { cloneCapabilityProfile } from "./authz-storage.js";
4
- import type {
5
- DaemonSessionView,
6
- RegisteredTransport,
7
- SharedAttachSource,
8
- } from "./types.js";
9
-
10
- // ---------------------------------------------------------------------------
11
- // Session view projection
12
- // ---------------------------------------------------------------------------
13
-
14
- export function toDaemonSessionView(
15
- session: RegisteredTransport,
16
- readWorkspaceStatus: (s: RegisteredTransport) => WorkspaceStatus,
17
- readRuntimeCausalContext: (s: RegisteredTransport) => RuntimeCausalContext | null,
18
- ): DaemonSessionView {
19
- const status = readWorkspaceStatus(session);
20
- const causalContext = readRuntimeCausalContext(session);
21
- return {
22
- sessionId: session.sessionId,
23
- sessionMode: "daemon",
24
- bindState: status.bindState,
25
- repoId: status.repoId,
26
- worktreeId: status.worktreeId,
27
- worktreeRoot: status.worktreeRoot,
28
- causalSessionId: causalContext?.causalSessionId ?? null,
29
- checkoutEpochId: causalContext?.checkoutEpochId ?? null,
30
- capabilityProfile: status.capabilityProfile === null ? null : cloneCapabilityProfile(status.capabilityProfile),
31
- startedAt: session.startedAt,
32
- lastActivityAt: session.lastActivityAt,
33
- };
34
- }
35
-
36
- // ---------------------------------------------------------------------------
37
- // Workspace status & causal context safe readers
38
- // ---------------------------------------------------------------------------
39
-
40
- export function readWorkspaceStatus(session: RegisteredTransport): WorkspaceStatus {
41
- try {
42
- return session.getWorkspaceStatus();
43
- } catch {
44
- return {
45
- sessionMode: "daemon",
46
- bindState: "unbound",
47
- repoId: null,
48
- worktreeId: null,
49
- worktreeRoot: null,
50
- gitCommonDir: null,
51
- graftDir: null,
52
- capabilityProfile: null,
53
- };
54
- }
55
- }
56
-
57
- export function readRuntimeCausalContext(session: RegisteredTransport): RuntimeCausalContext | null {
58
- try {
59
- return session.getRuntimeCausalContext();
60
- } catch {
61
- return null;
62
- }
63
- }
64
-
65
- // ---------------------------------------------------------------------------
66
- // Shared attach resolution
67
- // ---------------------------------------------------------------------------
68
-
69
- export function resolveSharedAttachSource(
70
- sessions: ReadonlyMap<string, RegisteredTransport>,
71
- input: {
72
- readonly sessionId: string;
73
- readonly repoId: string;
74
- readonly worktreeId: string;
75
- },
76
- ): SharedAttachSource | null {
77
- const candidates = [...sessions.values()]
78
- .filter((session) => session.sessionId !== input.sessionId)
79
- .flatMap((session) => {
80
- const status = readWorkspaceStatus(session);
81
- if (
82
- status.bindState !== "bound" ||
83
- status.repoId !== input.repoId ||
84
- status.worktreeId !== input.worktreeId
85
- ) {
86
- return [];
87
- }
88
- const causalContext = readRuntimeCausalContext(session);
89
- if (causalContext === null) {
90
- return [];
91
- }
92
- return [{
93
- sourceSessionId: session.sessionId,
94
- causalSessionId: causalContext.causalSessionId,
95
- strandId: causalContext.strandId,
96
- lastActivityAt: session.lastActivityAt,
97
- }];
98
- })
99
- .sort((left, right) => right.lastActivityAt.localeCompare(left.lastActivityAt));
100
-
101
- if (candidates.length !== 1) {
102
- return null;
103
- }
104
-
105
- const [source] = candidates;
106
- if (source === undefined) {
107
- return null;
108
- }
109
-
110
- return {
111
- sourceSessionId: source.sourceSessionId,
112
- causalSessionId: source.causalSessionId,
113
- strandId: source.strandId,
114
- };
115
- }
@@ -1,76 +0,0 @@
1
- import type { DaemonSchedulerCounts } from "../daemon-job-scheduler.js";
2
- import type { DaemonWorkerCounts } from "../daemon-worker-pool.js";
3
- import type { WorkspaceCapabilityProfile } from "../workspace-router.js";
4
- import { cloneCapabilityProfile } from "./authz-storage.js";
5
- import type {
6
- AuthorizedWorkspaceRecord,
7
- AuthorizedWorkspaceView,
8
- DaemonMonitorCounts,
9
- DaemonRuntimeDescriptor,
10
- DaemonSessionView,
11
- DaemonStatusView,
12
- } from "./types.js";
13
-
14
- // ---------------------------------------------------------------------------
15
- // Zero-value defaults
16
- // ---------------------------------------------------------------------------
17
-
18
- export const ZERO_MONITOR_COUNTS: DaemonMonitorCounts = Object.freeze({
19
- totalMonitors: 0,
20
- runningMonitors: 0,
21
- pausedMonitors: 0,
22
- stoppedMonitors: 0,
23
- failingMonitors: 0,
24
- backlogMonitors: 0,
25
- });
26
-
27
- // ---------------------------------------------------------------------------
28
- // Status view assembly
29
- // ---------------------------------------------------------------------------
30
-
31
- export function buildStatusView(
32
- runtime: DaemonRuntimeDescriptor,
33
- sessions: readonly DaemonSessionView[],
34
- authorizedWorkspaces: ReadonlyMap<string, AuthorizedWorkspaceRecord>,
35
- defaultCapabilityProfile: WorkspaceCapabilityProfile,
36
- monitorCounts: DaemonMonitorCounts,
37
- schedulerCounts: DaemonSchedulerCounts,
38
- workerCounts: DaemonWorkerCounts,
39
- ): DaemonStatusView {
40
- const boundSessions = sessions.filter((session) => session.bindState === "bound").length;
41
- return {
42
- ok: true,
43
- sessionMode: "daemon",
44
- activeSessions: sessions.length,
45
- boundSessions,
46
- unboundSessions: sessions.length - boundSessions,
47
- authorizedWorkspaces: authorizedWorkspaces.size,
48
- authorizedRepos: new Set([...authorizedWorkspaces.values()].map((record) => record.repoId)).size,
49
- workspaceBindRequiresAuthorization: true,
50
- defaultCapabilityProfile: cloneCapabilityProfile(defaultCapabilityProfile),
51
- totalMonitors: monitorCounts.totalMonitors,
52
- runningMonitors: monitorCounts.runningMonitors,
53
- pausedMonitors: monitorCounts.pausedMonitors,
54
- stoppedMonitors: monitorCounts.stoppedMonitors,
55
- failingMonitors: monitorCounts.failingMonitors,
56
- backlogMonitors: monitorCounts.backlogMonitors,
57
- scheduler: schedulerCounts,
58
- workers: workerCounts,
59
- ...runtime,
60
- };
61
- }
62
-
63
- // ---------------------------------------------------------------------------
64
- // Authorized workspace view projection
65
- // ---------------------------------------------------------------------------
66
-
67
- export function toAuthorizedWorkspaceView(
68
- record: AuthorizedWorkspaceRecord,
69
- activeSessionCount: number,
70
- ): AuthorizedWorkspaceView {
71
- return {
72
- ...record,
73
- capabilityProfile: cloneCapabilityProfile(record.capabilityProfile),
74
- activeSessions: activeSessionCount,
75
- };
76
- }