@svenroth-ai/shipwright 0.27.0 → 0.28.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/client/dist/assets/{EmbeddedTerminal-CqCQUDtp.js → EmbeddedTerminal-4xgNUBUu.js} +19 -19
- package/client/dist/assets/{abnfDiagram-VRR7QNED-DX2objTP.js → abnfDiagram-VRR7QNED-BdCNbaqc.js} +1 -1
- package/client/dist/assets/{arc-DQmjbsFU.js → arc-DoZTTE1N.js} +1 -1
- package/client/dist/assets/{architectureDiagram-ZJ3FMSHR-DAvCsPCW.js → architectureDiagram-ZJ3FMSHR-DFTG4KtO.js} +1 -1
- package/client/dist/assets/{blockDiagram-677ZJIJ3-DC-dlyYI.js → blockDiagram-677ZJIJ3-C34UBjOB.js} +1 -1
- package/client/dist/assets/{c4Diagram-LMCZKHZV-DSlmXfhE.js → c4Diagram-LMCZKHZV-CbqAB1Ou.js} +1 -1
- package/client/dist/assets/channel-DBcZw7Kn.js +1 -0
- package/client/dist/assets/{chunk-2Q5K7J3B-C111EHL6.js → chunk-2Q5K7J3B-4N6AnmBJ.js} +1 -1
- package/client/dist/assets/{chunk-32BRIVSS-DrCYs2XG.js → chunk-32BRIVSS-Cs67LiCy.js} +1 -1
- package/client/dist/assets/{chunk-5VM5RSS4-DIejoaXS.js → chunk-5VM5RSS4-Bwd7rtD3.js} +1 -1
- package/client/dist/assets/{chunk-EX3LRPZG-CGWNeH2g.js → chunk-EX3LRPZG-CQqGfptD.js} +1 -1
- package/client/dist/assets/{chunk-JWPE2WC7-CCH0SRFY.js → chunk-JWPE2WC7-ClvKd4PN.js} +1 -1
- package/client/dist/assets/{chunk-MOJQB5TN-B3OpZGRv.js → chunk-MOJQB5TN-Cwvj8GE1.js} +1 -1
- package/client/dist/assets/{chunk-RYQCIY6F-BKhdp_8v.js → chunk-RYQCIY6F-DrWMx37d.js} +1 -1
- package/client/dist/assets/{chunk-V7JOEXUC-B6Bu8x1y.js → chunk-V7JOEXUC-CYFfa4PY.js} +1 -1
- package/client/dist/assets/{chunk-VR4S4FIN-OgFi2_iB.js → chunk-VR4S4FIN-B5eWtesm.js} +1 -1
- package/client/dist/assets/{chunk-XXDRQBXY-xyjuuhxl.js → chunk-XXDRQBXY-BQAZ6Our.js} +1 -1
- package/client/dist/assets/classDiagram-OUVF2IWQ-C3Q1V9DU.js +1 -0
- package/client/dist/assets/classDiagram-v2-EOCWNBFH-C3Q1V9DU.js +1 -0
- package/client/dist/assets/{cose-bilkent-JH36ORCC-BQIH3SCK.js → cose-bilkent-JH36ORCC-C76Yia6h.js} +1 -1
- package/client/dist/assets/{cynefin-VYW2F7L2-oyLAz8te.js → cynefin-VYW2F7L2-pJe7rdTi.js} +1 -1
- package/client/dist/assets/{cynefinDiagram-TSTJHNR4-DoLCsH0l.js → cynefinDiagram-TSTJHNR4-EeHQ7dYV.js} +1 -1
- package/client/dist/assets/{dagre-VKFMJZFB-D7djx1_Y.js → dagre-VKFMJZFB-VXOY6IHR.js} +1 -1
- package/client/dist/assets/{diagram-FQU43EPY-DFuYE0Vf.js → diagram-FQU43EPY-DW_-leqw.js} +1 -1
- package/client/dist/assets/{diagram-G47NLZAW-CffCZVXk.js → diagram-G47NLZAW-C_hsLD4u.js} +1 -1
- package/client/dist/assets/{diagram-NH7WQ7WH-BhrHtUlt.js → diagram-NH7WQ7WH-CbeQuO_f.js} +1 -1
- package/client/dist/assets/{diagram-OA4YK3LP-CwQPbOn0.js → diagram-OA4YK3LP-DRHY5d_c.js} +1 -1
- package/client/dist/assets/{diagram-WEI45ONY-abtYnYqH.js → diagram-WEI45ONY-B87OYR_S.js} +1 -1
- package/client/dist/assets/{ebnfDiagram-CCIWWBDH-DfV7gT4m.js → ebnfDiagram-CCIWWBDH-B8Z8WHF6.js} +1 -1
- package/client/dist/assets/{erDiagram-Q63AITRT-vtbCprgH.js → erDiagram-Q63AITRT-DaD7oa9H.js} +1 -1
- package/client/dist/assets/{flowDiagram-23GEKE2U-CVCgcyDF.js → flowDiagram-23GEKE2U-GrMVpsea.js} +1 -1
- package/client/dist/assets/{ganttDiagram-NO4QXBWP-BclyOgMb.js → ganttDiagram-NO4QXBWP-K3X0DYBa.js} +1 -1
- package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-BXT4rIKj.js → gitGraphDiagram-IHSO6WYX-B2SEx0xa.js} +1 -1
- package/client/dist/assets/index-CIpLt0ie.js +863 -0
- package/client/dist/assets/index-DGtnTeFd.css +1 -0
- package/client/dist/assets/{infoDiagram-FWYZ7A6U-Dr4mN24J.js → infoDiagram-FWYZ7A6U-Fi8fQ95G.js} +1 -1
- package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-BBUFWq5C.js → ishikawaDiagram-FXEZZL3T-CrN7QJzt.js} +1 -1
- package/client/dist/assets/{journeyDiagram-5HDEW3XC-CmclipcQ.js → journeyDiagram-5HDEW3XC-XHIsl7rM.js} +1 -1
- package/client/dist/assets/{kanban-definition-HUTT4EX6-eIzUeZ03.js → kanban-definition-HUTT4EX6-A6HJqHw7.js} +1 -1
- package/client/dist/assets/{linear-DGiT7uKK.js → linear-D1vF9IQB.js} +1 -1
- package/client/dist/assets/{mermaid.core-BcLNGbxW.js → mermaid.core-D6w9zlA0.js} +4 -4
- package/client/dist/assets/{mindmap-definition-LN4V7U3C-C4ANnNiP.js → mindmap-definition-LN4V7U3C-CxRkUj6Z.js} +1 -1
- package/client/dist/assets/{pegDiagram-2B236MQR-DnMeh3Yh.js → pegDiagram-2B236MQR-Bs9dp-8a.js} +1 -1
- package/client/dist/assets/{pieDiagram-ENE6RG2P-CKV_rkhF.js → pieDiagram-ENE6RG2P-DBWILzB8.js} +1 -1
- package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-BuUsGwHh.js → quadrantDiagram-ABIIQ3AL-DrCVJJx6.js} +1 -1
- package/client/dist/assets/{railroadDiagram-RFXS5EU6-BwwdKnFL.js → railroadDiagram-RFXS5EU6-BdPW2dNf.js} +1 -1
- package/client/dist/assets/{requirementDiagram-TGXJPOKE-CpQZouJV.js → requirementDiagram-TGXJPOKE-Bj_g3tC5.js} +1 -1
- package/client/dist/assets/{sankeyDiagram-HTMAVEWB-4fnDUNVa.js → sankeyDiagram-HTMAVEWB-BGL9NnsS.js} +1 -1
- package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-BOcaWlM0.js → sequenceDiagram-DBY2YBRQ-DEirxTZY.js} +1 -1
- package/client/dist/assets/{sizeCapture-X5ZJPWSS-_pv-9R0c.js → sizeCapture-X5ZJPWSS-BtLrvrea.js} +1 -1
- package/client/dist/assets/{stateDiagram-2N3HPSRC-CFwCOonY.js → stateDiagram-2N3HPSRC-D3GXIouX.js} +1 -1
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-D3lXe_mJ.js +1 -0
- package/client/dist/assets/{swimlanes-5IMT3BWC-DFa2tzxu.js → swimlanes-5IMT3BWC-PMRQzNhU.js} +2 -2
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-DMLbRFiO.js +8 -0
- package/client/dist/assets/{timeline-definition-FHXFAJF6-rhGYElgn.js → timeline-definition-FHXFAJF6-CnBKJtD_.js} +1 -1
- package/client/dist/assets/{vennDiagram-L72KCM5P-BoGjRxyA.js → vennDiagram-L72KCM5P-BYmiJYoh.js} +1 -1
- package/client/dist/assets/{wardleyDiagram-EHGQE667-D-IGv5bH.js → wardleyDiagram-EHGQE667-DU7vW8q3.js} +1 -1
- package/client/dist/assets/{xychartDiagram-FW5EYKEG-D9PFTCfm.js → xychartDiagram-FW5EYKEG-BEtPvBSU.js} +1 -1
- package/client/dist/index.html +2 -2
- package/lib/preflight.mjs +24 -5
- package/lib/util.mjs +5 -1
- package/package.json +1 -1
- package/scripts/deploy-procs.mjs +105 -20
- package/scripts/deploy-swap.mjs +23 -2
- package/server/dist/config.d.ts +9 -0
- package/server/dist/config.d.ts.map +1 -1
- package/server/dist/config.js +1 -0
- package/server/dist/config.js.map +1 -1
- package/server/dist/core/campaign-events.d.ts.map +1 -1
- package/server/dist/core/campaign-events.js +1 -0
- package/server/dist/core/campaign-events.js.map +1 -1
- package/server/dist/core/campaign-loop-state.d.ts.map +1 -1
- package/server/dist/core/campaign-loop-state.js +54 -21
- package/server/dist/core/campaign-loop-state.js.map +1 -1
- package/server/dist/core/campaign-parse.d.ts +4 -0
- package/server/dist/core/campaign-parse.d.ts.map +1 -1
- package/server/dist/core/campaign-parse.js +9 -0
- package/server/dist/core/campaign-parse.js.map +1 -1
- package/server/dist/core/campaign-readiness-schema.d.ts +33 -0
- package/server/dist/core/campaign-readiness-schema.d.ts.map +1 -0
- package/server/dist/core/campaign-readiness-schema.js +70 -0
- package/server/dist/core/campaign-readiness-schema.js.map +1 -0
- package/server/dist/core/campaign-readiness.d.ts +59 -0
- package/server/dist/core/campaign-readiness.d.ts.map +1 -0
- package/server/dist/core/campaign-readiness.js +163 -0
- package/server/dist/core/campaign-readiness.js.map +1 -0
- package/server/dist/core/campaign-status-json.d.ts +3 -0
- package/server/dist/core/campaign-status-json.d.ts.map +1 -1
- package/server/dist/core/campaign-status-json.js +7 -0
- package/server/dist/core/campaign-status-json.js.map +1 -1
- package/server/dist/core/campaign-store.d.ts.map +1 -1
- package/server/dist/core/campaign-store.js +4 -1
- package/server/dist/core/campaign-store.js.map +1 -1
- package/server/dist/core/campaign-types.d.ts +8 -0
- package/server/dist/core/campaign-types.d.ts.map +1 -1
- package/server/dist/core/campaign-worktree-root.d.ts +19 -0
- package/server/dist/core/campaign-worktree-root.d.ts.map +1 -0
- package/server/dist/core/campaign-worktree-root.js +76 -0
- package/server/dist/core/campaign-worktree-root.js.map +1 -0
- package/server/dist/core/claim-record-lock.d.ts +30 -0
- package/server/dist/core/claim-record-lock.d.ts.map +1 -0
- package/server/dist/core/claim-record-lock.js +90 -0
- package/server/dist/core/claim-record-lock.js.map +1 -0
- package/server/dist/core/cli-child-spawn.d.ts +28 -0
- package/server/dist/core/cli-child-spawn.d.ts.map +1 -0
- package/server/dist/core/cli-child-spawn.js +146 -0
- package/server/dist/core/cli-child-spawn.js.map +1 -0
- package/server/dist/core/codex-models-probe.d.ts +46 -0
- package/server/dist/core/codex-models-probe.d.ts.map +1 -0
- package/server/dist/core/codex-models-probe.js +103 -0
- package/server/dist/core/codex-models-probe.js.map +1 -0
- package/server/dist/core/codex-oracle-runner.d.ts +68 -0
- package/server/dist/core/codex-oracle-runner.d.ts.map +1 -0
- package/server/dist/core/codex-oracle-runner.js +124 -0
- package/server/dist/core/codex-oracle-runner.js.map +1 -0
- package/server/dist/core/codex-status-report.d.ts +6 -0
- package/server/dist/core/codex-status-report.d.ts.map +1 -0
- package/server/dist/core/codex-status-report.js +40 -0
- package/server/dist/core/codex-status-report.js.map +1 -0
- package/server/dist/core/codex-task-watcher-types.d.ts +69 -0
- package/server/dist/core/codex-task-watcher-types.d.ts.map +1 -0
- package/server/dist/core/codex-task-watcher-types.js +12 -0
- package/server/dist/core/codex-task-watcher-types.js.map +1 -0
- package/server/dist/core/codex-task-watcher.d.ts +30 -0
- package/server/dist/core/codex-task-watcher.d.ts.map +1 -0
- package/server/dist/core/codex-task-watcher.js +252 -0
- package/server/dist/core/codex-task-watcher.js.map +1 -0
- package/server/dist/core/codex-terminal-signal-detect.d.ts +7 -0
- package/server/dist/core/codex-terminal-signal-detect.d.ts.map +1 -0
- package/server/dist/core/codex-terminal-signal-detect.js +113 -0
- package/server/dist/core/codex-terminal-signal-detect.js.map +1 -0
- package/server/dist/core/codex-thread-discovery.d.ts +21 -0
- package/server/dist/core/codex-thread-discovery.d.ts.map +1 -0
- package/server/dist/core/codex-thread-discovery.js +169 -0
- package/server/dist/core/codex-thread-discovery.js.map +1 -0
- package/server/dist/core/codextender-auth-file-sweep.d.ts +41 -0
- package/server/dist/core/codextender-auth-file-sweep.d.ts.map +1 -0
- package/server/dist/core/codextender-auth-file-sweep.js +97 -0
- package/server/dist/core/codextender-auth-file-sweep.js.map +1 -0
- package/server/dist/core/codextender-proxy-probe.d.ts +80 -0
- package/server/dist/core/codextender-proxy-probe.d.ts.map +1 -0
- package/server/dist/core/codextender-proxy-probe.js +179 -0
- package/server/dist/core/codextender-proxy-probe.js.map +1 -0
- package/server/dist/core/contract-version.d.ts +16 -1
- package/server/dist/core/contract-version.d.ts.map +1 -1
- package/server/dist/core/contract-version.js +16 -1
- package/server/dist/core/contract-version.js.map +1 -1
- package/server/dist/core/launcher-codex.d.ts +61 -0
- package/server/dist/core/launcher-codex.d.ts.map +1 -0
- package/server/dist/core/launcher-codex.js +187 -0
- package/server/dist/core/launcher-codex.js.map +1 -0
- package/server/dist/core/launcher-codextender-env.d.ts +44 -0
- package/server/dist/core/launcher-codextender-env.d.ts.map +1 -0
- package/server/dist/core/launcher-codextender-env.js +212 -0
- package/server/dist/core/launcher-codextender-env.js.map +1 -0
- package/server/dist/core/launcher-codextender.d.ts +72 -0
- package/server/dist/core/launcher-codextender.d.ts.map +1 -0
- package/server/dist/core/launcher-codextender.js +98 -0
- package/server/dist/core/launcher-codextender.js.map +1 -0
- package/server/dist/core/launcher-codextender.smoke-helpers.d.ts +25 -0
- package/server/dist/core/launcher-codextender.smoke-helpers.d.ts.map +1 -0
- package/server/dist/core/launcher-codextender.smoke-helpers.js +211 -0
- package/server/dist/core/launcher-codextender.smoke-helpers.js.map +1 -0
- package/server/dist/core/launcher-permission-flags.d.ts +17 -0
- package/server/dist/core/launcher-permission-flags.d.ts.map +1 -0
- package/server/dist/core/launcher-permission-flags.js +27 -0
- package/server/dist/core/launcher-permission-flags.js.map +1 -0
- package/server/dist/core/launcher.d.ts +18 -0
- package/server/dist/core/launcher.d.ts.map +1 -1
- package/server/dist/core/launcher.js +6 -0
- package/server/dist/core/launcher.js.map +1 -1
- package/server/dist/core/leadwright-preflight-transport.d.ts +27 -0
- package/server/dist/core/leadwright-preflight-transport.d.ts.map +1 -0
- package/server/dist/core/leadwright-preflight-transport.js +124 -0
- package/server/dist/core/leadwright-preflight-transport.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-tests-ac.d.ts +6 -0
- package/server/dist/core/mission-context/artifacts-tests-ac.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts-tests-ac.js +31 -0
- package/server/dist/core/mission-context/artifacts-tests-ac.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-tests.d.ts.map +1 -1
- package/server/dist/core/mission-context/artifacts-tests.js +20 -0
- package/server/dist/core/mission-context/artifacts-tests.js.map +1 -1
- package/server/dist/core/mission-context/resolver-io.d.ts +10 -0
- package/server/dist/core/mission-context/resolver-io.d.ts.map +1 -1
- package/server/dist/core/mission-context/resolver-parts.d.ts +8 -7
- package/server/dist/core/mission-context/resolver-parts.d.ts.map +1 -1
- package/server/dist/core/mission-context/resolver-parts.js +22 -14
- package/server/dist/core/mission-context/resolver-parts.js.map +1 -1
- package/server/dist/core/mission-context/resolver.d.ts.map +1 -1
- package/server/dist/core/mission-context/resolver.js +1 -1
- package/server/dist/core/mission-context/resolver.js.map +1 -1
- package/server/dist/core/mission-context/run-id-recovery.d.ts +18 -2
- package/server/dist/core/mission-context/run-id-recovery.d.ts.map +1 -1
- package/server/dist/core/mission-context/run-id-recovery.js +38 -18
- package/server/dist/core/mission-context/run-id-recovery.js.map +1 -1
- package/server/dist/core/mission-context/traceability.d.ts.map +1 -1
- package/server/dist/core/mission-context/traceability.js +15 -1
- package/server/dist/core/mission-context/traceability.js.map +1 -1
- package/server/dist/core/mission-context/types-slice2.d.ts +44 -0
- package/server/dist/core/mission-context/types-slice2.d.ts.map +1 -1
- package/server/dist/core/model-tier-config-reader.d.ts +14 -1
- package/server/dist/core/model-tier-config-reader.d.ts.map +1 -1
- package/server/dist/core/model-tier-config-reader.js +34 -2
- package/server/dist/core/model-tier-config-reader.js.map +1 -1
- package/server/dist/core/powershell-probe.smoke-helpers.d.ts +12 -0
- package/server/dist/core/powershell-probe.smoke-helpers.d.ts.map +1 -0
- package/server/dist/core/powershell-probe.smoke-helpers.js +80 -0
- package/server/dist/core/powershell-probe.smoke-helpers.js.map +1 -0
- package/server/dist/core/readiness-install-hints.d.ts +1 -1
- package/server/dist/core/readiness-install-hints.d.ts.map +1 -1
- package/server/dist/core/readiness-install-hints.js +5 -0
- package/server/dist/core/readiness-install-hints.js.map +1 -1
- package/server/dist/core/readiness-probe-run.d.ts +61 -0
- package/server/dist/core/readiness-probe-run.d.ts.map +1 -1
- package/server/dist/core/readiness-probe-run.js +93 -15
- package/server/dist/core/readiness-probe-run.js.map +1 -1
- package/server/dist/core/readiness-probe.d.ts +1 -1
- package/server/dist/core/readiness-probe.d.ts.map +1 -1
- package/server/dist/core/readiness-probe.js +36 -8
- package/server/dist/core/readiness-probe.js.map +1 -1
- package/server/dist/core/sdk-sessions-store.d.ts +46 -0
- package/server/dist/core/sdk-sessions-store.d.ts.map +1 -1
- package/server/dist/core/sdk-sessions-store.js +1 -0
- package/server/dist/core/sdk-sessions-store.js.map +1 -1
- package/server/dist/core/sdk-sessions-validate.d.ts.map +1 -1
- package/server/dist/core/sdk-sessions-validate.js +11 -0
- package/server/dist/core/sdk-sessions-validate.js.map +1 -1
- package/server/dist/core/settings-reader.d.ts +18 -0
- package/server/dist/core/settings-reader.d.ts.map +1 -0
- package/server/dist/core/settings-reader.js +40 -0
- package/server/dist/core/settings-reader.js.map +1 -0
- package/server/dist/core/shell-quote.d.ts +29 -0
- package/server/dist/core/shell-quote.d.ts.map +1 -1
- package/server/dist/core/shell-quote.js +34 -0
- package/server/dist/core/shell-quote.js.map +1 -1
- package/server/dist/core/task-editability.d.ts +1 -1
- package/server/dist/core/task-editability.d.ts.map +1 -1
- package/server/dist/core/task-editability.js +1 -0
- package/server/dist/core/task-editability.js.map +1 -1
- package/server/dist/core/triage-cli-runner.d.ts.map +1 -1
- package/server/dist/core/triage-cli-runner.js +6 -21
- package/server/dist/core/triage-cli-runner.js.map +1 -1
- package/server/dist/core/triage-compose.d.ts.map +1 -1
- package/server/dist/core/triage-compose.js +34 -3
- package/server/dist/core/triage-compose.js.map +1 -1
- package/server/dist/core/triage-store.d.ts +2 -1
- package/server/dist/core/triage-store.d.ts.map +1 -1
- package/server/dist/core/triage-store.js +1 -1
- package/server/dist/core/triage-store.js.map +1 -1
- package/server/dist/external/create-external-routes-args.d.ts +122 -0
- package/server/dist/external/create-external-routes-args.d.ts.map +1 -0
- package/server/dist/external/create-external-routes-args.js +2 -0
- package/server/dist/external/create-external-routes-args.js.map +1 -0
- package/server/dist/external/inbox/_codex.d.ts +14 -0
- package/server/dist/external/inbox/_codex.d.ts.map +1 -0
- package/server/dist/external/inbox/_codex.js +88 -0
- package/server/dist/external/inbox/_codex.js.map +1 -0
- package/server/dist/external/inbox/_derive.d.ts.map +1 -1
- package/server/dist/external/inbox/_derive.js +11 -0
- package/server/dist/external/inbox/_derive.js.map +1 -1
- package/server/dist/external/inbox/_types.d.ts +23 -0
- package/server/dist/external/inbox/_types.d.ts.map +1 -1
- package/server/dist/external/inbox/_types.js +8 -5
- package/server/dist/external/inbox/_types.js.map +1 -1
- package/server/dist/external/inbox/routes.d.ts +7 -0
- package/server/dist/external/inbox/routes.d.ts.map +1 -1
- package/server/dist/external/inbox/routes.js +15 -2
- package/server/dist/external/inbox/routes.js.map +1 -1
- package/server/dist/external/launch/_helpers.d.ts +4 -0
- package/server/dist/external/launch/_helpers.d.ts.map +1 -1
- package/server/dist/external/launch/_helpers.js.map +1 -1
- package/server/dist/external/launch/action-substitution-branch.d.ts +12 -0
- package/server/dist/external/launch/action-substitution-branch.d.ts.map +1 -1
- package/server/dist/external/launch/action-substitution-branch.js +35 -1
- package/server/dist/external/launch/action-substitution-branch.js.map +1 -1
- package/server/dist/external/launch/branch-dispatch.d.ts +15 -0
- package/server/dist/external/launch/branch-dispatch.d.ts.map +1 -0
- package/server/dist/external/launch/branch-dispatch.js +73 -0
- package/server/dist/external/launch/branch-dispatch.js.map +1 -0
- package/server/dist/external/launch/campaign-step-branch.d.ts +7 -1
- package/server/dist/external/launch/campaign-step-branch.d.ts.map +1 -1
- package/server/dist/external/launch/campaign-step-branch.js +70 -2
- package/server/dist/external/launch/campaign-step-branch.js.map +1 -1
- package/server/dist/external/launch/claim-executor-permissions.d.ts +31 -0
- package/server/dist/external/launch/claim-executor-permissions.d.ts.map +1 -0
- package/server/dist/external/launch/claim-executor-permissions.js +107 -0
- package/server/dist/external/launch/claim-executor-permissions.js.map +1 -0
- package/server/dist/external/launch/claim-executor-template-arming.d.ts +42 -0
- package/server/dist/external/launch/claim-executor-template-arming.d.ts.map +1 -0
- package/server/dist/external/launch/claim-executor-template-arming.js +121 -0
- package/server/dist/external/launch/claim-executor-template-arming.js.map +1 -0
- package/server/dist/external/launch/claim-holder-gate.d.ts +9 -0
- package/server/dist/external/launch/claim-holder-gate.d.ts.map +1 -1
- package/server/dist/external/launch/claim-holder-gate.js +10 -2
- package/server/dist/external/launch/claim-holder-gate.js.map +1 -1
- package/server/dist/external/launch/claim-permission-perimeter-assert.d.ts +3 -0
- package/server/dist/external/launch/claim-permission-perimeter-assert.d.ts.map +1 -0
- package/server/dist/external/launch/claim-permission-perimeter-assert.js +24 -0
- package/server/dist/external/launch/claim-permission-perimeter-assert.js.map +1 -0
- package/server/dist/external/launch/legacy-fallback-branch.d.ts +14 -0
- package/server/dist/external/launch/legacy-fallback-branch.d.ts.map +1 -1
- package/server/dist/external/launch/legacy-fallback-branch.js +3 -1
- package/server/dist/external/launch/legacy-fallback-branch.js.map +1 -1
- package/server/dist/external/launch/master-run-branch.js +2 -2
- package/server/dist/external/launch/master-run-branch.js.map +1 -1
- package/server/dist/external/launch/mixed-intents-guard.d.ts +10 -0
- package/server/dist/external/launch/mixed-intents-guard.d.ts.map +1 -0
- package/server/dist/external/launch/mixed-intents-guard.js +49 -0
- package/server/dist/external/launch/mixed-intents-guard.js.map +1 -0
- package/server/dist/external/launch/parse-body.d.ts +29 -0
- package/server/dist/external/launch/parse-body.d.ts.map +1 -1
- package/server/dist/external/launch/parse-body.js +66 -0
- package/server/dist/external/launch/parse-body.js.map +1 -1
- package/server/dist/external/launch/routes.d.ts +3 -0
- package/server/dist/external/launch/routes.d.ts.map +1 -1
- package/server/dist/external/launch/routes.js +76 -109
- package/server/dist/external/launch/routes.js.map +1 -1
- package/server/dist/external/launch/runtime-chokepoint-codextender.d.ts +20 -0
- package/server/dist/external/launch/runtime-chokepoint-codextender.d.ts.map +1 -0
- package/server/dist/external/launch/runtime-chokepoint-codextender.js +51 -0
- package/server/dist/external/launch/runtime-chokepoint-codextender.js.map +1 -0
- package/server/dist/external/launch/runtime-chokepoint-errors.d.ts +33 -0
- package/server/dist/external/launch/runtime-chokepoint-errors.d.ts.map +1 -0
- package/server/dist/external/launch/runtime-chokepoint-errors.js +63 -0
- package/server/dist/external/launch/runtime-chokepoint-errors.js.map +1 -0
- package/server/dist/external/launch/runtime-chokepoint.d.ts +120 -0
- package/server/dist/external/launch/runtime-chokepoint.d.ts.map +1 -0
- package/server/dist/external/launch/runtime-chokepoint.js +201 -0
- package/server/dist/external/launch/runtime-chokepoint.js.map +1 -0
- package/server/dist/external/mission-context/routes.d.ts +33 -27
- package/server/dist/external/mission-context/routes.d.ts.map +1 -1
- package/server/dist/external/mission-context/routes.js +30 -27
- package/server/dist/external/mission-context/routes.js.map +1 -1
- package/server/dist/external/mission-context/test-harness.d.ts +6 -0
- package/server/dist/external/mission-context/test-harness.d.ts.map +1 -1
- package/server/dist/external/mission-context/test-harness.js +6 -1
- package/server/dist/external/mission-context/test-harness.js.map +1 -1
- package/server/dist/external/mission-context/wire.d.ts.map +1 -1
- package/server/dist/external/mission-context/wire.js +24 -2
- package/server/dist/external/mission-context/wire.js.map +1 -1
- package/server/dist/external/org/audit-log.d.ts +19 -0
- package/server/dist/external/org/audit-log.d.ts.map +1 -1
- package/server/dist/external/org/audit-log.js +33 -18
- package/server/dist/external/org/audit-log.js.map +1 -1
- package/server/dist/external/org/beat-effect-audit-read.d.ts +15 -0
- package/server/dist/external/org/beat-effect-audit-read.d.ts.map +1 -0
- package/server/dist/external/org/beat-effect-audit-read.js +73 -0
- package/server/dist/external/org/beat-effect-audit-read.js.map +1 -0
- package/server/dist/external/org/beat-register-health.d.ts +57 -0
- package/server/dist/external/org/beat-register-health.d.ts.map +1 -0
- package/server/dist/external/org/beat-register-health.js +125 -0
- package/server/dist/external/org/beat-register-health.js.map +1 -0
- package/server/dist/external/org/beat-register-release-core.d.ts.map +1 -1
- package/server/dist/external/org/beat-register-release-core.js +4 -1
- package/server/dist/external/org/beat-register-release-core.js.map +1 -1
- package/server/dist/external/org/beat-register-release-request.d.ts +20 -0
- package/server/dist/external/org/beat-register-release-request.d.ts.map +1 -0
- package/server/dist/external/org/beat-register-release-request.js +92 -0
- package/server/dist/external/org/beat-register-release-request.js.map +1 -0
- package/server/dist/external/org/beat-register-release.d.ts +3 -1
- package/server/dist/external/org/beat-register-release.d.ts.map +1 -1
- package/server/dist/external/org/beat-register-release.js +15 -57
- package/server/dist/external/org/beat-register-release.js.map +1 -1
- package/server/dist/external/org/beat-register.d.ts +18 -20
- package/server/dist/external/org/beat-register.d.ts.map +1 -1
- package/server/dist/external/org/beat-register.js +30 -56
- package/server/dist/external/org/beat-register.js.map +1 -1
- package/server/dist/external/org/beat-steps-read.d.ts +17 -0
- package/server/dist/external/org/beat-steps-read.d.ts.map +1 -0
- package/server/dist/external/org/beat-steps-read.js +89 -0
- package/server/dist/external/org/beat-steps-read.js.map +1 -0
- package/server/dist/external/org/charter-authority-read.d.ts +39 -0
- package/server/dist/external/org/charter-authority-read.d.ts.map +1 -0
- package/server/dist/external/org/charter-authority-read.js +142 -0
- package/server/dist/external/org/charter-authority-read.js.map +1 -0
- package/server/dist/external/org/commit-validate.d.ts +18 -0
- package/server/dist/external/org/commit-validate.d.ts.map +1 -0
- package/server/dist/external/org/commit-validate.js +59 -0
- package/server/dist/external/org/commit-validate.js.map +1 -0
- package/server/dist/external/org/commit-writes.d.ts +68 -0
- package/server/dist/external/org/commit-writes.d.ts.map +1 -0
- package/server/dist/external/org/commit-writes.js +110 -0
- package/server/dist/external/org/commit-writes.js.map +1 -0
- package/server/dist/external/org/commit.d.ts +73 -0
- package/server/dist/external/org/commit.d.ts.map +1 -0
- package/server/dist/external/org/commit.js +181 -0
- package/server/dist/external/org/commit.js.map +1 -0
- package/server/dist/external/org/commit.test-fixtures.d.ts +38 -0
- package/server/dist/external/org/commit.test-fixtures.d.ts.map +1 -0
- package/server/dist/external/org/commit.test-fixtures.js +67 -0
- package/server/dist/external/org/commit.test-fixtures.js.map +1 -0
- package/server/dist/external/org/countersign-core.d.ts +19 -0
- package/server/dist/external/org/countersign-core.d.ts.map +1 -0
- package/server/dist/external/org/countersign-core.js +122 -0
- package/server/dist/external/org/countersign-core.js.map +1 -0
- package/server/dist/external/org/countersign-request.d.ts +14 -0
- package/server/dist/external/org/countersign-request.d.ts.map +1 -0
- package/server/dist/external/org/countersign-request.js +78 -0
- package/server/dist/external/org/countersign-request.js.map +1 -0
- package/server/dist/external/org/countersign.d.ts +6 -5
- package/server/dist/external/org/countersign.d.ts.map +1 -1
- package/server/dist/external/org/countersign.js +12 -141
- package/server/dist/external/org/countersign.js.map +1 -1
- package/server/dist/external/org/daemon-config-read.d.ts +31 -0
- package/server/dist/external/org/daemon-config-read.d.ts.map +1 -0
- package/server/dist/external/org/daemon-config-read.js +50 -0
- package/server/dist/external/org/daemon-config-read.js.map +1 -0
- package/server/dist/external/org/decisions-lock.d.ts +6 -4
- package/server/dist/external/org/decisions-lock.d.ts.map +1 -1
- package/server/dist/external/org/decisions-lock.js +9 -8
- package/server/dist/external/org/decisions-lock.js.map +1 -1
- package/server/dist/external/org/domains.d.ts +35 -0
- package/server/dist/external/org/domains.d.ts.map +1 -0
- package/server/dist/external/org/domains.js +29 -0
- package/server/dist/external/org/domains.js.map +1 -0
- package/server/dist/external/org/existing-charters-read.d.ts +5 -0
- package/server/dist/external/org/existing-charters-read.d.ts.map +1 -0
- package/server/dist/external/org/existing-charters-read.js +31 -0
- package/server/dist/external/org/existing-charters-read.js.map +1 -0
- package/server/dist/external/org/leadwright-proposal-merge.d.ts +54 -0
- package/server/dist/external/org/leadwright-proposal-merge.d.ts.map +1 -0
- package/server/dist/external/org/leadwright-proposal-merge.js +47 -0
- package/server/dist/external/org/leadwright-proposal-merge.js.map +1 -0
- package/server/dist/external/org/mount.d.ts +10 -2
- package/server/dist/external/org/mount.d.ts.map +1 -1
- package/server/dist/external/org/mount.js +6 -1
- package/server/dist/external/org/mount.js.map +1 -1
- package/server/dist/external/org/org-chart-full-read.d.ts +19 -0
- package/server/dist/external/org/org-chart-full-read.d.ts.map +1 -0
- package/server/dist/external/org/org-chart-full-read.js +58 -0
- package/server/dist/external/org/org-chart-full-read.js.map +1 -0
- package/server/dist/external/org/org-file-lock.d.ts +41 -0
- package/server/dist/external/org/org-file-lock.d.ts.map +1 -0
- package/server/dist/external/org/org-file-lock.js +90 -0
- package/server/dist/external/org/org-file-lock.js.map +1 -0
- package/server/dist/external/org/routes.d.ts +10 -0
- package/server/dist/external/org/routes.d.ts.map +1 -1
- package/server/dist/external/org/routes.js +22 -1
- package/server/dist/external/org/routes.js.map +1 -1
- package/server/dist/external/org/verdict.d.ts +57 -0
- package/server/dist/external/org/verdict.d.ts.map +1 -0
- package/server/dist/external/org/verdict.js +74 -0
- package/server/dist/external/org/verdict.js.map +1 -0
- package/server/dist/external/routes.d.ts +3 -101
- package/server/dist/external/routes.d.ts.map +1 -1
- package/server/dist/external/routes.js +19 -4
- package/server/dist/external/routes.js.map +1 -1
- package/server/dist/external/tasks/create.d.ts.map +1 -1
- package/server/dist/external/tasks/create.js +8 -0
- package/server/dist/external/tasks/create.js.map +1 -1
- package/server/dist/external/tasks/fork.d.ts +29 -0
- package/server/dist/external/tasks/fork.d.ts.map +1 -0
- package/server/dist/external/tasks/fork.js +166 -0
- package/server/dist/external/tasks/fork.js.map +1 -0
- package/server/dist/external/tasks/lifecycle.d.ts.map +1 -1
- package/server/dist/external/tasks/lifecycle.js +10 -57
- package/server/dist/external/tasks/lifecycle.js.map +1 -1
- package/server/dist/external/tasks/patch.d.ts.map +1 -1
- package/server/dist/external/tasks/patch.js +17 -0
- package/server/dist/external/tasks/patch.js.map +1 -1
- package/server/dist/external/tasks/routes.d.ts +2 -0
- package/server/dist/external/tasks/routes.d.ts.map +1 -1
- package/server/dist/external/tasks/routes.js +7 -0
- package/server/dist/external/tasks/routes.js.map +1 -1
- package/server/dist/external/transcript/routes.d.ts.map +1 -1
- package/server/dist/external/transcript/routes.js +25 -3
- package/server/dist/external/transcript/routes.js.map +1 -1
- package/server/dist/external-routes-wiring.d.ts +28 -0
- package/server/dist/external-routes-wiring.d.ts.map +1 -0
- package/server/dist/external-routes-wiring.js +61 -0
- package/server/dist/external-routes-wiring.js.map +1 -0
- package/server/dist/index.d.ts.map +1 -1
- package/server/dist/index.js +111 -44
- package/server/dist/index.js.map +1 -1
- package/server/dist/lib/resolveHonoHost.d.ts.map +1 -1
- package/server/dist/lib/resolveHonoHost.js +16 -1
- package/server/dist/lib/resolveHonoHost.js.map +1 -1
- package/server/dist/routes/_triage-api-harness.d.ts +1 -1
- package/server/dist/routes/_triage-api-harness.d.ts.map +1 -1
- package/server/dist/routes/_triage-api-harness.js.map +1 -1
- package/server/dist/routes/campaigns-readiness.d.ts +10 -0
- package/server/dist/routes/campaigns-readiness.d.ts.map +1 -0
- package/server/dist/routes/campaigns-readiness.js +58 -0
- package/server/dist/routes/campaigns-readiness.js.map +1 -0
- package/server/dist/routes/campaigns.d.ts.map +1 -1
- package/server/dist/routes/campaigns.js +3 -0
- package/server/dist/routes/campaigns.js.map +1 -1
- package/server/dist/routes/codex-models.d.ts +15 -0
- package/server/dist/routes/codex-models.d.ts.map +1 -0
- package/server/dist/routes/codex-models.js +77 -0
- package/server/dist/routes/codex-models.js.map +1 -0
- package/server/dist/routes/codextender-models.d.ts +16 -0
- package/server/dist/routes/codextender-models.d.ts.map +1 -0
- package/server/dist/routes/codextender-models.js +81 -0
- package/server/dist/routes/codextender-models.js.map +1 -0
- package/server/dist/routes/diagnostics.d.ts +15 -0
- package/server/dist/routes/diagnostics.d.ts.map +1 -1
- package/server/dist/routes/diagnostics.js +1 -0
- package/server/dist/routes/diagnostics.js.map +1 -1
- package/server/dist/routes/org-chart-lead-guard.d.ts +10 -0
- package/server/dist/routes/org-chart-lead-guard.d.ts.map +1 -0
- package/server/dist/routes/org-chart-lead-guard.js +49 -0
- package/server/dist/routes/org-chart-lead-guard.js.map +1 -0
- package/server/dist/routes/org-inventory-composite.d.ts +20 -0
- package/server/dist/routes/org-inventory-composite.d.ts.map +1 -0
- package/server/dist/routes/org-inventory-composite.js +100 -0
- package/server/dist/routes/org-inventory-composite.js.map +1 -0
- package/server/dist/routes/org-lead-setup-wizard.d.ts +10 -0
- package/server/dist/routes/org-lead-setup-wizard.d.ts.map +1 -0
- package/server/dist/routes/org-lead-setup-wizard.js +51 -0
- package/server/dist/routes/org-lead-setup-wizard.js.map +1 -0
- package/server/dist/routes/org-leads-composite.d.ts.map +1 -1
- package/server/dist/routes/org-leads-composite.js +35 -9
- package/server/dist/routes/org-leads-composite.js.map +1 -1
- package/server/dist/routes/org-writes.d.ts +14 -0
- package/server/dist/routes/org-writes.d.ts.map +1 -0
- package/server/dist/routes/org-writes.js +61 -0
- package/server/dist/routes/org-writes.js.map +1 -0
- package/server/dist/routes/org.d.ts +11 -2
- package/server/dist/routes/org.d.ts.map +1 -1
- package/server/dist/routes/org.js +50 -47
- package/server/dist/routes/org.js.map +1 -1
- package/server/dist/routes/settings.d.ts.map +1 -1
- package/server/dist/routes/settings.js +23 -2
- package/server/dist/routes/settings.js.map +1 -1
- package/server/dist/routes/triage.d.ts +17 -0
- package/server/dist/routes/triage.d.ts.map +1 -1
- package/server/dist/routes/triage.js +29 -0
- package/server/dist/routes/triage.js.map +1 -1
- package/server/dist/terminal/pty-manager.d.ts +14 -0
- package/server/dist/terminal/pty-manager.d.ts.map +1 -1
- package/server/dist/terminal/pty-manager.js +11 -0
- package/server/dist/terminal/pty-manager.js.map +1 -1
- package/server/dist/terminal/routes.d.ts.map +1 -1
- package/server/dist/terminal/routes.js +9 -0
- package/server/dist/terminal/routes.js.map +1 -1
- package/server/dist/terminal/ws-upgrade-handler.d.ts.map +1 -1
- package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts.map +1 -1
- package/server/dist/terminal/ws-upgrade-handler.fixtures.js +1 -0
- package/server/dist/terminal/ws-upgrade-handler.fixtures.js.map +1 -1
- package/server/dist/terminal/ws-upgrade-handler.js +14 -5
- package/server/dist/terminal/ws-upgrade-handler.js.map +1 -1
- package/server/dist/test/event-test-counts-fixtures.d.ts +40 -0
- package/server/dist/test/event-test-counts-fixtures.d.ts.map +1 -0
- package/server/dist/test/event-test-counts-fixtures.js +56 -0
- package/server/dist/test/event-test-counts-fixtures.js.map +1 -0
- package/server/dist/types/leadwright-beat-step.d.ts +19 -0
- package/server/dist/types/leadwright-beat-step.d.ts.map +1 -0
- package/server/dist/types/leadwright-beat-step.js +56 -0
- package/server/dist/types/leadwright-beat-step.js.map +1 -0
- package/server/dist/types/leadwright-preflight.d.ts +90 -0
- package/server/dist/types/leadwright-preflight.d.ts.map +1 -0
- package/server/dist/types/leadwright-preflight.js +65 -0
- package/server/dist/types/leadwright-preflight.js.map +1 -0
- package/server/dist/types/leadwright-schema-drift.d.ts +28 -0
- package/server/dist/types/leadwright-schema-drift.d.ts.map +1 -0
- package/server/dist/types/leadwright-schema-drift.js +89 -0
- package/server/dist/types/leadwright-schema-drift.js.map +1 -0
- package/server/dist/types/org-inventory.d.ts +53 -0
- package/server/dist/types/org-inventory.d.ts.map +1 -0
- package/server/dist/types/org-inventory.js +11 -0
- package/server/dist/types/org-inventory.js.map +1 -0
- package/server/dist/types/org.d.ts +57 -6
- package/server/dist/types/org.d.ts.map +1 -1
- package/server/dist/types/run-config-retry.d.ts +29 -0
- package/server/dist/types/run-config-retry.d.ts.map +1 -0
- package/server/dist/types/run-config-retry.js +47 -0
- package/server/dist/types/run-config-retry.js.map +1 -0
- package/server/dist/types/run-config-v2.d.ts +29 -41
- package/server/dist/types/run-config-v2.d.ts.map +1 -1
- package/server/dist/types/run-config-v2.js +16 -50
- package/server/dist/types/run-config-v2.js.map +1 -1
- package/server/dist/types/settings.d.ts +33 -0
- package/server/dist/types/settings.d.ts.map +1 -1
- package/server/dist/vendor/leadwright/beat-step.schema.json +83 -0
- package/server/dist/vendor/leadwright/claim-record-lock-contract.json +15 -0
- package/server/dist/vendor/leadwright/org-chart.schema.json +195 -0
- package/server/dist/vendor/leadwright/preflight-input.schema.json +318 -0
- package/server/dist/vendor/leadwright/preflight-result.schema.json +56 -0
- package/server/package.json +1 -1
- package/client/dist/assets/channel-BfmIcrp7.js +0 -1
- package/client/dist/assets/classDiagram-OUVF2IWQ-HfUQZ6Uc.js +0 -1
- package/client/dist/assets/classDiagram-v2-EOCWNBFH-HfUQZ6Uc.js +0 -1
- package/client/dist/assets/index-CKU9dY18.css +0 -1
- package/client/dist/assets/index-DOMl6atu.js +0 -847
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-srkiu3Ib.js +0 -1
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-Dq-0K9Zm.js +0 -8
|
@@ -10,10 +10,19 @@
|
|
|
10
10
|
* - `lead_question` — a leadwright follow-up WRITTEN onto the task's
|
|
11
11
|
* `description` (FR-04.19), not derived from a JSONL/terminal read
|
|
12
12
|
* — see `./_lead.ts`.
|
|
13
|
+
* - `codex_watcher` — a notice from `CodexTaskWatcher`'s ephemeral,
|
|
14
|
+
* in-memory snapshot (Codex Light AC6: auto-nudge outcome,
|
|
15
|
+
* delivery_pending errors, unresolved no_oracle self-checks, failed
|
|
16
|
+
* launch confirmations) — see `./_codex.ts`.
|
|
17
|
+
* - `codex_approval` / `codex_error` — a pending Codex approval dialog or
|
|
18
|
+
* a structured Codex error visible in the LIVE embedded terminal
|
|
19
|
+
* (Codex Light §5.3/AC6), independent of the silence-timer/oracle loop
|
|
20
|
+
* — see `./_codex.ts`.
|
|
13
21
|
*
|
|
14
22
|
* Precedence: ask_tool > terminal_prompt > text_question. terminal_prompt
|
|
15
23
|
* is a post-pass over the JSONL-derived set so the mtime-keyed cache
|
|
16
|
-
* stays byte-identical. `lead_question`
|
|
24
|
+
* stays byte-identical. `lead_question`, `codex_watcher`, `codex_approval`
|
|
25
|
+
* and `codex_error` are each independent of that precedence.
|
|
17
26
|
*
|
|
18
27
|
* Phase A4 hot-path: per-session derive cache + negative-result cache
|
|
19
28
|
* — see `./_cache.ts`. JSONL cold-path + terminal_prompt post-pass live
|
|
@@ -23,9 +32,10 @@ import { Hono } from "hono";
|
|
|
23
32
|
import { inboxDeriveCache } from "./_cache.js";
|
|
24
33
|
import { deriveInboxFromJsonl, appendTerminalPrompts } from "./_derive.js";
|
|
25
34
|
import { appendLeadQuestions, extractLeadQuestionBody, LEAD_QUESTION_DISMISS_PREFIX, } from "./_lead.js";
|
|
35
|
+
import { appendCodexWatcherNotices, appendCodexTerminalSignals } from "./_codex.js";
|
|
26
36
|
export function createInboxRouter(deps) {
|
|
27
37
|
const app = new Hono();
|
|
28
|
-
const { store, watcher, ptyManager } = deps;
|
|
38
|
+
const { store, watcher, ptyManager, codexWatcher } = deps;
|
|
29
39
|
app.get("/api/external/inbox", async (c) => {
|
|
30
40
|
const { entries, storeDirty } = await deriveInboxFromJsonl({
|
|
31
41
|
store,
|
|
@@ -33,6 +43,9 @@ export function createInboxRouter(deps) {
|
|
|
33
43
|
});
|
|
34
44
|
appendTerminalPrompts(entries, { store, ptyManager });
|
|
35
45
|
appendLeadQuestions(entries, { store });
|
|
46
|
+
if (codexWatcher)
|
|
47
|
+
appendCodexWatcherNotices(entries, { store, codexWatcher });
|
|
48
|
+
appendCodexTerminalSignals(entries, { store, ptyManager });
|
|
36
49
|
if (storeDirty)
|
|
37
50
|
await store.persist();
|
|
38
51
|
return c.json({ items: entries });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/external/inbox/routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/external/inbox/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAkBpF,MAAM,UAAU,iBAAiB,CAAC,IAAqB;IACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAE1D,GAAG,CAAC,GAAG,CAAC,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,oBAAoB,CAAC;YACzD,KAAK;YACL,OAAO;SACR,CAAC,CAAC;QACH,qBAAqB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACtD,mBAAmB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,IAAI,YAAY;YAAE,yBAAyB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC9E,0BAA0B,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAC3D,IAAI,UAAU;YAAE,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACtC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,SAAS;YAChE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC1D,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACzB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;gBACvB,KAAK,EAAE;oBACL,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CACpD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CACzB;oBACD,mBAAmB,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC1C,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,uBAAuB;iBAC5D;aACF,CAAC,CAAC;YACH,gEAAgE;YAChE,gEAAgE;YAChE,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;YACtB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,yEAAyE;QACzE,yEAAyE;QACzE,qEAAqE;QACrE,IAAI,SAAS,CAAC,UAAU,CAAC,4BAA4B,CAAC,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC/B,IACE,IAAI;gBACJ,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI;gBAClD,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EACnD,CAAC;gBACD,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE;oBACvB,KAAK,EAAE;wBACL,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB;wBAC/C,mBAAmB,EAAE;4BACnB,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB;4BACjC,SAAS;yBACV;wBACD,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,uBAAuB;qBAC5D;iBACF,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,wCAAwC,EAAE,EAC9D,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -3,6 +3,10 @@ import type { ExternalTask } from "../../core/sdk-sessions-store.js";
|
|
|
3
3
|
export type LaunchBranchResult = {
|
|
4
4
|
commands: CopyCommandForms;
|
|
5
5
|
taskUpdate: Partial<ExternalTask>;
|
|
6
|
+
/** Set (false) when a scheduler-readiness check was applicable but could
|
|
7
|
+
* not be made (timeout / engine unavailable): the launch went ahead
|
|
8
|
+
* fail-open and the response says so — never a silent skip. */
|
|
9
|
+
readinessChecked?: false;
|
|
6
10
|
} | {
|
|
7
11
|
error: Record<string, unknown>;
|
|
8
12
|
status: 400 | 404 | 409;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_helpers.d.ts","sourceRoot":"","sources":["../../../src/external/launch/_helpers.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAC1B;
|
|
1
|
+
{"version":3,"file":"_helpers.d.ts","sourceRoot":"","sources":["../../../src/external/launch/_helpers.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAClC;;oEAEgE;IAChE,gBAAgB,CAAC,EAAE,KAAK,CAAC;CAC1B,GACD;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;CAAE,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_helpers.js","sourceRoot":"","sources":["../../../src/external/launch/_helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;
|
|
1
|
+
{"version":3,"file":"_helpers.js","sourceRoot":"","sources":["../../../src/external/launch/_helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAgBH,OAAO,EAAE,eAAe,EAAyB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
@@ -7,5 +7,17 @@ export declare function applyActionSubstitutionBranch(args: {
|
|
|
7
7
|
parsed: ParsedLaunchBody;
|
|
8
8
|
effectivelyFreshStart: boolean;
|
|
9
9
|
getProjectById: ((id: string) => ExternalRouteProjectView | undefined) | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* FR-04.22 (iterate-2026-09-06-claim-launch-permission-perimeter) — see
|
|
12
|
+
* `legacy-fallback-branch.ts`'s own doc comment for the field's meaning.
|
|
13
|
+
* THIS branch, not the legacy fallback, is the one leadwright's real
|
|
14
|
+
* tasks actually reach (Stage-1 spec review, see
|
|
15
|
+
* `claim-executor-template-arming.ts`'s header) — leadwright always sets
|
|
16
|
+
* `actionId` at task creation (a required field on its side), and
|
|
17
|
+
* `parse-body.ts`'s once-set-always-used contract resolves `parsed.actionId`
|
|
18
|
+
* from that persisted value even though the launch body itself carries
|
|
19
|
+
* only `{ claimToken }`.
|
|
20
|
+
*/
|
|
21
|
+
claimAuthorized?: boolean;
|
|
10
22
|
}): LaunchBranchResult | null;
|
|
11
23
|
//# sourceMappingURL=action-substitution-branch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-substitution-branch.d.ts","sourceRoot":"","sources":["../../../src/external/launch/action-substitution-branch.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"action-substitution-branch.d.ts","sourceRoot":"","sources":["../../../src/external/launch/action-substitution-branch.ts"],"names":[],"mappings":"AAyBA,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAOxD,wBAAgB,6BAA6B,CAAC,IAAI,EAAE;IAClD,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,EACV,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,wBAAwB,GAAG,SAAS,CAAC,GACtD,SAAS,CAAC;IACd;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GAAG,kBAAkB,GAAG,IAAI,CAwI5B"}
|
|
@@ -13,8 +13,10 @@
|
|
|
13
13
|
import { substitutePlaceholders, UnknownPhaseError, UnknownActionError, InvalidTitleError, InvalidParameterError, InvalidPlaceholderError, } from "../../core/actions-substitute.js";
|
|
14
14
|
import { loadActionsForProject } from "../../core/project-actions-loader.js";
|
|
15
15
|
import { resolveParameters } from "../../core/parameter-resolver.js";
|
|
16
|
+
import { claimExecutorLaunchOverrides } from "./claim-executor-permissions.js";
|
|
17
|
+
import { armActionTemplatePermissionPerimeter, templateDeclaresSessionIdAnchor, } from "./claim-executor-template-arming.js";
|
|
16
18
|
export function applyActionSubstitutionBranch(args) {
|
|
17
|
-
const { task, parsed, effectivelyFreshStart, getProjectById } = args;
|
|
19
|
+
const { task, parsed, effectivelyFreshStart, getProjectById, claimAuthorized } = args;
|
|
18
20
|
if (!parsed.actionId || !effectivelyFreshStart)
|
|
19
21
|
return null;
|
|
20
22
|
const project = getProjectById?.(task.projectId);
|
|
@@ -94,6 +96,38 @@ export function applyActionSubstitutionBranch(args) {
|
|
|
94
96
|
}
|
|
95
97
|
throw err;
|
|
96
98
|
}
|
|
99
|
+
if (claimAuthorized) {
|
|
100
|
+
// Stage-3 doubt review: a rendered-output anchor search alone can be
|
|
101
|
+
// fooled by a caller-supplied placeholder (e.g. {task.description?},
|
|
102
|
+
// settable in this very request) that coincidentally contains this
|
|
103
|
+
// task's own uuid formatted like the anchor. Requiring the literal
|
|
104
|
+
// placeholder in the RAW template first closes that hole — the
|
|
105
|
+
// template is project configuration, never launch-body content.
|
|
106
|
+
if (!templateDeclaresSessionIdAnchor(action.command_template)) {
|
|
107
|
+
return {
|
|
108
|
+
error: {
|
|
109
|
+
error: "claim_launch_permission_perimeter_unavailable",
|
|
110
|
+
detail: `action "${action.id}"'s command_template does not declare a literal '--session-id {task.uuid}' placeholder — cannot arm the permission perimeter`,
|
|
111
|
+
},
|
|
112
|
+
status: 409,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const armed = armActionTemplatePermissionPerimeter(commands, task.sessionUuid, claimExecutorLaunchOverrides());
|
|
116
|
+
// Fail closed (this branch's own doc comment): a custom project
|
|
117
|
+
// command_template not shaped like the bundled defaults must refuse
|
|
118
|
+
// the launch rather than hand back an unrestricted command that looks
|
|
119
|
+
// armed because the caller asked for arming.
|
|
120
|
+
if (!armed.ok) {
|
|
121
|
+
return {
|
|
122
|
+
error: {
|
|
123
|
+
error: "claim_launch_permission_perimeter_unavailable",
|
|
124
|
+
detail: armed.detail,
|
|
125
|
+
},
|
|
126
|
+
status: 409,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
commands = armed.commands;
|
|
130
|
+
}
|
|
97
131
|
const taskUpdate = {
|
|
98
132
|
state: "awaiting_external_start",
|
|
99
133
|
launchedAt: new Date().toISOString(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-substitution-branch.js","sourceRoot":"","sources":["../../../src/external/launch/action-substitution-branch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"action-substitution-branch.js","sourceRoot":"","sources":["../../../src/external/launch/action-substitution-branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ExternalTask } from "../../core/sdk-sessions-store.js";
|
|
2
|
+
import type { RunConfigReadResult } from "../../core/run-config-reader.js";
|
|
3
|
+
import type { ExternalRouteProjectView } from "../_shared/helpers.js";
|
|
4
|
+
import { type LaunchBranchResult, type ParsedLaunchBody } from "./_helpers.js";
|
|
5
|
+
export interface BranchDispatchInput {
|
|
6
|
+
task: ExternalTask;
|
|
7
|
+
parsed: ParsedLaunchBody;
|
|
8
|
+
getProjectById?: (id: string) => ExternalRouteProjectView | undefined;
|
|
9
|
+
runConfigReader: (projectPath: string) => Promise<RunConfigReadResult>;
|
|
10
|
+
jsonlExistsOnDisk?: (sessionUuid: string) => Promise<boolean>;
|
|
11
|
+
listTasks: () => ExternalTask[];
|
|
12
|
+
claimAuthorized: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function dispatchLaunchBranches(input: BranchDispatchInput): Promise<LaunchBranchResult>;
|
|
15
|
+
//# sourceMappingURL=branch-dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch-dispatch.d.ts","sourceRoot":"","sources":["../../../src/external/launch/branch-dispatch.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAOL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,wBAAwB,GAAG,SAAS,CAAC;IACtE,eAAe,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACvE,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,SAAS,EAAE,MAAM,YAAY,EAAE,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,kBAAkB,CAAC,CA8E7B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* external/launch/branch-dispatch.ts — the precedence-ordered branch chain of
|
|
3
|
+
* POST /api/external/tasks/:id/launch, extracted from routes.ts so the route
|
|
4
|
+
* shell stays ≤ 300 LOC. Pure dispatch: no HTTP, no persistence.
|
|
5
|
+
*
|
|
6
|
+
* Precedence: phaseTaskRef → campaign → campaign-step → master-run →
|
|
7
|
+
* action-substitution → legacy fallback (always populates).
|
|
8
|
+
*/
|
|
9
|
+
import { applyPhaseTaskBranch, applyCampaignBranch, applyCampaignStepBranch, applyMasterRunBranch, applyActionSubstitutionBranch, applyLegacyFallbackBranch, } from "./_helpers.js";
|
|
10
|
+
export async function dispatchLaunchBranches(input) {
|
|
11
|
+
const { task, parsed, getProjectById, runConfigReader, jsonlExistsOnDisk, listTasks, claimAuthorized, } = input;
|
|
12
|
+
// iterate-2026-05-18-fix-resume-description — a Resume click on a task
|
|
13
|
+
// whose Claude conversation was never established (no <uuid>.jsonl ever
|
|
14
|
+
// observed on disk → there is nothing to resume) is semantically a FRESH
|
|
15
|
+
// start. Route it through the substitution branch so the brief + slash
|
|
16
|
+
// command are injected exactly like a direct Launch. A genuine resume
|
|
17
|
+
// (JSONL on disk) stays on the description-free `--resume` shape.
|
|
18
|
+
const jsonlObserved = Boolean(task.firstJsonlObservedAt);
|
|
19
|
+
const effectivelyFreshStart = !parsed.resume || (!jsonlObserved && !parsed.dryRun);
|
|
20
|
+
// Branch 1 — phaseTaskRef (load-bearing security path).
|
|
21
|
+
let result = await applyPhaseTaskBranch({
|
|
22
|
+
task,
|
|
23
|
+
parsed,
|
|
24
|
+
getProjectById,
|
|
25
|
+
runConfigReader,
|
|
26
|
+
jsonlExistsOnDisk,
|
|
27
|
+
});
|
|
28
|
+
// Branch 2 — campaign autonomous launch (FR-01.34). Command built
|
|
29
|
+
// server-side from a validated slug; null when no campaignSlug / a resume.
|
|
30
|
+
result ??= applyCampaignBranch({
|
|
31
|
+
task,
|
|
32
|
+
parsed,
|
|
33
|
+
effectivelyFreshStart,
|
|
34
|
+
getProjectById,
|
|
35
|
+
});
|
|
36
|
+
// Branch 2.5 — single-sub-iterate launch (FR-01.36).
|
|
37
|
+
result ??= await applyCampaignStepBranch({
|
|
38
|
+
task,
|
|
39
|
+
parsed,
|
|
40
|
+
effectivelyFreshStart,
|
|
41
|
+
getProjectById,
|
|
42
|
+
});
|
|
43
|
+
// Branch 2.6 — single-session master launch (campaign
|
|
44
|
+
// webui-pipeline-convergence W2), gated on a readable single_session
|
|
45
|
+
// run_config; null when no masterRun / a resume.
|
|
46
|
+
result ??= await applyMasterRunBranch({
|
|
47
|
+
task,
|
|
48
|
+
parsed,
|
|
49
|
+
effectivelyFreshStart,
|
|
50
|
+
getProjectById,
|
|
51
|
+
runConfigReader,
|
|
52
|
+
listTasks,
|
|
53
|
+
jsonlExistsOnDisk,
|
|
54
|
+
});
|
|
55
|
+
// Branch 3 — action substitution.
|
|
56
|
+
result ??= applyActionSubstitutionBranch({
|
|
57
|
+
task,
|
|
58
|
+
parsed,
|
|
59
|
+
effectivelyFreshStart,
|
|
60
|
+
getProjectById,
|
|
61
|
+
claimAuthorized,
|
|
62
|
+
});
|
|
63
|
+
if (result)
|
|
64
|
+
return result;
|
|
65
|
+
// Branch 4 — legacy fallback. Always populates.
|
|
66
|
+
return applyLegacyFallbackBranch({
|
|
67
|
+
task,
|
|
68
|
+
parsed,
|
|
69
|
+
jsonlObserved,
|
|
70
|
+
claimAuthorized,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=branch-dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"branch-dispatch.js","sourceRoot":"","sources":["../../../src/external/launch/branch-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,6BAA6B,EAC7B,yBAAyB,GAG1B,MAAM,eAAe,CAAC;AAYvB,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAA0B;IAE1B,MAAM,EACJ,IAAI,EACJ,MAAM,EACN,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,eAAe,GAChB,GAAG,KAAK,CAAC;IAEV,uEAAuE;IACvE,wEAAwE;IACxE,yEAAyE;IACzE,uEAAuE;IACvE,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACzD,MAAM,qBAAqB,GACzB,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEvD,wDAAwD;IACxD,IAAI,MAAM,GAA8B,MAAM,oBAAoB,CAAC;QACjE,IAAI;QACJ,MAAM;QACN,cAAc;QACd,eAAe;QACf,iBAAiB;KAClB,CAAC,CAAC;IAEH,kEAAkE;IAClE,2EAA2E;IAC3E,MAAM,KAAK,mBAAmB,CAAC;QAC7B,IAAI;QACJ,MAAM;QACN,qBAAqB;QACrB,cAAc;KACf,CAAC,CAAC;IAEH,qDAAqD;IACrD,MAAM,KAAK,MAAM,uBAAuB,CAAC;QACvC,IAAI;QACJ,MAAM;QACN,qBAAqB;QACrB,cAAc;KACf,CAAC,CAAC;IAEH,sDAAsD;IACtD,qEAAqE;IACrE,iDAAiD;IACjD,MAAM,KAAK,MAAM,oBAAoB,CAAC;QACpC,IAAI;QACJ,MAAM;QACN,qBAAqB;QACrB,cAAc;QACd,eAAe;QACf,SAAS;QACT,iBAAiB;KAClB,CAAC,CAAC;IAEH,kCAAkC;IAClC,MAAM,KAAK,6BAA6B,CAAC;QACvC,IAAI;QACJ,MAAM;QACN,qBAAqB;QACrB,cAAc;QACd,eAAe;KAChB,CAAC,CAAC;IAEH,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,gDAAgD;IAChD,OAAO,yBAAyB,CAAC;QAC/B,IAAI;QACJ,MAAM;QACN,aAAa;QACb,eAAe;KAChB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
+
import { getReadiness } from "../../core/campaign-readiness.js";
|
|
1
2
|
import { type ExternalTask } from "../../core/sdk-sessions-store.js";
|
|
2
3
|
import type { ExternalRouteProjectView } from "../_shared/helpers.js";
|
|
3
4
|
import type { ParsedLaunchBody } from "./parse-body.js";
|
|
4
5
|
import type { LaunchBranchResult } from "./_helpers.js";
|
|
5
6
|
export declare function isValidCampaignStepId(id: string): boolean;
|
|
7
|
+
/** Serve a cached verdict up to this old; else wait (bounded) for a fresh one. */
|
|
8
|
+
export declare const STEP_READINESS_MAX_AGE_MS = 15000;
|
|
9
|
+
export declare const STEP_READINESS_MAX_WAIT_MS = 10000;
|
|
6
10
|
export declare function applyCampaignStepBranch(args: {
|
|
7
11
|
task: ExternalTask;
|
|
8
12
|
parsed: ParsedLaunchBody;
|
|
9
13
|
effectivelyFreshStart: boolean;
|
|
10
14
|
getProjectById: ((id: string) => ExternalRouteProjectView | undefined) | undefined;
|
|
11
|
-
|
|
15
|
+
/** Test seam; production uses the real cached scheduler bridge. */
|
|
16
|
+
getReadinessFn?: typeof getReadiness;
|
|
17
|
+
}): Promise<LaunchBranchResult | null>;
|
|
12
18
|
//# sourceMappingURL=campaign-step-branch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"campaign-step-branch.d.ts","sourceRoot":"","sources":["../../../src/external/launch/campaign-step-branch.ts"],"names":[],"mappings":"AA8BA,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AASxD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,
|
|
1
|
+
{"version":3,"file":"campaign-step-branch.d.ts","sourceRoot":"","sources":["../../../src/external/launch/campaign-step-branch.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AASxD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,QAAS,CAAC;AAChD,eAAO,MAAM,0BAA0B,QAAS,CAAC;AAEjD,wBAAsB,uBAAuB,CAAC,IAAI,EAAE;IAClD,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,EACV,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,wBAAwB,GAAG,SAAS,CAAC,GACtD,SAAS,CAAC;IACd,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,YAAY,CAAC;CACtC,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CA2IrC"}
|
|
@@ -26,6 +26,7 @@ import { buildCopyCommands } from "../../core/launcher.js";
|
|
|
26
26
|
import { resolveCampaignsDir, isWithin } from "../../core/campaign-paths.js";
|
|
27
27
|
import { readCampaigns } from "../../core/campaign-store.js";
|
|
28
28
|
import { readLoopAttachments } from "../../core/campaign-loop-state.js";
|
|
29
|
+
import { getReadiness } from "../../core/campaign-readiness.js";
|
|
29
30
|
import { isValidCampaignSlug } from "./campaign-branch.js";
|
|
30
31
|
/**
|
|
31
32
|
* Campaign step id = a Sub-Iterates table ID cell (e.g. `B0`, `C1`). Same
|
|
@@ -36,8 +37,12 @@ const CAMPAIGN_STEP_ID_PATTERN = /^[A-Za-z0-9._-]{1,64}$/;
|
|
|
36
37
|
export function isValidCampaignStepId(id) {
|
|
37
38
|
return CAMPAIGN_STEP_ID_PATTERN.test(id) && !id.includes("..");
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
+
/** Serve a cached verdict up to this old; else wait (bounded) for a fresh one. */
|
|
41
|
+
export const STEP_READINESS_MAX_AGE_MS = 15_000;
|
|
42
|
+
export const STEP_READINESS_MAX_WAIT_MS = 10_000;
|
|
43
|
+
export async function applyCampaignStepBranch(args) {
|
|
40
44
|
const { task, parsed, effectivelyFreshStart, getProjectById } = args;
|
|
45
|
+
const readiness = args.getReadinessFn ?? getReadiness;
|
|
41
46
|
const step = parsed.campaignStep;
|
|
42
47
|
if (!step)
|
|
43
48
|
return null; // not a campaign-step launch
|
|
@@ -92,6 +97,69 @@ export function applyCampaignStepBranch(args) {
|
|
|
92
97
|
if (!found.specPath) {
|
|
93
98
|
return { error: { error: "campaign_step_spec_missing", detail: step.stepId }, status: 400 };
|
|
94
99
|
}
|
|
100
|
+
// Scheduler readiness (DAG view, card trg-e542ce03): refuse a hand-launch of
|
|
101
|
+
// a unit the monorepo scheduler reports BLOCKED. Bounded, and fail-OPEN when
|
|
102
|
+
// no verdict can be had (timeout / engine down / unrecognised) — but loudly:
|
|
103
|
+
// the response carries `readinessChecked:false`, never a silent skip. "No
|
|
104
|
+
// loop running" is not a failure: there is nothing to check against.
|
|
105
|
+
let readinessChecked;
|
|
106
|
+
let verdict;
|
|
107
|
+
try {
|
|
108
|
+
verdict = await readiness({ projectRoot: resolved.projectRoot, slug: step.slug }, undefined, { maxAgeMs: STEP_READINESS_MAX_AGE_MS, maxWaitMs: STEP_READINESS_MAX_WAIT_MS });
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
verdict = "timeout"; // a throwing check is "no verdict" — fail open, flagged
|
|
112
|
+
}
|
|
113
|
+
const freshVerdict = async () => {
|
|
114
|
+
try {
|
|
115
|
+
const v = await readiness({ projectRoot: resolved.projectRoot, slug: step.slug }, undefined, { maxAgeMs: 0, maxWaitMs: STEP_READINESS_MAX_WAIT_MS });
|
|
116
|
+
return v === "timeout" ? undefined : v;
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
return undefined;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
if (verdict === "timeout" || (verdict.status !== "report" && verdict.status !== "no-loop")) {
|
|
123
|
+
readinessChecked = false;
|
|
124
|
+
}
|
|
125
|
+
else if (verdict.status === "report") {
|
|
126
|
+
const units = verdict.report.units;
|
|
127
|
+
const lower = step.stepId.toLowerCase();
|
|
128
|
+
const unit = units.find((u) => u.id === step.stepId) ?? units.find((u) => u.id.toLowerCase() === lower);
|
|
129
|
+
// Only a real DEPENDENCY gate (a blocker naming another unit) refuses. A
|
|
130
|
+
// campaign-level gate (id:null — unsupported strategy, finalized loop) says
|
|
131
|
+
// the batch scheduler cannot run this campaign, not that this step must not
|
|
132
|
+
// be hand-run: launch, flagged unchecked.
|
|
133
|
+
const dependencyBlocked = unit?.state === "pending" && !unit.ready && unit.blocked_by.some((x) => x.id !== null);
|
|
134
|
+
if (!unit) {
|
|
135
|
+
readinessChecked = false;
|
|
136
|
+
}
|
|
137
|
+
else if (dependencyBlocked) {
|
|
138
|
+
// Never refuse on a cached "waiting": a dependency may have merged in
|
|
139
|
+
// the last few seconds. Recompute once, uncached, before saying no.
|
|
140
|
+
// Refuse ONLY on a fresh report that confirms the dependency blocker. No
|
|
141
|
+
// fresh answer (timeout / down / unit gone) fails open like everywhere else.
|
|
142
|
+
const fresh = await freshVerdict();
|
|
143
|
+
if (fresh?.status === "report") {
|
|
144
|
+
const freshUnit = fresh.report.units.find((u) => u.id === unit.id);
|
|
145
|
+
if (!freshUnit) {
|
|
146
|
+
readinessChecked = false;
|
|
147
|
+
}
|
|
148
|
+
else if (freshUnit.state === "pending" && !freshUnit.ready) {
|
|
149
|
+
if (freshUnit.blocked_by.some((x) => x.id !== null)) {
|
|
150
|
+
return { error: { error: "campaign_step_not_ready", detail: step.stepId, blocked_by: freshUnit.blocked_by }, status: 409 };
|
|
151
|
+
}
|
|
152
|
+
readinessChecked = false; // only a campaign-level gate remains
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
else if (fresh?.status !== "no-loop") {
|
|
156
|
+
readinessChecked = false;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else if (unit.state === "pending" && !unit.ready) {
|
|
160
|
+
readinessChecked = false; // campaign-level gate only
|
|
161
|
+
}
|
|
162
|
+
}
|
|
95
163
|
const commands = buildCopyCommands({
|
|
96
164
|
sessionUuid: task.sessionUuid,
|
|
97
165
|
cwd: task.cwd,
|
|
@@ -103,6 +171,6 @@ export function applyCampaignStepBranch(args) {
|
|
|
103
171
|
state: "awaiting_external_start",
|
|
104
172
|
launchedAt: new Date().toISOString(),
|
|
105
173
|
};
|
|
106
|
-
return { commands, taskUpdate };
|
|
174
|
+
return readinessChecked === false ? { commands, taskUpdate, readinessChecked } : { commands, taskUpdate };
|
|
107
175
|
}
|
|
108
176
|
//# sourceMappingURL=campaign-step-branch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"campaign-step-branch.js","sourceRoot":"","sources":["../../../src/external/launch/campaign-step-branch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"campaign-step-branch.js","sourceRoot":"","sources":["../../../src/external/launch/campaign-step-branch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exactly the toolset already granted to this codebase's own autonomous
|
|
3
|
+
* build/iterate/test agents (`shipwright-build:section-builder`,
|
|
4
|
+
* `shipwright-iterate:sub-iterate-runner`, `shipwright-test:test-runner` —
|
|
5
|
+
* see their `.claude/agents` tool lists): Read, Write, Edit, Bash, Glob,
|
|
6
|
+
* Grep. That precedent is the "considered allow-list" the originating card
|
|
7
|
+
* asks for, not a guess — it is the toolset this project already trusts an
|
|
8
|
+
* unattended agent doing iterate-shaped work with, on this same machine.
|
|
9
|
+
* `Task` (nested subagent spawn) and network tools (`WebFetch`,
|
|
10
|
+
* `WebSearch`) are deliberately excluded — none of those three agents
|
|
11
|
+
* carry them either.
|
|
12
|
+
*/
|
|
13
|
+
export declare const CLAIM_EXECUTOR_ALLOWED_TOOLS: readonly string[];
|
|
14
|
+
/**
|
|
15
|
+
* Verified live (this module's own header comment): a tool named in
|
|
16
|
+
* `CLAIM_EXECUTOR_ALLOWED_TOOLS` runs with no prompt under this mode, and
|
|
17
|
+
* nothing outside that list is ever offered to prompt for. Matches
|
|
18
|
+
* leadwright's own `spawnLeadBeat` default (`lib/lead-spawn-types.ts`).
|
|
19
|
+
*/
|
|
20
|
+
export declare const CLAIM_EXECUTOR_PERMISSION_MODE = "dontAsk";
|
|
21
|
+
export interface ClaimExecutorLaunchOverrides {
|
|
22
|
+
toolsAllowlist: readonly string[];
|
|
23
|
+
permissionMode: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The single call site every claim-authorized launch branch reads its
|
|
27
|
+
* perimeter from — one place a future operator changes what a claimed
|
|
28
|
+
* executor may do, per the originating card's requirement (d).
|
|
29
|
+
*/
|
|
30
|
+
export declare function claimExecutorLaunchOverrides(): ClaimExecutorLaunchOverrides;
|
|
31
|
+
//# sourceMappingURL=claim-executor-permissions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-executor-permissions.d.ts","sourceRoot":"","sources":["../../../src/external/launch/claim-executor-permissions.ts"],"names":[],"mappings":"AAqEA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAOzD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,YAAY,CAAC;AAExD,MAAM,WAAW,4BAA4B;IAC3C,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,IAAI,4BAA4B,CAK3E"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* external/launch/claim-executor-permissions.ts — FR-04.22 permission
|
|
3
|
+
* perimeter, single source of truth (iterate-2026-09-06-claim-launch-
|
|
4
|
+
* permission-perimeter).
|
|
5
|
+
*
|
|
6
|
+
* WHY THIS EXISTS: leadwright's stage-2 executor (`lib/lead-task-launch.ts`)
|
|
7
|
+
* runs the command this repo hands back via a real shell, detached and
|
|
8
|
+
* unref'd — that process outlives the daemon beat that started it and holds
|
|
9
|
+
* a shell, git, and the machine's credentials. Until this change, that
|
|
10
|
+
* command carried no `--permission-mode` and no tool allow-list: the
|
|
11
|
+
* full-authority form. leadwright's own spec (§8) names a residual risk —
|
|
12
|
+
* "a nested `claude` process with its own config writes out of P2" — that
|
|
13
|
+
* PRESUPPOSES a perimeter is armed and merely bypassable by a nested
|
|
14
|
+
* process. It was not armed at all; this module is that perimeter.
|
|
15
|
+
*
|
|
16
|
+
* THE MECHANISM, EMPIRICALLY VERIFIED against a real `claude` CLI 2.1.263
|
|
17
|
+
* (iterate-2026-09-06, this run — not assumed from --help text alone),
|
|
18
|
+
* exactly like leadwright verified its own beat-spawn mechanism
|
|
19
|
+
* (`lib/lead-spawn.ts`, iterate-2026-08-30-lead-spawn-contract):
|
|
20
|
+
*
|
|
21
|
+
* - `--allowed-tools` alone does NOT restrict anything — leadwright
|
|
22
|
+
* already proved this (5 permission modes probed, Bash executed every
|
|
23
|
+
* time) and this run did not re-litigate it.
|
|
24
|
+
* - `--tools <names>` (a comma-separated allow-list) DOES genuinely
|
|
25
|
+
* restrict the model's function set: a live probe with
|
|
26
|
+
* `--tools "Bash,Read,Edit,Write,Glob,Grep" --permission-mode dontAsk`
|
|
27
|
+
* produced a session whose own `init` event lists exactly
|
|
28
|
+
* `["Bash","Edit","Glob","Grep","Read","Write"]` — WebFetch/Task/
|
|
29
|
+
* WebSearch/NotebookEdit are structurally ABSENT from the model's tool
|
|
30
|
+
* set, not merely unapproved, so there is nothing to prompt for or
|
|
31
|
+
* bypass. A second probe naming ONLY `Read,Edit` (no Bash) produced a
|
|
32
|
+
* session that could not invoke Bash at all ("the Bash tool isn't
|
|
33
|
+
* available in this session" — never attempted, never refused, simply
|
|
34
|
+
* not offered).
|
|
35
|
+
* - Deliberately WITHOUT `--restricted`: unlike leadwright's beat (which
|
|
36
|
+
* never needs a shell), THIS executor's own legitimate job — running a
|
|
37
|
+
* `/shipwright-iterate` — needs git, npm and file writes, i.e. Bash.
|
|
38
|
+
* `--restricted`'s own `--help` text says it additionally ignores
|
|
39
|
+
* user/project/local settings files and unloads every marketplace
|
|
40
|
+
* plugin; a live probe confirmed this (`"plugins":[]` in the init event
|
|
41
|
+
* under `--restricted`, vs. the project's full plugin roster loaded
|
|
42
|
+
* normally under plain `--tools`). Shipwright's own hooks and plugins
|
|
43
|
+
* (CLAUDE.md rule 9: `--plugin-dir` must be re-passed every launch) are
|
|
44
|
+
* load-bearing for an iterate run, so `--restricted` would break the
|
|
45
|
+
* very job this executor exists to do — the card's own point (e).
|
|
46
|
+
* `--tools` alone, verified above, restricts the toolset just as
|
|
47
|
+
* genuinely without that collateral damage.
|
|
48
|
+
* - `--permission-mode dontAsk` (leadwright's own choice, re-verified
|
|
49
|
+
* here): a tool named in `--tools` runs with NO prompt and NO entry in
|
|
50
|
+
* `permission_denials`; nothing outside that list can be prompted for
|
|
51
|
+
* in the first place, since the model never sees it as a function.
|
|
52
|
+
* This resolves the specific worry the originating card names — "a run
|
|
53
|
+
* acquires tools through the interactive dialog and looks compliant
|
|
54
|
+
* anyway" — because there is no dialog to acquire anything through: the
|
|
55
|
+
* detached, `stdio:"ignore"` executor process has no terminal to show
|
|
56
|
+
* one on, and `dontAsk` never tries.
|
|
57
|
+
*
|
|
58
|
+
* WHAT THIS DOES NOT CLOSE (leadwright spec §8, still true): this is not OS
|
|
59
|
+
* sandboxing. `Task` is deliberately excluded from the allow-list below —
|
|
60
|
+
* matching leadwright's own Trap #4 finding that a nested `claude`/subagent
|
|
61
|
+
* process writes past any perimeter the same way a shell would — but `Bash`
|
|
62
|
+
* itself stays allowed (this executor's whole job needs it), and a `claude`
|
|
63
|
+
* binary invoked directly as a shell command is not a tool call this
|
|
64
|
+
* perimeter can see or stop. That is the residual risk leadwright's spec
|
|
65
|
+
* already names; this module makes the REST of the surface (WebFetch,
|
|
66
|
+
* Task-as-a-tool-call, an unbounded permission dialog) genuinely closed
|
|
67
|
+
* instead of merely undocumented.
|
|
68
|
+
*/
|
|
69
|
+
/**
|
|
70
|
+
* Exactly the toolset already granted to this codebase's own autonomous
|
|
71
|
+
* build/iterate/test agents (`shipwright-build:section-builder`,
|
|
72
|
+
* `shipwright-iterate:sub-iterate-runner`, `shipwright-test:test-runner` —
|
|
73
|
+
* see their `.claude/agents` tool lists): Read, Write, Edit, Bash, Glob,
|
|
74
|
+
* Grep. That precedent is the "considered allow-list" the originating card
|
|
75
|
+
* asks for, not a guess — it is the toolset this project already trusts an
|
|
76
|
+
* unattended agent doing iterate-shaped work with, on this same machine.
|
|
77
|
+
* `Task` (nested subagent spawn) and network tools (`WebFetch`,
|
|
78
|
+
* `WebSearch`) are deliberately excluded — none of those three agents
|
|
79
|
+
* carry them either.
|
|
80
|
+
*/
|
|
81
|
+
export const CLAIM_EXECUTOR_ALLOWED_TOOLS = [
|
|
82
|
+
"Bash",
|
|
83
|
+
"Read",
|
|
84
|
+
"Write",
|
|
85
|
+
"Edit",
|
|
86
|
+
"Glob",
|
|
87
|
+
"Grep",
|
|
88
|
+
];
|
|
89
|
+
/**
|
|
90
|
+
* Verified live (this module's own header comment): a tool named in
|
|
91
|
+
* `CLAIM_EXECUTOR_ALLOWED_TOOLS` runs with no prompt under this mode, and
|
|
92
|
+
* nothing outside that list is ever offered to prompt for. Matches
|
|
93
|
+
* leadwright's own `spawnLeadBeat` default (`lib/lead-spawn-types.ts`).
|
|
94
|
+
*/
|
|
95
|
+
export const CLAIM_EXECUTOR_PERMISSION_MODE = "dontAsk";
|
|
96
|
+
/**
|
|
97
|
+
* The single call site every claim-authorized launch branch reads its
|
|
98
|
+
* perimeter from — one place a future operator changes what a claimed
|
|
99
|
+
* executor may do, per the originating card's requirement (d).
|
|
100
|
+
*/
|
|
101
|
+
export function claimExecutorLaunchOverrides() {
|
|
102
|
+
return {
|
|
103
|
+
toolsAllowlist: CLAIM_EXECUTOR_ALLOWED_TOOLS,
|
|
104
|
+
permissionMode: CLAIM_EXECUTOR_PERMISSION_MODE,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=claim-executor-permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-executor-permissions.js","sourceRoot":"","sources":["../../../src/external/launch/claim-executor-permissions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmEG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAsB;IAC7D,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,SAAS,CAAC;AAOxD;;;;GAIG;AACH,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,cAAc,EAAE,4BAA4B;QAC5C,cAAc,EAAE,8BAA8B;KAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type CopyCommandForms } from "../../core/launcher.js";
|
|
2
|
+
import type { ClaimExecutorLaunchOverrides } from "./claim-executor-permissions.js";
|
|
3
|
+
export type ArmTemplateResult = {
|
|
4
|
+
ok: true;
|
|
5
|
+
commands: CopyCommandForms;
|
|
6
|
+
} | {
|
|
7
|
+
ok: false;
|
|
8
|
+
detail: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* True only when the RAW `command_template` (before any substitution)
|
|
12
|
+
* literally declares the `--session-id {task.uuid}` placeholder. This is
|
|
13
|
+
* the attacker-uncontrollable precondition for arming: `command_template`
|
|
14
|
+
* comes from project configuration (bundled defaults or a project's own
|
|
15
|
+
* `.shipwright-webui/actions.json`), never from the launch request body, so
|
|
16
|
+
* a caller cannot forge this check the way they could forge a coincidental
|
|
17
|
+
* match in the RENDERED output (see module header).
|
|
18
|
+
*/
|
|
19
|
+
export declare function templateDeclaresSessionIdAnchor(commandTemplate: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Inserts `--tools <allow-list> --permission-mode <mode>` immediately after
|
|
22
|
+
* the substituted `--session-id <this task's sessionUuid>` token, on all
|
|
23
|
+
* three shell forms. The anchor is the task's own UUID rendered UNQUOTED —
|
|
24
|
+
* verified live (`actions-substitute.ts`'s `{task.uuid}` case returns the
|
|
25
|
+
* raw value, and its per-shell `q()` wrapping is applied only to
|
|
26
|
+
* user-derived placeholders, not this one; a debug probe against the real
|
|
27
|
+
* substitution engine confirmed `--session-id 11111111-...` with no quotes
|
|
28
|
+
* on posix, cmd AND powershell). The flags THEMSELVES still go through the
|
|
29
|
+
* matching shell's own quoter (`FLAG_QUOTERS`) — only the anchor is
|
|
30
|
+
* unquoted, matching the substitution engine's own convention for a
|
|
31
|
+
* server-generated UUID. The flags are inserted at the anchor's FIRST
|
|
32
|
+
* occurrence only when that occurrence is provably unique in the rendered
|
|
33
|
+
* string (checked via `indexOf` === `lastIndexOf`) — a custom project
|
|
34
|
+
* `command_template` can interpolate other placeholders (e.g.
|
|
35
|
+
* `{task.description}`) ahead of `{task.uuid}`, and a caller-supplied value
|
|
36
|
+
* that happens to contain this task's own UUID would otherwise let the
|
|
37
|
+
* flags land inside unrelated text while the real `--session-id` flag stays
|
|
38
|
+
* unarmed and the function still reported success. A non-unique anchor
|
|
39
|
+
* fails closed exactly like a missing one.
|
|
40
|
+
*/
|
|
41
|
+
export declare function armActionTemplatePermissionPerimeter(commands: CopyCommandForms, sessionUuid: string, overrides: ClaimExecutorLaunchOverrides): ArmTemplateResult;
|
|
42
|
+
//# sourceMappingURL=claim-executor-template-arming.d.ts.map
|