@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,178 +0,0 @@
1
- import picomatch from "picomatch";
2
- import type { PolicyInput, PolicyOptions, ReasonCode, GovernorDepth } from "./types.js";
3
- import { ContentResult, OutlineResult, RefusedResult } from "./types.js";
4
- import type { PolicyResult } from "./types.js";
5
-
6
- export const STATIC_THRESHOLDS = { lines: 150, bytes: 12288 } as const;
7
-
8
- const SESSION_BYTE_CAPS: Record<string, number> = {
9
- early: 20480,
10
- mid: 10240,
11
- late: 4096,
12
- };
13
-
14
- const BINARY_EXTENSIONS = new Set([
15
- ".png", ".jpg", ".jpeg", ".gif", ".pdf", ".zip",
16
- ".wasm", ".bin", ".sqlite", ".mp4", ".mov", ".ico",
17
- ]);
18
-
19
- const LOCKFILE_NAMES = new Set([
20
- "package-lock.json", "pnpm-lock.yaml", "yarn.lock",
21
- "Gemfile.lock", "poetry.lock", "Cargo.lock",
22
- "composer.lock", "Pipfile.lock",
23
- ]);
24
-
25
- const BUILD_OUTPUT_PREFIXES = ["dist/", "build/", ".next/", "out/", "target/"];
26
-
27
- const SECRET_PATTERNS: ((name: string) => boolean)[] = [
28
- (n) => n === ".env" || (n.startsWith(".env.") && !n.endsWith(".example")),
29
- (n) => n.endsWith(".pem"),
30
- (n) => n.endsWith(".key"),
31
- (n) => n.startsWith("credentials."),
32
- ];
33
-
34
- function basename(path: string): string {
35
- const i = path.lastIndexOf("/");
36
- return i === -1 ? path : path.slice(i + 1);
37
- }
38
-
39
- function extname(path: string): string {
40
- const name = basename(path);
41
- const i = name.lastIndexOf(".");
42
- return i <= 0 ? "" : name.slice(i);
43
- }
44
-
45
- function checkBan(path: string): { reason: ReasonCode; reasonDetail: string; next: string[] } | undefined {
46
- const name = basename(path);
47
- const ext = extname(path).toLowerCase();
48
-
49
- if (BINARY_EXTENSIONS.has(ext)) {
50
- return {
51
- reason: "BINARY",
52
- reasonDetail: `Binary file (${ext}) cannot be usefully read`,
53
- next: ["Use file_outline to see metadata", "Check for a text alternative"],
54
- };
55
- }
56
-
57
- if (LOCKFILE_NAMES.has(name)) {
58
- return {
59
- reason: "LOCKFILE",
60
- reasonDetail: `Lockfile ${name} is machine-generated and not useful to read`,
61
- next: ["Read package.json for dependency info instead"],
62
- };
63
- }
64
-
65
- if (name.endsWith(".min.js") || name.endsWith(".min.css")) {
66
- return {
67
- reason: "MINIFIED",
68
- reasonDetail: `Minified file ${name} is not human-readable`,
69
- next: ["Look for the unminified source"],
70
- };
71
- }
72
-
73
- for (const prefix of BUILD_OUTPUT_PREFIXES) {
74
- if (path.includes("/" + prefix) || path.startsWith(prefix)) {
75
- return {
76
- reason: "BUILD_OUTPUT",
77
- reasonDetail: `Build output path ${prefix} contains generated files`,
78
- next: ["Try reading src/ instead of dist/"],
79
- };
80
- }
81
- }
82
-
83
- for (const check of SECRET_PATTERNS) {
84
- if (check(name)) {
85
- return {
86
- reason: "SECRET",
87
- reasonDetail: `${name} may contain secrets and should not be read`,
88
- next: ["Check for a .example or template version"],
89
- };
90
- }
91
- }
92
-
93
- return undefined;
94
- }
95
-
96
- export function evaluatePolicy(input: PolicyInput, options?: PolicyOptions): PolicyResult {
97
- const { path, lines, bytes } = input;
98
- const actual = { lines, bytes };
99
- const thresholds = { ...STATIC_THRESHOLDS };
100
- const sessionDepth: GovernorDepth | undefined = options?.sessionDepth;
101
-
102
- // 1. Bans first
103
- const ban = checkBan(path);
104
- if (ban !== undefined) {
105
- return new RefusedResult({
106
- reason: ban.reason,
107
- reasonDetail: ban.reasonDetail,
108
- next: ban.next,
109
- thresholds,
110
- actual,
111
- ...(sessionDepth !== undefined ? { sessionDepth } : {}),
112
- });
113
- }
114
-
115
- // 2. Graftignore
116
- const patterns = options?.graftignorePatterns;
117
- if (patterns !== undefined && patterns.length > 0) {
118
- const isMatch = picomatch(patterns);
119
- if (isMatch(path)) {
120
- return new RefusedResult({
121
- reason: "GRAFTIGNORE",
122
- reasonDetail: "File matches .graftignore pattern",
123
- next: ["Check .graftignore if this file should be readable"],
124
- thresholds,
125
- actual,
126
- ...(sessionDepth !== undefined ? { sessionDepth } : {}),
127
- });
128
- }
129
- }
130
-
131
- // 3. Determine effective byte cap
132
- // When session depth is known (not "unknown"), the session cap replaces the static byte threshold.
133
- // Static line threshold always applies.
134
- const hasSessionCap = sessionDepth !== undefined && sessionDepth !== "unknown";
135
- let effectiveByteCap = hasSessionCap
136
- ? SESSION_BYTE_CAPS[sessionDepth] ?? STATIC_THRESHOLDS.bytes
137
- : STATIC_THRESHOLDS.bytes;
138
-
139
- // 4. Budget cap — no single read should exceed 5% of remaining budget
140
- const MAX_READ_FRACTION = 0.05;
141
- const budgetRemaining = options?.budgetRemaining;
142
- const hasBudgetCap = budgetRemaining !== undefined && budgetRemaining >= 0;
143
- let budgetTriggered = false;
144
- if (hasBudgetCap) {
145
- const budgetCap = Math.floor(budgetRemaining * MAX_READ_FRACTION);
146
- if (budgetCap < effectiveByteCap) {
147
- effectiveByteCap = budgetCap;
148
- budgetTriggered = true;
149
- }
150
- }
151
-
152
- const exceedsLines = lines > STATIC_THRESHOLDS.lines;
153
- const exceedsBytes = bytes > effectiveByteCap;
154
-
155
- if (!exceedsLines && !exceedsBytes) {
156
- return new ContentResult({
157
- thresholds,
158
- actual,
159
- ...(sessionDepth !== undefined ? { sessionDepth } : {}),
160
- });
161
- }
162
-
163
- // Determine reason: BUDGET_CAP > SESSION_CAP > OUTLINE
164
- const finalReason: "OUTLINE" | "SESSION_CAP" | "BUDGET_CAP" = exceedsLines && !exceedsBytes
165
- ? "OUTLINE"
166
- : exceedsBytes && budgetTriggered
167
- ? "BUDGET_CAP"
168
- : exceedsBytes && hasSessionCap
169
- ? "SESSION_CAP"
170
- : "OUTLINE";
171
-
172
- return new OutlineResult({
173
- reason: finalReason,
174
- thresholds,
175
- actual,
176
- ...(sessionDepth !== undefined ? { sessionDepth } : {}),
177
- });
178
- }
@@ -1,6 +0,0 @@
1
- export function loadGraftignore(content: string): string[] {
2
- return content
3
- .split("\n")
4
- .map((line) => line.trim())
5
- .filter((line) => line.length > 0 && !line.startsWith("#"));
6
- }
@@ -1,87 +0,0 @@
1
- export type ReasonCode =
2
- | "CONTENT"
3
- | "OUTLINE"
4
- | "SESSION_CAP"
5
- | "BINARY"
6
- | "LOCKFILE"
7
- | "MINIFIED"
8
- | "BUILD_OUTPUT"
9
- | "SECRET"
10
- | "GRAFTIGNORE"
11
- | "BUDGET_CAP"
12
- | "UNSUPPORTED_LANGUAGE";
13
-
14
- export type GovernorDepth = "early" | "mid" | "late" | "unknown";
15
-
16
- export interface PolicyInput {
17
- path: string;
18
- lines: number;
19
- bytes: number;
20
- }
21
-
22
- export interface PolicyOptions {
23
- graftignorePatterns?: string[] | undefined;
24
- sessionDepth?: GovernorDepth | undefined;
25
- budgetRemaining?: number | undefined;
26
- }
27
-
28
- // Shared fields for all results
29
- interface PolicyResultBase {
30
- readonly thresholds: { readonly lines: number; readonly bytes: number };
31
- readonly actual: { readonly lines: number; readonly bytes: number };
32
- readonly sessionDepth?: GovernorDepth | undefined;
33
- }
34
-
35
- export class ContentResult implements PolicyResultBase {
36
- readonly projection = "content" as const;
37
- readonly reason = "CONTENT" as const;
38
- readonly thresholds: { readonly lines: number; readonly bytes: number };
39
- readonly actual: { readonly lines: number; readonly bytes: number };
40
- readonly sessionDepth?: GovernorDepth | undefined;
41
-
42
- constructor(opts: { thresholds: { lines: number; bytes: number }; actual: { lines: number; bytes: number }; sessionDepth?: GovernorDepth | undefined }) {
43
- this.thresholds = Object.freeze({ ...opts.thresholds });
44
- this.actual = Object.freeze({ ...opts.actual });
45
- if (opts.sessionDepth !== undefined) this.sessionDepth = opts.sessionDepth;
46
- Object.freeze(this);
47
- }
48
- }
49
-
50
- export class OutlineResult implements PolicyResultBase {
51
- readonly projection = "outline" as const;
52
- readonly reason: "OUTLINE" | "SESSION_CAP" | "BUDGET_CAP" | "UNSUPPORTED_LANGUAGE";
53
- readonly thresholds: { readonly lines: number; readonly bytes: number };
54
- readonly actual: { readonly lines: number; readonly bytes: number };
55
- readonly sessionDepth?: GovernorDepth | undefined;
56
-
57
- constructor(opts: { reason: "OUTLINE" | "SESSION_CAP" | "BUDGET_CAP" | "UNSUPPORTED_LANGUAGE"; thresholds: { lines: number; bytes: number }; actual: { lines: number; bytes: number }; sessionDepth?: GovernorDepth | undefined }) {
58
- this.reason = opts.reason;
59
- this.thresholds = Object.freeze({ ...opts.thresholds });
60
- this.actual = Object.freeze({ ...opts.actual });
61
- if (opts.sessionDepth !== undefined) this.sessionDepth = opts.sessionDepth;
62
- Object.freeze(this);
63
- }
64
- }
65
-
66
- export class RefusedResult implements PolicyResultBase {
67
- readonly projection = "refused" as const;
68
- readonly reason: ReasonCode;
69
- readonly reasonDetail: string;
70
- readonly next: readonly string[];
71
- readonly thresholds: { readonly lines: number; readonly bytes: number };
72
- readonly actual: { readonly lines: number; readonly bytes: number };
73
- readonly sessionDepth?: GovernorDepth | undefined;
74
-
75
- constructor(opts: { reason: ReasonCode; reasonDetail: string; next: string[]; thresholds: { lines: number; bytes: number }; actual: { lines: number; bytes: number }; sessionDepth?: GovernorDepth | undefined }) {
76
- this.reason = opts.reason;
77
- this.reasonDetail = opts.reasonDetail;
78
- this.next = Object.freeze([...opts.next]);
79
- this.thresholds = Object.freeze({ ...opts.thresholds });
80
- this.actual = Object.freeze({ ...opts.actual });
81
- if (opts.sessionDepth !== undefined) this.sessionDepth = opts.sessionDepth;
82
- Object.freeze(this);
83
- }
84
- }
85
-
86
- // Union type for callers that need the general type
87
- export type PolicyResult = ContentResult | OutlineResult | RefusedResult;
@@ -1,13 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // JsonCodec port — hexagonal boundary for JSON serialization
3
- // ---------------------------------------------------------------------------
4
-
5
- /**
6
- * Portable JSON codec interface. Core logic imports this port, not
7
- * JSON.stringify/JSON.parse directly. Implementations control key
8
- * ordering, whitespace, and determinism.
9
- */
10
- export interface JsonCodec {
11
- encode(value: unknown): string;
12
- decode(data: string): unknown;
13
- }
@@ -1,18 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // FileSystem port — hexagonal boundary for file I/O
3
- // ---------------------------------------------------------------------------
4
-
5
- /**
6
- * Portable filesystem interface. Core logic imports this port, not node:fs.
7
- * Node adapter implements it; tests can substitute a mock.
8
- */
9
- export interface FileSystem {
10
- readFile(path: string, encoding: "utf-8"): Promise<string>;
11
- readFile(path: string): Promise<Buffer>;
12
- readdir(path: string): Promise<string[]>;
13
- writeFile(path: string, data: string, encoding: "utf-8"): Promise<void>;
14
- appendFile(path: string, data: string, encoding: "utf-8"): Promise<void>;
15
- mkdir(path: string, options: { recursive: true }): Promise<void>;
16
- stat(path: string): Promise<{ size: number }>;
17
- readFileSync(path: string, encoding: "utf-8"): string;
18
- }
package/src/ports/git.ts DELETED
@@ -1,16 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // GitClient port — hexagonal boundary for git command execution
3
- // ---------------------------------------------------------------------------
4
-
5
- import type { ProcessRunResult } from "./process-runner.js";
6
-
7
- export interface GitRunRequest {
8
- readonly args: readonly string[];
9
- readonly cwd: string;
10
- readonly timeoutMs?: number;
11
- readonly maxBufferBytes?: number;
12
- }
13
-
14
- export interface GitClient {
15
- run(request: GitRunRequest): Promise<ProcessRunResult>;
16
- }
@@ -1,68 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // Port runtime guards — construction-time validation for port adapters
3
- // ---------------------------------------------------------------------------
4
-
5
- import type { FileSystem } from "./filesystem.js";
6
- import type { JsonCodec } from "./codec.js";
7
-
8
- const FILESYSTEM_METHODS = [
9
- "readFile",
10
- "readdir",
11
- "writeFile",
12
- "appendFile",
13
- "mkdir",
14
- "stat",
15
- "readFileSync",
16
- ] as const;
17
-
18
- const CODEC_METHODS = ["encode", "decode"] as const;
19
-
20
- function assertMethodsPresent(
21
- portName: string,
22
- impl: Record<string, unknown>,
23
- methods: readonly string[],
24
- ): void {
25
- for (const method of methods) {
26
- if (typeof impl[method] !== "function") {
27
- throw new TypeError(
28
- `${portName} adapter missing method: ${method} (got ${typeof impl[method]})`,
29
- );
30
- }
31
- }
32
- }
33
-
34
- /**
35
- * Validate that an object satisfies the FileSystem port contract at
36
- * runtime. Call this at adapter construction boundaries to catch
37
- * broken mocks and incomplete implementations early.
38
- */
39
- export function assertFileSystem(impl: unknown): asserts impl is FileSystem {
40
- if (impl === null || typeof impl !== "object") {
41
- throw new TypeError(
42
- `FileSystem adapter must be an object (got ${impl === null ? "null" : typeof impl})`,
43
- );
44
- }
45
- assertMethodsPresent(
46
- "FileSystem",
47
- impl as Record<string, unknown>,
48
- FILESYSTEM_METHODS,
49
- );
50
- }
51
-
52
- /**
53
- * Validate that an object satisfies the JsonCodec port contract at
54
- * runtime. Call this at adapter construction boundaries to catch
55
- * broken mocks and incomplete implementations early.
56
- */
57
- export function assertJsonCodec(impl: unknown): asserts impl is JsonCodec {
58
- if (impl === null || typeof impl !== "object") {
59
- throw new TypeError(
60
- `JsonCodec adapter must be an object (got ${impl === null ? "null" : typeof impl})`,
61
- );
62
- }
63
- assertMethodsPresent(
64
- "JsonCodec",
65
- impl as Record<string, unknown>,
66
- CODEC_METHODS,
67
- );
68
- }
@@ -1,22 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // ProcessRunner port — hexagonal boundary for command execution
3
- // ---------------------------------------------------------------------------
4
-
5
- export interface ProcessRunRequest {
6
- readonly command: string;
7
- readonly args: readonly string[];
8
- readonly cwd: string;
9
- readonly timeoutMs?: number;
10
- readonly maxBufferBytes?: number;
11
- }
12
-
13
- export interface ProcessRunResult {
14
- readonly status: number | null;
15
- readonly stdout: string;
16
- readonly stderr: string;
17
- readonly error?: Error;
18
- }
19
-
20
- export interface ProcessRunner {
21
- run(request: ProcessRunRequest): ProcessRunResult;
22
- }
package/src/ports/warp.ts DELETED
@@ -1,55 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // WARP port — hexagonal boundary for graph reads and writes
3
- // ---------------------------------------------------------------------------
4
-
5
- export interface WarpObserverLens {
6
- readonly match: string | readonly string[];
7
- readonly expose?: readonly string[] | undefined;
8
- readonly redact?: readonly string[] | undefined;
9
- }
10
-
11
- export interface WarpObserverOptions {
12
- readonly source?: {
13
- readonly kind: "live";
14
- readonly ceiling: number | null;
15
- } | undefined;
16
- }
17
-
18
- export interface WarpEdge {
19
- readonly from: string;
20
- readonly to: string;
21
- readonly label: string;
22
- }
23
-
24
- export interface WarpObserver {
25
- getNodes(): Promise<string[]>;
26
- getNodeProps(nodeId: string): Promise<Record<string, unknown> | null>;
27
- getEdges(): Promise<readonly WarpEdge[]>;
28
- }
29
-
30
- export interface WarpPatchBuilder {
31
- addNode(id: string): unknown;
32
- setProperty(id: string, key: string, value: unknown): unknown;
33
- addEdge(from: string, to: string, label: string): unknown;
34
- removeNode(id: string): unknown;
35
- removeEdge(from: string, to: string, label: string): unknown;
36
- }
37
-
38
- export interface WarpMaterializeReceiptOp {
39
- readonly op: string;
40
- readonly result: string;
41
- readonly target: string;
42
- }
43
-
44
- export interface WarpMaterializeReceipt {
45
- readonly lamport: number;
46
- readonly ops: readonly WarpMaterializeReceiptOp[];
47
- }
48
-
49
- export interface WarpHandle {
50
- hasNode(nodeId: string): Promise<boolean>;
51
- observer(lens: WarpObserverLens, options?: WarpObserverOptions): Promise<WarpObserver>;
52
- patch(build: (patch: WarpPatchBuilder) => void | Promise<void>): Promise<string>;
53
- materialize(): Promise<void>;
54
- materializeReceipts(): Promise<readonly WarpMaterializeReceipt[]>;
55
- }
@@ -1,102 +0,0 @@
1
- import { z } from "zod";
2
-
3
- const severitySchema = z.enum([ "info", "low", "moderate", "high", "critical" ]);
4
-
5
- const auditReportSchema = z.object({
6
- metadata: z.object({
7
- vulnerabilities: z.object({
8
- info: z.number().int().nonnegative(),
9
- low: z.number().int().nonnegative(),
10
- moderate: z.number().int().nonnegative(),
11
- high: z.number().int().nonnegative(),
12
- critical: z.number().int().nonnegative(),
13
- }),
14
- }),
15
- advisories: z.record(z.string(), z.object({
16
- id: z.number().int().nonnegative(),
17
- module_name: z.string(),
18
- severity: severitySchema,
19
- title: z.string(),
20
- recommendation: z.string(),
21
- github_advisory_id: z.string().nullable().optional(),
22
- findings: z.array(z.object({
23
- version: z.string(),
24
- paths: z.array(z.string()),
25
- })).optional(),
26
- })),
27
- });
28
-
29
- export interface SecurityGateViolation {
30
- readonly id: number;
31
- readonly moduleName: string;
32
- readonly severity: "high" | "critical";
33
- readonly title: string;
34
- readonly advisoryId: string | null;
35
- readonly recommendation: string;
36
- readonly paths: readonly string[];
37
- readonly versions: readonly string[];
38
- }
39
-
40
- export interface SecurityGateResult {
41
- readonly blocking: boolean;
42
- readonly counts: {
43
- readonly info: number;
44
- readonly low: number;
45
- readonly moderate: number;
46
- readonly high: number;
47
- readonly critical: number;
48
- };
49
- readonly blockingFindings: readonly SecurityGateViolation[];
50
- }
51
-
52
- export function evaluateSecurityGate(report: unknown): SecurityGateResult {
53
- const parsed = auditReportSchema.parse(report);
54
- const blockingFindings: SecurityGateViolation[] = [];
55
-
56
- for (const advisory of Object.values(parsed.advisories)) {
57
- if (advisory.severity !== "high" && advisory.severity !== "critical") {
58
- continue;
59
- }
60
- blockingFindings.push({
61
- id: advisory.id,
62
- moduleName: advisory.module_name,
63
- severity: advisory.severity,
64
- title: advisory.title,
65
- advisoryId: advisory.github_advisory_id ?? null,
66
- recommendation: advisory.recommendation,
67
- paths: advisory.findings?.flatMap((finding) => finding.paths) ?? [],
68
- versions: advisory.findings?.map((finding) => finding.version) ?? [],
69
- });
70
- }
71
-
72
- return {
73
- blocking: blockingFindings.length > 0,
74
- counts: parsed.metadata.vulnerabilities,
75
- blockingFindings,
76
- };
77
- }
78
-
79
- export function formatSecurityGateResult(result: SecurityGateResult): string {
80
- const lines = [
81
- `audit summary: critical=${String(result.counts.critical)} high=${String(result.counts.high)} moderate=${String(result.counts.moderate)} low=${String(result.counts.low)} info=${String(result.counts.info)}`,
82
- ];
83
-
84
- if (!result.blocking) {
85
- lines.push("release security gate: pass");
86
- return lines.join("\n");
87
- }
88
-
89
- lines.push("release security gate: fail");
90
- for (const finding of result.blockingFindings) {
91
- const advisoryId = finding.advisoryId ?? `npm:${String(finding.id)}`;
92
- const paths = finding.paths.length > 0 ? finding.paths.join(", ") : "unknown path";
93
- const versions = finding.versions.length > 0 ? finding.versions.join(", ") : "unknown version";
94
- lines.push(
95
- `- ${finding.severity.toUpperCase()} ${advisoryId} ${finding.moduleName}@${versions} via ${paths}`,
96
- );
97
- lines.push(` ${finding.title}`);
98
- lines.push(` ${finding.recommendation}`);
99
- }
100
-
101
- return lines.join("\n");
102
- }