@rryando/arcs 3.11.0 → 4.1.0

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 (200) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/commands/hooks.d.ts +46 -6
  3. package/dist/cli/commands/hooks.d.ts.map +1 -1
  4. package/dist/cli/commands/hooks.js +190 -52
  5. package/dist/cli/commands/hooks.js.map +1 -1
  6. package/dist/cli/commands/web.js +14 -4
  7. package/dist/cli/commands/web.js.map +1 -1
  8. package/dist/cli/config.d.ts +14 -3
  9. package/dist/cli/config.d.ts.map +1 -1
  10. package/dist/cli/config.js +39 -38
  11. package/dist/cli/config.js.map +1 -1
  12. package/dist/cli/instructions.d.ts +13 -1
  13. package/dist/cli/instructions.d.ts.map +1 -1
  14. package/dist/cli/instructions.js +38 -3
  15. package/dist/cli/instructions.js.map +1 -1
  16. package/dist/cli/setup.d.ts.map +1 -1
  17. package/dist/cli/setup.js +76 -11
  18. package/dist/cli/setup.js.map +1 -1
  19. package/dist/shared/session-vocabulary.d.ts +88 -0
  20. package/dist/shared/session-vocabulary.d.ts.map +1 -0
  21. package/dist/shared/session-vocabulary.js +114 -0
  22. package/dist/shared/session-vocabulary.js.map +1 -0
  23. package/dist/utils/claude-code-hook-install.d.ts +1 -1
  24. package/dist/utils/claude-code-hook-install.d.ts.map +1 -1
  25. package/dist/utils/claude-code-hook-install.js +71 -5
  26. package/dist/utils/claude-code-hook-install.js.map +1 -1
  27. package/dist/utils/claude-transcript.d.ts +81 -2
  28. package/dist/utils/claude-transcript.d.ts.map +1 -1
  29. package/dist/utils/claude-transcript.js +33 -2
  30. package/dist/utils/claude-transcript.js.map +1 -1
  31. package/dist/utils/git.d.ts +21 -0
  32. package/dist/utils/git.d.ts.map +1 -1
  33. package/dist/utils/git.js +65 -1
  34. package/dist/utils/git.js.map +1 -1
  35. package/dist/utils/hook-contract.d.ts +36 -0
  36. package/dist/utils/hook-contract.d.ts.map +1 -0
  37. package/dist/utils/hook-contract.js +35 -0
  38. package/dist/utils/hook-contract.js.map +1 -0
  39. package/dist/utils/hook-token-store.d.ts +44 -3
  40. package/dist/utils/hook-token-store.d.ts.map +1 -1
  41. package/dist/utils/hook-token-store.js +51 -6
  42. package/dist/utils/hook-token-store.js.map +1 -1
  43. package/dist/utils/session-store.d.ts +207 -29
  44. package/dist/utils/session-store.d.ts.map +1 -1
  45. package/dist/utils/session-store.js +236 -44
  46. package/dist/utils/session-store.js.map +1 -1
  47. package/dist/utils/storage-utils.d.ts +1 -1
  48. package/dist/utils/storage-utils.d.ts.map +1 -1
  49. package/dist/utils/storage-utils.js +1 -1
  50. package/dist/utils/storage-utils.js.map +1 -1
  51. package/dist/web-client/assets/{GraphCanvas-dNyZ458L.js → GraphCanvas-BPDgvsyT.js} +1 -1
  52. package/dist/web-client/assets/{MarkdownEditor-BmU9mdkN.js → MarkdownEditor-D7TLp78z.js} +1 -1
  53. package/dist/web-client/assets/{abnfDiagram-VRR7QNED-D1BFBoeF.js → abnfDiagram-VRR7QNED-CyuP2N9t.js} +1 -1
  54. package/dist/web-client/assets/architecture-TIHT7OUA-Bdo2Yvm9.js +1 -0
  55. package/dist/web-client/assets/{architectureDiagram-ZJ3FMSHR-CA8hTWUK.js → architectureDiagram-ZJ3FMSHR-DZ0ul9QX.js} +1 -1
  56. package/dist/web-client/assets/{blockDiagram-677ZJIJ3-CQpb_KwX.js → blockDiagram-677ZJIJ3-LLGzlc9l.js} +1 -1
  57. package/dist/web-client/assets/{c4Diagram-LMCZKHZV-BhpHX84V.js → c4Diagram-LMCZKHZV-CViu3CTc.js} +1 -1
  58. package/dist/web-client/assets/channel-DBNmizpo.js +1 -0
  59. package/dist/web-client/assets/{chunk-32BRIVSS-BUusQQa_.js → chunk-32BRIVSS-Bw_IuJCM.js} +1 -1
  60. package/dist/web-client/assets/{chunk-52WLFC77-nNYwlftl.js → chunk-52WLFC77-C29h440W.js} +1 -1
  61. package/dist/web-client/assets/{chunk-C7G6YPKG-D0a-yqnK.js → chunk-C7G6YPKG-hhOrvw5w.js} +1 -1
  62. package/dist/web-client/assets/{chunk-EX3LRPZG-IDuRMN-4.js → chunk-EX3LRPZG-COMzol-M.js} +1 -1
  63. package/dist/web-client/assets/{chunk-FWX5IMBZ-D_spTcqi.js → chunk-FWX5IMBZ-6vdX9EUn.js} +2 -2
  64. package/dist/web-client/assets/{chunk-HOUHSVGY-C-bcxwZS.js → chunk-HOUHSVGY-DWDW6sxp.js} +1 -1
  65. package/dist/web-client/assets/{chunk-ICXQ74PX-CjmK2bAM.js → chunk-ICXQ74PX-BdMYglo2.js} +1 -1
  66. package/dist/web-client/assets/{chunk-MOJQB5TN-Bkc08KWY.js → chunk-MOJQB5TN-C0LAX_dC.js} +1 -1
  67. package/dist/web-client/assets/{chunk-OGEWGWER-BAAYYvG9.js → chunk-OGEWGWER-CBx8MB7f.js} +1 -1
  68. package/dist/web-client/assets/{chunk-PUDLZKDR-WXbPY7NM.js → chunk-PUDLZKDR-DKssR1nf.js} +1 -1
  69. package/dist/web-client/assets/{chunk-Q4XR5HBZ-DcbnjxQE.js → chunk-Q4XR5HBZ-B3kcxFE-.js} +1 -1
  70. package/dist/web-client/assets/{chunk-V7JOEXUC-C6t75PAp.js → chunk-V7JOEXUC-CAlymndy.js} +1 -1
  71. package/dist/web-client/assets/{chunk-VAUOI2AC-DVrJ0Ic7.js → chunk-VAUOI2AC-BowfsmTW.js} +1 -1
  72. package/dist/web-client/assets/{chunk-VR4S4FIN-MOOFvGS0.js → chunk-VR4S4FIN-BBOydgvt.js} +1 -1
  73. package/dist/web-client/assets/{chunk-WYO6CB5R-sK7Y2NZD.js → chunk-WYO6CB5R-DcymFbES.js} +1 -1
  74. package/dist/web-client/assets/{chunk-ZGVPDNZ5-a13RQsku.js → chunk-ZGVPDNZ5--uKFP-Lr.js} +1 -1
  75. package/dist/web-client/assets/classDiagram-OUVF2IWQ-CB3HiA1_.js +1 -0
  76. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-CB3HiA1_.js +1 -0
  77. package/dist/web-client/assets/{cynefin-VYW2F7L2-D8xaH-wO.js → cynefin-VYW2F7L2-CjboUOMA.js} +1 -1
  78. package/dist/web-client/assets/{cynefinDiagram-TSTJHNR4-Bt__EqJW.js → cynefinDiagram-TSTJHNR4-BcxygBP7.js} +1 -1
  79. package/dist/web-client/assets/{dagre-VKFMJZFB-Bwgjwflz.js → dagre-VKFMJZFB-D-tiERQE.js} +1 -1
  80. package/dist/web-client/assets/{diagram-FQU43EPY-CaPDVUq2.js → diagram-FQU43EPY-ChPXczaS.js} +1 -1
  81. package/dist/web-client/assets/{diagram-G47NLZAW-BQLB9YYA.js → diagram-G47NLZAW-CVL3Y91h.js} +1 -1
  82. package/dist/web-client/assets/{diagram-NH7WQ7WH-BWo84w8Y.js → diagram-NH7WQ7WH-DsaNA9Lh.js} +1 -1
  83. package/dist/web-client/assets/{diagram-OA4YK3LP-bKn6Pz5s.js → diagram-OA4YK3LP-CXhrhdhU.js} +1 -1
  84. package/dist/web-client/assets/{diagram-WEI45ONY-BRqV5Oy6.js → diagram-WEI45ONY-BTVPnk4E.js} +1 -1
  85. package/dist/web-client/assets/{ebnfDiagram-CCIWWBDH-DhUXL1-7.js → ebnfDiagram-CCIWWBDH-BAyrRBtM.js} +1 -1
  86. package/dist/web-client/assets/{erDiagram-Q63AITRT-HXAQQ-_F.js → erDiagram-Q63AITRT-Qm24Wepm.js} +1 -1
  87. package/dist/web-client/assets/eventmodeling-45OFAUF4-DoTBIvl5.js +1 -0
  88. package/dist/web-client/assets/flowDiagram-23GEKE2U-BEH23L1A.js +1 -0
  89. package/dist/web-client/assets/{ganttDiagram-NO4QXBWP-D-Ddf_Ii.js → ganttDiagram-NO4QXBWP-D8h7l3XJ.js} +1 -1
  90. package/dist/web-client/assets/{gitGraph-TEB2WS4Q-BmHzs0uF.js → gitGraph-TEB2WS4Q-DIBml1SB.js} +1 -1
  91. package/dist/web-client/assets/{gitGraphDiagram-IHSO6WYX-YnQWrlh_.js → gitGraphDiagram-IHSO6WYX-CtkYoXjn.js} +1 -1
  92. package/dist/web-client/assets/{index-DCWxuIeQ.js → index-DOSH4Q9H.js} +38 -36
  93. package/dist/web-client/assets/index-wSzUPvml.css +2 -0
  94. package/dist/web-client/assets/{info-DKCQHKI2-DCT_B7RN.js → info-DKCQHKI2-DLEUtV5Q.js} +1 -1
  95. package/dist/web-client/assets/{infoDiagram-FWYZ7A6U-D-le1Zhq.js → infoDiagram-FWYZ7A6U-BJQ7aQux.js} +1 -1
  96. package/dist/web-client/assets/{ishikawaDiagram-FXEZZL3T-Jr1x2VJB.js → ishikawaDiagram-FXEZZL3T-BPM11FvG.js} +1 -1
  97. package/dist/web-client/assets/{journeyDiagram-5HDEW3XC-BF9ELxj-.js → journeyDiagram-5HDEW3XC-C0aX2z3c.js} +1 -1
  98. package/dist/web-client/assets/{kanban-definition-HUTT4EX6-C4fJqAxu.js → kanban-definition-HUTT4EX6-C56F29Ib.js} +1 -1
  99. package/dist/web-client/assets/{line-7N7ikFxa.js → line-BLFHLF2N.js} +1 -1
  100. package/dist/web-client/assets/{mermaid-parser.core-QbC1icPt.js → mermaid-parser.core-BLC8FhgU.js} +3 -3
  101. package/dist/web-client/assets/{mermaid.core-C26d_UJm.js → mermaid.core-BBqkKuXt.js} +3 -3
  102. package/dist/web-client/assets/{mindmap-definition-LN4V7U3C-D6TV1JDf.js → mindmap-definition-LN4V7U3C-aVZbsoPc.js} +1 -1
  103. package/dist/web-client/assets/{packet-7NZHBO7P-CR1vrGj3.js → packet-7NZHBO7P-D4aqSQfB.js} +1 -1
  104. package/dist/web-client/assets/{pegDiagram-2B236MQR-xOMBBtfV.js → pegDiagram-2B236MQR-DjfyNI0U.js} +1 -1
  105. package/dist/web-client/assets/{pie-RZYD4A2V-BbWuhjwy.js → pie-RZYD4A2V-ChCwYsYj.js} +1 -1
  106. package/dist/web-client/assets/{pieDiagram-ENE6RG2P-MsfnsqgW.js → pieDiagram-ENE6RG2P-BeHLKkXC.js} +1 -1
  107. package/dist/web-client/assets/{quadrantDiagram-ABIIQ3AL-BoI7zKXF.js → quadrantDiagram-ABIIQ3AL-stga3gvq.js} +1 -1
  108. package/dist/web-client/assets/{radar-I7S5WNFK-CbYXKToJ.js → radar-I7S5WNFK-DOGheiwT.js} +1 -1
  109. package/dist/web-client/assets/{railroad-3IZDKUUU-6LxHDkLe.js → railroad-3IZDKUUU-_JnU7M6L.js} +1 -1
  110. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-nhNub7LE.js +1 -0
  111. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-BlQYe7Yf.js +1 -0
  112. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-B3E8pRVN.js +1 -0
  113. package/dist/web-client/assets/{railroadDiagram-RFXS5EU6-D6RUoUki.js → railroadDiagram-RFXS5EU6-C0CkMsOd.js} +1 -1
  114. package/dist/web-client/assets/{requirementDiagram-TGXJPOKE-B6k4BDpE.js → requirementDiagram-TGXJPOKE-DuImwoRD.js} +1 -1
  115. package/dist/web-client/assets/{sankeyDiagram-HTMAVEWB-BUDF-UFr.js → sankeyDiagram-HTMAVEWB-kprq0XF9.js} +1 -1
  116. package/dist/web-client/assets/{sequenceDiagram-DBY2YBRQ-D6GqcsUi.js → sequenceDiagram-DBY2YBRQ-DiXKJMF6.js} +1 -1
  117. package/dist/web-client/assets/{stateDiagram-2N3HPSRC-WfJCQAK5.js → stateDiagram-2N3HPSRC-D5qbVStE.js} +1 -1
  118. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-DWwTAG1r.js +1 -0
  119. package/dist/web-client/assets/{swimlanes-5IMT3BWC-BtMo82mC.js → swimlanes-5IMT3BWC-DCbw389c.js} +1 -1
  120. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-DabrCsjZ.js +8 -0
  121. package/dist/web-client/assets/{timeline-definition-FHXFAJF6-CoAmv2Sn.js → timeline-definition-FHXFAJF6-CQeaYN_9.js} +1 -1
  122. package/dist/web-client/assets/{treeView-QDETBFTQ-BWsKzE1s.js → treeView-QDETBFTQ-Cf7Sq3qo.js} +1 -1
  123. package/dist/web-client/assets/{treemap-6X3UGDF4-i_qGtB3o.js → treemap-6X3UGDF4-BovzvoTU.js} +1 -1
  124. package/dist/web-client/assets/{vennDiagram-L72KCM5P-DYkiLe-P.js → vennDiagram-L72KCM5P-CZsJy139.js} +1 -1
  125. package/dist/web-client/assets/{wardley-OPB4EBWU-Daaqr1Vp.js → wardley-OPB4EBWU-DJ7MS6XZ.js} +1 -1
  126. package/dist/web-client/assets/{wardleyDiagram-EHGQE667-Bofbsg3J.js → wardleyDiagram-EHGQE667-rqhcmsbM.js} +1 -1
  127. package/dist/web-client/assets/{xychartDiagram-FW5EYKEG-KNF4VTfL.js → xychartDiagram-FW5EYKEG-HuK4Seps.js} +1 -1
  128. package/dist/web-client/index.html +2 -2
  129. package/dist/web-server/app.d.ts +4 -1
  130. package/dist/web-server/app.d.ts.map +1 -1
  131. package/dist/web-server/app.js +19 -3
  132. package/dist/web-server/app.js.map +1 -1
  133. package/dist/web-server/claude-runner.d.ts +109 -7
  134. package/dist/web-server/claude-runner.d.ts.map +1 -1
  135. package/dist/web-server/claude-runner.js +329 -50
  136. package/dist/web-server/claude-runner.js.map +1 -1
  137. package/dist/web-server/index.d.ts +2 -2
  138. package/dist/web-server/index.d.ts.map +1 -1
  139. package/dist/web-server/index.js +3 -2
  140. package/dist/web-server/index.js.map +1 -1
  141. package/dist/web-server/permission-policy.d.ts +46 -0
  142. package/dist/web-server/permission-policy.d.ts.map +1 -0
  143. package/dist/web-server/permission-policy.js +96 -0
  144. package/dist/web-server/permission-policy.js.map +1 -0
  145. package/dist/web-server/prompt-assembly.d.ts +454 -0
  146. package/dist/web-server/prompt-assembly.d.ts.map +1 -0
  147. package/dist/web-server/prompt-assembly.js +1122 -0
  148. package/dist/web-server/prompt-assembly.js.map +1 -0
  149. package/dist/web-server/routes/hook-events.d.ts +28 -4
  150. package/dist/web-server/routes/hook-events.d.ts.map +1 -1
  151. package/dist/web-server/routes/hook-events.js +218 -37
  152. package/dist/web-server/routes/hook-events.js.map +1 -1
  153. package/dist/web-server/routes/sessions.d.ts +8 -8
  154. package/dist/web-server/routes/sessions.d.ts.map +1 -1
  155. package/dist/web-server/routes/sessions.js +1007 -261
  156. package/dist/web-server/routes/sessions.js.map +1 -1
  157. package/dist/web-server/routes/workspace.d.ts +27 -0
  158. package/dist/web-server/routes/workspace.d.ts.map +1 -0
  159. package/dist/web-server/routes/workspace.js +280 -0
  160. package/dist/web-server/routes/workspace.js.map +1 -0
  161. package/dist/web-server/run-event-log.d.ts +167 -0
  162. package/dist/web-server/run-event-log.d.ts.map +1 -0
  163. package/dist/web-server/run-event-log.js +468 -0
  164. package/dist/web-server/run-event-log.js.map +1 -0
  165. package/dist/web-server/session-reconciler.d.ts +162 -0
  166. package/dist/web-server/session-reconciler.d.ts.map +1 -0
  167. package/dist/web-server/session-reconciler.js +363 -0
  168. package/dist/web-server/session-reconciler.js.map +1 -0
  169. package/dist/web-server/static.d.ts +7 -0
  170. package/dist/web-server/static.d.ts.map +1 -1
  171. package/dist/web-server/static.js +46 -3
  172. package/dist/web-server/static.js.map +1 -1
  173. package/dist/web-server/web-auth.d.ts +17 -0
  174. package/dist/web-server/web-auth.d.ts.map +1 -0
  175. package/dist/web-server/web-auth.js +33 -0
  176. package/dist/web-server/web-auth.js.map +1 -0
  177. package/dist/web-server/web-token.d.ts +39 -0
  178. package/dist/web-server/web-token.d.ts.map +1 -0
  179. package/dist/web-server/web-token.js +71 -0
  180. package/dist/web-server/web-token.js.map +1 -0
  181. package/opencode/arcs/manifest.json +8 -8
  182. package/package.json +1 -1
  183. package/scripts/claude-code-session-hook.mjs +37 -16
  184. package/scripts/deploy-claudecode-bundle.mjs +24 -3
  185. package/dist/web-client/assets/architecture-TIHT7OUA-CJqI5wNI.js +0 -1
  186. package/dist/web-client/assets/channel-C8DlmyVe.js +0 -1
  187. package/dist/web-client/assets/classDiagram-OUVF2IWQ-p32N1P_G.js +0 -1
  188. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-p32N1P_G.js +0 -1
  189. package/dist/web-client/assets/eventmodeling-45OFAUF4-Bj5P8mZJ.js +0 -1
  190. package/dist/web-client/assets/flowDiagram-23GEKE2U-37BztFri.js +0 -1
  191. package/dist/web-client/assets/index-3mNPVkix.css +0 -2
  192. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-2Dg9wu0J.js +0 -1
  193. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-C_E2ot0R.js +0 -1
  194. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-Bs9UQR1b.js +0 -1
  195. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-BCMWGnsJ.js +0 -1
  196. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-DmudmLcK.js +0 -8
  197. package/dist/web-server/opencode-client.d.ts +0 -123
  198. package/dist/web-server/opencode-client.d.ts.map +0 -1
  199. package/dist/web-server/opencode-client.js +0 -514
  200. package/dist/web-server/opencode-client.js.map +0 -1
