@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,76 +0,0 @@
1
- import { z } from "zod";
2
-
3
- const indexCommandArgsSchema = z.object({
4
- json: z.boolean(),
5
- from: z.string().nullable(),
6
- });
7
-
8
- export type IndexCommandArgs = z.infer<typeof indexCommandArgsSchema>;
9
-
10
- const indexSuccessSchema = z.object({
11
- ok: z.literal(true),
12
- cwd: z.string(),
13
- from: z.string().nullable(),
14
- commitsIndexed: z.number().int().nonnegative(),
15
- patchesWritten: z.number().int().nonnegative(),
16
- });
17
-
18
- const indexFailureSchema = z.object({
19
- ok: z.literal(false),
20
- cwd: z.string(),
21
- from: z.string().nullable(),
22
- error: z.string(),
23
- });
24
-
25
- export const indexCliResultSchema = z.union([indexSuccessSchema, indexFailureSchema]);
26
-
27
- export type IndexCliResult = z.infer<typeof indexCliResultSchema>;
28
-
29
- export function parseIndexCommandArgs(args: readonly string[]): IndexCommandArgs {
30
- let json = false;
31
- let from: string | null = null;
32
-
33
- for (const arg of args) {
34
- if (arg === "--json") {
35
- json = true;
36
- continue;
37
- }
38
- if (arg.startsWith("--")) {
39
- throw new Error(`Unknown index arguments: ${arg}`);
40
- }
41
- if (from !== null) {
42
- throw new Error(`Unknown index arguments: ${arg}`);
43
- }
44
- from = arg;
45
- }
46
-
47
- return indexCommandArgsSchema.parse({ json, from });
48
- }
49
-
50
- export function buildIndexCliSuccess(input: {
51
- readonly cwd: string;
52
- readonly from: string | null;
53
- readonly commitsIndexed: number;
54
- readonly patchesWritten: number;
55
- }): IndexCliResult {
56
- return indexSuccessSchema.parse({
57
- ok: true,
58
- cwd: input.cwd,
59
- from: input.from,
60
- commitsIndexed: input.commitsIndexed,
61
- patchesWritten: input.patchesWritten,
62
- });
63
- }
64
-
65
- export function buildIndexCliFailure(input: {
66
- readonly cwd: string;
67
- readonly from: string | null;
68
- readonly error: string;
69
- }): IndexCliResult {
70
- return indexFailureSchema.parse({
71
- ok: false,
72
- cwd: input.cwd,
73
- from: input.from,
74
- error: input.error,
75
- });
76
- }
@@ -1,47 +0,0 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import { InitAction } from "./init-model.js";
4
-
5
- export {
6
- ensureCodexStartupTimeout,
7
- mergeClaudeHooksConfig,
8
- mergeClaudeMcpConfig,
9
- mergeClineMcpConfig,
10
- mergeCodexMcpConfig,
11
- mergeContinueMcpConfig,
12
- mergeCursorMcpConfig,
13
- mergeWindsurfMcpConfig,
14
- } from "./init-client-config.js";
15
- export { ensureTargetGitHooks } from "./init-target-hooks.js";
16
-
17
- export function writeIfMissing(
18
- filePath: string,
19
- content: string,
20
- label: string,
21
- ): InitAction {
22
- if (fs.existsSync(filePath)) {
23
- return InitAction.exists(label);
24
- }
25
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
26
- fs.writeFileSync(filePath, content);
27
- return InitAction.create(label);
28
- }
29
-
30
- export function appendIfMissing(
31
- filePath: string,
32
- marker: string,
33
- content: string,
34
- label: string,
35
- ): InitAction {
36
- if (fs.existsSync(filePath)) {
37
- const existing = fs.readFileSync(filePath, "utf-8");
38
- if (existing.includes(marker)) {
39
- return InitAction.exists(label, "already has graft entry");
40
- }
41
- fs.appendFileSync(filePath, content);
42
- return InitAction.append(label);
43
- }
44
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
45
- fs.writeFileSync(filePath, content.trimStart());
46
- return InitAction.create(label);
47
- }
@@ -1,299 +0,0 @@
1
- import * as fs from "node:fs";
2
- import * as path from "node:path";
3
- import {
4
- GRAFT_HOOKS_CONFIG,
5
- GRAFT_MCP_SERVER,
6
- InitAction,
7
- type GraftHookMatcher,
8
- } from "./init-model.js";
9
- import {
10
- JsonArrayNode,
11
- JsonObjectDocument,
12
- } from "./json-document.js";
13
-
14
- class JsonMcpConfigDocument {
15
- constructor(
16
- private readonly document: JsonObjectDocument,
17
- private readonly server: typeof GRAFT_MCP_SERVER,
18
- ) {}
19
-
20
- static create(
21
- filePath: string,
22
- label: string,
23
- server: typeof GRAFT_MCP_SERVER,
24
- ): JsonMcpConfigDocument {
25
- return new JsonMcpConfigDocument(
26
- JsonObjectDocument.create(filePath, label, server.toJsonMcpConfig()),
27
- server,
28
- );
29
- }
30
-
31
- static open(
32
- filePath: string,
33
- label: string,
34
- server: typeof GRAFT_MCP_SERVER,
35
- ): JsonMcpConfigDocument {
36
- return new JsonMcpConfigDocument(
37
- JsonObjectDocument.open(filePath, label),
38
- server,
39
- );
40
- }
41
-
42
- write(): void {
43
- this.document.write();
44
- }
45
-
46
- ensureGraftServer(): InitAction {
47
- const root = this.document.root();
48
- const servers = root.ensureObject("mcpServers");
49
- if (servers.has(this.server.name)) {
50
- return InitAction.exists(this.document.label, "already has graft mcp server");
51
- }
52
- servers.set(this.server.name, this.server.toJsonServerEntry());
53
- this.document.write();
54
- return InitAction.append(this.document.label, "added graft mcp server");
55
- }
56
- }
57
-
58
- class ContinueMcpConfigDocument {
59
- constructor(
60
- private readonly document: JsonObjectDocument,
61
- private readonly server: typeof GRAFT_MCP_SERVER,
62
- ) {}
63
-
64
- static create(
65
- filePath: string,
66
- label: string,
67
- server: typeof GRAFT_MCP_SERVER,
68
- ): ContinueMcpConfigDocument {
69
- return new ContinueMcpConfigDocument(
70
- JsonObjectDocument.create(filePath, label, server.toContinueConfig()),
71
- server,
72
- );
73
- }
74
-
75
- static open(
76
- filePath: string,
77
- label: string,
78
- server: typeof GRAFT_MCP_SERVER,
79
- ): ContinueMcpConfigDocument {
80
- return new ContinueMcpConfigDocument(
81
- JsonObjectDocument.open(filePath, label),
82
- server,
83
- );
84
- }
85
-
86
- write(): void {
87
- this.document.write();
88
- }
89
-
90
- ensureGraftServer(): InitAction {
91
- const root = this.document.root();
92
- const servers = root.ensureArray("mcpServers");
93
- const exists = servers
94
- .objectItems()
95
- .some((entry) => entry.stringValue("name") === this.server.name);
96
- if (exists) {
97
- return InitAction.exists(this.document.label, "already has graft mcp server");
98
- }
99
- servers.push(this.server.toContinueServerEntry());
100
- this.document.write();
101
- return InitAction.append(this.document.label, "added graft mcp server");
102
- }
103
- }
104
-
105
- class ClaudeHooksDocument {
106
- constructor(
107
- private readonly document: JsonObjectDocument,
108
- private readonly hooksConfig: typeof GRAFT_HOOKS_CONFIG,
109
- ) {}
110
-
111
- static create(
112
- filePath: string,
113
- label: string,
114
- hooksConfig: typeof GRAFT_HOOKS_CONFIG,
115
- ): ClaudeHooksDocument {
116
- return new ClaudeHooksDocument(
117
- JsonObjectDocument.create(filePath, label, hooksConfig.toJsonValue()),
118
- hooksConfig,
119
- );
120
- }
121
-
122
- static open(
123
- filePath: string,
124
- label: string,
125
- hooksConfig: typeof GRAFT_HOOKS_CONFIG,
126
- ): ClaudeHooksDocument {
127
- return new ClaudeHooksDocument(
128
- JsonObjectDocument.open(filePath, label),
129
- hooksConfig,
130
- );
131
- }
132
-
133
- write(): void {
134
- this.document.write();
135
- }
136
-
137
- ensureGraftHooks(): InitAction {
138
- const root = this.document.root();
139
- const hooksRoot = root.ensureObject("hooks");
140
- const preToolUse = hooksRoot.ensureArray("PreToolUse");
141
- const postToolUse = hooksRoot.ensureArray("PostToolUse");
142
- const changed = this.mergeHookPhase(preToolUse, this.hooksConfig.preToolUse)
143
- || this.mergeHookPhase(postToolUse, this.hooksConfig.postToolUse);
144
- if (!changed) {
145
- return InitAction.exists(this.document.label, "already has graft hooks");
146
- }
147
- this.document.write();
148
- return InitAction.append(this.document.label, "added graft hooks");
149
- }
150
-
151
- private mergeHookPhase(
152
- phases: JsonArrayNode,
153
- entry: GraftHookMatcher,
154
- ): boolean {
155
- const existing = phases
156
- .objectItems()
157
- .find((candidate) => candidate.stringValue("matcher") === entry.matcher);
158
- if (existing === undefined) {
159
- phases.push(entry.toJsonValue());
160
- return true;
161
- }
162
-
163
- const hooks = existing.requireArray("hooks");
164
- let changed = false;
165
- for (const graftHook of entry.hooks) {
166
- const alreadyPresent = hooks.objectItems().some((candidate) =>
167
- candidate.stringValue("type") === "command"
168
- && candidate.stringValue("command") === graftHook.command,
169
- );
170
- if (alreadyPresent) {
171
- continue;
172
- }
173
- hooks.push(graftHook.toJsonValue());
174
- changed = true;
175
- }
176
- return changed;
177
- }
178
- }
179
-
180
- export function ensureCodexStartupTimeout(
181
- existing: string,
182
- ): { content: string; changed: boolean } {
183
- const marker = "[mcp_servers.graft]";
184
- const timeoutLine = `startup_timeout_sec = ${String(GRAFT_MCP_SERVER.codexStartupTimeoutSec)}`;
185
- const lines = existing.split("\n");
186
- const blockStart = lines.findIndex((line) => line.trim() === marker);
187
- if (blockStart === -1) {
188
- return { content: existing, changed: false };
189
- }
190
-
191
- let blockEnd = lines.length;
192
- for (let index = blockStart + 1; index < lines.length; index++) {
193
- const line = lines[index];
194
- if (line !== undefined && line.trim().startsWith("[") && line.trim().endsWith("]")) {
195
- blockEnd = index;
196
- break;
197
- }
198
- }
199
-
200
- const hasTimeout = lines
201
- .slice(blockStart + 1, blockEnd)
202
- .some((line) => line.trim().startsWith("startup_timeout_sec"));
203
- if (hasTimeout) {
204
- return { content: existing, changed: false };
205
- }
206
-
207
- lines.splice(blockEnd, 0, timeoutLine);
208
- return {
209
- content: lines.join("\n"),
210
- changed: true,
211
- };
212
- }
213
-
214
- function ensureJsonMcpConfig(filePath: string, label: string): InitAction {
215
- if (!fs.existsSync(filePath)) {
216
- const created = JsonMcpConfigDocument.create(filePath, label, GRAFT_MCP_SERVER);
217
- created.write();
218
- return InitAction.create(label, "wrote graft mcp server");
219
- }
220
- return JsonMcpConfigDocument
221
- .open(filePath, label, GRAFT_MCP_SERVER)
222
- .ensureGraftServer();
223
- }
224
-
225
- export function mergeClaudeMcpConfig(cwd: string): InitAction {
226
- const label = ".mcp.json";
227
- const filePath = path.join(cwd, label);
228
- return ensureJsonMcpConfig(filePath, label);
229
- }
230
-
231
- export function mergeCursorMcpConfig(cwd: string): InitAction {
232
- const label = ".cursor/mcp.json";
233
- const filePath = path.join(cwd, ".cursor", "mcp.json");
234
- return ensureJsonMcpConfig(filePath, label);
235
- }
236
-
237
- export function mergeWindsurfMcpConfig(cwd: string): InitAction {
238
- const label = ".codeium/windsurf/mcp_config.json";
239
- const filePath = path.join(cwd, ".codeium", "windsurf", "mcp_config.json");
240
- return ensureJsonMcpConfig(filePath, label);
241
- }
242
-
243
- export function mergeClineMcpConfig(cwd: string): InitAction {
244
- const label = ".vscode/cline_mcp_settings.json";
245
- const filePath = path.join(cwd, ".vscode", "cline_mcp_settings.json");
246
- return ensureJsonMcpConfig(filePath, label);
247
- }
248
-
249
- export function mergeClaudeHooksConfig(cwd: string): InitAction {
250
- const label = ".claude/settings.json";
251
- const filePath = path.join(cwd, ".claude", "settings.json");
252
- if (!fs.existsSync(filePath)) {
253
- const created = ClaudeHooksDocument.create(filePath, label, GRAFT_HOOKS_CONFIG);
254
- created.write();
255
- return InitAction.create(label, "wrote graft hooks");
256
- }
257
- return ClaudeHooksDocument.open(filePath, label, GRAFT_HOOKS_CONFIG).ensureGraftHooks();
258
- }
259
-
260
- export function mergeContinueMcpConfig(cwd: string): InitAction {
261
- const label = ".continue/config.json";
262
- const filePath = path.join(cwd, ".continue", "config.json");
263
- if (!fs.existsSync(filePath)) {
264
- const created = ContinueMcpConfigDocument.create(filePath, label, GRAFT_MCP_SERVER);
265
- created.write();
266
- return InitAction.create(label, "wrote graft mcp server");
267
- }
268
- return ContinueMcpConfigDocument
269
- .open(filePath, label, GRAFT_MCP_SERVER)
270
- .ensureGraftServer();
271
- }
272
-
273
- export function mergeCodexMcpConfig(cwd: string): InitAction {
274
- const label = ".codex/config.toml";
275
- const filePath = path.join(cwd, ".codex", "config.toml");
276
- const marker = "[mcp_servers.graft]";
277
- if (!fs.existsSync(filePath)) {
278
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
279
- fs.writeFileSync(filePath, GRAFT_MCP_SERVER.toCodexTomlBlock());
280
- return InitAction.create(label, "wrote graft mcp server");
281
- }
282
-
283
- const existing = fs.readFileSync(filePath, "utf-8");
284
- if (existing.includes(marker)) {
285
- const ensured = ensureCodexStartupTimeout(existing);
286
- if (ensured.changed) {
287
- fs.writeFileSync(filePath, ensured.content);
288
- return InitAction.append(label, "added graft startup timeout");
289
- }
290
- return InitAction.exists(label, "already has graft mcp server");
291
- }
292
-
293
- const separator = existing.endsWith("\n") ? "\n" : "\n\n";
294
- fs.writeFileSync(
295
- filePath,
296
- `${existing}${separator}${GRAFT_MCP_SERVER.toCodexTomlBlock()}`,
297
- );
298
- return InitAction.append(label, "appended graft mcp server");
299
- }
@@ -1,229 +0,0 @@
1
- export type JsonPrimitive = string | number | boolean | null;
2
- export type JsonArrayValue = JsonValue[];
3
- export type JsonValue = JsonPrimitive | JsonArrayValue | JsonObjectValue;
4
-
5
- export interface JsonObjectValue {
6
- [key: string]: JsonValue | undefined;
7
- }
8
-
9
- type InitActionKind = "exists" | "create" | "append";
10
-
11
- export class InitAction {
12
- constructor(
13
- readonly action: InitActionKind,
14
- readonly label: string,
15
- readonly detail?: string,
16
- ) {}
17
-
18
- static create(label: string, detail?: string): InitAction {
19
- return new InitAction("create", label, detail);
20
- }
21
-
22
- static append(label: string, detail?: string): InitAction {
23
- return new InitAction("append", label, detail);
24
- }
25
-
26
- static exists(label: string, detail?: string): InitAction {
27
- return new InitAction("exists", label, detail);
28
- }
29
- }
30
-
31
- export class InitFailure {
32
- readonly ok = false;
33
-
34
- constructor(
35
- readonly cwd: string,
36
- readonly error: string,
37
- ) {}
38
-
39
- toJSON(): JsonObjectValue {
40
- return {
41
- ok: this.ok,
42
- cwd: this.cwd,
43
- error: this.error,
44
- };
45
- }
46
- }
47
-
48
- function consumeFlag(args: string[], flag: string): boolean {
49
- const index = args.indexOf(flag);
50
- if (index === -1) {
51
- return false;
52
- }
53
- args.splice(index, 1);
54
- return true;
55
- }
56
-
57
- export class ParsedInitArgs {
58
- constructor(
59
- readonly json: boolean,
60
- readonly writeClaudeMcp: boolean,
61
- readonly writeClaudeHooks: boolean,
62
- readonly writeTargetGitHooks: boolean,
63
- readonly writeCodexMcp: boolean,
64
- readonly writeCursorMcp: boolean,
65
- readonly writeWindsurfMcp: boolean,
66
- readonly writeContinueMcp: boolean,
67
- readonly writeClineMcp: boolean,
68
- ) {}
69
-
70
- static parse(rawArgs: readonly string[]): ParsedInitArgs {
71
- const args = [...rawArgs];
72
- const parsed = new ParsedInitArgs(
73
- consumeFlag(args, "--json"),
74
- consumeFlag(args, "--write-claude-mcp"),
75
- consumeFlag(args, "--write-claude-hooks"),
76
- consumeFlag(args, "--write-target-git-hooks"),
77
- consumeFlag(args, "--write-codex-mcp"),
78
- consumeFlag(args, "--write-cursor-mcp"),
79
- consumeFlag(args, "--write-windsurf-mcp"),
80
- consumeFlag(args, "--write-continue-mcp"),
81
- consumeFlag(args, "--write-cline-mcp"),
82
- );
83
-
84
- if (args.length > 0) {
85
- throw new Error(`Unknown init arguments: ${args.join(" ")}`);
86
- }
87
-
88
- return parsed;
89
- }
90
-
91
- get writesAnyMcpConfig(): boolean {
92
- return this.writeClaudeMcp
93
- || this.writeCodexMcp
94
- || this.writeCursorMcp
95
- || this.writeWindsurfMcp
96
- || this.writeContinueMcp
97
- || this.writeClineMcp;
98
- }
99
- }
100
-
101
- export class GraftMcpServer {
102
- readonly name = "graft";
103
- readonly command = "npx";
104
- readonly args = ["-y", "@flyingrobots/graft", "serve"] as const;
105
- readonly codexStartupTimeoutSec = 120;
106
-
107
- toJsonServerEntry(): JsonObjectValue {
108
- return {
109
- command: this.command,
110
- args: [...this.args],
111
- };
112
- }
113
-
114
- toJsonMcpConfig(): JsonObjectValue {
115
- return {
116
- mcpServers: {
117
- [this.name]: this.toJsonServerEntry(),
118
- },
119
- };
120
- }
121
-
122
- toContinueServerEntry(): JsonObjectValue {
123
- return {
124
- name: this.name,
125
- command: this.command,
126
- args: [...this.args],
127
- };
128
- }
129
-
130
- toContinueConfig(): JsonObjectValue {
131
- return {
132
- mcpServers: [this.toContinueServerEntry()],
133
- };
134
- }
135
-
136
- toCodexTomlBlock(): string {
137
- return [
138
- "[mcp_servers.graft]",
139
- "command = \"npx\"",
140
- "args = [\"-y\", \"@flyingrobots/graft\", \"serve\"]",
141
- `startup_timeout_sec = ${String(this.codexStartupTimeoutSec)}`,
142
- "",
143
- ].join("\n");
144
- }
145
- }
146
-
147
- export class GraftHookCommand {
148
- constructor(readonly command: string) {}
149
-
150
- toJsonValue(): JsonObjectValue {
151
- return {
152
- type: "command",
153
- command: this.command,
154
- };
155
- }
156
- }
157
-
158
- export class GraftHookMatcher {
159
- constructor(
160
- readonly matcher: "Read",
161
- readonly hooks: readonly GraftHookCommand[],
162
- ) {}
163
-
164
- toJsonValue(): JsonObjectValue {
165
- return {
166
- matcher: this.matcher,
167
- hooks: this.hooks.map((hook) => hook.toJsonValue()),
168
- };
169
- }
170
- }
171
-
172
- export class GraftHooksConfig {
173
- constructor(
174
- readonly preToolUse: GraftHookMatcher,
175
- readonly postToolUse: GraftHookMatcher,
176
- ) {}
177
-
178
- toJsonValue(): JsonObjectValue {
179
- return {
180
- hooks: {
181
- PreToolUse: [this.preToolUse.toJsonValue()],
182
- PostToolUse: [this.postToolUse.toJsonValue()],
183
- },
184
- };
185
- }
186
- }
187
-
188
- export const GRAFT_MCP_SERVER = new GraftMcpServer();
189
- export const GRAFT_HOOKS_CONFIG = new GraftHooksConfig(
190
- new GraftHookMatcher("Read", [
191
- new GraftHookCommand("node --import tsx node_modules/@flyingrobots/graft/src/hooks/pretooluse-read.ts"),
192
- ]),
193
- new GraftHookMatcher("Read", [
194
- new GraftHookCommand("node --import tsx node_modules/@flyingrobots/graft/src/hooks/posttooluse-read.ts"),
195
- ]),
196
- );
197
-
198
- export class InitResult {
199
- readonly ok = true;
200
-
201
- constructor(
202
- readonly cwd: string,
203
- readonly actions: readonly InitAction[],
204
- readonly hooksConfig: GraftHooksConfig,
205
- readonly suggestedMcpServer: GraftMcpServer,
206
- ) {}
207
-
208
- toJSON(): JsonObjectValue {
209
- return {
210
- ok: this.ok,
211
- cwd: this.cwd,
212
- actions: this.actions.map((action) => ({
213
- action: action.action,
214
- label: action.label,
215
- ...(action.detail !== undefined ? { detail: action.detail } : {}),
216
- })),
217
- hooksConfig: this.hooksConfig.toJsonValue(),
218
- suggestedMcpServer: this.suggestedMcpServer.toJsonMcpConfig(),
219
- };
220
- }
221
- }
222
-
223
- export function isJsonObjectValue(value: unknown): value is JsonObjectValue {
224
- return typeof value === "object" && value !== null && !Array.isArray(value);
225
- }
226
-
227
- export function cloneJsonValue<T>(value: T): T {
228
- return JSON.parse(JSON.stringify(value)) as T;
229
- }
@@ -1,54 +0,0 @@
1
- import { CanonicalJsonCodec } from "../adapters/canonical-json.js";
2
- import { attachCliSchemaMeta, validateCliOutput } from "../contracts/output-schemas.js";
3
- import { GRAFT_HOOKS_CONFIG, GRAFT_MCP_SERVER, InitFailure, InitResult, ParsedInitArgs, type JsonObjectValue } from "./init-model.js";
4
-
5
- const codec = new CanonicalJsonCodec();
6
-
7
- interface Writer {
8
- write(chunk: string): unknown;
9
- }
10
-
11
- function writeLine(writer: Writer, line = ""): void {
12
- writer.write(`${line}\n`);
13
- }
14
-
15
- function indentJson(value: unknown, spaces = 2): string {
16
- const json = JSON.stringify(value, null, spaces);
17
- return json.split("\n").map((line) => ` ${line}`).join("\n");
18
- }
19
-
20
- export function renderInitText(result: InitResult, args: ParsedInitArgs, writer: Writer): void {
21
- writeLine(writer);
22
- writeLine(writer, `Initializing graft in ${result.cwd}`);
23
- writeLine(writer);
24
- for (const action of result.actions) {
25
- const detail = action.detail !== undefined ? ` (${action.detail})` : "";
26
- writeLine(writer, ` ${action.action.padEnd(6)} ${action.label}${detail}`);
27
- }
28
- writeLine(writer);
29
-
30
- if (!args.writeClaudeHooks) {
31
- writeLine(writer, "Add to .claude/settings.json for Claude Code hook integration:");
32
- writeLine(writer);
33
- writeLine(writer, JSON.stringify(GRAFT_HOOKS_CONFIG.toJsonValue(), null, 2));
34
- writeLine(writer);
35
- }
36
-
37
- if (!args.writesAnyMcpConfig) {
38
- writeLine(writer, "Done. Add graft to your MCP config:");
39
- writeLine(writer);
40
- writeLine(writer, indentJson(GRAFT_MCP_SERVER.toJsonMcpConfig()));
41
- writeLine(writer);
42
- writeLine(writer, "Use explicit --write-*-mcp flags or --write-claude-hooks");
43
- writeLine(writer, "or --write-target-git-hooks for one-step bootstrap into project-local config files.");
44
- }
45
-
46
- writeLine(writer);
47
- }
48
-
49
- export function emitInitJson(result: JsonObjectValue | InitFailure, writer: Writer): void {
50
- const payload = result instanceof InitFailure
51
- ? result.toJSON()
52
- : result;
53
- writer.write(`${codec.encode(validateCliOutput("init", attachCliSchemaMeta("init", payload)))}\n`);
54
- }