@rryando/arcs 5.1.0 → 5.2.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 (219) hide show
  1. package/README.md +30 -17
  2. package/dist/cli/arcs-orchestrate.d.ts +1 -1
  3. package/dist/cli/arcs-orchestrate.d.ts.map +1 -1
  4. package/dist/cli/commands/bundle.js +39 -0
  5. package/dist/cli/commands/bundle.js.map +1 -1
  6. package/dist/cli/commands/proposal-doc.js +76 -58
  7. package/dist/cli/commands/proposal-doc.js.map +1 -1
  8. package/dist/cli/commands/web.js +2 -2
  9. package/dist/cli/commands/web.js.map +1 -1
  10. package/dist/cli/config.d.ts +37 -9
  11. package/dist/cli/config.d.ts.map +1 -1
  12. package/dist/cli/config.js +64 -5
  13. package/dist/cli/config.js.map +1 -1
  14. package/dist/cli/instructions.d.ts +3 -3
  15. package/dist/cli/instructions.d.ts.map +1 -1
  16. package/dist/cli/instructions.js +10 -2
  17. package/dist/cli/instructions.js.map +1 -1
  18. package/dist/cli/orchestrator-shared-blocks.d.ts +1 -1
  19. package/dist/cli/orchestrator-shared-blocks.d.ts.map +1 -1
  20. package/dist/cli/orchestrator-shared-blocks.js +1 -1
  21. package/dist/cli/setup.d.ts.map +1 -1
  22. package/dist/cli/setup.js +281 -47
  23. package/dist/cli/setup.js.map +1 -1
  24. package/dist/utils/json-schemas.d.ts +32 -9
  25. package/dist/utils/json-schemas.d.ts.map +1 -1
  26. package/dist/utils/json-schemas.js +8 -1
  27. package/dist/utils/json-schemas.js.map +1 -1
  28. package/dist/utils/project-resolver.d.ts.map +1 -1
  29. package/dist/utils/project-resolver.js +9 -2
  30. package/dist/utils/project-resolver.js.map +1 -1
  31. package/dist/utils/run-transcript.d.ts +138 -0
  32. package/dist/utils/run-transcript.d.ts.map +1 -0
  33. package/dist/utils/run-transcript.js +146 -0
  34. package/dist/utils/run-transcript.js.map +1 -0
  35. package/dist/utils/storage-utils.d.ts +1 -1
  36. package/dist/utils/storage-utils.d.ts.map +1 -1
  37. package/dist/utils/storage-utils.js +1 -1
  38. package/dist/utils/storage-utils.js.map +1 -1
  39. package/dist/web-client/assets/{GraphCanvas-BYZE4sO9.js → GraphCanvas-BgWF1rB_.js} +1 -1
  40. package/dist/web-client/assets/{MarkdownEditor-BKx6M1cw.js → MarkdownEditor-5buYPQ1d.js} +1 -1
  41. package/dist/web-client/assets/{abnfDiagram-VRR7QNED-D4kt0l2y.js → abnfDiagram-VRR7QNED-AjQ08-zY.js} +1 -1
  42. package/dist/web-client/assets/architecture-TIHT7OUA-a3lTAuFS.js +1 -0
  43. package/dist/web-client/assets/{architectureDiagram-ZJ3FMSHR-bu29SJFS.js → architectureDiagram-ZJ3FMSHR-CtW2pYEp.js} +1 -1
  44. package/dist/web-client/assets/{blockDiagram-677ZJIJ3-hsu7mXKw.js → blockDiagram-677ZJIJ3-DE6HRcpA.js} +1 -1
  45. package/dist/web-client/assets/{c4Diagram-LMCZKHZV-DMllRlT_.js → c4Diagram-LMCZKHZV-Rn6iQdUl.js} +1 -1
  46. package/dist/web-client/assets/channel-Rxk7gzWl.js +1 -0
  47. package/dist/web-client/assets/{chunk-32BRIVSS-BSzwj5eM.js → chunk-32BRIVSS-C4-ay_Qd.js} +1 -1
  48. package/dist/web-client/assets/{chunk-52WLFC77-RDdZn6yY.js → chunk-52WLFC77-Bib0DU0H.js} +1 -1
  49. package/dist/web-client/assets/{chunk-C7G6YPKG-DQr--txT.js → chunk-C7G6YPKG-BLphnESE.js} +1 -1
  50. package/dist/web-client/assets/{chunk-EX3LRPZG-Bb8nc4z4.js → chunk-EX3LRPZG-CzvkrPNM.js} +1 -1
  51. package/dist/web-client/assets/{chunk-FWX5IMBZ-QvBpOcOg.js → chunk-FWX5IMBZ-BFTR_OLz.js} +2 -2
  52. package/dist/web-client/assets/{chunk-HOUHSVGY-B0mX_yjc.js → chunk-HOUHSVGY-CZS3ExUR.js} +1 -1
  53. package/dist/web-client/assets/{chunk-ICXQ74PX-BmJSQqOH.js → chunk-ICXQ74PX-iWFpNZgv.js} +1 -1
  54. package/dist/web-client/assets/{chunk-MOJQB5TN-BrEI4GGn.js → chunk-MOJQB5TN-opEQCwVq.js} +1 -1
  55. package/dist/web-client/assets/{chunk-OGEWGWER-CrqDPOWP.js → chunk-OGEWGWER-NCfmjyhi.js} +1 -1
  56. package/dist/web-client/assets/{chunk-PUDLZKDR-DfPKldpG.js → chunk-PUDLZKDR-D3_A--Z2.js} +1 -1
  57. package/dist/web-client/assets/{chunk-Q4XR5HBZ-ekATI9aV.js → chunk-Q4XR5HBZ-D6s-qZLi.js} +1 -1
  58. package/dist/web-client/assets/{chunk-V7JOEXUC-C5APsP1t.js → chunk-V7JOEXUC-DTqLR-bZ.js} +1 -1
  59. package/dist/web-client/assets/{chunk-VAUOI2AC-BhfSWJZI.js → chunk-VAUOI2AC-Gsd0Itap.js} +1 -1
  60. package/dist/web-client/assets/{chunk-VR4S4FIN-BGa-44J7.js → chunk-VR4S4FIN-Cdo_MeDQ.js} +1 -1
  61. package/dist/web-client/assets/{chunk-WYO6CB5R-By1K0guW.js → chunk-WYO6CB5R-n7FhYrli.js} +1 -1
  62. package/dist/web-client/assets/{chunk-ZGVPDNZ5-Vnzpc76F.js → chunk-ZGVPDNZ5-DU1Jcue0.js} +1 -1
  63. package/dist/web-client/assets/classDiagram-OUVF2IWQ-BG5uYDvC.js +1 -0
  64. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-BG5uYDvC.js +1 -0
  65. package/dist/web-client/assets/{cynefin-VYW2F7L2-C6MOMOOz.js → cynefin-VYW2F7L2-D-gD9LCO.js} +1 -1
  66. package/dist/web-client/assets/{cynefinDiagram-TSTJHNR4-Cseyu79b.js → cynefinDiagram-TSTJHNR4-BFGkcrNl.js} +1 -1
  67. package/dist/web-client/assets/{dagre-VKFMJZFB-CQJlIuNh.js → dagre-VKFMJZFB-BUaC6fks.js} +1 -1
  68. package/dist/web-client/assets/{diagram-FQU43EPY-DpqDxhq4.js → diagram-FQU43EPY-Ckgu02XC.js} +1 -1
  69. package/dist/web-client/assets/{diagram-G47NLZAW-C11fYYaF.js → diagram-G47NLZAW-BickHhmE.js} +1 -1
  70. package/dist/web-client/assets/{diagram-NH7WQ7WH-BiG-uRAF.js → diagram-NH7WQ7WH-CoqgJpcU.js} +1 -1
  71. package/dist/web-client/assets/{diagram-OA4YK3LP-CIXWWjq-.js → diagram-OA4YK3LP-CTSZWqCe.js} +1 -1
  72. package/dist/web-client/assets/{diagram-WEI45ONY-C3OgIWu9.js → diagram-WEI45ONY-D7xd1naU.js} +1 -1
  73. package/dist/web-client/assets/{ebnfDiagram-CCIWWBDH-BHF_NA3_.js → ebnfDiagram-CCIWWBDH-FESKYpKQ.js} +1 -1
  74. package/dist/web-client/assets/{erDiagram-Q63AITRT-CUOJCrLy.js → erDiagram-Q63AITRT-C-879ftU.js} +1 -1
  75. package/dist/web-client/assets/eventmodeling-45OFAUF4-C3kRZCei.js +1 -0
  76. package/dist/web-client/assets/flowDiagram-23GEKE2U-QKWFycdH.js +1 -0
  77. package/dist/web-client/assets/{ganttDiagram-NO4QXBWP-D_4BMJ-g.js → ganttDiagram-NO4QXBWP-mIX5nPpv.js} +1 -1
  78. package/dist/web-client/assets/{gitGraph-TEB2WS4Q-CBuaZBId.js → gitGraph-TEB2WS4Q-DlEDJ1IK.js} +1 -1
  79. package/dist/web-client/assets/{gitGraphDiagram-IHSO6WYX-BbztsGuO.js → gitGraphDiagram-IHSO6WYX-D2fXD4AO.js} +1 -1
  80. package/dist/web-client/assets/index-BsYR-C8u.js +61 -0
  81. package/dist/web-client/assets/index-Cc5DCTOr.css +2 -0
  82. package/dist/web-client/assets/{info-DKCQHKI2-Bzi0Xjro.js → info-DKCQHKI2-jinbCROt.js} +1 -1
  83. package/dist/web-client/assets/{infoDiagram-FWYZ7A6U-BkeEKcr0.js → infoDiagram-FWYZ7A6U-CM-A4TL8.js} +1 -1
  84. package/dist/web-client/assets/{ishikawaDiagram-FXEZZL3T-CVusWu0p.js → ishikawaDiagram-FXEZZL3T-BdFpHwp4.js} +1 -1
  85. package/dist/web-client/assets/{journeyDiagram-5HDEW3XC-BUxu71zw.js → journeyDiagram-5HDEW3XC-BwDWz25z.js} +1 -1
  86. package/dist/web-client/assets/{kanban-definition-HUTT4EX6-BE8Hv4Kd.js → kanban-definition-HUTT4EX6-_2QXjSvx.js} +1 -1
  87. package/dist/web-client/assets/{line-CiAoINJS.js → line-HCziev87.js} +1 -1
  88. package/dist/web-client/assets/{mermaid-parser.core-BW47khiS.js → mermaid-parser.core-C4139mkz.js} +3 -3
  89. package/dist/web-client/assets/{mermaid.core-DP--Jl9R.js → mermaid.core-ocHwkZiF.js} +3 -3
  90. package/dist/web-client/assets/{mindmap-definition-LN4V7U3C-CvWJUqdq.js → mindmap-definition-LN4V7U3C-DHyCmflp.js} +1 -1
  91. package/dist/web-client/assets/{packet-7NZHBO7P-XtzX9SaQ.js → packet-7NZHBO7P-Bk0w_irl.js} +1 -1
  92. package/dist/web-client/assets/{pegDiagram-2B236MQR-XNo0K1ct.js → pegDiagram-2B236MQR-D_GrmL93.js} +1 -1
  93. package/dist/web-client/assets/{pie-RZYD4A2V-B1eUd9yt.js → pie-RZYD4A2V-B6VIAbyj.js} +1 -1
  94. package/dist/web-client/assets/{pieDiagram-ENE6RG2P-CRSb5z-4.js → pieDiagram-ENE6RG2P-CiR2Y8y2.js} +1 -1
  95. package/dist/web-client/assets/{quadrantDiagram-ABIIQ3AL-DziMaQxE.js → quadrantDiagram-ABIIQ3AL-CLlicKmV.js} +1 -1
  96. package/dist/web-client/assets/{radar-I7S5WNFK-BpRqZH2g.js → radar-I7S5WNFK-B53XVRSZ.js} +1 -1
  97. package/dist/web-client/assets/{railroad-3IZDKUUU-FDIHW04k.js → railroad-3IZDKUUU-Dn8TN2M-.js} +1 -1
  98. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-UrOKy6yx.js +1 -0
  99. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-Bx73sfMZ.js +1 -0
  100. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-C4QEje-y.js +1 -0
  101. package/dist/web-client/assets/{railroadDiagram-RFXS5EU6-Cs7EVBaz.js → railroadDiagram-RFXS5EU6-C6kZwOio.js} +1 -1
  102. package/dist/web-client/assets/{requirementDiagram-TGXJPOKE-B9_Lj1ga.js → requirementDiagram-TGXJPOKE-D2b1MeP8.js} +1 -1
  103. package/dist/web-client/assets/{sankeyDiagram-HTMAVEWB-DuTJTiy0.js → sankeyDiagram-HTMAVEWB-pS_Ufq1E.js} +1 -1
  104. package/dist/web-client/assets/{sequenceDiagram-DBY2YBRQ-vOCU5UoE.js → sequenceDiagram-DBY2YBRQ-BrsKXNzu.js} +1 -1
  105. package/dist/web-client/assets/{stateDiagram-2N3HPSRC-rxAnfzWn.js → stateDiagram-2N3HPSRC-BuQKu3i0.js} +1 -1
  106. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-BhqgaxDu.js +1 -0
  107. package/dist/web-client/assets/{swimlanes-5IMT3BWC-gdVZUnPe.js → swimlanes-5IMT3BWC-CzoImfTA.js} +1 -1
  108. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-CHOEI9hI.js +8 -0
  109. package/dist/web-client/assets/{timeline-definition-FHXFAJF6-Do68JyGy.js → timeline-definition-FHXFAJF6-DvezW7Fr.js} +1 -1
  110. package/dist/web-client/assets/{treeView-QDETBFTQ-CdZkmg80.js → treeView-QDETBFTQ-xu58R4kS.js} +1 -1
  111. package/dist/web-client/assets/{treemap-6X3UGDF4-ub54fmpW.js → treemap-6X3UGDF4-DMYBAOW1.js} +1 -1
  112. package/dist/web-client/assets/{vennDiagram-L72KCM5P-D-r8NBEp.js → vennDiagram-L72KCM5P-l1CbC7Ig.js} +1 -1
  113. package/dist/web-client/assets/{wardley-OPB4EBWU-CTleH1-J.js → wardley-OPB4EBWU-G3zmnnM0.js} +1 -1
  114. package/dist/web-client/assets/{wardleyDiagram-EHGQE667-BU8Kw39F.js → wardleyDiagram-EHGQE667-Dl2I79Vx.js} +1 -1
  115. package/dist/web-client/assets/{xychartDiagram-FW5EYKEG-CfNnag6i.js → xychartDiagram-FW5EYKEG-BWfge21N.js} +1 -1
  116. package/dist/web-client/index.html +2 -2
  117. package/dist/web-server/app.d.ts.map +1 -1
  118. package/dist/web-server/app.js +13 -7
  119. package/dist/web-server/app.js.map +1 -1
  120. package/dist/web-server/ask-prompt.d.ts +70 -0
  121. package/dist/web-server/ask-prompt.d.ts.map +1 -0
  122. package/dist/web-server/ask-prompt.js +238 -0
  123. package/dist/web-server/ask-prompt.js.map +1 -0
  124. package/dist/web-server/index.d.ts.map +1 -1
  125. package/dist/web-server/index.js +56 -3
  126. package/dist/web-server/index.js.map +1 -1
  127. package/dist/web-server/respond.d.ts.map +1 -1
  128. package/dist/web-server/respond.js +6 -1
  129. package/dist/web-server/respond.js.map +1 -1
  130. package/dist/web-server/routes/ask.d.ts +29 -0
  131. package/dist/web-server/routes/ask.d.ts.map +1 -0
  132. package/dist/web-server/routes/ask.js +698 -0
  133. package/dist/web-server/routes/ask.js.map +1 -0
  134. package/dist/web-server/routes/changes.d.ts +35 -0
  135. package/dist/web-server/routes/changes.d.ts.map +1 -0
  136. package/dist/web-server/routes/changes.js +93 -0
  137. package/dist/web-server/routes/changes.js.map +1 -0
  138. package/dist/web-server/routes/projects.d.ts.map +1 -1
  139. package/dist/web-server/routes/projects.js +10 -2
  140. package/dist/web-server/routes/projects.js.map +1 -1
  141. package/dist/web-server/routes/proposal-docs.d.ts +18 -0
  142. package/dist/web-server/routes/proposal-docs.d.ts.map +1 -0
  143. package/dist/web-server/routes/proposal-docs.js +208 -0
  144. package/dist/web-server/routes/proposal-docs.js.map +1 -0
  145. package/dist/web-server/routes/runners.d.ts +15 -0
  146. package/dist/web-server/routes/runners.d.ts.map +1 -0
  147. package/dist/web-server/routes/runners.js +66 -0
  148. package/dist/web-server/routes/runners.js.map +1 -0
  149. package/dist/web-server/routes/workspace.d.ts +2 -2
  150. package/dist/web-server/routes/workspace.js +4 -4
  151. package/dist/web-server/run-diff.d.ts +188 -0
  152. package/dist/web-server/run-diff.d.ts.map +1 -0
  153. package/dist/web-server/run-diff.js +739 -0
  154. package/dist/web-server/run-diff.js.map +1 -0
  155. package/dist/web-server/run-driver.d.ts +102 -2
  156. package/dist/web-server/run-driver.d.ts.map +1 -1
  157. package/dist/web-server/run-driver.js +495 -1
  158. package/dist/web-server/run-driver.js.map +1 -1
  159. package/dist/web-server/run-event-log.d.ts +13 -6
  160. package/dist/web-server/run-event-log.d.ts.map +1 -1
  161. package/dist/web-server/run-event-log.js +70 -25
  162. package/dist/web-server/run-event-log.js.map +1 -1
  163. package/dist/web-server/run-store.d.ts +201 -0
  164. package/dist/web-server/run-store.d.ts.map +1 -0
  165. package/dist/web-server/run-store.js +304 -0
  166. package/dist/web-server/run-store.js.map +1 -0
  167. package/dist/web-server/watcher.d.ts.map +1 -1
  168. package/dist/web-server/watcher.js +4 -0
  169. package/dist/web-server/watcher.js.map +1 -1
  170. package/opencode/arcs/manifest.json +8 -8
  171. package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +1 -1
  172. package/opencode/arcs/prompts/arcs-orchestrate.txt +1 -1
  173. package/opencode/arcs/skills/writing-proposals/SKILL.md +6 -3
  174. package/package.json +1 -1
  175. package/scripts/deploy-claudecode-bundle.mjs +2 -2
  176. package/scripts/deploy-opencode-bundle.mjs +1 -1
  177. package/scripts/deploy-pi-bundle.mjs +468 -0
  178. package/scripts/lint-bundle.mjs +1 -1
  179. package/dist/shared/session-vocabulary.d.ts +0 -88
  180. package/dist/shared/session-vocabulary.d.ts.map +0 -1
  181. package/dist/shared/session-vocabulary.js +0 -114
  182. package/dist/shared/session-vocabulary.js.map +0 -1
  183. package/dist/utils/claude-transcript.d.ts +0 -206
  184. package/dist/utils/claude-transcript.d.ts.map +0 -1
  185. package/dist/utils/claude-transcript.js +0 -384
  186. package/dist/utils/claude-transcript.js.map +0 -1
  187. package/dist/utils/session-store.d.ts +0 -313
  188. package/dist/utils/session-store.d.ts.map +0 -1
  189. package/dist/utils/session-store.js +0 -513
  190. package/dist/utils/session-store.js.map +0 -1
  191. package/dist/web-client/assets/architecture-TIHT7OUA-CIdGE6VO.js +0 -1
  192. package/dist/web-client/assets/channel-CBg-s-ZD.js +0 -1
  193. package/dist/web-client/assets/classDiagram-OUVF2IWQ-ciwDjhUR.js +0 -1
  194. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-ciwDjhUR.js +0 -1
  195. package/dist/web-client/assets/eventmodeling-45OFAUF4-DxfboL1J.js +0 -1
  196. package/dist/web-client/assets/flowDiagram-23GEKE2U-C3NzpTtI.js +0 -1
  197. package/dist/web-client/assets/index-B1KVIr80.css +0 -2
  198. package/dist/web-client/assets/index-BWd2fBNL.js +0 -60
  199. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-BKj6JAhH.js +0 -1
  200. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-ChDM1OBv.js +0 -1
  201. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-DvwA2e0i.js +0 -1
  202. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-B3EvQPEe.js +0 -1
  203. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-WcOXuCPg.js +0 -8
  204. package/dist/web-server/permission-policy.d.ts +0 -46
  205. package/dist/web-server/permission-policy.d.ts.map +0 -1
  206. package/dist/web-server/permission-policy.js +0 -96
  207. package/dist/web-server/permission-policy.js.map +0 -1
  208. package/dist/web-server/prompt-assembly.d.ts +0 -454
  209. package/dist/web-server/prompt-assembly.d.ts.map +0 -1
  210. package/dist/web-server/prompt-assembly.js +0 -1121
  211. package/dist/web-server/prompt-assembly.js.map +0 -1
  212. package/dist/web-server/routes/sessions.d.ts +0 -19
  213. package/dist/web-server/routes/sessions.d.ts.map +0 -1
  214. package/dist/web-server/routes/sessions.js +0 -1296
  215. package/dist/web-server/routes/sessions.js.map +0 -1
  216. package/dist/web-server/session-reconciler.d.ts +0 -162
  217. package/dist/web-server/session-reconciler.d.ts.map +0 -1
  218. package/dist/web-server/session-reconciler.js +0 -363
  219. package/dist/web-server/session-reconciler.js.map +0 -1