@@ -2,12 +2,18 @@
2
2
  * Headless `claude -p` run lifecycle (T001 of the session-panel async-runs plan).
3
3
  *
4
4
  * Owns everything between "the web route decided to run a job" and a finished
5
- * run record: spawn, output capture with caps, timeout escalation, `--output-
6
- * format json` parsing, exit mapping, per-write-target concurrency serialization
7
- * and ARCS_HOOK_* env scrubbing. The module is argv-agnostic the calling route
8
- * supplies argv/cwd; this module never decides what the child does. The route's
9
- * post-run write-back (transcript mirror + metadata.run finalization) plugs in
10
- * as the per-job `onSettled` callback, invoked after the child fully exits.
5
+ * run record: spawn, streaming stdout capture, timeout escalation, NDJSON event
6
+ * parsing, exit mapping, per-write-target concurrency serialization and
7
+ * ARCS_HOOK_* env scrubbing. The route supplies argv/cwd and this module never
8
+ * decides what the child *does* but it does own the child's OUTPUT CONTRACT:
9
+ * every run is normalized onto `--output-format stream-json
10
+ * --include-partial-messages --verbose` (see withStreamJsonArgv), so stdout is
11
+ * always the newline-delimited event stream the reader below understands. When
12
+ * the caller supplies an `eventLog` target, that stream is ALSO persisted
13
+ * verbatim to the run's own event log before the reader parses a byte of it
14
+ * (see run-event-log.ts) — the log is the durable record, parsing is a consumer.
15
+ * The route's post-run write-back (transcript mirror + metadata.run finalization)
16
+ * plugs in as the per-job `onSettled` callback, invoked after the child exits.
11
17
  *
