@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
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* The launch handler dispatches across branches in precedence order.
|
|
5
5
|
* Each branch lives in its own file to keep this shell ≤ 300 LOC:
|
|
6
6
|
*
|
|
7
|
+
* (dispatch chain lives in ./branch-dispatch.ts)
|
|
7
8
|
* 1. ./phase-task-branch.ts — body.phaseTaskRef present
|
|
8
9
|
* 2. ./campaign-branch.ts — body.campaignSlug + fresh-start (FR-01.34)
|
|
9
10
|
* 2.5 ./campaign-step-branch.ts — body.campaignStep + fresh-start (FR-01.36)
|
|
@@ -19,7 +20,12 @@
|
|
|
19
20
|
*/
|
|
20
21
|
import { Hono } from "hono";
|
|
21
22
|
import { withLiveSession } from "../_shared/helpers.js";
|
|
22
|
-
import { parseLaunchBody
|
|
23
|
+
import { parseLaunchBody } from "./_helpers.js";
|
|
24
|
+
import { dispatchLaunchBranches } from "./branch-dispatch.js";
|
|
25
|
+
import { checkClaimHolderGate } from "./claim-holder-gate.js";
|
|
26
|
+
import { commandsCarryPermissionPerimeter } from "./claim-permission-perimeter-assert.js";
|
|
27
|
+
import { checkMixedLaunchIntents } from "./mixed-intents-guard.js";
|
|
28
|
+
import { applyRuntimeChokepoint, resolveCodexIntegrationModeForLaunch, } from "./runtime-chokepoint.js";
|
|
23
29
|
export function createLaunchRouter(deps) {
|
|
24
30
|
const app = new Hono();
|
|
25
31
|
const { store, ptyManager, getProjectById, runConfigReader, jsonlExistsOnDisk } = deps;
|
|
@@ -28,7 +34,7 @@ export function createLaunchRouter(deps) {
|
|
|
28
34
|
const body = rawBody && typeof rawBody === "object" && !Array.isArray(rawBody)
|
|
29
35
|
? rawBody
|
|
30
36
|
: {};
|
|
31
|
-
|
|
37
|
+
let task = store.get(c.req.param("id"));
|
|
32
38
|
if (!task)
|
|
33
39
|
return c.json({ error: "Task not found" }, 404);
|
|
34
40
|
// Section 03 (iterate 3) — O20 idempotency guard. Reject re-launch on
|
|
@@ -39,158 +45,123 @@ export function createLaunchRouter(deps) {
|
|
|
39
45
|
return c.json({ error: "launch_invalid_state", state: task.state }, 409);
|
|
40
46
|
}
|
|
41
47
|
// iterate-2026-05-14 lead-foundation-task-schema (leadwright Phase 1).
|
|
42
|
-
// While a task is claimed the
|
|
43
|
-
//
|
|
44
|
-
//
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
48
|
+
// While a task is claimed the launch route MUST step aside for anyone
|
|
49
|
+
// but the claim HOLDER (FR-04.22/V5, iterate-2026-09-03-claim-holder-launch)
|
|
50
|
+
// — so a stranger and the daemon don't fight over the same session
|
|
51
|
+
// (stale SQLite lock, interleaved JSONL, double-running shells), while
|
|
52
|
+
// the holder itself can still (re)launch. External review HIGH-2: only
|
|
53
|
+
// `claimToken` triggers the 409.
|
|
54
|
+
//
|
|
55
|
+
// The in-memory row can be STALE — `load()` runs once at server boot
|
|
56
|
+
// (index.ts), so a foreign claim written to disk by the leadwright
|
|
57
|
+
// daemon only reaches this process's memory via its OWN persist(). A
|
|
58
|
+
// webui that has persisted nothing since the claim was written would
|
|
59
|
+
// otherwise see no claim at all (the normal case for an idle daemon
|
|
60
|
+
// with no browser open). Refresh this one row from disk first — never
|
|
61
|
+
// re-run `load()` (a guarded no-op after the first call).
|
|
62
|
+
const freshTask = await store.refreshRowFromDisk(task.taskId);
|
|
63
|
+
if (freshTask)
|
|
64
|
+
task = freshTask;
|
|
65
|
+
const bodyClaimToken = typeof body.claimToken === "string" ? body.claimToken : undefined;
|
|
66
|
+
const claimGate = checkClaimHolderGate(task, bodyClaimToken);
|
|
67
|
+
if (!claimGate.allowed) {
|
|
68
|
+
return c.json(claimGate.error, 409);
|
|
60
69
|
}
|
|
70
|
+
// FR-04.22 (iterate-2026-09-06-claim-launch-permission-perimeter) —
|
|
71
|
+
// true only for the leadwright stage-2 executor (the ONE caller that
|
|
72
|
+
// ever proves it holds the CURRENT claim). Threaded into BOTH branches
|
|
73
|
+
// a claim-only `{ claimToken }` launch body can actually reach: the
|
|
74
|
+
// action-substitution branch (leadwright always sets `actionId` at
|
|
75
|
+
// task creation — a required field on its side — and parse-body.ts's
|
|
76
|
+
// once-set-always-used contract resolves it from the persisted task
|
|
77
|
+
// even though the launch body carries no `actionId` itself) and the
|
|
78
|
+
// legacy fallback (a task launched before ever having an actionId set).
|
|
79
|
+
// phaseTaskRef/campaignSlug/campaignStep/masterRun are NEVER
|
|
80
|
+
// once-set-always-used (parse-body.ts: "Launch-body only (never
|
|
81
|
+
// persisted)"), so those branches structurally cannot fire for a
|
|
82
|
+
// `{ claimToken }`-only body and are left untouched. Every human/manual
|
|
83
|
+
// launch takes `claimGate.claimAuthorized === false` here, so its
|
|
84
|
+
// command string is unchanged byte-for-byte. See
|
|
85
|
+
// `./claim-executor-permissions.ts` for what gets armed and why.
|
|
86
|
+
const claimAuthorized = claimGate.claimAuthorized;
|
|
61
87
|
// Parse + apply once-set-always-used (v0.4.1 fallback contract).
|
|
62
88
|
const parseResult = parseLaunchBody(body, task);
|
|
63
89
|
if ("error" in parseResult) {
|
|
64
90
|
return c.json(parseResult.error, parseResult.status);
|
|
65
91
|
}
|
|
66
92
|
const parsed = parseResult;
|
|
67
|
-
// FR-01.34
|
|
68
|
-
//
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
(
|
|
74
|
-
return c.json({
|
|
75
|
-
error: "mixed_launch_intents",
|
|
76
|
-
detail: "campaignSlug is mutually exclusive with actionId / phaseTaskRef",
|
|
77
|
-
}, 400);
|
|
78
|
-
}
|
|
79
|
-
// FR-01.36 — a single-sub-iterate launch is its own intent too. Reject a
|
|
80
|
-
// mix with actionId / phaseTaskRef / campaignSlug. Presence is the parsed
|
|
81
|
-
// (well-formed) campaignStep so a malformed body never trips it.
|
|
82
|
-
if (parsed.campaignStep &&
|
|
83
|
-
(body.actionId !== undefined ||
|
|
84
|
-
body.phaseTaskRef !== undefined ||
|
|
85
|
-
(typeof body.campaignSlug === "string" && body.campaignSlug.trim().length > 0))) {
|
|
86
|
-
return c.json({
|
|
87
|
-
error: "mixed_launch_intents",
|
|
88
|
-
detail: "campaignStep is mutually exclusive with actionId / phaseTaskRef / campaignSlug",
|
|
89
|
-
}, 400);
|
|
93
|
+
// FR-01.34 / FR-01.36 / webui-pipeline-convergence W2 — campaignSlug,
|
|
94
|
+
// campaignStep and masterRun are each their own launch intent, mutually
|
|
95
|
+
// exclusive with actionId / phaseTaskRef / each other. See
|
|
96
|
+
// ./mixed-intents-guard.ts.
|
|
97
|
+
const mixedIntents = checkMixedLaunchIntents(body, parsed);
|
|
98
|
+
if (mixedIntents) {
|
|
99
|
+
return c.json(mixedIntents.error, mixedIntents.status);
|
|
90
100
|
}
|
|
91
|
-
|
|
92
|
-
// its own intent. Reject a mix with any other explicit intent. Checked on
|
|
93
|
-
// the raw body (`parsed.masterRun` is derived from `body.masterRun`, which is
|
|
94
|
-
// never persisted) so a once-set-always-used field can't spuriously trip it.
|
|
95
|
-
if (Boolean(body.masterRun) &&
|
|
96
|
-
(body.actionId !== undefined ||
|
|
97
|
-
body.phaseTaskRef !== undefined ||
|
|
98
|
-
(typeof body.campaignSlug === "string" && body.campaignSlug.trim().length > 0) ||
|
|
99
|
-
body.campaignStep !== undefined)) {
|
|
100
|
-
return c.json({
|
|
101
|
-
error: "mixed_launch_intents",
|
|
102
|
-
detail: "masterRun is mutually exclusive with actionId / phaseTaskRef / campaignSlug / campaignStep",
|
|
103
|
-
}, 400);
|
|
104
|
-
}
|
|
105
|
-
// iterate-2026-05-18-fix-resume-description — a Resume click on a
|
|
106
|
-
// task whose Claude conversation was never established (no
|
|
107
|
-
// <uuid>.jsonl ever observed on disk → there is nothing to resume)
|
|
108
|
-
// is semantically a FRESH start. Route it through the substitution
|
|
109
|
-
// branch so the brief + slash command are injected exactly like a
|
|
110
|
-
// direct Launch. A genuine resume (JSONL on disk) stays on the
|
|
111
|
-
// description-free `--resume` shape.
|
|
112
|
-
const jsonlObserved = Boolean(task.firstJsonlObservedAt);
|
|
113
|
-
const effectivelyFreshStart = !parsed.resume || (!jsonlObserved && !parsed.dryRun);
|
|
114
|
-
// Branch 1 — phaseTaskRef (load-bearing security path).
|
|
115
|
-
const phaseResult = await applyPhaseTaskBranch({
|
|
101
|
+
const branchResult = await dispatchLaunchBranches({
|
|
116
102
|
task,
|
|
117
103
|
parsed,
|
|
118
104
|
getProjectById,
|
|
119
105
|
runConfigReader,
|
|
120
106
|
jsonlExistsOnDisk,
|
|
107
|
+
listTasks: () => store.list(),
|
|
108
|
+
claimAuthorized,
|
|
121
109
|
});
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// server-side from a validated slug; null when no campaignSlug / a resume.
|
|
125
|
-
if (!branchResult) {
|
|
126
|
-
branchResult = applyCampaignBranch({
|
|
127
|
-
task,
|
|
128
|
-
parsed,
|
|
129
|
-
effectivelyFreshStart,
|
|
130
|
-
getProjectById,
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
// Branch 2.5 — single-sub-iterate launch (FR-01.36). Command built
|
|
134
|
-
// server-side from a validated { slug, stepId }; null when no campaignStep
|
|
135
|
-
// / a resume.
|
|
136
|
-
if (!branchResult) {
|
|
137
|
-
branchResult = applyCampaignStepBranch({
|
|
138
|
-
task,
|
|
139
|
-
parsed,
|
|
140
|
-
effectivelyFreshStart,
|
|
141
|
-
getProjectById,
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
// Branch 2.6 — single-session master launch (campaign
|
|
145
|
-
// webui-pipeline-convergence W2). Command built server-side (`/shipwright-run`)
|
|
146
|
-
// gated on a readable single_session run_config; null when no masterRun / a
|
|
147
|
-
// resume (→ legacy `--resume <masterUuid>`).
|
|
148
|
-
if (!branchResult) {
|
|
149
|
-
branchResult = await applyMasterRunBranch({
|
|
150
|
-
task,
|
|
151
|
-
parsed,
|
|
152
|
-
effectivelyFreshStart,
|
|
153
|
-
getProjectById,
|
|
154
|
-
runConfigReader,
|
|
155
|
-
listTasks: () => store.list(),
|
|
156
|
-
jsonlExistsOnDisk,
|
|
157
|
-
});
|
|
158
|
-
}
|
|
159
|
-
// Branch 3 — action substitution.
|
|
160
|
-
if (!branchResult) {
|
|
161
|
-
branchResult = applyActionSubstitutionBranch({
|
|
162
|
-
task,
|
|
163
|
-
parsed,
|
|
164
|
-
effectivelyFreshStart,
|
|
165
|
-
getProjectById,
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
// If a branch produced an error envelope, terminate.
|
|
169
|
-
if (branchResult && "error" in branchResult) {
|
|
110
|
+
// A branch that produced an error envelope terminates the handler.
|
|
111
|
+
if ("error" in branchResult) {
|
|
170
112
|
return c.json(branchResult.error, branchResult.status);
|
|
171
113
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
114
|
+
let { commands, taskUpdate } = branchResult;
|
|
115
|
+
// Fail-open notice from the single-sub-iterate branch (see _helpers.ts).
|
|
116
|
+
const readinessNotice = branchResult.readinessChecked === false ? { readinessChecked: false } : {};
|
|
117
|
+
// Codex Light (Spec/codex-light-webui.md §2.1) — the ONE chokepoint for
|
|
118
|
+
// all six launch branches above: overrides `commands`/`taskUpdate` with
|
|
119
|
+
// `buildCodexCommands` when this task's runtime is Codex, byte-identical
|
|
120
|
+
// pass-through otherwise. Also carries AC9's new-pipeline block. Must
|
|
121
|
+
// run before the permission-perimeter assertion below so a blocked
|
|
122
|
+
// pipeline launch never reaches it, and so a Codex override is present
|
|
123
|
+
// BY the time that assertion inspects `commands`.
|
|
124
|
+
const runtimeResult = await applyRuntimeChokepoint({
|
|
125
|
+
task,
|
|
126
|
+
parsed,
|
|
127
|
+
project: getProjectById?.(task.projectId),
|
|
128
|
+
commands,
|
|
129
|
+
taskUpdate,
|
|
130
|
+
codexIntegrationMode: resolveCodexIntegrationModeForLaunch(task, await deps.getCodexIntegrationMode?.()),
|
|
131
|
+
codextenderPort: await deps.getCodextenderPort?.(),
|
|
132
|
+
});
|
|
133
|
+
if ("error" in runtimeResult) {
|
|
134
|
+
return c.json(runtimeResult.error, runtimeResult.status);
|
|
177
135
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
136
|
+
({ commands, taskUpdate } = runtimeResult);
|
|
137
|
+
// FR-04.22 Stage-3 doubt review — a per-branch opt-in (only
|
|
138
|
+
// action-substitution-branch.ts and legacy-fallback-branch.ts take
|
|
139
|
+
// `claimAuthorized`) rests on an assumption about which body shapes
|
|
140
|
+
// leadwright sends today; it is not a code-enforced invariant against a
|
|
141
|
+
// FUTURE body that combines a valid `claimToken` with `phaseTaskRef` /
|
|
142
|
+
// `campaignSlug` / `campaignStep` / `masterRun` and reaches one of the
|
|
143
|
+
// four branches that never learned about claims. This centralized
|
|
144
|
+
// assertion is the actual enforcement: no matter which branch produced
|
|
145
|
+
// `commands`, a claim-authorized launch must carry the permission
|
|
146
|
+
// perimeter on every shell form, or the request is refused — never
|
|
147
|
+
// silently downgraded to an unrestricted command that looks armed
|
|
148
|
+
// because the caller held a claim.
|
|
149
|
+
if (claimAuthorized && !commandsCarryPermissionPerimeter(commands)) {
|
|
150
|
+
return c.json({
|
|
151
|
+
error: "claim_launch_permission_perimeter_missing",
|
|
152
|
+
detail: "claim-authorized launch resolved to a branch that did not arm the permission perimeter",
|
|
153
|
+
}, 409);
|
|
184
154
|
}
|
|
185
155
|
if (parsed.dryRun) {
|
|
186
156
|
// Pure command-string build — no state mutation, no persist.
|
|
187
|
-
return c.json({ task: withLiveSession(task, ptyManager), commands });
|
|
157
|
+
return c.json({ task: withLiveSession(task, ptyManager), commands, ...readinessNotice });
|
|
188
158
|
}
|
|
189
159
|
const updated = store.patch(task.taskId, taskUpdate);
|
|
190
160
|
await store.persist();
|
|
191
161
|
return c.json({
|
|
192
162
|
task: withLiveSession(updated, ptyManager),
|
|
193
163
|
commands,
|
|
164
|
+
...readinessNotice,
|
|
194
165
|
});
|
|
195
166
|
});
|
|
196
167
|
return app;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/external/launch/routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/external/launch/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CopyCommandForms } from "../../core/launcher.js";
|
|
2
|
+
import type { ExternalTask } from "../../core/sdk-sessions-store.js";
|
|
3
|
+
import type { ParsedLaunchBody } from "./parse-body.js";
|
|
4
|
+
import type { RuntimeChokepointBlocked, RuntimeChokepointOk } from "./runtime-chokepoint.js";
|
|
5
|
+
export declare function applyCodextenderChokepoint(args: {
|
|
6
|
+
task: ExternalTask;
|
|
7
|
+
parsed: ParsedLaunchBody;
|
|
8
|
+
commands: CopyCommandForms;
|
|
9
|
+
taskUpdate: Partial<ExternalTask>;
|
|
10
|
+
codextenderPort: number;
|
|
11
|
+
checkCodextenderProxyAvailable: () => Promise<boolean>;
|
|
12
|
+
getCodextenderAuthToken: () => string | undefined;
|
|
13
|
+
/** Test seam — defaults to a real probe of the proxy's `/v1/models` for
|
|
14
|
+
* the selected alias's `max_input_tokens` (operator finding,
|
|
15
|
+
* 2026-09-26: Claude Code assumes a 200K context window for any model id
|
|
16
|
+
* it doesn't recognize and over-compacts against that wrong ceiling).
|
|
17
|
+
* `model` is the same value passed to `buildCodextenderCommands`. */
|
|
18
|
+
getCodextenderMaxContextTokens: (model: string | undefined) => Promise<number | undefined>;
|
|
19
|
+
}): Promise<RuntimeChokepointOk | RuntimeChokepointBlocked>;
|
|
20
|
+
//# sourceMappingURL=runtime-chokepoint-codextender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-chokepoint-codextender.d.ts","sourceRoot":"","sources":["../../../src/external/launch/runtime-chokepoint-codextender.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAMxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE7F,wBAAsB,0BAA0B,CAAC,IAAI,EAAE;IACrD,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,8BAA8B,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,uBAAuB,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAClD;;;;0EAIsE;IACtE,8BAA8B,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC5F,GAAG,OAAO,CAAC,mBAAmB,GAAG,wBAAwB,CAAC,CA2C1D"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* external/launch/runtime-chokepoint-codextender.ts — the launch
|
|
3
|
+
* chokepoint's Codextender-mode branch (Codextender integration Part
|
|
4
|
+
* B.3/B.6), split out of runtime-chokepoint.ts (2026-09-26, bloat
|
|
5
|
+
* anti-ratchet — mirrors the `fork.ts` split out of `lifecycle.ts` for the
|
|
6
|
+
* same "Codextender integration file-size cleanup" reason). A Codextender
|
|
7
|
+
* task drives ordinary `claude` underneath (via a local LiteLLM proxy), not
|
|
8
|
+
* the `codex` CLI, so it needs its own availability probe (the proxy's
|
|
9
|
+
* `/v1/models`, not `codex --version`) and reuses the already-built
|
|
10
|
+
* plain-Claude `commands` the chokepoint received, rather than
|
|
11
|
+
* `buildCodexCommands`.
|
|
12
|
+
*/
|
|
13
|
+
import { buildCodextenderCommands, CodextenderCwdMismatchError, } from "../../core/launcher-codextender.js";
|
|
14
|
+
import { codextenderAuthTokenMissingError, codextenderCwdMismatchError, codextenderProxyUnreachableError, } from "./runtime-chokepoint-errors.js";
|
|
15
|
+
export async function applyCodextenderChokepoint(args) {
|
|
16
|
+
const { task, parsed, commands, taskUpdate, codextenderPort, checkCodextenderProxyAvailable, getCodextenderAuthToken, getCodextenderMaxContextTokens, } = args;
|
|
17
|
+
if (!(await checkCodextenderProxyAvailable())) {
|
|
18
|
+
return { error: codextenderProxyUnreachableError(codextenderPort), status: 400 };
|
|
19
|
+
}
|
|
20
|
+
const codextenderAuthToken = getCodextenderAuthToken();
|
|
21
|
+
if (!codextenderAuthToken) {
|
|
22
|
+
return { error: codextenderAuthTokenMissingError(), status: 400 };
|
|
23
|
+
}
|
|
24
|
+
const maxContextTokens = await getCodextenderMaxContextTokens(parsed.codexImplementationModel);
|
|
25
|
+
let codextenderCommands;
|
|
26
|
+
try {
|
|
27
|
+
codextenderCommands = buildCodextenderCommands({
|
|
28
|
+
cwd: task.cwd,
|
|
29
|
+
baseUrl: `http://127.0.0.1:${codextenderPort}`,
|
|
30
|
+
model: parsed.codexImplementationModel,
|
|
31
|
+
authToken: codextenderAuthToken,
|
|
32
|
+
claudeCommands: commands,
|
|
33
|
+
maxContextTokens,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
if (!(err instanceof CodextenderCwdMismatchError))
|
|
38
|
+
throw err;
|
|
39
|
+
return { error: codextenderCwdMismatchError(), status: 500 };
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
commands: codextenderCommands,
|
|
43
|
+
taskUpdate: {
|
|
44
|
+
...taskUpdate,
|
|
45
|
+
state: "awaiting_external_start",
|
|
46
|
+
launchedAt: new Date().toISOString(),
|
|
47
|
+
codexIntegrationMode: "codextender",
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=runtime-chokepoint-codextender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-chokepoint-codextender.js","sourceRoot":"","sources":["../../../src/external/launch/runtime-chokepoint-codextender.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EACL,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,oCAAoC,CAAC;AAI5C,OAAO,EACL,gCAAgC,EAChC,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,gCAAgC,CAAC;AAGxC,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,IAchD;IACC,MAAM,EACJ,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,UAAU,EACV,eAAe,EACf,8BAA8B,EAC9B,uBAAuB,EACvB,8BAA8B,GAC/B,GAAG,IAAI,CAAC;IAET,IAAI,CAAC,CAAC,MAAM,8BAA8B,EAAE,CAAC,EAAE,CAAC;QAC9C,OAAO,EAAE,KAAK,EAAE,gCAAgC,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACnF,CAAC;IACD,MAAM,oBAAoB,GAAG,uBAAuB,EAAE,CAAC;IACvD,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE,gCAAgC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACpE,CAAC;IACD,MAAM,gBAAgB,GAAG,MAAM,8BAA8B,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC/F,IAAI,mBAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,mBAAmB,GAAG,wBAAwB,CAAC;YAC7C,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,oBAAoB,eAAe,EAAE;YAC9C,KAAK,EAAE,MAAM,CAAC,wBAAwB;YACtC,SAAS,EAAE,oBAAoB;YAC/B,cAAc,EAAE,QAAQ;YACxB,gBAAgB;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,GAAG,YAAY,2BAA2B,CAAC;YAAE,MAAM,GAAG,CAAC;QAC7D,OAAO,EAAE,KAAK,EAAE,2BAA2B,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAC/D,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,mBAAmB;QAC7B,UAAU,EAAE;YACV,GAAG,UAAU;YACb,KAAK,EAAE,yBAAyB;YAChC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,oBAAoB,EAAE,aAAa;SACpC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export declare function codextenderProxyUnreachableError(port: number): {
|
|
2
|
+
error: "codextender_proxy_unreachable";
|
|
3
|
+
detail: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* PR-review BLOCK (iterate-2026-09-23-codextender-webui-integration,
|
|
7
|
+
* second round) — a hardcoded fallback bearer token read as an unsafe
|
|
8
|
+
* unconditional credential. `resolveCodextenderAuthToken()` now has no
|
|
9
|
+
* built-in default: a launch/fork attempted with none configured fails
|
|
10
|
+
* loud here instead of silently sending nothing (which `claude` would
|
|
11
|
+
* reject anyway once it tries to use `ANTHROPIC_BASE_URL`) or falling
|
|
12
|
+
* back to a baked-in value.
|
|
13
|
+
*/
|
|
14
|
+
export declare function codextenderAuthTokenMissingError(): {
|
|
15
|
+
error: "codextender_auth_token_missing";
|
|
16
|
+
detail: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function codexCliNotFoundError(): {
|
|
19
|
+
error: "codex_cli_not_found";
|
|
20
|
+
detail: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Doubt-review HIGH (iterate-2026-09-23-codextender-webui-integration) —
|
|
24
|
+
* see `CodextenderCwdMismatchError`'s own doc comment in
|
|
25
|
+
* `core/launcher-codextender.ts` for why this can happen: a custom
|
|
26
|
+
* action's commands are built from `project.path`, not `task.cwd`, and the
|
|
27
|
+
* two can diverge for a worktree-based task.
|
|
28
|
+
*/
|
|
29
|
+
export declare function codextenderCwdMismatchError(): {
|
|
30
|
+
error: "codextender_cwd_mismatch";
|
|
31
|
+
detail: string;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=runtime-chokepoint-errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-chokepoint-errors.d.ts","sourceRoot":"","sources":["../../../src/external/launch/runtime-chokepoint-errors.ts"],"names":[],"mappings":"AAcA,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,MAAM;;;EAS5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC;;;EAU/C;AAED,wBAAgB,qBAAqB;;;EAQpC;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B;;;EAQ1C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* external/launch/runtime-chokepoint-errors.ts — the Codex-runtime error
|
|
3
|
+
* bodies shared between `runtime-chokepoint.ts` and `external/tasks/
|
|
4
|
+
* fork.ts` (fork cannot call the chokepoint per §2.1's correction, but the
|
|
5
|
+
* user-facing wording has no reason to drift between the two call sites).
|
|
6
|
+
*
|
|
7
|
+
* Split out of runtime-chokepoint.ts (2026-09-23 — that file crossed the
|
|
8
|
+
* 300-line guideline) so each file stays a single concern.
|
|
9
|
+
*/
|
|
10
|
+
import os from "node:os";
|
|
11
|
+
import { installHint } from "../../core/readiness-install-hints.js";
|
|
12
|
+
export function codextenderProxyUnreachableError(port) {
|
|
13
|
+
return {
|
|
14
|
+
error: "codextender_proxy_unreachable",
|
|
15
|
+
detail: `This task's runtime is Codex, and the Codex Integration Mode is ` +
|
|
16
|
+
`Codextender, but the local Codextender proxy at ` +
|
|
17
|
+
`127.0.0.1:${port} isn't reachable. Start the ` +
|
|
18
|
+
"Codextender proxy, or switch this task's runtime to Claude.",
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* PR-review BLOCK (iterate-2026-09-23-codextender-webui-integration,
|
|
23
|
+
* second round) — a hardcoded fallback bearer token read as an unsafe
|
|
24
|
+
* unconditional credential. `resolveCodextenderAuthToken()` now has no
|
|
25
|
+
* built-in default: a launch/fork attempted with none configured fails
|
|
26
|
+
* loud here instead of silently sending nothing (which `claude` would
|
|
27
|
+
* reject anyway once it tries to use `ANTHROPIC_BASE_URL`) or falling
|
|
28
|
+
* back to a baked-in value.
|
|
29
|
+
*/
|
|
30
|
+
export function codextenderAuthTokenMissingError() {
|
|
31
|
+
return {
|
|
32
|
+
error: "codextender_auth_token_missing",
|
|
33
|
+
detail: "This task's runtime is Codex, and the Codex Integration Mode is " +
|
|
34
|
+
"Codextender, but no CODEXTENDER_AUTH_TOKEN is set in the webui " +
|
|
35
|
+
"server's environment. Set it to the local Codextender proxy's " +
|
|
36
|
+
"configured master key (see the codextender README) and restart " +
|
|
37
|
+
"the server, or switch this task's runtime to Claude.",
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function codexCliNotFoundError() {
|
|
41
|
+
return {
|
|
42
|
+
error: "codex_cli_not_found",
|
|
43
|
+
detail: "This task's runtime is Codex, but the Codex CLI isn't installed " +
|
|
44
|
+
"on this machine. " + installHint("codex", os.platform()) +
|
|
45
|
+
", or switch this task's runtime to Claude.",
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Doubt-review HIGH (iterate-2026-09-23-codextender-webui-integration) —
|
|
50
|
+
* see `CodextenderCwdMismatchError`'s own doc comment in
|
|
51
|
+
* `core/launcher-codextender.ts` for why this can happen: a custom
|
|
52
|
+
* action's commands are built from `project.path`, not `task.cwd`, and the
|
|
53
|
+
* two can diverge for a worktree-based task.
|
|
54
|
+
*/
|
|
55
|
+
export function codextenderCwdMismatchError() {
|
|
56
|
+
return {
|
|
57
|
+
error: "codextender_cwd_mismatch",
|
|
58
|
+
detail: "This task's launch command was built from a different working " +
|
|
59
|
+
"directory than the task's own cwd — refusing to launch with an " +
|
|
60
|
+
"ambiguous working directory.",
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=runtime-chokepoint-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-chokepoint-errors.js","sourceRoot":"","sources":["../../../src/external/launch/runtime-chokepoint-errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,MAAM,UAAU,gCAAgC,CAAC,IAAY;IAC3D,OAAO;QACL,KAAK,EAAE,+BAAwC;QAC/C,MAAM,EACJ,kEAAkE;YAClE,kDAAkD;YAClD,aAAa,IAAI,8BAA8B;YAC/C,6DAA6D;KAChE,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,KAAK,EAAE,gCAAyC;QAChD,MAAM,EACJ,kEAAkE;YAClE,iEAAiE;YACjE,gEAAgE;YAChE,iEAAiE;YACjE,sDAAsD;KACzD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,KAAK,EAAE,qBAA8B;QACrC,MAAM,EACJ,kEAAkE;YAClE,mBAAmB,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;YACzD,4CAA4C;KAC/C,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,KAAK,EAAE,0BAAmC;QAC1C,MAAM,EACJ,gEAAgE;YAChE,iEAAiE;YACjE,8BAA8B;KACjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { CopyCommandForms } from "../../core/launcher.js";
|
|
2
|
+
import type { ExternalTask, Runtime } from "../../core/sdk-sessions-store.js";
|
|
3
|
+
import type { ExternalRouteProjectView } from "../_shared/helpers.js";
|
|
4
|
+
import type { ParsedLaunchBody } from "./parse-body.js";
|
|
5
|
+
export type CodexIntegrationMode = "light" | "codextender";
|
|
6
|
+
/**
|
|
7
|
+
* Plan-review HIGH fix (iterate-2026-09-23) — pin to the task's OWN stamped
|
|
8
|
+
* mode once one exists, falling back to the live global setting only on a
|
|
9
|
+
* task's very first Codex-runtime launch. Without this, a Resume straddling
|
|
10
|
+
* a post-first-launch mode flip would silently switch mechanisms mid-session
|
|
11
|
+
* (e.g. discard a real `codex` thread's history for a Codextender relaunch).
|
|
12
|
+
* Pure/IO-free so `routes.ts` can unit-test the choice directly.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveCodexIntegrationModeForLaunch(task: ExternalTask, liveGlobalSetting: CodexIntegrationMode | undefined): CodexIntegrationMode | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* AC8 — "a task launched with a runtime whose CLI isn't installed fails at
|
|
17
|
+
* launch time with one actionable message ... independent of the readiness
|
|
18
|
+
* probe's own gate" (Spec/codex-light-webui.md §5.9, lines 789-792). The
|
|
19
|
+
* per-task toggle means readiness can no longer treat either CLI as globally
|
|
20
|
+
* required (the readiness fix lives in readiness-probe.ts), so THIS is where
|
|
21
|
+
* an all-Claude machine actually gets stopped before a launch it can't run.
|
|
22
|
+
* Not cached like /api/readiness's 15s TTL — a launch is a low-frequency,
|
|
23
|
+
* user-initiated action, so a fresh check here is worth the one extra
|
|
24
|
+
* process spawn for correctness at the moment that matters.
|
|
25
|
+
*
|
|
26
|
+
* `defaultRunShim`, not `defaultRun` — on Windows Codex CLI installs as a
|
|
27
|
+
* `.cmd` shim (no `codex.exe`), which `defaultRun` cannot spawn under
|
|
28
|
+
* `shell:false` (ENOENT even when Codex is genuinely installed and working).
|
|
29
|
+
* See `defaultRunShim`'s own doc comment (iterate-2026-09-16-codex-probe-
|
|
30
|
+
* win32-shim) for why this is a sibling probe rather than a `defaultRun` fix.
|
|
31
|
+
*/
|
|
32
|
+
export declare function isCodexCliAvailable(): Promise<boolean>;
|
|
33
|
+
/** §2.1 — a plain field read on an already-loaded task, not a fallback chain. */
|
|
34
|
+
export declare function runtimeForTask(task: ExternalTask): Runtime;
|
|
35
|
+
/**
|
|
36
|
+
* ADR-309 generalized the `new-plain` JSONL-liveness special-case to every
|
|
37
|
+
* Codex-runtime task (a Codex Light task never writes a Claude `.jsonl`
|
|
38
|
+
* under any actionId). Codextender integration Part B.6 excludes
|
|
39
|
+
* Codextender mode from that generalization: it drives ordinary `claude`
|
|
40
|
+
* via the local proxy, so it DOES write a real `.jsonl` and the ordinary
|
|
41
|
+
* `!firstJsonlObservedAt` transcript-poll path is already authoritative for
|
|
42
|
+
* it, exactly like a plain Claude task. Shared by `ws-upgrade-handler.ts`
|
|
43
|
+
* and `external/transcript/routes.ts` — their own companion-fix comments
|
|
44
|
+
* point back here rather than re-typing the condition.
|
|
45
|
+
*/
|
|
46
|
+
export declare function isCodexNonCodextenderTask(task: ExternalTask): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* AC9 — a multi-phase single thread's "done" has no oracle row (§1.8); a
|
|
49
|
+
* `new-pipeline` launch for a Codex task is blocked here, not silently
|
|
50
|
+
* downgraded. Keys on `actionId === "new-pipeline"` (never `phase`, which
|
|
51
|
+
* a pipeline launch never submits — `useNewIssueFormSubmit.ts`).
|
|
52
|
+
*
|
|
53
|
+
* Codextender integration Part B.6 — AC9's rationale (no thread/app-server
|
|
54
|
+
* resume machinery, `codex-light-webui.md` §1.8) is specific to the real
|
|
55
|
+
* `codex` CLI; a Codextender task drives ordinary `claude` underneath, so it
|
|
56
|
+
* has the SAME pipeline/resume machinery a Claude-runtime task does. Bypass
|
|
57
|
+
* keys on the FRESH `codexIntegrationMode` param (not `task.
|
|
58
|
+
* codexIntegrationMode`), which is unset on a task's very first Codextender
|
|
59
|
+
* launch — reading the stale/absent task field would wrongly block it.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isCodexNewPipelineBlocked(task: ExternalTask, parsed: ParsedLaunchBody, codexIntegrationMode?: CodexIntegrationMode): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* AC7 — "Campaign is 'Codex Light 2'" (deferred, still out of scope). The
|
|
64
|
+
* campaign/step/master-run branches each build their own fixed command
|
|
65
|
+
* server-side (`/shipwright-run`, `/shipwright-iterate "<specPath>"`, ...);
|
|
66
|
+
* without this check this chokepoint would silently DISCARD that command
|
|
67
|
+
* and override it with a generic `buildCodexCommands` resume/launch built
|
|
68
|
+
* from `phase`/`description` — a behavior mismatch, not the spec's
|
|
69
|
+
* required "block/explain". Keyed on the parsed body's own campaign-intent
|
|
70
|
+
* fields (never persisted on the task — parse-body.ts), so it fires
|
|
71
|
+
* exactly when a campaign launch surface (not an ordinary per-task
|
|
72
|
+
* Launch/Resume) is the caller, resume or fresh start alike.
|
|
73
|
+
*
|
|
74
|
+
* Codextender integration Part B.6 — same bypass rationale as
|
|
75
|
+
* `isCodexNewPipelineBlocked` above: AC7 is a real-`codex`-CLI limitation,
|
|
76
|
+
* not one Codextender (ordinary `claude` underneath) inherits.
|
|
77
|
+
*/
|
|
78
|
+
export declare function isCodexCampaignBlocked(task: ExternalTask, parsed: ParsedLaunchBody, codexIntegrationMode?: CodexIntegrationMode): boolean;
|
|
79
|
+
export interface RuntimeChokepointOk {
|
|
80
|
+
commands: CopyCommandForms;
|
|
81
|
+
taskUpdate: Partial<ExternalTask>;
|
|
82
|
+
}
|
|
83
|
+
export interface RuntimeChokepointBlocked {
|
|
84
|
+
error: Record<string, unknown>;
|
|
85
|
+
status: 400 | 500;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* The main-route half of §2.1. Returns the ORIGINAL `commands`/`taskUpdate`
|
|
89
|
+
* unchanged for a Claude-runtime task (byte-identical to before this
|
|
90
|
+
* feature existed); overrides with `buildCodexCommands` for a
|
|
91
|
+
* Codex-runtime one; blocks per AC9 for a Codex `new-pipeline` launch.
|
|
92
|
+
*/
|
|
93
|
+
export declare function applyRuntimeChokepoint(args: {
|
|
94
|
+
task: ExternalTask;
|
|
95
|
+
parsed: ParsedLaunchBody;
|
|
96
|
+
project: ExternalRouteProjectView | undefined;
|
|
97
|
+
commands: CopyCommandForms;
|
|
98
|
+
taskUpdate: Partial<ExternalTask>;
|
|
99
|
+
/** Codextender integration Part B.6 — a FRESH read of the global
|
|
100
|
+
* `codexIntegrationMode` setting (never `task.codexIntegrationMode`,
|
|
101
|
+
* which is unset on this task's very first Codextender launch). Absent
|
|
102
|
+
* or `"light"` behaves exactly as before this feature existed. */
|
|
103
|
+
codexIntegrationMode?: CodexIntegrationMode;
|
|
104
|
+
/** The `codextenderPort` global setting; defaults to 4000 (matches the
|
|
105
|
+
* `codextender` CLI's own default) when omitted. */
|
|
106
|
+
codextenderPort?: number;
|
|
107
|
+
/** Test seam — defaults to a real `codex --version` probe. */
|
|
108
|
+
checkCodexCliAvailable?: () => Promise<boolean>;
|
|
109
|
+
/** Test seam — defaults to a real `GET /health/liveliness` probe of the
|
|
110
|
+
* Codextender proxy at `codextenderPort` (no auth required). */
|
|
111
|
+
checkCodextenderProxyAvailable?: () => Promise<boolean>;
|
|
112
|
+
/** Test seam — defaults to `resolveCodextenderAuthToken()` (reads
|
|
113
|
+
* `process.env.CODEXTENDER_AUTH_TOKEN`, no built-in fallback). */
|
|
114
|
+
getCodextenderAuthToken?: () => string | undefined;
|
|
115
|
+
/** Test seam — defaults to a real probe of the proxy's `/v1/models` for
|
|
116
|
+
* the selected alias's `max_input_tokens` (operator finding,
|
|
117
|
+
* 2026-09-26). `model` is the same value passed to `buildCodextenderCommands`. */
|
|
118
|
+
getCodextenderMaxContextTokens?: (model: string | undefined) => Promise<number | undefined>;
|
|
119
|
+
}): Promise<RuntimeChokepointOk | RuntimeChokepointBlocked>;
|
|
120
|
+
//# sourceMappingURL=runtime-chokepoint.d.ts.map
|