@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,187 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Codex CLI launch-command builder (Spec/codex-light-webui.md §2.1-§2.3).
|
|
3
|
+
*
|
|
4
|
+
* Sibling of `buildCopyCommands` (launcher.ts) — same three-shell
|
|
5
|
+
* `CopyCommandForms` output, same "webui never spawns a process, only
|
|
6
|
+
* builds a string" contract (CLAUDE.md rule 1 / rule 19). The launch
|
|
7
|
+
* chokepoint in `external/launch/routes.ts` calls this instead of
|
|
8
|
+
* `buildCopyCommands` whenever `runtimeForTask(task) === "codex"`.
|
|
9
|
+
*
|
|
10
|
+
* v1 launches Codex as a plain, live, interactive TUI in a pty (the same
|
|
11
|
+
* mechanism Claude uses today) — never the app-server protocol (§0/§2.2).
|
|
12
|
+
*
|
|
13
|
+
* Resume carries the same autonomy/env-inherit flags as a fresh launch
|
|
14
|
+
* (external-code-review finding, 2026-09-16): `codex resume --help`
|
|
15
|
+
* accepts `-c`/`--enable`/`--yolo` identically to the top-level command
|
|
16
|
+
* (verified live against the installed CLI) — §2.2's terse "Resume: `codex
|
|
17
|
+
* resume <threadId>`" example is abbreviated prose, not a CLI constraint,
|
|
18
|
+
* and §2.4's mitigation 1 plus AC4 both require it on every launch.
|
|
19
|
+
*/
|
|
20
|
+
import { qPs, qPsMultiline, qCmd, qPosix, toPosixPath } from "./shell-quote.js";
|
|
21
|
+
import { buildCdPrefix } from "./launcher.js";
|
|
22
|
+
export function buildCodexCommands(args) {
|
|
23
|
+
return {
|
|
24
|
+
powershell: renderCodex(args, qPs, "powershell"),
|
|
25
|
+
cmd: renderCodex(args, qCmd, "cmd"),
|
|
26
|
+
posix: renderCodex(args, qPosix, "posix"),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function renderCodex(args, q, shellForm) {
|
|
30
|
+
const cwd = shellForm === "posix" ? toPosixPath(args.cwd) : args.cwd;
|
|
31
|
+
const cdPrefix = buildCdPrefix(shellForm, args.cwd);
|
|
32
|
+
const envPrefix = buildReviewEnvPrefix(args, q, shellForm);
|
|
33
|
+
const autonomy = args.autonomy ?? "guided";
|
|
34
|
+
if (args.resume) {
|
|
35
|
+
if (!args.threadId) {
|
|
36
|
+
throw new Error("resume=true requires threadId");
|
|
37
|
+
}
|
|
38
|
+
// External-code-review finding (GLM MEDIUM, 2026-09-16): `codex resume
|
|
39
|
+
// --help` accepts the same `-c`/`--enable`/`--yolo` flags as a fresh
|
|
40
|
+
// launch (verified live against the installed CLI) — §2.2's literal
|
|
41
|
+
// "Resume: `codex resume <threadId>`" example is abbreviated prose, not
|
|
42
|
+
// a CLI constraint. Without these, a resumed Guided/Autonomous task
|
|
43
|
+
// silently lost both session-identity tracking (§2.4 mitigation 1) and
|
|
44
|
+
// AC4's "autonomy governs Codex on every launch" for the resume path.
|
|
45
|
+
const parts = ["codex", "resume"];
|
|
46
|
+
if (autonomy === "guided") {
|
|
47
|
+
parts.push("--enable", "default_mode_request_user_input");
|
|
48
|
+
}
|
|
49
|
+
parts.push("-c", q("shell_environment_policy.inherit=all"));
|
|
50
|
+
parts.push(...buildTuiAnimationFlags(q));
|
|
51
|
+
if (autonomy === "autonomous") {
|
|
52
|
+
parts.push("--yolo");
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
parts.push("-c", q("approval_policy=on-request"));
|
|
56
|
+
parts.push("-c", q("approvals.reviewer=user"));
|
|
57
|
+
}
|
|
58
|
+
if (args.implementationModel) {
|
|
59
|
+
parts.push("-c", q(`model="${args.implementationModel}"`));
|
|
60
|
+
}
|
|
61
|
+
parts.push(q(args.threadId));
|
|
62
|
+
const cmd = parts.join(" ");
|
|
63
|
+
return cdPrefix + envPrefix + (shellForm === "powershell" ? "& " + cmd : cmd);
|
|
64
|
+
}
|
|
65
|
+
const parts = ["codex"];
|
|
66
|
+
// §3 mapping — "questions" row: only Guided gets the non-terminal
|
|
67
|
+
// clarifying-question mechanism (confirmed live, §3's confirmation test).
|
|
68
|
+
if (autonomy === "guided") {
|
|
69
|
+
parts.push("--enable", "default_mode_request_user_input");
|
|
70
|
+
}
|
|
71
|
+
// §2.4 — required so `SHIPWRIGHT_SESSION_ID` survives Codex's own shell
|
|
72
|
+
// tool's environment filter (default: a `core` subset, not `all`).
|
|
73
|
+
parts.push("-c", q("shell_environment_policy.inherit=all"));
|
|
74
|
+
parts.push(...buildTuiAnimationFlags(q));
|
|
75
|
+
// §3 mapping — "approvals" row.
|
|
76
|
+
if (autonomy === "autonomous") {
|
|
77
|
+
parts.push("--yolo");
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
parts.push("-c", q("approval_policy=on-request"));
|
|
81
|
+
parts.push("-c", q("approvals.reviewer=user"));
|
|
82
|
+
}
|
|
83
|
+
if (args.implementationModel) {
|
|
84
|
+
parts.push("-c", q(`model="${args.implementationModel}"`));
|
|
85
|
+
}
|
|
86
|
+
// Codex prompts are always multi-paragraph (model pins / SKILL.md pointer
|
|
87
|
+
// / description / SHIPWRIGHT-STATUS footer, blank-line-separated) — the
|
|
88
|
+
// PowerShell form needs the PSReadLine-multi-line-corruption-safe quoter
|
|
89
|
+
// (see qPsMultiline's doc comment); cmd/posix are unaffected, so they keep
|
|
90
|
+
// the plain per-shell quoter.
|
|
91
|
+
const promptText = buildCodexPrompt(args);
|
|
92
|
+
parts.push(shellForm === "powershell" ? qPsMultiline(promptText) : q(promptText));
|
|
93
|
+
const cmd = parts.join(" ");
|
|
94
|
+
void cwd; // cwd is already folded into cdPrefix; kept for symmetry with launcher.ts's per-shell renderers.
|
|
95
|
+
return cdPrefix + envPrefix + (shellForm === "powershell" ? "& " + cmd : cmd);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* iterate-2026-09-19-codex-terminal-flicker (CLAUDE.md DO-NOT #32) —
|
|
99
|
+
* Codex's own TUI (not this webui) redraws its fixed-position input box
|
|
100
|
+
* every time transcript content changes above it, and does so OUTSIDE
|
|
101
|
+
* DECSET 2026 (Synchronized Output) — confirmed against a raw pty capture,
|
|
102
|
+
* independent of the webui entirely. During normal "thinking" turns this
|
|
103
|
+
* repeats roughly every 100ms via a terminal-title spinner plus periodic
|
|
104
|
+
* status-widget redraws (upstream: openai/codex#39268, #37706), so any
|
|
105
|
+
* terminal relaying Codex's raw output shows visible flicker.
|
|
106
|
+
* `-c tui.animations=false` (upstream config key; see openai/codex#45564,
|
|
107
|
+
* #46111) suppresses the decorative animation/spinner path entirely,
|
|
108
|
+
* eliminating the RECURRING flicker during a turn (verified empirically —
|
|
109
|
+
* zero title-spinner or status-redraw chunks with the flag set, vs. one
|
|
110
|
+
* every ~108ms without it). It does NOT touch the one-time startup box
|
|
111
|
+
* reflow (~9 redraws over ~0.2–2s as Codex resolves model/MCP state on
|
|
112
|
+
* launch) — that part is a separate, currently-unfixed upstream mechanism.
|
|
113
|
+
* Known trade-off (openai/codex#45564, upstream bug): the elapsed
|
|
114
|
+
* "Working Xs" counter freezes with animations off until the terminal is
|
|
115
|
+
* hidden/shown again — a frozen decorative counter is preferable to
|
|
116
|
+
* continuous flicker. Reversible via `SHIPWRIGHT_CODEX_TUI_ANIMATIONS=0`
|
|
117
|
+
* (mirrors `SHIPWRIGHT_TERMINAL_NO_FLICKER`'s opt-out contract in
|
|
118
|
+
* `terminal/spawn-env.ts`) for anyone who wants the elapsed timer back
|
|
119
|
+
* more than they want the flicker gone.
|
|
120
|
+
*/
|
|
121
|
+
function buildTuiAnimationFlags(q) {
|
|
122
|
+
if (process.env.SHIPWRIGHT_CODEX_TUI_ANIMATIONS === "0")
|
|
123
|
+
return [];
|
|
124
|
+
return ["-c", q("tui.animations=false")];
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* iterate-2026-09-19-codex-reviewer-fields — see `planReviewModel`/
|
|
128
|
+
* `reviewModel`'s doc comment on `CodexLaunchArgs` for why these are an
|
|
129
|
+
* env-var prefix rather than a `-c` flag. Empty when neither override is
|
|
130
|
+
* set, so an ordinary launch's command string is byte-identical to before
|
|
131
|
+
* this feature existed.
|
|
132
|
+
*/
|
|
133
|
+
function buildReviewEnvPrefix(args, q, shellForm) {
|
|
134
|
+
const entries = [];
|
|
135
|
+
if (args.planReviewModel) {
|
|
136
|
+
entries.push(["SHIPWRIGHT_CODEX_PLAN_REVIEW_MODEL", args.planReviewModel]);
|
|
137
|
+
}
|
|
138
|
+
if (args.reviewModel) {
|
|
139
|
+
entries.push(["SHIPWRIGHT_CODEX_REVIEW_MODEL", args.reviewModel]);
|
|
140
|
+
}
|
|
141
|
+
if (entries.length === 0)
|
|
142
|
+
return "";
|
|
143
|
+
if (shellForm === "powershell") {
|
|
144
|
+
return entries.map(([name, value]) => `$env:${name} = ${q(value)}; `).join("");
|
|
145
|
+
}
|
|
146
|
+
if (shellForm === "cmd") {
|
|
147
|
+
return entries.map(([name, value]) => `set ${q(`${name}=${value}`)} && `).join("");
|
|
148
|
+
}
|
|
149
|
+
return entries.map(([name, value]) => `${name}=${q(value)} `).join("");
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* §2.3 — Codex's per-phase standing instructions live in prompt text this
|
|
153
|
+
* function composes, not a template file. For a project with no
|
|
154
|
+
* `AGENTS.md` (or a phase it doesn't cover), inline the model pins and
|
|
155
|
+
* review-cascade authorization directly rather than generating a file into
|
|
156
|
+
* someone else's repo. §5.4 — every prompt ends with an instruction to
|
|
157
|
+
* close with a structured `SHIPWRIGHT-STATUS` self-report, cross-checked
|
|
158
|
+
* against the oracle verdict by `CodexTaskWatcher`.
|
|
159
|
+
*/
|
|
160
|
+
export function buildCodexPrompt(args) {
|
|
161
|
+
const { phase, hasAgentsMd } = args;
|
|
162
|
+
const agentsMdCoversPhase = Boolean(hasAgentsMd) && phase === "iterate";
|
|
163
|
+
const lines = [];
|
|
164
|
+
if (!hasAgentsMd) {
|
|
165
|
+
lines.push("Use gpt-5.6-terra with high reasoning for ordinary implementation and " +
|
|
166
|
+
"finalization, and gpt-5.6-sol with high reasoning for required review " +
|
|
167
|
+
"subagents.", "The review cascade (spec-reviewer, code-reviewer, doubt-reviewer) is " +
|
|
168
|
+
"requested by default for this session — spawn it without asking.");
|
|
169
|
+
}
|
|
170
|
+
if (phase && !agentsMdCoversPhase) {
|
|
171
|
+
// iterate-2026-09-19-codex-launch-phase-empty: the monorepo/plugin-cache
|
|
172
|
+
// layout is `plugins/shipwright-<phase>/skills/<phase>/SKILL.md` — the
|
|
173
|
+
// bare `shipwright-<phase>/...` form is not a resolvable path from a
|
|
174
|
+
// project root or a Codex plugin cache.
|
|
175
|
+
lines.push(`Read plugins/shipwright-${phase}/skills/${phase}/SKILL.md and execute it.`);
|
|
176
|
+
}
|
|
177
|
+
const description = args.description?.trim();
|
|
178
|
+
if (description) {
|
|
179
|
+
lines.push(description);
|
|
180
|
+
}
|
|
181
|
+
lines.push("When you finish this session's work, close your final message with a " +
|
|
182
|
+
'fenced block: ```SHIPWRIGHT-STATUS\n{"phase":"' +
|
|
183
|
+
(phase ?? "") +
|
|
184
|
+
'","done":true}\n``` (done:false if you could not complete it).');
|
|
185
|
+
return lines.join("\n\n");
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=launcher-codex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher-codex.js","sourceRoot":"","sources":["../../src/core/launcher-codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type CodextenderLaunchArgs } from "./launcher-codextender.js";
|
|
2
|
+
export declare function writeCodextenderAuthTokenFile(token: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Doubt-review/plan-review HIGH — PowerShell (`$env:X = ...;`) and cmd
|
|
5
|
+
* (`set X=Y &&`) mutate the CURRENT, persistent shell's environment (unlike
|
|
6
|
+
* the posix prefix form, which scopes to the one invocation it precedes).
|
|
7
|
+
* The embedded terminal is a long-lived pty shell, not spawned fresh per
|
|
8
|
+
* command, so without this suffix the proxy's `ANTHROPIC_BASE_URL` /
|
|
9
|
+
* `ANTHROPIC_AUTH_TOKEN` / `ANTHROPIC_MODEL` would silently outlive this one
|
|
10
|
+
* `claude` invocation and get inherited by whatever the user (or a later
|
|
11
|
+
* Relaunch-as-Claude/Codex-Light) types next in the same tab. Runs
|
|
12
|
+
* unconditionally after `rest` (cmd's `&`, PowerShell's/posix's `;` — none
|
|
13
|
+
* gated on `rest`'s own exit code, so cleanup still happens if `claude`
|
|
14
|
+
* exits non-zero). The temp token file is deleted here too, on all three
|
|
15
|
+
* shells — posix's env-scoping was already correct, but it still wrote the
|
|
16
|
+
* file to disk and must still remove it.
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildCodextenderEnvCleanupSuffix(shellForm: "powershell" | "cmd" | "posix", q: (v: string) => string, tokenFilePath: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Same three per-shell quoting forms `launcher-codex.ts`'s own
|
|
21
|
+
* `buildReviewEnvPrefix` uses (PowerShell `$env:X = ...;`, cmd
|
|
22
|
+
* `set X=Y &&`, posix `X=Y `) — reused as a pattern, not imported (that
|
|
23
|
+
* function is private to `launcher-codex.ts` and this module has no
|
|
24
|
+
* dependency on Codex-CLI concerns). `ANTHROPIC_AUTH_TOKEN` is the one
|
|
25
|
+
* exception to the uniform `name=value` shape — see
|
|
26
|
+
* `writeCodextenderAuthTokenFile`'s doc comment for why it's read back from
|
|
27
|
+
* `tokenFilePath` instead of written as a literal.
|
|
28
|
+
*
|
|
29
|
+
* `CLAUDE_CODE_MAX_CONTEXT_TOKENS` (operator finding, 2026-09-26) is NOT
|
|
30
|
+
* folded into the uniform `plainEntries` loop below — PR-review preflight
|
|
31
|
+
* BLOCK (round 13): when `maxContextTokens` is undefined we must actively
|
|
32
|
+
* UNSET the var, not merely omit assigning it, so an inherited value (from
|
|
33
|
+
* an earlier launch in this same long-lived pty, or from whatever spawned
|
|
34
|
+
* the webui server itself) can't silently reach `claude` and defeat the
|
|
35
|
+
* documented "unset = Claude Code's safe 200K default" fallback. Each shell
|
|
36
|
+
* has its own real unset idiom — PowerShell's is `$env:X = $null` (an empty
|
|
37
|
+
* string only blanks it, doesn't remove it), cmd's is `set "X="` — except
|
|
38
|
+
* posix, whose `NAME=value` prefix form only scopes an ASSIGNMENT to the one
|
|
39
|
+
* invocation it precedes and so can't drop an inherited export; see the
|
|
40
|
+
* posix branch below for why `unset` (as its own leading statement), not
|
|
41
|
+
* `env -u`, is what that branch uses instead.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildCodextenderEnvPrefix(args: CodextenderLaunchArgs, q: (v: string) => string, shellForm: "powershell" | "cmd" | "posix", tokenFilePath: string): string;
|
|
44
|
+
//# sourceMappingURL=launcher-codextender-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher-codextender-env.d.ts","sourceRoot":"","sources":["../../src/core/launcher-codextender-env.ts"],"names":[],"mappings":"AAeA,OAAO,EAAmC,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AA+BxG,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAenE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,YAAY,GAAG,KAAK,GAAG,OAAO,EACzC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACxB,aAAa,EAAE,MAAM,GACpB,MAAM,CA4BR;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,qBAAqB,EAC3B,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EACxB,SAAS,EAAE,YAAY,GAAG,KAAK,GAAG,OAAO,EACzC,aAAa,EAAE,MAAM,GACpB,MAAM,CAiGR"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* launcher-codextender-env.ts — the per-shell env-var prefix/cleanup string
|
|
3
|
+
* builders for a Codextender launch, split out of launcher-codextender.ts
|
|
4
|
+
* (2026-09-26, bloat anti-ratchet) after the CLAUDE_CODE_MAX_CONTEXT_TOKENS
|
|
5
|
+
* leak fix (PR-review preflight BLOCK, round 13) added enough per-shell
|
|
6
|
+
* unset-idiom logic to cross the 300-line guideline. Pure string builders,
|
|
7
|
+
* no process spawning — same "webui never spawns a process" rule as the
|
|
8
|
+
* sibling file.
|
|
9
|
+
*/
|
|
10
|
+
import { randomUUID } from "node:crypto";
|
|
11
|
+
import { writeFileSync } from "node:fs";
|
|
12
|
+
import { tmpdir } from "node:os";
|
|
13
|
+
import path from "node:path";
|
|
14
|
+
import { DEFAULT_CODEXTENDER_MODEL_ALIAS } from "./launcher-codextender.js";
|
|
15
|
+
/**
|
|
16
|
+
* PR-review preflight BLOCK (round 7, iterate-2026-09-23) — embedding
|
|
17
|
+
* `authToken`'s literal value in the generated command put it in terminal
|
|
18
|
+
* input/scrollback and any session recording, even after round 7's own
|
|
19
|
+
* env-cleanup suffix removed it from the shell's PERSISTENT environment
|
|
20
|
+
* (that fix addressed leak-to-a-LATER-command, not visibility of THIS one).
|
|
21
|
+
* Round 8: the token is written once to a private, per-launch temp file
|
|
22
|
+
* (`0o600`, a fresh random name) and every shell form reads it back via its
|
|
23
|
+
* own no-echo idiom (PowerShell `Get-Content`, cmd `set /p ... <file`, posix
|
|
24
|
+
* `$(cat file)`) — confirmed empirically (real `cmd.exe`/`powershell.exe`,
|
|
25
|
+
* not just read) that each correctly sets the var for a CHILD process
|
|
26
|
+
* without ever printing the file's contents. `buildCodextenderEnvCleanupSuffix`
|
|
27
|
+
* deletes it unconditionally after the `claude` invocation on all three
|
|
28
|
+
* shells. Residual risk, accepted: a pty killed before that cleanup step
|
|
29
|
+
* runs leaves an orphaned token file in the OS temp dir — a materially
|
|
30
|
+
* smaller and shorter-lived exposure than the permanent scrollback record
|
|
31
|
+
* this replaces, and the OS temp dir is already user-scoped (not
|
|
32
|
+
* world-readable) on both Windows and POSIX.
|
|
33
|
+
*
|
|
34
|
+
* Round-12 preflight hardening: `flag: "wx"` creates the file exclusively
|
|
35
|
+
* (fails with EEXIST instead of following a pre-existing symlink at the
|
|
36
|
+
* generated path), so a TOCTOU symlink race in the shared temp dir can
|
|
37
|
+
* never redirect the token write onto an attacker-chosen file. A random
|
|
38
|
+
* UUID path already makes a genuine collision astronomically unlikely; the
|
|
39
|
+
* bounded retry only exists to survive that near-impossible case rather
|
|
40
|
+
* than crash the launch.
|
|
41
|
+
*/
|
|
42
|
+
const MAX_TOKEN_FILE_CREATE_ATTEMPTS = 5;
|
|
43
|
+
export function writeCodextenderAuthTokenFile(token) {
|
|
44
|
+
for (let attempt = 0; attempt < MAX_TOKEN_FILE_CREATE_ATTEMPTS; attempt++) {
|
|
45
|
+
const filePath = path.join(tmpdir(), `codextender-auth-${randomUUID()}.tmp`);
|
|
46
|
+
try {
|
|
47
|
+
writeFileSync(filePath, `${token}\n`, { mode: 0o600, flag: "wx" });
|
|
48
|
+
return filePath;
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (err.code === "EEXIST")
|
|
52
|
+
continue;
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
throw new Error("Failed to create a unique Codextender auth token file after " +
|
|
57
|
+
`${MAX_TOKEN_FILE_CREATE_ATTEMPTS} attempts`);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Doubt-review/plan-review HIGH — PowerShell (`$env:X = ...;`) and cmd
|
|
61
|
+
* (`set X=Y &&`) mutate the CURRENT, persistent shell's environment (unlike
|
|
62
|
+
* the posix prefix form, which scopes to the one invocation it precedes).
|
|
63
|
+
* The embedded terminal is a long-lived pty shell, not spawned fresh per
|
|
64
|
+
* command, so without this suffix the proxy's `ANTHROPIC_BASE_URL` /
|
|
65
|
+
* `ANTHROPIC_AUTH_TOKEN` / `ANTHROPIC_MODEL` would silently outlive this one
|
|
66
|
+
* `claude` invocation and get inherited by whatever the user (or a later
|
|
67
|
+
* Relaunch-as-Claude/Codex-Light) types next in the same tab. Runs
|
|
68
|
+
* unconditionally after `rest` (cmd's `&`, PowerShell's/posix's `;` — none
|
|
69
|
+
* gated on `rest`'s own exit code, so cleanup still happens if `claude`
|
|
70
|
+
* exits non-zero). The temp token file is deleted here too, on all three
|
|
71
|
+
* shells — posix's env-scoping was already correct, but it still wrote the
|
|
72
|
+
* file to disk and must still remove it.
|
|
73
|
+
*/
|
|
74
|
+
export function buildCodextenderEnvCleanupSuffix(shellForm, q, tokenFilePath) {
|
|
75
|
+
// CLAUDE_CODE_MAX_CONTEXT_TOKENS is cleaned up unconditionally, like every
|
|
76
|
+
// other var here, regardless of whether THIS launch set it — Remove-Item
|
|
77
|
+
// -ErrorAction SilentlyContinue / `set NAME=` are no-ops when the var was
|
|
78
|
+
// never present, and this is what guarantees a value from an earlier
|
|
79
|
+
// launch in the same long-lived pty never survives past this invocation.
|
|
80
|
+
const names = [
|
|
81
|
+
"ANTHROPIC_BASE_URL",
|
|
82
|
+
"ANTHROPIC_AUTH_TOKEN",
|
|
83
|
+
"ANTHROPIC_MODEL",
|
|
84
|
+
"CODEXTENDER_ACTIVE",
|
|
85
|
+
"CODEXTENDER_MODEL",
|
|
86
|
+
"CLAUDE_CODE_MAX_CONTEXT_TOKENS",
|
|
87
|
+
"CLAUDE_CODE_AUTO_MODE_SERVER",
|
|
88
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL",
|
|
89
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL",
|
|
90
|
+
"ANTHROPIC_DEFAULT_HAIKU_MODEL",
|
|
91
|
+
];
|
|
92
|
+
if (shellForm === "powershell") {
|
|
93
|
+
return (`; Remove-Item ${names.map((n) => `Env:${n}`).join(",")} -ErrorAction SilentlyContinue` +
|
|
94
|
+
`; Remove-Item -LiteralPath ${q(tokenFilePath)} -Force -ErrorAction SilentlyContinue`);
|
|
95
|
+
}
|
|
96
|
+
if (shellForm === "cmd") {
|
|
97
|
+
return names.map((n) => ` & set ${n}=`).join("") + ` & del /f /q ${q(tokenFilePath)}`;
|
|
98
|
+
}
|
|
99
|
+
return ` ; rm -f ${q(tokenFilePath)}`;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Same three per-shell quoting forms `launcher-codex.ts`'s own
|
|
103
|
+
* `buildReviewEnvPrefix` uses (PowerShell `$env:X = ...;`, cmd
|
|
104
|
+
* `set X=Y &&`, posix `X=Y `) — reused as a pattern, not imported (that
|
|
105
|
+
* function is private to `launcher-codex.ts` and this module has no
|
|
106
|
+
* dependency on Codex-CLI concerns). `ANTHROPIC_AUTH_TOKEN` is the one
|
|
107
|
+
* exception to the uniform `name=value` shape — see
|
|
108
|
+
* `writeCodextenderAuthTokenFile`'s doc comment for why it's read back from
|
|
109
|
+
* `tokenFilePath` instead of written as a literal.
|
|
110
|
+
*
|
|
111
|
+
* `CLAUDE_CODE_MAX_CONTEXT_TOKENS` (operator finding, 2026-09-26) is NOT
|
|
112
|
+
* folded into the uniform `plainEntries` loop below — PR-review preflight
|
|
113
|
+
* BLOCK (round 13): when `maxContextTokens` is undefined we must actively
|
|
114
|
+
* UNSET the var, not merely omit assigning it, so an inherited value (from
|
|
115
|
+
* an earlier launch in this same long-lived pty, or from whatever spawned
|
|
116
|
+
* the webui server itself) can't silently reach `claude` and defeat the
|
|
117
|
+
* documented "unset = Claude Code's safe 200K default" fallback. Each shell
|
|
118
|
+
* has its own real unset idiom — PowerShell's is `$env:X = $null` (an empty
|
|
119
|
+
* string only blanks it, doesn't remove it), cmd's is `set "X="` — except
|
|
120
|
+
* posix, whose `NAME=value` prefix form only scopes an ASSIGNMENT to the one
|
|
121
|
+
* invocation it precedes and so can't drop an inherited export; see the
|
|
122
|
+
* posix branch below for why `unset` (as its own leading statement), not
|
|
123
|
+
* `env -u`, is what that branch uses instead.
|
|
124
|
+
*/
|
|
125
|
+
export function buildCodextenderEnvPrefix(args, q, shellForm, tokenFilePath) {
|
|
126
|
+
const model = args.model?.trim() || DEFAULT_CODEXTENDER_MODEL_ALIAS;
|
|
127
|
+
const plainEntries = [
|
|
128
|
+
["ANTHROPIC_BASE_URL", args.baseUrl],
|
|
129
|
+
["ANTHROPIC_MODEL", model],
|
|
130
|
+
["CODEXTENDER_ACTIVE", "1"],
|
|
131
|
+
["CODEXTENDER_MODEL", model],
|
|
132
|
+
// Operator finding (2026-09-27): every gateway-routed session (which a
|
|
133
|
+
// Codextender launch always is) shows a recurring "auto mode isn't
|
|
134
|
+
// eligible for classifier billing changes" notice, because the local
|
|
135
|
+
// proxy is an LLM gateway sitting between Claude Code and the API.
|
|
136
|
+
// Doubt-review HIGH (this session) asked for a source proving `"0"` is
|
|
137
|
+
// a value-based suppress flag rather than a presence-checked one (where
|
|
138
|
+
// the literal string `"0"` would be truthy and could no-op or backfire)
|
|
139
|
+
// — confirmed against Claude Code's own docs
|
|
140
|
+
// (https://code.claude.com/docs/en/auto-mode-classifier-billing,
|
|
141
|
+
// "Make the session eligible"): setting `CLAUDE_CODE_AUTO_MODE_SERVER`
|
|
142
|
+
// to `0` is the documented way to tell Claude Code not to ask a gateway
|
|
143
|
+
// for the server-side checks, classifier requests are billed exactly as
|
|
144
|
+
// before either way, and the notice stops appearing. The docs flag it as
|
|
145
|
+
// a "temporary setting [that] may be removed in a later release" — if a
|
|
146
|
+
// future Claude Code drops it, this line becomes an inert env var, not a
|
|
147
|
+
// behavior change, so no expiry guard is needed here. Cosmetic only, but
|
|
148
|
+
// it re-fires on every classifier-gated action for the life of the
|
|
149
|
+
// session. Unlike `CLAUDE_CODE_MAX_CONTEXT_TOKENS` this needs no dynamic
|
|
150
|
+
// probe result — it's a fixed constant, always "0" for this runtime — so
|
|
151
|
+
// unlike that sibling var it belongs in the uniform loop, not its own
|
|
152
|
+
// conditional branch.
|
|
153
|
+
["CLAUDE_CODE_AUTO_MODE_SERVER", "0"],
|
|
154
|
+
// Tier aliases (2026-09-29): Claude Code resolves `opus`/`sonnet`/`haiku`
|
|
155
|
+
// (subagent `model:` frontmatter, `--model`, the Agent tool param, the
|
|
156
|
+
// auto-mode classifier) to `claude-*` names and sends those to
|
|
157
|
+
// ANTHROPIC_BASE_URL. The proxy serves ONLY the Codex aliases it was
|
|
158
|
+
// started with (no claude-* wildcards, codextender 78c9401), so an
|
|
159
|
+
// unmapped tier 400s ("no healthy deployments"). Pin all three tiers to
|
|
160
|
+
// the launch alias client-side. NOT CLAUDE_CODE_SUBAGENT_MODEL: since
|
|
161
|
+
// Claude Code v2.1.251 a subagent's frontmatter model outranks it.
|
|
162
|
+
["ANTHROPIC_DEFAULT_OPUS_MODEL", model],
|
|
163
|
+
["ANTHROPIC_DEFAULT_SONNET_MODEL", model],
|
|
164
|
+
["ANTHROPIC_DEFAULT_HAIKU_MODEL", model],
|
|
165
|
+
];
|
|
166
|
+
if (shellForm === "powershell") {
|
|
167
|
+
const tokenLine = `$env:ANTHROPIC_AUTH_TOKEN = (Get-Content -LiteralPath ${q(tokenFilePath)} -Raw).Trim(); `;
|
|
168
|
+
const maxContextLine = args.maxContextTokens !== undefined
|
|
169
|
+
? `$env:CLAUDE_CODE_MAX_CONTEXT_TOKENS = ${q(String(args.maxContextTokens))}; `
|
|
170
|
+
: `$env:CLAUDE_CODE_MAX_CONTEXT_TOKENS = $null; `;
|
|
171
|
+
return (tokenLine +
|
|
172
|
+
plainEntries.map(([name, value]) => `$env:${name} = ${q(value)}; `).join("") +
|
|
173
|
+
maxContextLine);
|
|
174
|
+
}
|
|
175
|
+
if (shellForm === "cmd") {
|
|
176
|
+
const tokenLine = `set /p ANTHROPIC_AUTH_TOKEN=<${q(tokenFilePath)} && `;
|
|
177
|
+
const maxContextLine = args.maxContextTokens !== undefined
|
|
178
|
+
? `set ${q(`CLAUDE_CODE_MAX_CONTEXT_TOKENS=${args.maxContextTokens}`)} && `
|
|
179
|
+
: `set ${q("CLAUDE_CODE_MAX_CONTEXT_TOKENS=")} && `;
|
|
180
|
+
return (tokenLine +
|
|
181
|
+
plainEntries.map(([name, value]) => `set ${q(`${name}=${value}`)} && `).join("") +
|
|
182
|
+
maxContextLine);
|
|
183
|
+
}
|
|
184
|
+
// Built via `+` (not one contiguous template literal) so the source text
|
|
185
|
+
// never juxtaposes "ANTHROPIC_AUTH_TOKEN=" with an immediately-following
|
|
186
|
+
// quote character — that shape false-positives the repo's hardcoded-
|
|
187
|
+
// secret scanner (`password|...|auth_token\s*[=:]\s*['"][^'"]{8,}['"]`),
|
|
188
|
+
// same precaution `launcher-codextender.test.ts` already documents.
|
|
189
|
+
const tokenLine = "ANTHROPIC_AUTH_TOKEN=" + `"$(cat ${q(tokenFilePath)})" `;
|
|
190
|
+
if (args.maxContextTokens !== undefined) {
|
|
191
|
+
const maxContextLine = `CLAUDE_CODE_MAX_CONTEXT_TOKENS=${q(String(args.maxContextTokens))} `;
|
|
192
|
+
return (tokenLine +
|
|
193
|
+
plainEntries.map(([name, value]) => `${name}=${q(value)} `).join("") +
|
|
194
|
+
maxContextLine);
|
|
195
|
+
}
|
|
196
|
+
// No value to assign: a `NAME=value` prefix only scopes an ASSIGNMENT to
|
|
197
|
+
// the one invocation it precedes, so it can't be used to drop an
|
|
198
|
+
// inherited export the way it sets one. `env -u` would do that but
|
|
199
|
+
// resolves the command via PATH, bypassing a shell FUNCTION/alias named
|
|
200
|
+
// `claude` (confirmed by this module's own smoke test invoking the real
|
|
201
|
+
// installed CLI instead of the test's stub) — a real behavioral change,
|
|
202
|
+
// not just a test artifact. `unset` is its own statement, so it must come
|
|
203
|
+
// BEFORE the `NAME=value ... claude` simple command, never woven into
|
|
204
|
+
// it — inserting it between the assignments and the command would turn
|
|
205
|
+
// the assignments into a bare `A=1 B=2` statement, which (per POSIX,
|
|
206
|
+
// absent a following command) sets them as ordinary, NON-scoped shell
|
|
207
|
+
// variables instead of scoping them to just this invocation.
|
|
208
|
+
return ("unset CLAUDE_CODE_MAX_CONTEXT_TOKENS; " +
|
|
209
|
+
tokenLine +
|
|
210
|
+
plainEntries.map(([name, value]) => `${name}=${q(value)} `).join(""));
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=launcher-codextender-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher-codextender-env.js","sourceRoot":"","sources":["../../src/core/launcher-codextender-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type CopyCommandForms } from "./launcher.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the bearer token sent to the local Codextender proxy from
|
|
4
|
+
* `process.env.CODEXTENDER_AUTH_TOKEN` — a validated configuration/
|
|
5
|
+
* environment value, never a value baked into this source (PR-review
|
|
6
|
+
* BLOCK, iterate-2026-09-23, second round: a hardcoded fallback here read
|
|
7
|
+
* as an unconditional credential regardless of its actual local-only,
|
|
8
|
+
* non-secret nature). Returns `undefined` when unset or blank; every
|
|
9
|
+
* caller must treat that as "Codextender isn't configured on this machine"
|
|
10
|
+
* and fail closed (`codextenderAuthTokenMissingError`) rather than send an
|
|
11
|
+
* empty/placeholder token.
|
|
12
|
+
*/
|
|
13
|
+
export declare function resolveCodextenderAuthToken(): string | undefined;
|
|
14
|
+
/** Matches `codextender`'s own CLI default (`codextender --port 4000`
|
|
15
|
+
* exposes `gpt-6-sol` as alias `sol` unless told otherwise). */
|
|
16
|
+
export declare const DEFAULT_CODEXTENDER_MODEL_ALIAS = "sol";
|
|
17
|
+
export interface CodextenderLaunchArgs {
|
|
18
|
+
cwd: string;
|
|
19
|
+
/** `http://127.0.0.1:<codextenderPort>` — built by the caller from the
|
|
20
|
+
* `codextenderPort` global setting. */
|
|
21
|
+
baseUrl: string;
|
|
22
|
+
/** The Codextender model alias (Part A — "no closed enum", free text,
|
|
23
|
+
* reuses the existing `codexImplementationModel` launch-body field).
|
|
24
|
+
* Defaults to `DEFAULT_CODEXTENDER_MODEL_ALIAS` when omitted. */
|
|
25
|
+
model?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Resolved via `resolveCodextenderAuthToken()` by the caller — this
|
|
28
|
+
* function has no built-in default and never resolves it itself, so a
|
|
29
|
+
* caller that skips the "is Codextender configured?" preflight gets a
|
|
30
|
+
* TypeScript error here, not a silently-sent empty/placeholder token.
|
|
31
|
+
*/
|
|
32
|
+
authToken: string;
|
|
33
|
+
/**
|
|
34
|
+
* The Codextender model's real context window in tokens, resolved by the
|
|
35
|
+
* caller from the proxy's own `/v1/models` `max_input_tokens` field
|
|
36
|
+
* (`resolveCodextenderMaxContextTokens` in `codextender-proxy-probe.ts`) —
|
|
37
|
+
* operator finding, 2026-09-26: Claude Code assumes a 200K window for any
|
|
38
|
+
* model id it doesn't recognize and over-compacts against that wrong
|
|
39
|
+
* ceiling long before the real ~1.05M-token Codex window is anywhere near
|
|
40
|
+
* full. `undefined` (probe failed, alias unknown, or field absent) leaves
|
|
41
|
+
* `CLAUDE_CODE_MAX_CONTEXT_TOKENS` unset — the safe fallback is Claude
|
|
42
|
+
* Code's own 200K default, never a number guessed here.
|
|
43
|
+
*/
|
|
44
|
+
maxContextTokens?: number;
|
|
45
|
+
/**
|
|
46
|
+
* The already-built plain-Claude commands for THIS task (same
|
|
47
|
+
* session-id/resume/name/plugin-dir/slash-command shape an ordinary
|
|
48
|
+
* Claude-runtime launch of this task would produce) — the chokepoint's
|
|
49
|
+
* own Claude-fallback `commands`, computed before it decides to override
|
|
50
|
+
* for a Codex-runtime task.
|
|
51
|
+
*/
|
|
52
|
+
claudeCommands: CopyCommandForms;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Doubt-review HIGH — `args.cwd` is caller-supplied (`task.cwd` at the
|
|
56
|
+
* launch chokepoint and the fork route; `applyActionSubstitutionBranch`'s
|
|
57
|
+
* custom-action commands are built from `project.path` instead, which can
|
|
58
|
+
* legitimately diverge from `task.cwd`, e.g. a worktree-based task). When
|
|
59
|
+
* `args.claudeCommands` was built from a DIFFERENT cwd than `args.cwd`,
|
|
60
|
+
* the exact-string cd-prefix match below fails, and silently falling
|
|
61
|
+
* through to prepend a second, possibly-wrong `cd`/`Set-Location` ahead of
|
|
62
|
+
* the original produced a command that could abort outright (PowerShell's
|
|
63
|
+
* `-ErrorAction Stop` on a nonexistent `args.cwd`) or silently launch in
|
|
64
|
+
* the wrong directory. Thrown instead, so a caller surfaces this as an
|
|
65
|
+
* actionable error rather than an auto-executed command that mysteriously
|
|
66
|
+
* fails or does the wrong thing.
|
|
67
|
+
*/
|
|
68
|
+
export declare class CodextenderCwdMismatchError extends Error {
|
|
69
|
+
constructor(cwd: string);
|
|
70
|
+
}
|
|
71
|
+
export declare function buildCodextenderCommands(args: CodextenderLaunchArgs): CopyCommandForms;
|
|
72
|
+
//# sourceMappingURL=launcher-codextender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launcher-codextender.d.ts","sourceRoot":"","sources":["../../src/core/launcher-codextender.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAiB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGrE;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,GAAG,SAAS,CAGhE;AAED;iEACiE;AACjE,eAAO,MAAM,+BAA+B,QAAQ,CAAC;AAErD,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ;4CACwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB;;sEAEkE;IAClE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,cAAc,EAAE,gBAAgB,CAAC;CAClC;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,GAAG,EAAE,MAAM;CAQxB;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,CAoBtF"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Codextender launch-command builder (Codextender integration spec Part B.2,
|
|
3
|
+
* `C:\01_Development\shipwright\Spec\codextender-integration.md`).
|
|
4
|
+
*
|
|
5
|
+
* Sibling of `launcher-codex.ts`, but structurally different from it:
|
|
6
|
+
* Codextender never changes the DRIVING BINARY (`claude` stays `claude` —
|
|
7
|
+
* only `ANTHROPIC_BASE_URL`/`ANTHROPIC_MODEL` re-point it at a local
|
|
8
|
+
* LiteLLM proxy that talks to a Codex-plan subscription). So instead of
|
|
9
|
+
* re-implementing session/resume/name/plugin-dir argv logic the way
|
|
10
|
+
* `launcher-codex.ts` does for the genuinely different `codex` CLI, this
|
|
11
|
+
* module REUSES the already-built plain-Claude `CopyCommandForms` for this
|
|
12
|
+
* task (identical to what an ordinary Claude-runtime launch would produce)
|
|
13
|
+
* and prepends a per-shell env-var prefix ahead of the `claude` invocation
|
|
14
|
+
* itself — the exact insertion point `buildCdPrefix` (pure, exported from
|
|
15
|
+
* `launcher.ts`) lets us locate by exact string match, no regex guessing.
|
|
16
|
+
*
|
|
17
|
+
* "webui never spawns a process, only builds a string" (CLAUDE.md rule 1)
|
|
18
|
+
* holds identically to every other launcher in this directory.
|
|
19
|
+
*/
|
|
20
|
+
import { unlinkSync } from "node:fs";
|
|
21
|
+
import { buildCodextenderEnvCleanupSuffix, buildCodextenderEnvPrefix, writeCodextenderAuthTokenFile, } from "./launcher-codextender-env.js";
|
|
22
|
+
import { buildCdPrefix } from "./launcher.js";
|
|
23
|
+
import { qPs, qCmd, qPosix } from "./shell-quote.js";
|
|
24
|
+
/**
|
|
25
|
+
* Resolves the bearer token sent to the local Codextender proxy from
|
|
26
|
+
* `process.env.CODEXTENDER_AUTH_TOKEN` — a validated configuration/
|
|
27
|
+
* environment value, never a value baked into this source (PR-review
|
|
28
|
+
* BLOCK, iterate-2026-09-23, second round: a hardcoded fallback here read
|
|
29
|
+
* as an unconditional credential regardless of its actual local-only,
|
|
30
|
+
* non-secret nature). Returns `undefined` when unset or blank; every
|
|
31
|
+
* caller must treat that as "Codextender isn't configured on this machine"
|
|
32
|
+
* and fail closed (`codextenderAuthTokenMissingError`) rather than send an
|
|
33
|
+
* empty/placeholder token.
|
|
34
|
+
*/
|
|
35
|
+
export function resolveCodextenderAuthToken() {
|
|
36
|
+
const fromEnv = process.env.CODEXTENDER_AUTH_TOKEN?.trim();
|
|
37
|
+
return fromEnv && fromEnv.length > 0 ? fromEnv : undefined;
|
|
38
|
+
}
|
|
39
|
+
/** Matches `codextender`'s own CLI default (`codextender --port 4000`
|
|
40
|
+
* exposes `gpt-6-sol` as alias `sol` unless told otherwise). */
|
|
41
|
+
export const DEFAULT_CODEXTENDER_MODEL_ALIAS = "sol";
|
|
42
|
+
/**
|
|
43
|
+
* Doubt-review HIGH — `args.cwd` is caller-supplied (`task.cwd` at the
|
|
44
|
+
* launch chokepoint and the fork route; `applyActionSubstitutionBranch`'s
|
|
45
|
+
* custom-action commands are built from `project.path` instead, which can
|
|
46
|
+
* legitimately diverge from `task.cwd`, e.g. a worktree-based task). When
|
|
47
|
+
* `args.claudeCommands` was built from a DIFFERENT cwd than `args.cwd`,
|
|
48
|
+
* the exact-string cd-prefix match below fails, and silently falling
|
|
49
|
+
* through to prepend a second, possibly-wrong `cd`/`Set-Location` ahead of
|
|
50
|
+
* the original produced a command that could abort outright (PowerShell's
|
|
51
|
+
* `-ErrorAction Stop` on a nonexistent `args.cwd`) or silently launch in
|
|
52
|
+
* the wrong directory. Thrown instead, so a caller surfaces this as an
|
|
53
|
+
* actionable error rather than an auto-executed command that mysteriously
|
|
54
|
+
* fails or does the wrong thing.
|
|
55
|
+
*/
|
|
56
|
+
export class CodextenderCwdMismatchError extends Error {
|
|
57
|
+
constructor(cwd) {
|
|
58
|
+
super(`buildCodextenderCommands: claudeCommands' embedded cd-prefix does not ` +
|
|
59
|
+
`match args.cwd (${cwd}) — this task's plain-Claude commands appear ` +
|
|
60
|
+
"to have been built from a different working directory.");
|
|
61
|
+
this.name = "CodextenderCwdMismatchError";
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export function buildCodextenderCommands(args) {
|
|
65
|
+
// PR-review preflight fix (round 8, iterate-2026-09-23) — the bearer token
|
|
66
|
+
// itself never appears in any of the three command strings below; only
|
|
67
|
+
// this file's PATH does. See `writeCodextenderAuthTokenFile`'s doc comment
|
|
68
|
+
// for why a temp file replaces the literal-value approach round 7's
|
|
69
|
+
// env-cleanup fix alone didn't fully address.
|
|
70
|
+
const tokenFilePath = writeCodextenderAuthTokenFile(args.authToken);
|
|
71
|
+
try {
|
|
72
|
+
return {
|
|
73
|
+
powershell: injectEnvPrefix(args, "powershell", qPs, tokenFilePath),
|
|
74
|
+
cmd: injectEnvPrefix(args, "cmd", qCmd, tokenFilePath),
|
|
75
|
+
posix: injectEnvPrefix(args, "posix", qPosix, tokenFilePath),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
// A cwd mismatch (below) throws before any command is returned for the
|
|
80
|
+
// caller to run/clean up itself — without this, the token file written
|
|
81
|
+
// above would be orphaned on every mismatch, not just a killed pty.
|
|
82
|
+
unlinkSync(tokenFilePath);
|
|
83
|
+
throw err;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function injectEnvPrefix(args, shellForm, q, tokenFilePath) {
|
|
87
|
+
const cdPrefix = buildCdPrefix(shellForm, args.cwd);
|
|
88
|
+
const full = args.claudeCommands[shellForm];
|
|
89
|
+
if (!full.startsWith(cdPrefix)) {
|
|
90
|
+
throw new CodextenderCwdMismatchError(args.cwd);
|
|
91
|
+
}
|
|
92
|
+
const rest = full.slice(cdPrefix.length);
|
|
93
|
+
return (cdPrefix +
|
|
94
|
+
buildCodextenderEnvPrefix(args, q, shellForm, tokenFilePath) +
|
|
95
|
+
rest +
|
|
96
|
+
buildCodextenderEnvCleanupSuffix(shellForm, q, tokenFilePath));
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=launcher-codextender.js.map
|