12
18
  * Injectable `spawnImpl` + `binary` keep tests free of real children; the
13
19
  * default impl is plain node child_process `spawn` with `stdio:
@@ -15,12 +21,62 @@
15
21
  * record — this module never throws on spawn/exit/timeout paths.
16
22
  */
17
23
  import { spawn } from "node:child_process";
24
+ import { openRunEventLog } from "./run-event-log.js";
18
25
  const DEFAULT_TIMEOUT_MS = 10 * 60 * 1000; // 10 min
19
26
  const DEFAULT_KILL_GRACE_MS = 5_000;
27
+ /**
28
+ * Bound on the *raw* stdout tail kept as the last-resort reply for a child that
29
+ * emits no usable events. It no longer truncates real replies — those are
30
+ * assembled from whole event lines as they arrive.
31
+ */
20
32
  export const STDOUT_CAP = 1024 * 1024; // 1 MB
21
33
  export const STDERR_CAP = 4 * 1024; // 4 KB
34
+ /**
35
+ * Ceiling on a single *unterminated* line the NDJSON reader will buffer — a
36
+ * memory guard against a child that never emits a newline, not a reply cap. It
37
+ * sits well above any single claude event (one message cannot approach 8 MB), so
38
+ * a long reply split across chunks still reassembles whole.
39
+ */
40
+ export const MAX_EVENT_LINE = 8 * STDOUT_CAP; // 8 MB
41
+ /**
42
+ * Output contract the runner forces onto every child. `--include-partial-messages`
43
+ * is what makes first-token timing observable at all, and claude >= 2.x refuses
44
+ * both companions in print mode: "--include-partial-messages requires --print and
45
+ * --output-format=stream-json" and "When using --print, --output-format=stream-json
46
+ * requires --verbose" — both exit 1 at flag validation, before any network call.
47
+ * The three therefore travel together and are never split.
48
+ */
49
+ const STREAM_JSON_ARGV = [
50
+ "--output-format",
51
+ "stream-json",
52
+ "--include-partial-messages",
53
+ "--verbose",
54
+ ];
22
55
  /** Keys never forwarded to the child env — the hook handshake must not leak. */
23
56
  const ENV_SCRUB_KEYS = ["ARCS_HOOK_TOKEN", "ARCS_HOOK_SLUG", "ARCS_HOOK_URL"];
57
+ /**
58
+ * Rewrites caller argv onto the runner's output contract: drops any
59
+ * `--output-format <v>` / `--output-format=<v>` the caller chose (routes still
60
+ * build plain `--output-format json`) plus any duplicate stream companions, then
61
+ * appends STREAM_JSON_ARGV. Everything else — `-p`, the prompt, `--resume`,
62
+ * `--session-id` — passes through untouched and in order.
63
+ */
64
+ export function withStreamJsonArgv(argv) {
65
+ const rest = [];
66
+ for (let i = 0; i < argv.length; i += 1) {
67
+ const arg = argv[i];
68
+ if (arg === "--output-format") {
69
+ i += 1; // drop the flag together with its value
70
+ continue;
71
+ }
72
+ if (arg.startsWith("--output-format="))
73
+ continue;
74
+ if (arg === "--include-partial-messages" || arg === "--verbose")
75
+ continue;
76
+ rest.push(arg);
77
+ }
78
+ return [...rest, ...STREAM_JSON_ARGV];
79
+ }
24
80
  /** writeTargetKey → live child. Module-level: shared across all web routes. */
25
81
  const liveRuns = new Map();
26
82
  /**
@@ -48,6 +104,25 @@ export function endRun(writeTargetKey) {
48
104
  export function isRunLive(writeTargetKey) {
49
105
  return liveRuns.has(writeTargetKey);
50
106
  }
107
+ /**
108
+ * Pid of the child currently holding a write-target's slot.
109
+ *
110
+ * `undefined` means no live run (the spawn threw, or the slot was refused);
111
+ * `null` means a live run whose child never reported a pid (an async spawn
112
+ * failure — node reports ENOENT on the `error` event, not at spawn).
113
+ *
114
+ * Exists so the run route can persist the child's pid on the session's run
115
+ * claim: `runClaudeJob` spawns synchronously (nothing is awaited before
116
+ * `beginRun`), so a caller that reads this immediately after calling it —
117
+ * before its own first await — sees the pid of the child it just started.
118
+ * Read-only: it cannot start, stop or observe anything else about the run.
119
+ */
120
+ export function liveRunPid(writeTargetKey) {
121
+ const live = liveRuns.get(writeTargetKey);
122
+ if (live === undefined)
123
+ return undefined;
124
+ return live.child.pid ?? null;
125
+ }
51
126
  // ---------------------------------------------------------------------------
52
127
  // runClaudeJob
53
128
  // ---------------------------------------------------------------------------
@@ -68,7 +143,13 @@ export async function runClaudeJob(input, options = {}) {
68
143
  });
69
144
  let child;
70
145
  try {
71
- child = spawnImpl(binary, argv, { cwd, env: scrubEnv(env), stdio: ["ignore", "pipe", "pipe"] });
146
+ // NOTE: no "--cwd" flag claude >= 2.x rejects it; the working directory
147
+ // rides spawn options only.
148
+ child = spawnImpl(binary, withStreamJsonArgv(argv), {
149
+ cwd,
150
+ env: scrubEnv(env),
151
+ stdio: ["ignore", "pipe", "pipe"],
152
+ });
72
153
  }
73
154
  catch (err) {
74
155
  // Some spawn failures surface synchronously (fake impls, odd platforms).
@@ -85,7 +166,12 @@ export async function runClaudeJob(input, options = {}) {
85
166
  }
86
167
  const record = { pid: child.pid ?? null, startedAt, outcome: "success" };
87
168
  try {
88
- const settled = await settleRun(child, { timeoutMs, killGraceMs, binary });
169
+ const settled = await settleRun(child, {
170
+ timeoutMs,
171
+ killGraceMs,
172
+ binary,
173
+ ...(input.eventLog !== undefined && { eventLog: input.eventLog }),
174
+ });
89
175
  record.endedAt = settled.endedAt;
90
176
  record.outcome = settled.outcome;
91
177
  if (settled.error !== undefined)
@@ -94,6 +180,19 @@ export async function runClaudeJob(input, options = {}) {
94
180
  record.replyText = settled.replyText;
95
181
  record.replyChars = settled.replyText.length;
96
182
  }
183
+ // Streamed observations survive every outcome — a timed-out run that spoke
184
+ // before the kill still carries its TTFT number.
185
+ if (settled.firstTokenAt !== undefined)
186
+ record.firstTokenAt = settled.firstTokenAt;
187
+ if (settled.skippedLines !== undefined)
188
+ record.skippedLines = settled.skippedLines;
189
+ if (settled.eventLogLines !== undefined)
190
+ record.eventLogLines = settled.eventLogLines;
191
+ if (settled.eventLogTruncated !== undefined) {
192
+ record.eventLogTruncated = settled.eventLogTruncated;
193
+ }
194
+ if (settled.eventLogError !== undefined)
195
+ record.eventLogError = settled.eventLogError;
97
196
  }
98
197
  catch (err) {
99
198
  // Never throw on child-side failures — every path resolves to a record.
@@ -127,8 +226,11 @@ async function writeBack(input, record) {
127
226
  }
128
227
  function settleRun(child, ctx) {
129
228
  return new Promise((resolve) => {
130
- const stdout = makeTailBuffer(STDOUT_CAP);
229
+ const stdout = makeStreamReader({ rawCap: STDOUT_CAP, lineCap: MAX_EVENT_LINE });
131
230
  const stderr = makeTailBuffer(STDERR_CAP);
231
+ // Opened before any listener attaches, so the file exists even for a child
232
+ // that never writes a byte — an error or timeout run still leaves a log.
233
+ const events = openRunEventLog(ctx.eventLog);
132
234
  let settled = false;
133
235
  let timedOut = false;
134
236
  let termTimer = null;
@@ -141,6 +243,8 @@ function settleRun(child, ctx) {
141
243
  termTimer = null;
142
244
  killTimer = null;
143
245
  };
246
+ // Every settle path — error, close, timeout — carries whatever the stream
247
+ // already observed, so these two never depend on how the run ended.
144
248
  const settle = (result) => {
145
249
  if (settled)
146
250
  return;
@@ -149,7 +253,23 @@ function settleRun(child, ctx) {
149
253
  child.removeAllListeners();
150
254
  child.stdout?.removeAllListeners();
151
255
  child.stderr?.removeAllListeners();
152
- resolve(result);
256
+ // The log closes on EVERY settle path — error, close and timeout — so the
257
+ // durable record of what the child said outlives how the run ended.
258
+ events.flush();
259
+ const log = events.close();
260
+ const seen = stdout.snapshot();
261
+ resolve({
262
+ ...result,
263
+ ...(seen.firstTokenAt !== undefined && { firstTokenAt: seen.firstTokenAt }),
264
+ ...(seen.skippedLines > 0 && { skippedLines: seen.skippedLines }),
265
+ ...(ctx.eventLog !== undefined && { eventLogLines: log.lines }),
266
+ // Only when it engaged. A log that hit its cap and one from a silent
267
+ // child both report zero lines, so the count alone cannot tell them
268
+ // apart — this flag is the difference, and dropping it here is what
269
+ // made the cap invisible to every consumer of the record.
270
+ ...(log.truncated && { eventLogTruncated: true }),
271
+ ...(log.error !== undefined && { eventLogError: log.error }),
272
+ });
153
273
  };
154
274
  termTimer = setTimeout(() => {
155
275
  timedOut = true;
@@ -158,7 +278,15 @@ function settleRun(child, ctx) {
158
278
  safeKill(child, "SIGKILL");
159
279
  }, ctx.killGraceMs);
160
280
  }, ctx.timeoutMs);
161
- child.stdout?.on("data", (chunk) => stdout.push(String(chunk)));
281
+ child.stdout?.on("data", (chunk) => {
282
+ // DURABLE FIRST. The raw bytes hit disk synchronously here, before the
283
+ // reader below is given a chance to parse them — the log is the source of
284
+ // truth and the reader is a consumer, so a line the reader cannot use (or
285
+ // a process that dies on the very next statement) still leaves the line
286
+ // on disk. Never throws: openRunEventLog reports failures instead.
287
+ events.push(chunk);
288
+ stdout.push(String(chunk));
289
+ });
162
290
  child.stderr?.on("data", (chunk) => stderr.push(String(chunk)));
163
291
  child.on("error", (err) => {
164
292
  settle({
@@ -167,14 +295,16 @@ function settleRun(child, ctx) {
167
295
  error: spawnErrorMessage(err, ctx.binary),
168
296
  });
169
297
  });
170
- // Resolve on `close` (after stdio drained) rather than `exit` so the caps
171
- // see the complete output. `close` also fires after a failed spawn.
298
+ // Resolve on `close` (after stdio drained) rather than `exit` so the reader
299
+ // sees the complete output. `close` also fires after a failed spawn.
172
300
  child.on("close", (code, signal) => {
301
+ // A final line that never got its newline is still a line.
302
+ stdout.flush();
173
303
  settle(mapExit({
174
304
  code,
175
305
  signal: signal ?? null,
176
306
  timedOut,
177
- stdout,
307
+ stdout: stdout.snapshot(),
178
308
  stderr,
179
309
  timeoutMs: ctx.timeoutMs,
180
310
  }));
@@ -191,21 +321,15 @@ function mapExit(input) {
191
321
  };
192
322
  }
193
323
  if (input.code === 0) {
194
- const parsed = parseClaudeJson(input.stdout.text());
195
- if (parsed) {
196
- if (parsed.is_error) {
197
- return {
198
- endedAt,
199
- outcome: "error",
200
- error: parsed.result?.trim() || "claude reported an error (is_error)",
201
- };
202
- }
203
- // `result` is optional — fall back to the trimmed raw stdout when absent.
204
- const replyText = typeof parsed.result === "string" ? parsed.result : input.stdout.text().trim();
205
- return { endedAt, outcome: "success", replyText };
324
+ const { result } = input.stdout;
325
+ if (result?.isError) {
326
+ return {
327
+ endedAt,
328
+ outcome: "error",
329
+ error: result.text?.trim() || "claude reported an error (is_error)",
330
+ };
206
331
  }
207
- // Unparsable stdout on exit 0 — treat the trimmed raw stdout as the reply.
208
- return { endedAt, outcome: "success", replyText: input.stdout.text().trim() };
332
+ return { endedAt, outcome: "success", replyText: replyFrom(input.stdout) };
209
333
  }
210
334
  if (input.signal) {
211
335
  return {
@@ -222,30 +346,29 @@ function mapExit(input) {
222
346
  };
223
347
  }
224
348
  /**
225
- * Parses `claude --output-format json` stdout. Returns null when the output is
226
- * not a JSON object carrying the is_error/result envelope, so the caller can
227
- * fall back to raw stdout. Never throws.
349
+ * Reply precedence, most authoritative first: the terminal `result` event's own
350
+ * text (verbatim, never trimmed the model owns its whitespace), then the
351
+ * assembled text of the completed assistant messages, then the raw stdout tail
352
+ * for a child that spoke no events at all. Only the last one is STDOUT_CAP-bound.
228
353
  */
229
- function parseClaudeJson(stdout) {
230
- const text = stdout.trim();
231
- if (!text)
232
- return null;
233
- let value;
234
- try {
235
- value = JSON.parse(text);
236
- }
237
- catch {
238
- return null;
239
- }
240
- if (typeof value !== "object" || value === null)
241
- return null;
242
- const candidate = value;
243
- if (typeof candidate.is_error !== "boolean" && typeof candidate.result !== "string") {
244
- return null;
245
- }
246
- return candidate;
354
+ function replyFrom(stream) {
355
+ if (typeof stream.result?.text === "string")
356
+ return stream.result.text;
357
+ const assistant = stream.assistantText.trim();
358
+ if (assistant)
359
+ return assistant;
360
+ return stream.rawTail.trim();
247
361
  }
248
- function resolveTimeoutMs(timeoutMs, env) {
362
+ /**
363
+ * The ceiling a run will actually be killed at: an explicit override first,
364
+ * then ARCS_CLAUDE_RUN_TIMEOUT_MS, then the 10-minute default.
365
+ *
366
+ * Exported because the run route has to persist the resulting DEADLINE with the
367
+ * session's run claim (a claim is only proof of life until the child is killed),
368
+ * and a second copy of this precedence in the route would silently drift from
369
+ * the one the timer here is armed with.
370
+ */
371
+ export function resolveTimeoutMs(timeoutMs, env = process.env) {
249
372
  if (typeof timeoutMs === "number" && Number.isFinite(timeoutMs) && timeoutMs > 0) {
250
373
  return timeoutMs;
251
374
  }
@@ -317,4 +440,160 @@ function makeTailBuffer(limit) {
317
440
  },
318
441
  };
319
442
  }
443
+ /** Event types the reader knows; anything else is ignored (and counted). */
444
+ const KNOWN_EVENT_TYPES = new Set(["result", "assistant", "user", "system", "stream_event"]);
445
+ /**
446
+ * Line-oriented reader over `--output-format stream-json` stdout.
447
+ *
448
+ * Tolerant by construction, because the wire schema is claude's to change:
449
+ * unknown event types are ignored rather than fatal, unparsable lines are
450
+ * skipped and counted, and no shape assumption is made beyond "JSON object with
451
+ * a string `type`". It never throws — a reader that can fail a run would make
452
+ * every future claude release a potential outage.
453
+ *
454
+ * Chunk boundaries are irrelevant: a chunk that ends mid-JSON leaves the partial
455
+ * line buffered until its newline arrives, and one line split across ten chunks
456
+ * parses exactly once. Because complete lines are consumed as they arrive, the
457
+ * reply is never truncated by either cap — `rawCap` bounds only the unused raw
458
+ * fallback tail, and `lineCap` only a single *unterminated* line (a runaway
459
+ * child with no newlines), which is then dropped along with the rest of it.
460
+ */
461
+ function makeStreamReader(caps) {
462
+ const { rawCap, lineCap } = caps;
463
+ const raw = makeTailBuffer(rawCap);
464
+ const state = { assistantText: "", rawTail: "", skippedLines: 0 };
465
+ let pending = "";
466
+ let dropping = false;
467
+ const consumeLine = (line) => {
468
+ // Tolerate CRLF: the trailing \r is not part of the JSON.
469
+ const text = (line.endsWith("\r") ? line.slice(0, -1) : line).trim();
470
+ if (text === "")
471
+ return; // blank separator lines are normal, not drift
472
+ let value;
473
+ try {
474
+ value = JSON.parse(text);
475
+ }
476
+ catch {
477
+ state.skippedLines += 1;
478
+ return;
479
+ }
480
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
481
+ state.skippedLines += 1;
482
+ return;
483
+ }
484
+ applyEvent(value, state);
485
+ };
486
+ return {
487
+ push(chunk) {
488
+ raw.push(chunk);
489
+ const parts = (pending + chunk).split("\n");
490
+ // The last part has not met its newline yet — it stays buffered, which is
491
+ // exactly how a chunk that ends mid-JSON survives to be parsed once.
492
+ pending = parts.pop() ?? "";
493
+ for (const line of parts) {
494
+ // The tail of an over-cap line ends here; the next line is clean again.
495
+ if (dropping)
496
+ dropping = false;
497
+ else
498
+ consumeLine(line);
499
+ }
500
+ if (dropping) {
501
+ pending = "";
502
+ }
503
+ else if (pending.length > lineCap) {
504
+ // One line longer than the cap with no newline in sight — drop it (and
505
+ // the rest of it) so a runaway child cannot balloon memory.
506
+ state.skippedLines += 1;
507
+ dropping = true;
508
+ pending = "";
509
+ }
510
+ },
511
+ flush() {
512
+ if (!dropping && pending !== "")
513
+ consumeLine(pending);
514
+ pending = "";
515
+ dropping = false;
516
+ },
517
+ snapshot() {
518
+ return { ...state, rawTail: raw.text() };
519
+ },
520
+ };
521
+ }
522
+ /**
523
+ * Folds one decoded event into the snapshot. Every branch is defensive about
524
+ * field types — a `result` without a string `result`, an `assistant` without
525
+ * content, a `stream_event` with a shape we have never seen are all survivable.
526
+ */
527
+ function applyEvent(event, state) {
528
+ const type = typeof event.type === "string" ? event.type : "";
529
+ if (type === "result" || (!KNOWN_EVENT_TYPES.has(type) && isLegacyEnvelope(event))) {
530
+ // The legacy single-object `--output-format json` envelope has no `type`;
531
+ // an older or wrapped claude still settles the same way.
532
+ state.result = {
533
+ isError: event.is_error === true,
534
+ ...(typeof event.result === "string" && { text: event.result }),
535
+ };
536
+ return;
537
+ }
538
+ if (type === "assistant") {
539
+ const text = assistantMessageText(event.message);
540
+ if (text !== "") {
541
+ state.assistantText += text;
542
+ markFirstToken(state);
543
+ }
544
+ return;
545
+ }
546
+ if (type === "stream_event") {
547
+ // Partial deltas are the earliest possible content signal — this is the
548
+ // line `--include-partial-messages` exists to deliver, and where TTFT is
549
+ // actually measured. Their text is NOT accumulated: the completed
550
+ // `assistant` message repeats it, and double-counting would duplicate the
551
+ // fallback reply.
552
+ if (partialText(event.event) !== "")
553
+ markFirstToken(state);
554
+ return;
555
+ }
556
+ // `user`, `system` and friends carry no reply text — known, so not drift.
557
+ if (!KNOWN_EVENT_TYPES.has(type))
558
+ state.skippedLines += 1;
559
+ }
560
+ /** The pre-stream `{is_error?, result?}` object, recognized by shape alone. */
561
+ function isLegacyEnvelope(event) {
562
+ return typeof event.is_error === "boolean" || typeof event.result === "string";
563
+ }
564
+ function markFirstToken(state) {
565
+ if (state.firstTokenAt === undefined)
566
+ state.firstTokenAt = Date.now();
567
+ }
568
+ /** Text blocks of a completed assistant message, tolerant of string content. */
569
+ function assistantMessageText(message) {
570
+ const content = readField(message, "content");
571
+ if (typeof content === "string")
572
+ return content;
573
+ if (!Array.isArray(content))
574
+ return "";
575
+ let text = "";
576
+ for (const block of content) {
577
+ if (readField(block, "type") !== "text")
578
+ continue;
579
+ const blockText = readField(block, "text");
580
+ if (typeof blockText === "string")
581
+ text += blockText;
582
+ }
583
+ return text;
584
+ }
585
+ /** Text carried by a partial-message event (`content_block_delta` and kin). */
586
+ function partialText(inner) {
587
+ for (const key of ["delta", "content_block"]) {
588
+ const text = readField(readField(inner, key), "text");
589
+ if (typeof text === "string" && text !== "")
590
+ return text;
591
+ }
592
+ return "";
593
+ }
594
+ function readField(node, key) {
595
+ if (typeof node !== "object" || node === null)
596
+ return undefined;
597
+ return node[key];
598
+ }
320
599
  //# sourceMappingURL=claude-runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-runner.js","sourceRoot":"","sources":["../../src/web-server/claude-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-runner.js","sourceRoot":"","sources":["../../src/web-server/claude-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAwC,KAAK,EAAE,MAAM,oBAAoB,CAAC;AACjF,OAAO,EAAE,eAAe,EAA0B,MAAM,oBAAoB,CAAC;AAyG7E,MAAM,kBAAkB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AACpD,MAAM,qBAAqB,GAAG,KAAK,CAAC;AACpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO;AAC9C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO;AAC3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,OAAO;AAErD;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAG;IACvB,iBAAiB;IACjB,aAAa;IACb,4BAA4B;IAC5B,WAAW;CACZ,CAAC;AAEF,gFAAgF;AAChF,MAAM,cAAc,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC/C,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;YAC9B,CAAC,IAAI,CAAC,CAAC,CAAC,wCAAwC;YAChD,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC;YAAE,SAAS;QACjD,IAAI,GAAG,KAAK,4BAA4B,IAAI,GAAG,KAAK,WAAW;YAAE,SAAS;QAC1E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,gBAAgB,CAAC,CAAC;AACxC,CAAC;AAeD,+EAA+E;AAC/E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE5C;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,cAAsB,EAAE,KAAmB;IAClE,IAAI,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE,qBAAqB,cAAc,0BAA0B;SACvE,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACnD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,MAAM,CAAC,cAAsB;IAC3C,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAClC,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,cAAsB;IAC9C,OAAO,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,cAAsB;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1C,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;AAChC,CAAC;AAED,8EAA8E;AAC9E,eAAe;AACf,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAqB,EACrB,UAA+B,EAAE;IAEjC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAC5C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,qBAAqB,CAAC;IACjE,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACrC,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,CAAC,OAAmB,EAAE,KAAa,EAAmB,EAAE,CAAC,CAAC;QACrE,GAAG,EAAE,IAAI;QACT,SAAS;QACT,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;QACnB,OAAO;QACP,KAAK;KACN,CAAC,CAAC;IAEH,IAAI,KAAmB,CAAC;IACxB,IAAI,CAAC;QACH,0EAA0E;QAC1E,4BAA4B;QAC5B,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE;YAClD,GAAG;YACH,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC;YAClB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SAClC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yEAAyE;QACzE,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QACd,0EAA0E;QAC1E,sEAAsE;QACtE,uEAAuE;QACvE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3B,OAAO,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,MAAM,GAAoB,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAC1F,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE;YACrC,SAAS;YACT,WAAW;YACX,MAAM;YACN,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;SAClE,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QACjC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QACjC,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9D,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACrC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;QAC/C,CAAC;QACD,2EAA2E;QAC3E,iDAAiD;QACjD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;YAAE,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACnF,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS;YAAE,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACnF,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;YAAE,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QACtF,IAAI,OAAO,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,CAAC,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;QACvD,CAAC;QACD,IAAI,OAAO,CAAC,aAAa,KAAK,SAAS;YAAE,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IACxF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wEAAwE;QACxE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,kBAAkB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IACjD,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,cAAc,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,SAAS,CAAC,KAAqB,EAAE,MAAuB;IACrE,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAyBD,SAAS,SAAS,CAAC,KAAmB,EAAE,GAAkB;IACxD,OAAO,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QACjF,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAC1C,2EAA2E;QAC3E,yEAAyE;QACzE,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,SAAS,GAA0B,IAAI,CAAC;QAC5C,IAAI,SAAS,GAA0B,IAAI,CAAC;QAE5C,MAAM,WAAW,GAAG,GAAS,EAAE;YAC7B,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,SAAS;gBAAE,YAAY,CAAC,SAAS,CAAC,CAAC;YACvC,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;QAEF,0EAA0E;QAC1E,oEAAoE;QACpE,MAAM,MAAM,GAAG,CAAC,MAAoB,EAAQ,EAAE;YAC5C,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,WAAW,EAAE,CAAC;YACd,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAC3B,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;YACnC,KAAK,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC;YACnC,0EAA0E;YAC1E,oEAAoE;YACpE,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC;gBACN,GAAG,MAAM;gBACT,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC3E,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC;gBACjE,GAAG,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC/D,qEAAqE;gBACrE,oEAAoE;gBACpE,oEAAoE;gBACpE,0DAA0D;gBAC1D,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;gBACjD,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;aAC7D,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,QAAQ,GAAG,IAAI,CAAC;YAChB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC3B,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC7B,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;QACtB,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAElB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE;YAClD,uEAAuE;YACvE,0EAA0E;YAC1E,0EAA0E;YAC1E,wEAAwE;YACxE,mEAAmE;YACnE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAsB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEjF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAC/B,MAAM,CAAC;gBACL,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;gBACnB,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,qEAAqE;QACrE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,2DAA2D;YAC3D,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CACJ,OAAO,CAAC;gBACN,IAAI;gBACJ,MAAM,EAAE,MAAM,IAAI,IAAI;gBACtB,QAAQ;gBACR,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;gBACzB,MAAM;gBACN,SAAS,EAAE,GAAG,CAAC,SAAS;aACzB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CAAC,KAOhB;IACC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,OAAO;YACL,OAAO;YACP,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,8BAA8B,KAAK,CAAC,SAAS,4BAA4B;SACjF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QAChC,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO;gBACP,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,qCAAqC;aACpE,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IAC7E,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO;YACL,OAAO;YACP,OAAO,EAAE,OAAO;YAChB,KAAK,EAAE,uCAAuC,KAAK,CAAC,MAAM,EAAE;SAC7D,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO;QACL,OAAO;QACP,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,UAAU,IAAI,6BAA6B,KAAK,CAAC,IAAI,EAAE;KAC/D,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,MAAsB;IACvC,IAAI,OAAO,MAAM,CAAC,MAAM,EAAE,IAAI,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACvE,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IAC9C,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAA6B,EAC7B,MAAyB,OAAO,CAAC,GAAG;IAEpC,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACjF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,GAAG,GAAG,GAAG,CAAC,0BAA0B,CAAC;IAC3C,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;YAAE,OAAO,MAAM,CAAC;IAC5D,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED;qDACqD;AACrD,SAAS,QAAQ,CAAC,GAAsB;IACtC,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAC3C,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACxB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAY,EAAE,MAAc;IACrD,MAAM,IAAI,GAAI,GAAoC,EAAE,IAAI,CAAC;IACzD,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,0BAA0B,CAAC;IACzD,OAAO,mBAAmB,MAAM,KAAK,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAmB,EAAE,MAAsB;IAC3D,IAAI,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;IAC9C,CAAC;AACH,CAAC;AAWD;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,KAAa;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO;QACL,IAAI,CAAC,KAAa;YAChB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;YACrB,OAAO,IAAI,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACzB,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;YACD,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;gBACjB,oDAAoD;gBACpD,MAAM,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC;gBAC9B,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACtC,IAAI,IAAI,QAAQ,CAAC;YACnB,CAAC;QACH,CAAC;QACD,IAAI;YACF,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC;AA2BD,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC;AAE7F;;;;;;;;;;;;;;;GAeG;AACH,SAAS,gBAAgB,CAAC,IAAyC;IACjE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACjC,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,KAAK,GAAmB,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;IAClF,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,WAAW,GAAG,CAAC,IAAY,EAAQ,EAAE;QACzC,0DAA0D;QAC1D,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACrE,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,CAAC,8CAA8C;QACvE,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxE,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,UAAU,CAAC,KAAgC,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,CAAC,KAAa;YAChB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,0EAA0E;YAC1E,qEAAqE;YACrE,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,wEAAwE;gBACxE,IAAI,QAAQ;oBAAE,QAAQ,GAAG,KAAK,CAAC;;oBAC1B,WAAW,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;iBAAM,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,EAAE,CAAC;gBACpC,uEAAuE;gBACvE,4DAA4D;gBAC5D,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;gBACxB,QAAQ,GAAG,IAAI,CAAC;gBAChB,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;QACH,CAAC;QACD,KAAK;YACH,IAAI,CAAC,QAAQ,IAAI,OAAO,KAAK,EAAE;gBAAE,WAAW,CAAC,OAAO,CAAC,CAAC;YACtD,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;QACD,QAAQ;YACN,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,KAA8B,EAAE,KAAqB;IACvE,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAE9D,IAAI,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACnF,0EAA0E;QAC1E,yDAAyD;QACzD,KAAK,CAAC,MAAM,GAAG;YACb,OAAO,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI;YAChC,GAAG,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;SAChE,CAAC;QACF,OAAO;IACT,CAAC;IAED,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC;YAC5B,cAAc,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,wEAAwE;QACxE,yEAAyE;QACzE,kEAAkE;QAClE,0EAA0E;QAC1E,kBAAkB;QAClB,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;YAAE,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,0EAA0E;IAC1E,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,+EAA+E;AAC/E,SAAS,gBAAgB,CAAC,KAA8B;IACtD,OAAO,OAAO,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;AACjF,CAAC;AAED,SAAS,cAAc,CAAC,KAAqB;IAC3C,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACxE,CAAC;AAED,gFAAgF;AAChF,SAAS,oBAAoB,CAAC,OAAgB;IAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC9C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,MAAM;YAAE,SAAS;QAClD,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,OAAO,SAAS,KAAK,QAAQ;YAAE,IAAI,IAAI,SAAS,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAC/E,SAAS,WAAW,CAAC,KAAc;IACjC,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACtD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;IAC3D,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,IAAa,EAAE,GAAW;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAChE,OAAQ,IAAgC,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC"}
@@ -2,9 +2,9 @@
2
2
  * Web server entry — starts the HTTP server for the ARCS web UI.
3
3
  */
4
4
  export interface StartWebServerOptions {
5
- /** Port to listen on (default 4173). Pass 0 for an ephemeral port. */
5
+ /** Port to listen on (defaults to `DEFAULT_WEB_PORT`). Pass 0 for an ephemeral port. */
6
6
  port?: number;
7
- /** Interface to bind (default 127.0.0.1). */
7
+ /** Interface to bind (defaults to `DEFAULT_WEB_HOST`). */
8
8
  host?: string;
9
9
  /** Auto-open the browser (default false here; the CLI command defaults true). */
10
10
  open?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web-server/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,qBAAqB;IACpC,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAeD,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,CA8B1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web-server/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,qBAAqB;IACpC,wFAAwF;IACxF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAeD,wBAAsB,cAAc,CAClC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,eAAe,CAAC,CA8B1B"}
@@ -3,6 +3,7 @@
3
3
  */
4
4
  import { spawn } from "node:child_process";
5
5
  import { serve } from "@hono/node-server";
6
+ import { DEFAULT_WEB_HOST, DEFAULT_WEB_PORT } from "../utils/hook-contract.js";
6
7
  import { createApp } from "./app.js";
7
8
  import { isLoopbackHost } from "./security.js";
8
9
  function openBrowser(url) {
@@ -18,8 +19,8 @@ function openBrowser(url) {
18
19
  }
19
20
  }
20
21
  export async function startWebServer(options = {}) {
21
- const host = options.host ?? "127.0.0.1";
22
- const requestedPort = options.port ?? 4173;
22
+ const host = options.host ?? DEFAULT_WEB_HOST;
23
+ const requestedPort = options.port ?? DEFAULT_WEB_PORT;
23
24
  if (!isLoopbackHost(host)) {
24
25
  throw new Error(`ARCS web only binds to loopback addresses; refusing non-loopback host "${host}".`);
25
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web-server/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAsB/C,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;QAC7F,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAiC,EAAE;IAEnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;IAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,0EAA0E,IAAI,IAAI,CACnF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAEhF,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvF,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1C,IAAI,OAAO,CAAC,IAAI;oBAAE,WAAW,CAAC,GAAG,CAAC,CAAC;gBACnC,cAAc,CAAC;oBACb,GAAG;oBACH,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI;oBACJ,KAAK,EAAE,GAAG,EAAE,CACV,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;wBACxB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC5B,CAAC,CAAC;iBACL,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web-server/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAsB/C,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;QAC7F,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7E,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAiC,EAAE;IAEnC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,gBAAgB,CAAC;IAC9C,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,IAAI,gBAAgB,CAAC;IACvD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,0EAA0E,IAAI,IAAI,CACnF,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAEhF,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvF,MAAM,GAAG,GAAG,UAAU,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1C,IAAI,OAAO,CAAC,IAAI;oBAAE,WAAW,CAAC,GAAG,CAAC,CAAC;gBACnC,cAAc,CAAC;oBACb,GAAG;oBACH,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI;oBACJ,KAAK,EAAE,GAAG,EAAE,CACV,IAAI,OAAO,CAAO,CAAC,GAAG,EAAE,EAAE;wBACxB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC5B,CAAC,CAAC;iBACL,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Intent → argv permission policy for headless `claude -p` runs.
3
+ *
4
+ * Safety in the session bridge is argv-shaped, and this module is the SINGLE
5
+ * place tool and permission flags are produced: `claude-runner.ts` stays
6
+ * argv-agnostic and no route hand-assembles a more permissive run. Every token
7
+ * emitted here comes from a closed set of module constants — the one
8
+ * caller-supplied token is the staged system prompt, and it is kept
9
+ * unambiguously a value (see asValueToken). Bypass flags are therefore
10
+ * unreachable from HTTP input by construction rather than by convention, and
11
+ * `test/permission-policy.test.ts` drives the builder with hostile
12
+ * HTTP-shaped payloads to keep it that way.
13
+ *
14
+ * Flags verified against claude 2.1.223: `--tools <tools...>` takes a
15
+ * comma-separated built-in tool list, `--permission-mode` accepts "plan" and
16
+ * "acceptEdits", and `--append-system-prompt` appends to (never replaces) the
17
+ * system prompt. `--cwd` is deliberately absent — claude >= 2.x rejects it, and
18
+ * the runner applies the working directory through spawn options.cwd instead.
19
+ */
20
+ /** Accepted run intents. Also the source list for route-level zod validation. */
21
+ export declare const RUN_INTENTS: readonly ["ask", "change"];
22
+ export type RunIntent = (typeof RUN_INTENTS)[number];
23
+ /**
24
+ * The untrusted slice of a run request. Every field is `unknown` because this
25
+ * is an HTTP body: the builder reads exactly `intent`, `allowBash` and
26
+ * `stagedSystemPrompt` and ignores everything else a caller sends.
27
+ */
28
+ export interface PermissionArgvInput {
29
+ /** `"change"` exactly, or the run degrades to the read-only `ask` policy. */
30
+ intent?: unknown;
31
+ /** Bash opt-in. Only the boolean `true` counts — `"true"`, `1` and `[]` do not. */
32
+ allowBash?: unknown;
33
+ /** Staged environment text for `--append-system-prompt`; W2's
34
+ * buildStagedEnvironment().text fills this slot. Emitted only when it is a
35
+ * non-empty string. */
36
+ stagedSystemPrompt?: unknown;
37
+ /** Unrecognized request keys are accepted and ignored, never forwarded. */
38
+ [key: string]: unknown;
39
+ }
40
+ /**
41
+ * Builds the tool/permission argv segment for one run. The caller concatenates
42
+ * it onto the rest of its argv (`-p`, `--resume`, `--output-format`, …); this
43
+ * module owns nothing else.
44
+ */
45
+ export declare function buildPermissionArgv(input?: PermissionArgvInput): string[];
46
+ //# sourceMappingURL=permission-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-policy.d.ts","sourceRoot":"","sources":["../../src/web-server/permission-policy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,iFAAiF;AACjF,eAAO,MAAM,WAAW,4BAA6B,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AA0BrD;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;4BAEwB;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2EAA2E;IAC3E,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,GAAE,mBAAwB,GAAG,MAAM,EAAE,CAc7E"}