@rryando/arcs 3.11.0 → 4.0.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.
- package/dist/cli/commands/hooks.d.ts +46 -6
- package/dist/cli/commands/hooks.d.ts.map +1 -1
- package/dist/cli/commands/hooks.js +190 -52
- package/dist/cli/commands/hooks.js.map +1 -1
- package/dist/cli/commands/web.js +14 -4
- package/dist/cli/commands/web.js.map +1 -1
- package/dist/cli/config.d.ts +14 -3
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +39 -38
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/instructions.d.ts +13 -1
- package/dist/cli/instructions.d.ts.map +1 -1
- package/dist/cli/instructions.js +38 -3
- package/dist/cli/instructions.js.map +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +76 -11
- package/dist/cli/setup.js.map +1 -1
- package/dist/shared/session-vocabulary.d.ts +88 -0
- package/dist/shared/session-vocabulary.d.ts.map +1 -0
- package/dist/shared/session-vocabulary.js +114 -0
- package/dist/shared/session-vocabulary.js.map +1 -0
- package/dist/utils/claude-code-hook-install.d.ts +1 -1
- package/dist/utils/claude-code-hook-install.d.ts.map +1 -1
- package/dist/utils/claude-code-hook-install.js +68 -3
- package/dist/utils/claude-code-hook-install.js.map +1 -1
- package/dist/utils/claude-transcript.d.ts +81 -2
- package/dist/utils/claude-transcript.d.ts.map +1 -1
- package/dist/utils/claude-transcript.js +33 -2
- package/dist/utils/claude-transcript.js.map +1 -1
- package/dist/utils/git.d.ts +21 -0
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js +65 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/hook-contract.d.ts +36 -0
- package/dist/utils/hook-contract.d.ts.map +1 -0
- package/dist/utils/hook-contract.js +35 -0
- package/dist/utils/hook-contract.js.map +1 -0
- package/dist/utils/hook-token-store.d.ts +39 -0
- package/dist/utils/hook-token-store.d.ts.map +1 -1
- package/dist/utils/hook-token-store.js +46 -3
- package/dist/utils/hook-token-store.js.map +1 -1
- package/dist/utils/session-store.d.ts +226 -0
- package/dist/utils/session-store.d.ts.map +1 -1
- package/dist/utils/session-store.js +266 -1
- package/dist/utils/session-store.js.map +1 -1
- package/dist/web-client/assets/{GraphCanvas-dNyZ458L.js → GraphCanvas-CTyf_XXQ.js} +1 -1
- package/dist/web-client/assets/{MarkdownEditor-BmU9mdkN.js → MarkdownEditor-af2vwQOX.js} +1 -1
- package/dist/web-client/assets/{abnfDiagram-VRR7QNED-D1BFBoeF.js → abnfDiagram-VRR7QNED-CdxcKX9t.js} +1 -1
- package/dist/web-client/assets/architecture-TIHT7OUA-Bt2-DmfV.js +1 -0
- package/dist/web-client/assets/{architectureDiagram-ZJ3FMSHR-CA8hTWUK.js → architectureDiagram-ZJ3FMSHR-DOISDv6o.js} +1 -1
- package/dist/web-client/assets/{blockDiagram-677ZJIJ3-CQpb_KwX.js → blockDiagram-677ZJIJ3-DKwtbttM.js} +1 -1
- package/dist/web-client/assets/{c4Diagram-LMCZKHZV-BhpHX84V.js → c4Diagram-LMCZKHZV-CilqK-Mm.js} +1 -1
- package/dist/web-client/assets/channel-C2mb9np_.js +1 -0
- package/dist/web-client/assets/{chunk-32BRIVSS-BUusQQa_.js → chunk-32BRIVSS-C79m1mkG.js} +1 -1
- package/dist/web-client/assets/{chunk-52WLFC77-nNYwlftl.js → chunk-52WLFC77-C6WelGWJ.js} +1 -1
- package/dist/web-client/assets/{chunk-C7G6YPKG-D0a-yqnK.js → chunk-C7G6YPKG-DLg7ryWI.js} +1 -1
- package/dist/web-client/assets/{chunk-EX3LRPZG-IDuRMN-4.js → chunk-EX3LRPZG-DjWgo4gL.js} +1 -1
- package/dist/web-client/assets/{chunk-FWX5IMBZ-D_spTcqi.js → chunk-FWX5IMBZ-BgS9p_zy.js} +2 -2
- package/dist/web-client/assets/{chunk-HOUHSVGY-C-bcxwZS.js → chunk-HOUHSVGY-DuVR7dZO.js} +1 -1
- package/dist/web-client/assets/{chunk-ICXQ74PX-CjmK2bAM.js → chunk-ICXQ74PX-Y8DlnIJM.js} +1 -1
- package/dist/web-client/assets/{chunk-MOJQB5TN-Bkc08KWY.js → chunk-MOJQB5TN-BEM3QgeD.js} +1 -1
- package/dist/web-client/assets/{chunk-OGEWGWER-BAAYYvG9.js → chunk-OGEWGWER-DlM8LxGr.js} +1 -1
- package/dist/web-client/assets/{chunk-PUDLZKDR-WXbPY7NM.js → chunk-PUDLZKDR-c6cqNVTx.js} +1 -1
- package/dist/web-client/assets/{chunk-Q4XR5HBZ-DcbnjxQE.js → chunk-Q4XR5HBZ-C5lNmcka.js} +1 -1
- package/dist/web-client/assets/{chunk-V7JOEXUC-C6t75PAp.js → chunk-V7JOEXUC-nSswxvSG.js} +1 -1
- package/dist/web-client/assets/{chunk-VAUOI2AC-DVrJ0Ic7.js → chunk-VAUOI2AC-CqJkCkT0.js} +1 -1
- package/dist/web-client/assets/{chunk-VR4S4FIN-MOOFvGS0.js → chunk-VR4S4FIN-D3pFchin.js} +1 -1
- package/dist/web-client/assets/{chunk-WYO6CB5R-sK7Y2NZD.js → chunk-WYO6CB5R-BI9c-NzI.js} +1 -1
- package/dist/web-client/assets/{chunk-ZGVPDNZ5-a13RQsku.js → chunk-ZGVPDNZ5-CKTF2kLR.js} +1 -1
- package/dist/web-client/assets/classDiagram-OUVF2IWQ-CPd_w3Zr.js +1 -0
- package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-CPd_w3Zr.js +1 -0
- package/dist/web-client/assets/{cynefin-VYW2F7L2-D8xaH-wO.js → cynefin-VYW2F7L2-BrJrnfh1.js} +1 -1
- package/dist/web-client/assets/{cynefinDiagram-TSTJHNR4-Bt__EqJW.js → cynefinDiagram-TSTJHNR4-9jYzPWJZ.js} +1 -1
- package/dist/web-client/assets/{dagre-VKFMJZFB-Bwgjwflz.js → dagre-VKFMJZFB-B705Djpu.js} +1 -1
- package/dist/web-client/assets/{diagram-FQU43EPY-CaPDVUq2.js → diagram-FQU43EPY-BfQAlUlJ.js} +1 -1
- package/dist/web-client/assets/{diagram-G47NLZAW-BQLB9YYA.js → diagram-G47NLZAW-s1YDe06A.js} +1 -1
- package/dist/web-client/assets/{diagram-NH7WQ7WH-BWo84w8Y.js → diagram-NH7WQ7WH-Dy3z11Hc.js} +1 -1
- package/dist/web-client/assets/{diagram-OA4YK3LP-bKn6Pz5s.js → diagram-OA4YK3LP-Bius2xUN.js} +1 -1
- package/dist/web-client/assets/{diagram-WEI45ONY-BRqV5Oy6.js → diagram-WEI45ONY-D7x4VcHM.js} +1 -1
- package/dist/web-client/assets/{ebnfDiagram-CCIWWBDH-DhUXL1-7.js → ebnfDiagram-CCIWWBDH-CBg1xrmD.js} +1 -1
- package/dist/web-client/assets/{erDiagram-Q63AITRT-HXAQQ-_F.js → erDiagram-Q63AITRT-CJRvTFvd.js} +1 -1
- package/dist/web-client/assets/eventmodeling-45OFAUF4-CTKRC2Yj.js +1 -0
- package/dist/web-client/assets/flowDiagram-23GEKE2U-CaZjFyU1.js +1 -0
- package/dist/web-client/assets/{ganttDiagram-NO4QXBWP-D-Ddf_Ii.js → ganttDiagram-NO4QXBWP-C_LsypZ4.js} +1 -1
- package/dist/web-client/assets/{gitGraph-TEB2WS4Q-BmHzs0uF.js → gitGraph-TEB2WS4Q-Dx2XxdGk.js} +1 -1
- package/dist/web-client/assets/{gitGraphDiagram-IHSO6WYX-YnQWrlh_.js → gitGraphDiagram-IHSO6WYX-DiKWkGWQ.js} +1 -1
- package/dist/web-client/assets/{index-DCWxuIeQ.js → index-CYwhkPtc.js} +38 -36
- package/dist/web-client/assets/index-wSzUPvml.css +2 -0
- package/dist/web-client/assets/{info-DKCQHKI2-DCT_B7RN.js → info-DKCQHKI2-DORwHenK.js} +1 -1
- package/dist/web-client/assets/{infoDiagram-FWYZ7A6U-D-le1Zhq.js → infoDiagram-FWYZ7A6U-CQecXS1E.js} +1 -1
- package/dist/web-client/assets/{ishikawaDiagram-FXEZZL3T-Jr1x2VJB.js → ishikawaDiagram-FXEZZL3T-CWhj60Zp.js} +1 -1
- package/dist/web-client/assets/{journeyDiagram-5HDEW3XC-BF9ELxj-.js → journeyDiagram-5HDEW3XC-Cj3z2U8u.js} +1 -1
- package/dist/web-client/assets/{kanban-definition-HUTT4EX6-C4fJqAxu.js → kanban-definition-HUTT4EX6-DFmBRenP.js} +1 -1
- package/dist/web-client/assets/{line-7N7ikFxa.js → line-C_Hxz9xb.js} +1 -1
- package/dist/web-client/assets/{mermaid-parser.core-QbC1icPt.js → mermaid-parser.core-E3xRdzPn.js} +3 -3
- package/dist/web-client/assets/{mermaid.core-C26d_UJm.js → mermaid.core-C2_CcotH.js} +3 -3
- package/dist/web-client/assets/{mindmap-definition-LN4V7U3C-D6TV1JDf.js → mindmap-definition-LN4V7U3C-Bs7VxPid.js} +1 -1
- package/dist/web-client/assets/{packet-7NZHBO7P-CR1vrGj3.js → packet-7NZHBO7P-D2nqso7i.js} +1 -1
- package/dist/web-client/assets/{pegDiagram-2B236MQR-xOMBBtfV.js → pegDiagram-2B236MQR-Cepo1sIu.js} +1 -1
- package/dist/web-client/assets/{pie-RZYD4A2V-BbWuhjwy.js → pie-RZYD4A2V-Sx0IGbXt.js} +1 -1
- package/dist/web-client/assets/{pieDiagram-ENE6RG2P-MsfnsqgW.js → pieDiagram-ENE6RG2P-D-PMDNhk.js} +1 -1
- package/dist/web-client/assets/{quadrantDiagram-ABIIQ3AL-BoI7zKXF.js → quadrantDiagram-ABIIQ3AL-BNGC7Fms.js} +1 -1
- package/dist/web-client/assets/{radar-I7S5WNFK-CbYXKToJ.js → radar-I7S5WNFK-CFf_-2OC.js} +1 -1
- package/dist/web-client/assets/{railroad-3IZDKUUU-6LxHDkLe.js → railroad-3IZDKUUU-BvZeVRGh.js} +1 -1
- package/dist/web-client/assets/railroad-abnf-AHOZXSZD-DnGh6x2O.js +1 -0
- package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-CGfgCoaE.js +1 -0
- package/dist/web-client/assets/railroad-peg-LSFZ7HO6-BzQxYdqp.js +1 -0
- package/dist/web-client/assets/{railroadDiagram-RFXS5EU6-D6RUoUki.js → railroadDiagram-RFXS5EU6-D0iK_k84.js} +1 -1
- package/dist/web-client/assets/{requirementDiagram-TGXJPOKE-B6k4BDpE.js → requirementDiagram-TGXJPOKE-BPdsw9tz.js} +1 -1
- package/dist/web-client/assets/{sankeyDiagram-HTMAVEWB-BUDF-UFr.js → sankeyDiagram-HTMAVEWB-maA6ukOJ.js} +1 -1
- package/dist/web-client/assets/{sequenceDiagram-DBY2YBRQ-D6GqcsUi.js → sequenceDiagram-DBY2YBRQ-DKmAjmgr.js} +1 -1
- package/dist/web-client/assets/{stateDiagram-2N3HPSRC-WfJCQAK5.js → stateDiagram-2N3HPSRC-esxmzk3w.js} +1 -1
- package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-hcBqlOLc.js +1 -0
- package/dist/web-client/assets/{swimlanes-5IMT3BWC-BtMo82mC.js → swimlanes-5IMT3BWC-DFd-wGBv.js} +1 -1
- package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-DbSrPBYr.js +8 -0
- package/dist/web-client/assets/{timeline-definition-FHXFAJF6-CoAmv2Sn.js → timeline-definition-FHXFAJF6-C7SG8MQH.js} +1 -1
- package/dist/web-client/assets/{treeView-QDETBFTQ-BWsKzE1s.js → treeView-QDETBFTQ-M0rhxbs2.js} +1 -1
- package/dist/web-client/assets/{treemap-6X3UGDF4-i_qGtB3o.js → treemap-6X3UGDF4-BQfkQxSh.js} +1 -1
- package/dist/web-client/assets/{vennDiagram-L72KCM5P-DYkiLe-P.js → vennDiagram-L72KCM5P-CyIlb8ju.js} +1 -1
- package/dist/web-client/assets/{wardley-OPB4EBWU-Daaqr1Vp.js → wardley-OPB4EBWU-EE-7q8M1.js} +1 -1
- package/dist/web-client/assets/{wardleyDiagram-EHGQE667-Bofbsg3J.js → wardleyDiagram-EHGQE667-bY8XdYYS.js} +1 -1
- package/dist/web-client/assets/{xychartDiagram-FW5EYKEG-KNF4VTfL.js → xychartDiagram-FW5EYKEG-AhuXJ3de.js} +1 -1
- package/dist/web-client/index.html +2 -2
- package/dist/web-server/app.d.ts +4 -1
- package/dist/web-server/app.d.ts.map +1 -1
- package/dist/web-server/app.js +19 -0
- package/dist/web-server/app.js.map +1 -1
- package/dist/web-server/claude-runner.d.ts +109 -7
- package/dist/web-server/claude-runner.d.ts.map +1 -1
- package/dist/web-server/claude-runner.js +329 -50
- package/dist/web-server/claude-runner.js.map +1 -1
- package/dist/web-server/index.d.ts +2 -2
- package/dist/web-server/index.d.ts.map +1 -1
- package/dist/web-server/index.js +3 -2
- package/dist/web-server/index.js.map +1 -1
- package/dist/web-server/permission-policy.d.ts +46 -0
- package/dist/web-server/permission-policy.d.ts.map +1 -0
- package/dist/web-server/permission-policy.js +96 -0
- package/dist/web-server/permission-policy.js.map +1 -0
- package/dist/web-server/prompt-assembly.d.ts +454 -0
- package/dist/web-server/prompt-assembly.d.ts.map +1 -0
- package/dist/web-server/prompt-assembly.js +1122 -0
- package/dist/web-server/prompt-assembly.js.map +1 -0
- package/dist/web-server/routes/hook-events.d.ts +28 -3
- package/dist/web-server/routes/hook-events.d.ts.map +1 -1
- package/dist/web-server/routes/hook-events.js +209 -24
- package/dist/web-server/routes/hook-events.js.map +1 -1
- package/dist/web-server/routes/sessions.d.ts +7 -5
- package/dist/web-server/routes/sessions.d.ts.map +1 -1
- package/dist/web-server/routes/sessions.js +1030 -174
- package/dist/web-server/routes/sessions.js.map +1 -1
- package/dist/web-server/routes/workspace.d.ts +27 -0
- package/dist/web-server/routes/workspace.d.ts.map +1 -0
- package/dist/web-server/routes/workspace.js +280 -0
- package/dist/web-server/routes/workspace.js.map +1 -0
- package/dist/web-server/run-event-log.d.ts +167 -0
- package/dist/web-server/run-event-log.d.ts.map +1 -0
- package/dist/web-server/run-event-log.js +468 -0
- package/dist/web-server/run-event-log.js.map +1 -0
- package/dist/web-server/session-reconciler.d.ts +162 -0
- package/dist/web-server/session-reconciler.d.ts.map +1 -0
- package/dist/web-server/session-reconciler.js +363 -0
- package/dist/web-server/session-reconciler.js.map +1 -0
- package/dist/web-server/static.d.ts +7 -0
- package/dist/web-server/static.d.ts.map +1 -1
- package/dist/web-server/static.js +46 -3
- package/dist/web-server/static.js.map +1 -1
- package/dist/web-server/web-auth.d.ts +17 -0
- package/dist/web-server/web-auth.d.ts.map +1 -0
- package/dist/web-server/web-auth.js +33 -0
- package/dist/web-server/web-auth.js.map +1 -0
- package/dist/web-server/web-token.d.ts +39 -0
- package/dist/web-server/web-token.d.ts.map +1 -0
- package/dist/web-server/web-token.js +71 -0
- package/dist/web-server/web-token.js.map +1 -0
- package/opencode/arcs/manifest.json +8 -8
- package/package.json +1 -1
- package/scripts/claude-code-session-hook.mjs +49 -3
- package/scripts/deploy-claudecode-bundle.mjs +24 -3
- package/dist/web-client/assets/architecture-TIHT7OUA-CJqI5wNI.js +0 -1
- package/dist/web-client/assets/channel-C8DlmyVe.js +0 -1
- package/dist/web-client/assets/classDiagram-OUVF2IWQ-p32N1P_G.js +0 -1
- package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-p32N1P_G.js +0 -1
- package/dist/web-client/assets/eventmodeling-45OFAUF4-Bj5P8mZJ.js +0 -1
- package/dist/web-client/assets/flowDiagram-23GEKE2U-37BztFri.js +0 -1
- package/dist/web-client/assets/index-3mNPVkix.css +0 -2
- package/dist/web-client/assets/railroad-abnf-AHOZXSZD-2Dg9wu0J.js +0 -1
- package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-C_E2ot0R.js +0 -1
- package/dist/web-client/assets/railroad-peg-LSFZ7HO6-Bs9UQR1b.js +0 -1
- package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-BCMWGnsJ.js +0 -1
- package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-DmudmLcK.js +0 -8
|
@@ -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,
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
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
|
-
|
|
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, {
|
|
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 =
|
|
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
|
-
|
|
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) =>
|
|
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
|
|
171
|
-
//
|
|
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
|
|
195
|
-
if (
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
226
|
-
*
|
|
227
|
-
*
|
|
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
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
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
|
-
|
|
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":"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"}
|
|
@@ -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 (
|
|
5
|
+
/** Port to listen on (defaults to `DEFAULT_WEB_PORT`). Pass 0 for an ephemeral port. */
|
|
6
6
|
port?: number;
|
|
7
|
-
/** Interface to bind (
|
|
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;
|
|
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"}
|
package/dist/web-server/index.js
CHANGED
|
@@ -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 ??
|
|
22
|
-
const requestedPort = options.port ??
|
|
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,
|
|
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"}
|