@svenroth-ai/shipwright 0.26.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-D3wpPNZP.js → EmbeddedTerminal-4xgNUBUu.js} +19 -19
- package/client/dist/assets/{abnfDiagram-VRR7QNED-BkLIltB3.js → abnfDiagram-VRR7QNED-BdCNbaqc.js} +1 -1
- package/client/dist/assets/{arc-Sw-Gh0nI.js → arc-DoZTTE1N.js} +1 -1
- package/client/dist/assets/{architectureDiagram-ZJ3FMSHR-rdxUi9Ks.js → architectureDiagram-ZJ3FMSHR-DFTG4KtO.js} +1 -1
- package/client/dist/assets/{blockDiagram-677ZJIJ3-Ch_9dj8a.js → blockDiagram-677ZJIJ3-C34UBjOB.js} +1 -1
- package/client/dist/assets/{c4Diagram-LMCZKHZV-CkFlO65x.js → c4Diagram-LMCZKHZV-CbqAB1Ou.js} +1 -1
- package/client/dist/assets/channel-DBcZw7Kn.js +1 -0
- package/client/dist/assets/{chunk-2Q5K7J3B-CypX83xu.js → chunk-2Q5K7J3B-4N6AnmBJ.js} +1 -1
- package/client/dist/assets/{chunk-32BRIVSS-DxVLYGdl.js → chunk-32BRIVSS-Cs67LiCy.js} +1 -1
- package/client/dist/assets/{chunk-5VM5RSS4-Cxk1evhx.js → chunk-5VM5RSS4-Bwd7rtD3.js} +1 -1
- package/client/dist/assets/{chunk-EX3LRPZG-n9q5S4yJ.js → chunk-EX3LRPZG-CQqGfptD.js} +1 -1
- package/client/dist/assets/{chunk-JWPE2WC7-jeL4xvir.js → chunk-JWPE2WC7-ClvKd4PN.js} +1 -1
- package/client/dist/assets/{chunk-MOJQB5TN-DDSHN0cj.js → chunk-MOJQB5TN-Cwvj8GE1.js} +1 -1
- package/client/dist/assets/{chunk-RYQCIY6F-C0bo383g.js → chunk-RYQCIY6F-DrWMx37d.js} +1 -1
- package/client/dist/assets/{chunk-V7JOEXUC-C0jDXXAU.js → chunk-V7JOEXUC-CYFfa4PY.js} +1 -1
- package/client/dist/assets/{chunk-VR4S4FIN-h-Rr4Pn2.js → chunk-VR4S4FIN-B5eWtesm.js} +1 -1
- package/client/dist/assets/{chunk-XXDRQBXY-BexSo0-s.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-BQXzaioj.js → cose-bilkent-JH36ORCC-C76Yia6h.js} +1 -1
- package/client/dist/assets/{cynefin-VYW2F7L2-BJIofhfe.js → cynefin-VYW2F7L2-pJe7rdTi.js} +1 -1
- package/client/dist/assets/{cynefinDiagram-TSTJHNR4-DmPqTM1T.js → cynefinDiagram-TSTJHNR4-EeHQ7dYV.js} +1 -1
- package/client/dist/assets/{dagre-VKFMJZFB-1xljvw6X.js → dagre-VKFMJZFB-VXOY6IHR.js} +1 -1
- package/client/dist/assets/{diagram-FQU43EPY-iyL9muCG.js → diagram-FQU43EPY-DW_-leqw.js} +1 -1
- package/client/dist/assets/{diagram-G47NLZAW-DREp2Th6.js → diagram-G47NLZAW-C_hsLD4u.js} +1 -1
- package/client/dist/assets/{diagram-NH7WQ7WH-h0X3Is2S.js → diagram-NH7WQ7WH-CbeQuO_f.js} +1 -1
- package/client/dist/assets/{diagram-OA4YK3LP-Bj8YZRFJ.js → diagram-OA4YK3LP-DRHY5d_c.js} +1 -1
- package/client/dist/assets/{diagram-WEI45ONY-BZOf805d.js → diagram-WEI45ONY-B87OYR_S.js} +1 -1
- package/client/dist/assets/{ebnfDiagram-CCIWWBDH-DO5JnXda.js → ebnfDiagram-CCIWWBDH-B8Z8WHF6.js} +1 -1
- package/client/dist/assets/{erDiagram-Q63AITRT-DRgcqg1T.js → erDiagram-Q63AITRT-DaD7oa9H.js} +1 -1
- package/client/dist/assets/{flowDiagram-23GEKE2U-C3J9QmrW.js → flowDiagram-23GEKE2U-GrMVpsea.js} +1 -1
- package/client/dist/assets/{ganttDiagram-NO4QXBWP-BIEl3Tkm.js → ganttDiagram-NO4QXBWP-K3X0DYBa.js} +1 -1
- package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-BNF0tFWC.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-DEyFxiyY.js → infoDiagram-FWYZ7A6U-Fi8fQ95G.js} +1 -1
- package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-B_ehlg3I.js → ishikawaDiagram-FXEZZL3T-CrN7QJzt.js} +1 -1
- package/client/dist/assets/{journeyDiagram-5HDEW3XC-Dp00FyJS.js → journeyDiagram-5HDEW3XC-XHIsl7rM.js} +1 -1
- package/client/dist/assets/{kanban-definition-HUTT4EX6-CTAf16q8.js → kanban-definition-HUTT4EX6-A6HJqHw7.js} +1 -1
- package/client/dist/assets/{linear-9vNUgmYd.js → linear-D1vF9IQB.js} +1 -1
- package/client/dist/assets/{mermaid.core-A6tjaEVD.js → mermaid.core-D6w9zlA0.js} +4 -4
- package/client/dist/assets/{mindmap-definition-LN4V7U3C-DRW3bmCY.js → mindmap-definition-LN4V7U3C-CxRkUj6Z.js} +1 -1
- package/client/dist/assets/{pegDiagram-2B236MQR-DJFCjHp2.js → pegDiagram-2B236MQR-Bs9dp-8a.js} +1 -1
- package/client/dist/assets/{pieDiagram-ENE6RG2P-KRd-sGvC.js → pieDiagram-ENE6RG2P-DBWILzB8.js} +1 -1
- package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-9TLZE3Hu.js → quadrantDiagram-ABIIQ3AL-DrCVJJx6.js} +1 -1
- package/client/dist/assets/{railroadDiagram-RFXS5EU6-y4tLtjXg.js → railroadDiagram-RFXS5EU6-BdPW2dNf.js} +1 -1
- package/client/dist/assets/{requirementDiagram-TGXJPOKE-B9EOQDQM.js → requirementDiagram-TGXJPOKE-Bj_g3tC5.js} +1 -1
- package/client/dist/assets/{sankeyDiagram-HTMAVEWB-zfwiDzkT.js → sankeyDiagram-HTMAVEWB-BGL9NnsS.js} +1 -1
- package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-DW1LWepL.js → sequenceDiagram-DBY2YBRQ-DEirxTZY.js} +1 -1
- package/client/dist/assets/{sizeCapture-X5ZJPWSS-BM81Mik0.js → sizeCapture-X5ZJPWSS-BtLrvrea.js} +1 -1
- package/client/dist/assets/{stateDiagram-2N3HPSRC-D0EMIw1w.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-CKXNCX6M.js → swimlanes-5IMT3BWC-PMRQzNhU.js} +2 -2
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-DMLbRFiO.js +8 -0
- package/client/dist/assets/{timeline-definition-FHXFAJF6-ByzIfvL5.js → timeline-definition-FHXFAJF6-CnBKJtD_.js} +1 -1
- package/client/dist/assets/{vennDiagram-L72KCM5P-Xep38xBH.js → vennDiagram-L72KCM5P-BYmiJYoh.js} +1 -1
- package/client/dist/assets/{wardleyDiagram-EHGQE667-DKWDpx6g.js → wardleyDiagram-EHGQE667-DU7vW8q3.js} +1 -1
- package/client/dist/assets/{xychartDiagram-FW5EYKEG-BGcwZTnu.js → xychartDiagram-FW5EYKEG-BEtPvBSU.js} +1 -1
- package/client/dist/index.html +2 -2
- package/lib/preflight.mjs +24 -5
- package/lib/probes.mjs +10 -4
- package/lib/server.mjs +149 -12
- 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-merge.d.ts +19 -0
- package/server/dist/core/sdk-sessions-merge.d.ts.map +1 -1
- package/server/dist/core/sdk-sessions-merge.js +19 -5
- package/server/dist/core/sdk-sessions-merge.js.map +1 -1
- package/server/dist/core/sdk-sessions-refresh.d.ts +50 -0
- package/server/dist/core/sdk-sessions-refresh.d.ts.map +1 -0
- package/server/dist/core/sdk-sessions-refresh.js +69 -0
- package/server/dist/core/sdk-sessions-refresh.js.map +1 -0
- package/server/dist/core/sdk-sessions-store.d.ts +48 -0
- package/server/dist/core/sdk-sessions-store.d.ts.map +1 -1
- package/server/dist/core/sdk-sessions-store.js +8 -9
- 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/shipwright-plugin-version-reader.d.ts +15 -0
- package/server/dist/core/shipwright-plugin-version-reader.d.ts.map +1 -0
- package/server/dist/core/shipwright-plugin-version-reader.js +49 -0
- package/server/dist/core/shipwright-plugin-version-reader.js.map +1 -0
- 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 +2 -25
- 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/_lead.d.ts +23 -0
- package/server/dist/external/inbox/_lead.d.ts.map +1 -0
- package/server/dist/external/inbox/_lead.js +83 -0
- package/server/dist/external/inbox/_lead.js.map +1 -0
- package/server/dist/external/inbox/_types.d.ts +55 -0
- package/server/dist/external/inbox/_types.d.ts.map +1 -0
- package/server/dist/external/inbox/_types.js +13 -0
- package/server/dist/external/inbox/_types.js.map +1 -0
- 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 +43 -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 +51 -0
- package/server/dist/external/launch/claim-holder-gate.d.ts.map +1 -0
- package/server/dist/external/launch/claim-holder-gate.js +95 -0
- package/server/dist/external/launch/claim-holder-gate.js.map +1 -0
- 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 +99 -128
- 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/lead-question-threads.d.ts +46 -0
- package/server/dist/external/org/lead-question-threads.d.ts.map +1 -0
- package/server/dist/external/org/lead-question-threads.js +132 -0
- package/server/dist/external/org/lead-question-threads.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 +11 -0
- package/server/dist/external/org/mount.d.ts.map +1 -1
- package/server/dist/external/org/mount.js +7 -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/usage.d.ts.map +1 -1
- package/server/dist/external/org/usage.js +20 -2
- package/server/dist/external/org/usage.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 +12 -3
- 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 +27 -0
- package/server/dist/routes/diagnostics.d.ts.map +1 -1
- package/server/dist/routes/diagnostics.js +5 -1
- 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-threads-composite.d.ts +24 -0
- package/server/dist/routes/org-threads-composite.d.ts.map +1 -0
- package/server/dist/routes/org-threads-composite.js +51 -0
- package/server/dist/routes/org-threads-composite.js.map +1 -0
- 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 +14 -0
- package/server/dist/routes/org.d.ts.map +1 -1
- package/server/dist/routes/org.js +63 -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 +37 -1
- package/server/dist/terminal/pty-manager.d.ts.map +1 -1
- package/server/dist/terminal/pty-manager.js +33 -3
- package/server/dist/terminal/pty-manager.js.map +1 -1
- package/server/dist/terminal/pty-write-chunker.d.ts +109 -0
- package/server/dist/terminal/pty-write-chunker.d.ts.map +1 -0
- package/server/dist/terminal/pty-write-chunker.js +234 -0
- package/server/dist/terminal/pty-write-chunker.js.map +1 -0
- 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 +76 -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-BYPbLjRl.js +0 -1
- package/client/dist/assets/classDiagram-OUVF2IWQ-CsFIeTju.js +0 -1
- package/client/dist/assets/classDiagram-v2-EOCWNBFH-CsFIeTju.js +0 -1
- package/client/dist/assets/index-BnTOrFHb.js +0 -829
- package/client/dist/assets/index-CYPc6qxw.css +0 -1
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-B3E4_xxT.js +0 -1
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-BegQBqnC.js +0 -8
|
@@ -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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-executor-template-arming.d.ts","sourceRoot":"","sources":["../../../src/external/launch/claim-executor-template-arming.ts"],"names":[],"mappings":"AAkDA,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAEpF,MAAM,MAAM,iBAAiB,GACzB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAQlC;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAEhF;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,gBAAgB,EAC1B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,4BAA4B,GACtC,iBAAiB,CA8BnB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* external/launch/claim-executor-template-arming.ts — FR-04.22 permission
|
|
3
|
+
* perimeter for the ACTION-TEMPLATE launch path (iterate-2026-09-06-claim-
|
|
4
|
+
* launch-permission-perimeter, Stage-1 review follow-up).
|
|
5
|
+
*
|
|
6
|
+
* `action-substitution-branch.ts` builds its command via
|
|
7
|
+
* `substitutePlaceholders(action.command_template, ...)` — a completely
|
|
8
|
+
* separate rendering path from `core/launcher.ts`'s `buildCopyCommands`/
|
|
9
|
+
* `LaunchArgs`, so `launcher-permission-flags.ts`'s argv-level flags never
|
|
10
|
+
* reach it. Spec review (Stage 1) proved this branch, not the legacy
|
|
11
|
+
* fallback, is the one leadwright's real tasks actually hit: leadwright's
|
|
12
|
+
* `CreateExternalTaskBody.actionId` is a REQUIRED field
|
|
13
|
+
* (`webui-client.ts`), persisted onto the task
|
|
14
|
+
* (`external/tasks/create.ts`), and `parse-body.ts`'s once-set-always-used
|
|
15
|
+
* contract means a claim-only `{ claimToken }` launch body still resolves
|
|
16
|
+
* `parsed.actionId` from that persisted value — so
|
|
17
|
+
* `applyActionSubstitutionBranch` fires, not the legacy fallback.
|
|
18
|
+
*
|
|
19
|
+
* `command_template` is a project-configurable string (bundled defaults in
|
|
20
|
+
* `config/default-actions.json`, or a project's own `actions.json` via
|
|
21
|
+
* `loadActionsForProject`) — NOT a fixed shape this module can trust
|
|
22
|
+
* blindly. Every bundled template starts `--session-id {task.uuid} ...`,
|
|
23
|
+
* but a custom project template is not guaranteed to. FAIL CLOSED: if the
|
|
24
|
+
* expected `--session-id <this task's own uuid>` anchor is not found,
|
|
25
|
+
* verbatim, in a rendered shell form, this module refuses to arm rather
|
|
26
|
+
* than silently returning an unrestricted command that LOOKS armed because
|
|
27
|
+
* the caller asked for arming (the exact "looks compliant, isn't" failure
|
|
28
|
+
* mode this whole card exists to close).
|
|
29
|
+
*
|
|
30
|
+
* Stage-3 doubt review found the rendered-output anchor search alone is not
|
|
31
|
+
* enough: a template that never emits the literal `--session-id {task.uuid}`
|
|
32
|
+
* placeholder at all could still coincidentally contain a UNIQUE occurrence
|
|
33
|
+
* of `--session-id <this task's uuid>` inside a substituted, caller-supplied
|
|
34
|
+
* placeholder (e.g. `{task.description?}`, settable in the very same
|
|
35
|
+
* claim-authorized launch body) — arming would then splice the flags inside
|
|
36
|
+
* quoted user text, not a real CLI flag, and still report success. Callers
|
|
37
|
+
* MUST call `templateDeclaresSessionIdAnchor` on the RAW (pre-substitution)
|
|
38
|
+
* `command_template` first and refuse to arm if it returns false — that
|
|
39
|
+
* check is immune to request-supplied content because the template comes
|
|
40
|
+
* from project configuration, not the launch body.
|
|
41
|
+
*
|
|
42
|
+
* The doubt review also found a template can independently re-declare
|
|
43
|
+
* `--tools`/`--permission-mode` via its own `{task.parameters?}` (a
|
|
44
|
+
* project's custom parameter schema may set `cli_flag: "--tools"` — the
|
|
45
|
+
* allowlist regex in `types/action-schema.ts` permits it), which could
|
|
46
|
+
* override or conflict with the injected flags depending on Claude CLI's
|
|
47
|
+
* duplicate-flag precedence. This module therefore also fails closed if the
|
|
48
|
+
* rendered command already contains either flag BEFORE arming.
|
|
49
|
+
*/
|
|
50
|
+
import { qPs, qCmd, qPosix } from "../../core/launcher.js";
|
|
51
|
+
const FLAG_QUOTERS = {
|
|
52
|
+
powershell: qPs,
|
|
53
|
+
cmd: qCmd,
|
|
54
|
+
posix: qPosix,
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* True only when the RAW `command_template` (before any substitution)
|
|
58
|
+
* literally declares the `--session-id {task.uuid}` placeholder. This is
|
|
59
|
+
* the attacker-uncontrollable precondition for arming: `command_template`
|
|
60
|
+
* comes from project configuration (bundled defaults or a project's own
|
|
61
|
+
* `.shipwright-webui/actions.json`), never from the launch request body, so
|
|
62
|
+
* a caller cannot forge this check the way they could forge a coincidental
|
|
63
|
+
* match in the RENDERED output (see module header).
|
|
64
|
+
*/
|
|
65
|
+
export function templateDeclaresSessionIdAnchor(commandTemplate) {
|
|
66
|
+
return commandTemplate.includes("--session-id {task.uuid}");
|
|
67
|
+
}
|
|
68
|
+
const CONFLICTING_FLAG_PATTERN = /(^|\s)(--tools|--permission-mode)(\s|$)/;
|
|
69
|
+
/**
|
|
70
|
+
* Inserts `--tools <allow-list> --permission-mode <mode>` immediately after
|
|
71
|
+
* the substituted `--session-id <this task's sessionUuid>` token, on all
|
|
72
|
+
* three shell forms. The anchor is the task's own UUID rendered UNQUOTED —
|
|
73
|
+
* verified live (`actions-substitute.ts`'s `{task.uuid}` case returns the
|
|
74
|
+
* raw value, and its per-shell `q()` wrapping is applied only to
|
|
75
|
+
* user-derived placeholders, not this one; a debug probe against the real
|
|
76
|
+
* substitution engine confirmed `--session-id 11111111-...` with no quotes
|
|
77
|
+
* on posix, cmd AND powershell). The flags THEMSELVES still go through the
|
|
78
|
+
* matching shell's own quoter (`FLAG_QUOTERS`) — only the anchor is
|
|
79
|
+
* unquoted, matching the substitution engine's own convention for a
|
|
80
|
+
* server-generated UUID. The flags are inserted at the anchor's FIRST
|
|
81
|
+
* occurrence only when that occurrence is provably unique in the rendered
|
|
82
|
+
* string (checked via `indexOf` === `lastIndexOf`) — a custom project
|
|
83
|
+
* `command_template` can interpolate other placeholders (e.g.
|
|
84
|
+
* `{task.description}`) ahead of `{task.uuid}`, and a caller-supplied value
|
|
85
|
+
* that happens to contain this task's own UUID would otherwise let the
|
|
86
|
+
* flags land inside unrelated text while the real `--session-id` flag stays
|
|
87
|
+
* unarmed and the function still reported success. A non-unique anchor
|
|
88
|
+
* fails closed exactly like a missing one.
|
|
89
|
+
*/
|
|
90
|
+
export function armActionTemplatePermissionPerimeter(commands, sessionUuid, overrides) {
|
|
91
|
+
const armed = {};
|
|
92
|
+
for (const shellForm of Object.keys(FLAG_QUOTERS)) {
|
|
93
|
+
const q = FLAG_QUOTERS[shellForm];
|
|
94
|
+
const marker = `--session-id ${sessionUuid}`;
|
|
95
|
+
const source = commands[shellForm];
|
|
96
|
+
const idx = source.indexOf(marker);
|
|
97
|
+
if (idx === -1) {
|
|
98
|
+
return {
|
|
99
|
+
ok: false,
|
|
100
|
+
detail: `no '--session-id ${sessionUuid}' anchor found in the ${shellForm} command form — cannot arm the permission perimeter`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
if (idx !== source.lastIndexOf(marker)) {
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
detail: `'--session-id ${sessionUuid}' anchor is not unique in the ${shellForm} command form — cannot safely arm the permission perimeter`,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (CONFLICTING_FLAG_PATTERN.test(source)) {
|
|
110
|
+
return {
|
|
111
|
+
ok: false,
|
|
112
|
+
detail: `the ${shellForm} command form already contains a --tools or --permission-mode flag before arming — refusing to risk a duplicate/conflicting flag`,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const insertAt = idx + marker.length;
|
|
116
|
+
const flags = ` --tools ${q(overrides.toolsAllowlist.join(","))} --permission-mode ${q(overrides.permissionMode)}`;
|
|
117
|
+
armed[shellForm] = source.slice(0, insertAt) + flags + source.slice(insertAt);
|
|
118
|
+
}
|
|
119
|
+
return { ok: true, commands: armed };
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=claim-executor-template-arming.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-executor-template-arming.js","sourceRoot":"","sources":["../../../src/external/launch/claim-executor-template-arming.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAyB,MAAM,wBAAwB,CAAC;AAOlF,MAAM,YAAY,GAA0D;IAC1E,UAAU,EAAE,GAAG;IACf,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,MAAM;CACd,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,+BAA+B,CAAC,eAAuB;IACrE,OAAO,eAAe,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,wBAAwB,GAAG,yCAAyC,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,oCAAoC,CAClD,QAA0B,EAC1B,WAAmB,EACnB,SAAuC;IAEvC,MAAM,KAAK,GAA8B,EAAE,CAAC;IAC5C,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAkC,EAAE,CAAC;QACnF,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,gBAAgB,WAAW,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,oBAAoB,WAAW,yBAAyB,SAAS,qDAAqD;aAC/H,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,KAAK,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,iBAAiB,WAAW,iCAAiC,SAAS,4DAA4D;aAC3I,CAAC;QACJ,CAAC;QACD,IAAI,wBAAwB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,MAAM,EAAE,OAAO,SAAS,kIAAkI;aAC3J,CAAC;QACJ,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC;QACnH,KAAK,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAyB,EAAE,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { ExternalTask } from "../../core/sdk-sessions-store.js";
|
|
2
|
+
/**
|
|
3
|
+
* How long a claim stays launch-eligible after `claimedAt`. §10.9 left the
|
|
4
|
+
* VALUE unfixed ("a named limit"), justified only against one criterion: a
|
|
5
|
+
* holder who restarts LATE must still succeed, never be locked out (AC
|
|
6
|
+
* FR-04.22) — the fix for a stale token is re-claiming, not an indefinite
|
|
7
|
+
* grant. 24h is generous enough to survive a sleeping laptop, a slow beat,
|
|
8
|
+
* or an overnight gap between claim and restart, while still bounding how
|
|
9
|
+
* long an abandoned claim stays replayable.
|
|
10
|
+
*/
|
|
11
|
+
export declare const CLAIM_LAUNCH_WINDOW_MS: number;
|
|
12
|
+
/**
|
|
13
|
+
* Doubt-review finding (iterate-2026-09-03-claim-holder-launch): `withinWindow`
|
|
14
|
+
* originally only bounded the claim's age from ABOVE, so a well-formed but
|
|
15
|
+
* FUTURE-dated `claimedAt` (clock skew between the webui host and the daemon
|
|
16
|
+
* host, or a daemon bug) made `Date.now() - claimedAtMs` negative — always
|
|
17
|
+
* `<= CLAIM_LAUNCH_WINDOW_MS`, reading as "very fresh" instead of being
|
|
18
|
+
* rejected. `sdk-sessions-validate.ts` does no date-sanity check on
|
|
19
|
+
* `claimedAt`, so this module is the only place that can catch it. A small
|
|
20
|
+
* tolerance (rather than rejecting any future timestamp outright) survives
|
|
21
|
+
* ordinary clock drift between two processes' wall clocks without reopening
|
|
22
|
+
* the gap: anything beyond it is refused as not-within-window, same as an
|
|
23
|
+
* expired claim.
|
|
24
|
+
*/
|
|
25
|
+
export declare const CLAIM_CLOCK_SKEW_TOLERANCE_MS: number;
|
|
26
|
+
export type ClaimGateResult = {
|
|
27
|
+
allowed: true;
|
|
28
|
+
claimAuthorized: boolean;
|
|
29
|
+
} | {
|
|
30
|
+
allowed: false;
|
|
31
|
+
error: Record<string, unknown>;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Decide whether a launch request may proceed against a (possibly) claimed
|
|
35
|
+
* task. Returns `{ allowed: true }` when there is no active claim, or when
|
|
36
|
+
* `bodyClaimToken` matches the task's current `claimToken` AND the claim is
|
|
37
|
+
* within the launch window. Otherwise refuses with the `task_claimed`
|
|
38
|
+
* envelope — `claimExpired: true` distinguishes "right token, too old" from
|
|
39
|
+
* a foreign/absent token (trap: an expired claim must read differently from
|
|
40
|
+
* someone else's).
|
|
41
|
+
*
|
|
42
|
+
* `claimAuthorized` (iterate-2026-09-06-claim-launch-permission-perimeter,
|
|
43
|
+
* FR-04.22 follow-up) distinguishes the TWO shapes of `allowed: true`: "no
|
|
44
|
+
* claim was ever on record" (an ordinary human/manual launch) vs. "the
|
|
45
|
+
* caller proved it holds the CURRENT, unexpired claim" (leadwright's stage-2
|
|
46
|
+
* executor). The launch route uses this — not a second, independently
|
|
47
|
+
* re-derived token-match check — to decide whether to arm the executor's
|
|
48
|
+
* permission perimeter, so the two conditions can never drift apart.
|
|
49
|
+
*/
|
|
50
|
+
export declare function checkClaimHolderGate(task: ExternalTask, bodyClaimToken: string | undefined): ClaimGateResult;
|
|
51
|
+
//# sourceMappingURL=claim-holder-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-holder-gate.d.ts","sourceRoot":"","sources":["../../../src/external/launch/claim-holder-gate.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAE1D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,6BAA6B,QAAgB,CAAC;AAE3D,MAAM,MAAM,eAAe,GACvB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,GAC3C;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,YAAY,EAClB,cAAc,EAAE,MAAM,GAAG,SAAS,GACjC,eAAe,CAqCjB"}
|