@@ -4,8 +4,8 @@
4
4
  * Two GETs and nothing else: `tree` lists a directory under the project's
5
5
  * registered workspace roots, `file` returns one file's text plus the head
6
6
  * revision it was read at, so the browser can build the `file` variant of
7
- * `sessionReferenceSchema` (path + line range + headRev) and hand it to a
8
- * session. There is deliberately NO write route here: an edit is something the
7
+ * the ask reference schema (path + line range + headRev) and hand it to a
8
+ * turn. There is deliberately NO write route here: an edit is something the
9
9
  * agent does in the workspace, never something this plane does on its behalf.
10
10
  *
11
11
  * Every path the caller supplies goes through `resolveInsideWorkspace` — the
@@ -69,8 +69,8 @@ function toPosix(path) {
69
69
  /**
70
70
  * The project's workspace roots, resolved and deduplicated.
71
71
  *
72
- * Read from `meta.workspacePaths` exactly as `primaryWorkspacePath` in
73
- * routes/sessions.ts reads it, including its rule: an unset workspace is an
72
+ * Read from `meta.workspacePaths` exactly as the ask route's
73
+ * `primaryWorkspacePath` reads it, including its rule: an unset workspace is an
74
74
  * ERROR, never a default. `resolveProject().workspacePath` returns `""` rather
75
75
  * than `process.cwd()` for the same reason — an empty root here would otherwise
76
76
  * quietly mean "contain everything", i.e. the whole filesystem.
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Workspace diff snapshot + approve/revert review surface for Ask-AI runs.
3
+ *
4
+ * The allow-all gate: a run may change the workspace, the panel shows the
5
+ * diff, and the user approves (keeps) or rejects (reverts). Three layers:
6
+ *
7
+ * - SNAPSHOT — captured in the ask route's spawn path, before the claim is
8
+ * taken and before the child can write. This is the baseline every later
9
+ * diff and revert computes against.
10
+ * - DIFF — computed in the settle write-back, comparing the workspace to the
11
+ * snapshot, and persisted as `changes.json` beside the run's event log.
12
+ * - REVERT — restores the workspace to the snapshot baseline, scoped to this
13
+ * run's own changes list, and marks the run record so a second revert is
14
+ * refused.
15
+ *
16
+ * Two workspace modes:
17
+ *
18
+ * - GIT — the snapshot records `{ mode, head, cwd, untracked[] }` and
19
+ * NOTHING else. Diffs and reverts compute against git at review time
20
+ * (`git diff HEAD`, `git restore`), because git already holds the exact
21
+ * baseline — copying file contents would be redundant with the object DB.
22
+ * `untracked` lists the paths that were already untracked at snapshot time:
23
+ * the run is never credited with (and revert never deletes) a file that
24
+ * merely remained untracked across the run. State the degradation plainly:
25
+ * an untracked file that EXISTED before the run and was then edited by it
26
+ * is invisible to this surface — git has no baseline for it, by design.
27
+ * - TREE (non-git) — the snapshot walks the tree and records a hash+size
28
+ * manifest. A pure manifest can answer modified/added/deleted but cannot
29
+ * render a modified file's old bytes, so the snapshot ALSO stores each
30
+ * file's bytes up to a total blob cap (RUN_SNAPSHOT_BLOB_MAX_BYTES). A
31
+ * file whose baseline bytes were refused by the cap reports `diff: null`
32
+ * with `capped: true` and cannot be reverted.
33
+ *
34
+ * Every failure here DEGRADES the review surface rather than failing the turn
35
+ * or the settle: an unreadable workspace, a wedged git, a refused blob — all
36
+ * record on the snapshot/change file and the client sees an empty changes
37
+ * list. The turn itself already happened.
38
+ *
39
+ * File keying follows run-event-log.ts exactly: `sessions/{slug}.run-{seg}`
40
+ * plus a `.snapshot.json` / `.changes.json` suffix, pruned together by
41
+ * `pruneRunEventLogs` under the same retention.
42
+ */
43
+ /** Ceiling on files a non-git snapshot walk records. Past it the walk stops
44
+ * (sorted order) and the rest of the tree is NOT in the manifest — a
45
+ * documented truncation: files that sort after the cap compare as phantom
46
+ * adds/deletes. */
47
+ export declare const RUN_SNAPSHOT_MAX_FILES = 10000;
48
+ /** Ceiling on levels below the workspace root a walk descends. */
49
+ export declare const RUN_SNAPSHOT_MAX_DEPTH = 12;
50
+ /** Ceiling on total baseline bytes a snapshot may keep for later diffs. A
51
+ * modified/deleted file whose bytes were refused CANNOT render a diff or be
52
+ * reverted — it reports `capped: true` instead. */
53
+ export declare const RUN_SNAPSHOT_BLOB_MAX_BYTES: number;
54
+ /** Ceiling on one change's diff text — the first N lines AND the first N
55
+ * bytes, whichever lands first. Line counts are always parsed from the FULL
56
+ * diff before the cap is applied. */
57
+ export declare const RUN_DIFF_MAX_LINES = 300;
58
+ export declare const RUN_DIFF_MAX_BYTES: number;
59
+ /** Ceiling on one spawnSync git call. A wedged git (stalled mount, held
60
+ * index.lock) must degrade the surface, never hang the request. */
61
+ export declare const RUN_GIT_TIMEOUT_MS = 5000;
62
+ export interface WorkspaceSnapshotFile {
63
+ /** Bytes at snapshot time. */
64
+ size: number;
65
+ /** Hex sha256 of the file's bytes at snapshot time. */
66
+ sha256: string;
67
+ }
68
+ /** Git-mode snapshot: diffs and reverts compute AGAINST GIT at review time —
69
+ * no file bytes are copied, which is the point: an exact diff needs git's
70
+ * whole object database, not our copy of HEAD. */
71
+ export interface GitWorkspaceSnapshot {
72
+ mode: "git";
73
+ /** HEAD sha at snapshot time — what the run saw as "current". */
74
+ head: string;
75
+ /** Realpath'd workspace root the snapshot covers — what the run ran in. */
76
+ cwd: string;
77
+ /**
78
+ * Untracked paths at snapshot time. The settle-time diff never credits the
79
+ * run with a file that was ALREADY untracked (git has no baseline for it),
80
+ * and revert never deletes one. This list IS the git mode's "snapshot path
81
+ * list" that revert scopes itself to.
82
+ */
83
+ untracked: string[];
84
+ /** Non-fatal capture failure — the review surface is skipped for the run
85
+ * (GET changes answers an empty list) rather than failing the turn. */
86
+ error?: string;
87
+ }
88
+ /** Tree-mode snapshot (non-git): a manifest walk plus baseline bytes. */
89
+ export interface TreeWorkspaceSnapshot {
90
+ mode: "tree";
91
+ cwd: string;
92
+ /** Relative posix path → size + sha256, for every walked file. */
93
+ files: Record<string, WorkspaceSnapshotFile>;
94
+ /**
95
+ * Baseline bytes (base64) up to RUN_SNAPSHOT_BLOB_MAX_BYTES total, in
96
+ * sorted walk order — the only way a non-git modified/deleted file can
97
+ * render a diff or be reverted.
98
+ */
99
+ blobs: Record<string, string>;
100
+ /** The walk's caps, so the settle-time diff re-walks identically. */
101
+ walk: {
102
+ maxFiles: number;
103
+ maxDepth: number;
104
+ };
105
+ /** True when the walk hit the file cap — later files were not walked, so
106
+ * they compare as phantom adds/removes. Documented degradation. */
107
+ truncated?: boolean;
108
+ /** True when at least one file was refused baseline bytes past the blob cap. */
109
+ blobCapped?: boolean;
110
+ /** Non-fatal capture failure — same degradation as the git-mode `error`. */
111
+ error?: string;
112
+ }
113
+ export type WorkspaceSnapshot = GitWorkspaceSnapshot | TreeWorkspaceSnapshot;
114
+ export type WorkspaceChangeStatus = "modified" | "added" | "deleted";
115
+ export interface WorkspaceChange {
116
+ /** Posix path relative to the workspace root. */
117
+ path: string;
118
+ status: WorkspaceChangeStatus;
119
+ /** `+` lines in the FULL diff (before capping). */
120
+ linesAdded: number;
121
+ /** `-` lines in the FULL diff (before capping). */
122
+ linesRemoved: number;
123
+ /** Capped diff text (RUN_DIFF_MAX_LINES × RUN_DIFF_MAX_BYTES), or `null`
124
+ * when the bytes to render it were never captured (blob cap) or a git
125
+ * call failed. */
126
+ diff: string | null;
127
+ /** True when `diff` is null because the file's baseline bytes were beyond
128
+ * the snapshot's blob cap — the non-git degradation flag. Revert cannot
129
+ * rebuild such a file either. */
130
+ capped?: boolean;
131
+ }
132
+ /** The persisted `changes.json` manifest beside a run's event log. */
133
+ export interface RunChangesFile {
134
+ runId: string;
135
+ /** Epoch ms the settle-time diff was computed. */
136
+ computedAt: number;
137
+ changes: WorkspaceChange[];
138
+ /** Non-fatal diff failure — the client sees changes: []. */
139
+ error?: string;
140
+ }
141
+ export interface SnapshotOptions {
142
+ maxFiles?: number;
143
+ maxDepth?: number;
144
+ blobMaxBytes?: number;
145
+ }
146
+ /**
147
+ * Total by contract: NEVER throws. Every failure mode records `error` on the
148
+ * snapshot, and an errored snapshot skips the review surface for its run
149
+ * (changes: [], revert no-ops) — a baseline that cannot be computed must not
150
+ * fail the accepted turn.
151
+ */
152
+ export declare function captureWorkspaceSnapshot(root: string, options?: SnapshotOptions): Promise<WorkspaceSnapshot>;
153
+ /** The run's baseline snapshot path — a sibling of its event log. */
154
+ export declare function runSnapshotPath(projectDir: string, sessionId: string, runId: string): string;
155
+ /** The run's settle-time changes manifest path — a sibling of its event log. */
156
+ export declare function runChangesPath(projectDir: string, sessionId: string, runId: string): string;
157
+ /** Persists the baseline snapshot. Callers wrap this — a failed persist is a
158
+ * degraded review surface, never a failed turn. */
159
+ export declare function persistRunSnapshot(projectDir: string, sessionId: string, runId: string, snapshot: WorkspaceSnapshot): Promise<void>;
160
+ export declare function readRunSnapshot(projectDir: string, sessionId: string, runId: string): Promise<WorkspaceSnapshot | undefined>;
161
+ export declare function readRunChanges(projectDir: string, sessionId: string, runId: string): Promise<RunChangesFile | undefined>;
162
+ /**
163
+ * What the workspace changed since the snapshot.
164
+ *
165
+ * Total by contract (never throws): the git-status failure path returns an
166
+ * empty list — a workspace whose git broke mid-run degrades to "no changes"
167
+ * rather than failing the settle. Every path it returns is root-relative, so
168
+ * downstream reads, diffs and reverts all go through `resolveInside`.
169
+ */
170
+ export declare function computeWorkspaceChanges(snapshot: WorkspaceSnapshot): Promise<WorkspaceChange[]>;
171
+ /**
172
+ * Computes the run's workspace diff and persists it as changes.json beside
173
+ * the run's event log. Never throws: a missing/errored snapshot leaves the
174
+ * changes file absent (GET answers `changes: []`), and a diff failure writes
175
+ * `{ changes: [], error }` so the run still reads as "no changes".
176
+ */
177
+ export declare function writeSettledRunChanges(projectDir: string, sessionId: string, runId: string): Promise<void>;
178
+ /**
179
+ * Restores the workspace to the snapshot baseline for THIS run's changes.
180
+ *
181
+ * Scoped strictly: every path goes through `resolveInside` against the
182
+ * snapshot root, and the paths acted on are exactly those in `changes` (never
183
+ * a bare `git clean`, never a walk). Returns the paths actually restored;
184
+ * un-restorable entries (a modified/deleted file whose baseline bytes were
185
+ * beyond the blob cap) are skipped and NOT reported as restored.
186
+ */
187
+ export declare function revertWorkspaceChanges(snapshot: WorkspaceSnapshot, changes: WorkspaceChange[]): Promise<string[]>;
188
+ //# sourceMappingURL=run-diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-diff.d.ts","sourceRoot":"","sources":["../../src/web-server/run-diff.ts"],"names":[],"mappings":"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"}