@svenroth-ai/shipwright 0.27.0 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/dist/assets/{EmbeddedTerminal-CqCQUDtp.js → EmbeddedTerminal-4xgNUBUu.js} +19 -19
- package/client/dist/assets/{abnfDiagram-VRR7QNED-DX2objTP.js → abnfDiagram-VRR7QNED-BdCNbaqc.js} +1 -1
- package/client/dist/assets/{arc-DQmjbsFU.js → arc-DoZTTE1N.js} +1 -1
- package/client/dist/assets/{architectureDiagram-ZJ3FMSHR-DAvCsPCW.js → architectureDiagram-ZJ3FMSHR-DFTG4KtO.js} +1 -1
- package/client/dist/assets/{blockDiagram-677ZJIJ3-DC-dlyYI.js → blockDiagram-677ZJIJ3-C34UBjOB.js} +1 -1
- package/client/dist/assets/{c4Diagram-LMCZKHZV-DSlmXfhE.js → c4Diagram-LMCZKHZV-CbqAB1Ou.js} +1 -1
- package/client/dist/assets/channel-DBcZw7Kn.js +1 -0
- package/client/dist/assets/{chunk-2Q5K7J3B-C111EHL6.js → chunk-2Q5K7J3B-4N6AnmBJ.js} +1 -1
- package/client/dist/assets/{chunk-32BRIVSS-DrCYs2XG.js → chunk-32BRIVSS-Cs67LiCy.js} +1 -1
- package/client/dist/assets/{chunk-5VM5RSS4-DIejoaXS.js → chunk-5VM5RSS4-Bwd7rtD3.js} +1 -1
- package/client/dist/assets/{chunk-EX3LRPZG-CGWNeH2g.js → chunk-EX3LRPZG-CQqGfptD.js} +1 -1
- package/client/dist/assets/{chunk-JWPE2WC7-CCH0SRFY.js → chunk-JWPE2WC7-ClvKd4PN.js} +1 -1
- package/client/dist/assets/{chunk-MOJQB5TN-B3OpZGRv.js → chunk-MOJQB5TN-Cwvj8GE1.js} +1 -1
- package/client/dist/assets/{chunk-RYQCIY6F-BKhdp_8v.js → chunk-RYQCIY6F-DrWMx37d.js} +1 -1
- package/client/dist/assets/{chunk-V7JOEXUC-B6Bu8x1y.js → chunk-V7JOEXUC-CYFfa4PY.js} +1 -1
- package/client/dist/assets/{chunk-VR4S4FIN-OgFi2_iB.js → chunk-VR4S4FIN-B5eWtesm.js} +1 -1
- package/client/dist/assets/{chunk-XXDRQBXY-xyjuuhxl.js → chunk-XXDRQBXY-BQAZ6Our.js} +1 -1
- package/client/dist/assets/classDiagram-OUVF2IWQ-C3Q1V9DU.js +1 -0
- package/client/dist/assets/classDiagram-v2-EOCWNBFH-C3Q1V9DU.js +1 -0
- package/client/dist/assets/{cose-bilkent-JH36ORCC-BQIH3SCK.js → cose-bilkent-JH36ORCC-C76Yia6h.js} +1 -1
- package/client/dist/assets/{cynefin-VYW2F7L2-oyLAz8te.js → cynefin-VYW2F7L2-pJe7rdTi.js} +1 -1
- package/client/dist/assets/{cynefinDiagram-TSTJHNR4-DoLCsH0l.js → cynefinDiagram-TSTJHNR4-EeHQ7dYV.js} +1 -1
- package/client/dist/assets/{dagre-VKFMJZFB-D7djx1_Y.js → dagre-VKFMJZFB-VXOY6IHR.js} +1 -1
- package/client/dist/assets/{diagram-FQU43EPY-DFuYE0Vf.js → diagram-FQU43EPY-DW_-leqw.js} +1 -1
- package/client/dist/assets/{diagram-G47NLZAW-CffCZVXk.js → diagram-G47NLZAW-C_hsLD4u.js} +1 -1
- package/client/dist/assets/{diagram-NH7WQ7WH-BhrHtUlt.js → diagram-NH7WQ7WH-CbeQuO_f.js} +1 -1
- package/client/dist/assets/{diagram-OA4YK3LP-CwQPbOn0.js → diagram-OA4YK3LP-DRHY5d_c.js} +1 -1
- package/client/dist/assets/{diagram-WEI45ONY-abtYnYqH.js → diagram-WEI45ONY-B87OYR_S.js} +1 -1
- package/client/dist/assets/{ebnfDiagram-CCIWWBDH-DfV7gT4m.js → ebnfDiagram-CCIWWBDH-B8Z8WHF6.js} +1 -1
- package/client/dist/assets/{erDiagram-Q63AITRT-vtbCprgH.js → erDiagram-Q63AITRT-DaD7oa9H.js} +1 -1
- package/client/dist/assets/{flowDiagram-23GEKE2U-CVCgcyDF.js → flowDiagram-23GEKE2U-GrMVpsea.js} +1 -1
- package/client/dist/assets/{ganttDiagram-NO4QXBWP-BclyOgMb.js → ganttDiagram-NO4QXBWP-K3X0DYBa.js} +1 -1
- package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-BXT4rIKj.js → gitGraphDiagram-IHSO6WYX-B2SEx0xa.js} +1 -1
- package/client/dist/assets/index-CIpLt0ie.js +863 -0
- package/client/dist/assets/index-DGtnTeFd.css +1 -0
- package/client/dist/assets/{infoDiagram-FWYZ7A6U-Dr4mN24J.js → infoDiagram-FWYZ7A6U-Fi8fQ95G.js} +1 -1
- package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-BBUFWq5C.js → ishikawaDiagram-FXEZZL3T-CrN7QJzt.js} +1 -1
- package/client/dist/assets/{journeyDiagram-5HDEW3XC-CmclipcQ.js → journeyDiagram-5HDEW3XC-XHIsl7rM.js} +1 -1
- package/client/dist/assets/{kanban-definition-HUTT4EX6-eIzUeZ03.js → kanban-definition-HUTT4EX6-A6HJqHw7.js} +1 -1
- package/client/dist/assets/{linear-DGiT7uKK.js → linear-D1vF9IQB.js} +1 -1
- package/client/dist/assets/{mermaid.core-BcLNGbxW.js → mermaid.core-D6w9zlA0.js} +4 -4
- package/client/dist/assets/{mindmap-definition-LN4V7U3C-C4ANnNiP.js → mindmap-definition-LN4V7U3C-CxRkUj6Z.js} +1 -1
- package/client/dist/assets/{pegDiagram-2B236MQR-DnMeh3Yh.js → pegDiagram-2B236MQR-Bs9dp-8a.js} +1 -1
- package/client/dist/assets/{pieDiagram-ENE6RG2P-CKV_rkhF.js → pieDiagram-ENE6RG2P-DBWILzB8.js} +1 -1
- package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-BuUsGwHh.js → quadrantDiagram-ABIIQ3AL-DrCVJJx6.js} +1 -1
- package/client/dist/assets/{railroadDiagram-RFXS5EU6-BwwdKnFL.js → railroadDiagram-RFXS5EU6-BdPW2dNf.js} +1 -1
- package/client/dist/assets/{requirementDiagram-TGXJPOKE-CpQZouJV.js → requirementDiagram-TGXJPOKE-Bj_g3tC5.js} +1 -1
- package/client/dist/assets/{sankeyDiagram-HTMAVEWB-4fnDUNVa.js → sankeyDiagram-HTMAVEWB-BGL9NnsS.js} +1 -1
- package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-BOcaWlM0.js → sequenceDiagram-DBY2YBRQ-DEirxTZY.js} +1 -1
- package/client/dist/assets/{sizeCapture-X5ZJPWSS-_pv-9R0c.js → sizeCapture-X5ZJPWSS-BtLrvrea.js} +1 -1
- package/client/dist/assets/{stateDiagram-2N3HPSRC-CFwCOonY.js → stateDiagram-2N3HPSRC-D3GXIouX.js} +1 -1
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-D3lXe_mJ.js +1 -0
- package/client/dist/assets/{swimlanes-5IMT3BWC-DFa2tzxu.js → swimlanes-5IMT3BWC-PMRQzNhU.js} +2 -2
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-DMLbRFiO.js +8 -0
- package/client/dist/assets/{timeline-definition-FHXFAJF6-rhGYElgn.js → timeline-definition-FHXFAJF6-CnBKJtD_.js} +1 -1
- package/client/dist/assets/{vennDiagram-L72KCM5P-BoGjRxyA.js → vennDiagram-L72KCM5P-BYmiJYoh.js} +1 -1
- package/client/dist/assets/{wardleyDiagram-EHGQE667-D-IGv5bH.js → wardleyDiagram-EHGQE667-DU7vW8q3.js} +1 -1
- package/client/dist/assets/{xychartDiagram-FW5EYKEG-D9PFTCfm.js → xychartDiagram-FW5EYKEG-BEtPvBSU.js} +1 -1
- package/client/dist/index.html +2 -2
- package/lib/preflight.mjs +24 -5
- package/lib/util.mjs +5 -1
- package/package.json +1 -1
- package/scripts/deploy-procs.mjs +105 -20
- package/scripts/deploy-swap.mjs +23 -2
- package/server/dist/config.d.ts +9 -0
- package/server/dist/config.d.ts.map +1 -1
- package/server/dist/config.js +1 -0
- package/server/dist/config.js.map +1 -1
- package/server/dist/core/campaign-events.d.ts.map +1 -1
- package/server/dist/core/campaign-events.js +1 -0
- package/server/dist/core/campaign-events.js.map +1 -1
- package/server/dist/core/campaign-loop-state.d.ts.map +1 -1
- package/server/dist/core/campaign-loop-state.js +54 -21
- package/server/dist/core/campaign-loop-state.js.map +1 -1
- package/server/dist/core/campaign-parse.d.ts +4 -0
- package/server/dist/core/campaign-parse.d.ts.map +1 -1
- package/server/dist/core/campaign-parse.js +9 -0
- package/server/dist/core/campaign-parse.js.map +1 -1
- package/server/dist/core/campaign-readiness-schema.d.ts +33 -0
- package/server/dist/core/campaign-readiness-schema.d.ts.map +1 -0
- package/server/dist/core/campaign-readiness-schema.js +70 -0
- package/server/dist/core/campaign-readiness-schema.js.map +1 -0
- package/server/dist/core/campaign-readiness.d.ts +59 -0
- package/server/dist/core/campaign-readiness.d.ts.map +1 -0
- package/server/dist/core/campaign-readiness.js +163 -0
- package/server/dist/core/campaign-readiness.js.map +1 -0
- package/server/dist/core/campaign-status-json.d.ts +3 -0
- package/server/dist/core/campaign-status-json.d.ts.map +1 -1
- package/server/dist/core/campaign-status-json.js +7 -0
- package/server/dist/core/campaign-status-json.js.map +1 -1
- package/server/dist/core/campaign-store.d.ts.map +1 -1
- package/server/dist/core/campaign-store.js +4 -1
- package/server/dist/core/campaign-store.js.map +1 -1
- package/server/dist/core/campaign-types.d.ts +8 -0
- package/server/dist/core/campaign-types.d.ts.map +1 -1
- package/server/dist/core/campaign-worktree-root.d.ts +19 -0
- package/server/dist/core/campaign-worktree-root.d.ts.map +1 -0
- package/server/dist/core/campaign-worktree-root.js +76 -0
- package/server/dist/core/campaign-worktree-root.js.map +1 -0
- package/server/dist/core/claim-record-lock.d.ts +30 -0
- package/server/dist/core/claim-record-lock.d.ts.map +1 -0
- package/server/dist/core/claim-record-lock.js +90 -0
- package/server/dist/core/claim-record-lock.js.map +1 -0
- package/server/dist/core/cli-child-spawn.d.ts +28 -0
- package/server/dist/core/cli-child-spawn.d.ts.map +1 -0
- package/server/dist/core/cli-child-spawn.js +146 -0
- package/server/dist/core/cli-child-spawn.js.map +1 -0
- package/server/dist/core/codex-models-probe.d.ts +46 -0
- package/server/dist/core/codex-models-probe.d.ts.map +1 -0
- package/server/dist/core/codex-models-probe.js +103 -0
- package/server/dist/core/codex-models-probe.js.map +1 -0
- package/server/dist/core/codex-oracle-runner.d.ts +68 -0
- package/server/dist/core/codex-oracle-runner.d.ts.map +1 -0
- package/server/dist/core/codex-oracle-runner.js +124 -0
- package/server/dist/core/codex-oracle-runner.js.map +1 -0
- package/server/dist/core/codex-status-report.d.ts +6 -0
- package/server/dist/core/codex-status-report.d.ts.map +1 -0
- package/server/dist/core/codex-status-report.js +40 -0
- package/server/dist/core/codex-status-report.js.map +1 -0
- package/server/dist/core/codex-task-watcher-types.d.ts +69 -0
- package/server/dist/core/codex-task-watcher-types.d.ts.map +1 -0
- package/server/dist/core/codex-task-watcher-types.js +12 -0
- package/server/dist/core/codex-task-watcher-types.js.map +1 -0
- package/server/dist/core/codex-task-watcher.d.ts +30 -0
- package/server/dist/core/codex-task-watcher.d.ts.map +1 -0
- package/server/dist/core/codex-task-watcher.js +252 -0
- package/server/dist/core/codex-task-watcher.js.map +1 -0
- package/server/dist/core/codex-terminal-signal-detect.d.ts +7 -0
- package/server/dist/core/codex-terminal-signal-detect.d.ts.map +1 -0
- package/server/dist/core/codex-terminal-signal-detect.js +113 -0
- package/server/dist/core/codex-terminal-signal-detect.js.map +1 -0
- package/server/dist/core/codex-thread-discovery.d.ts +21 -0
- package/server/dist/core/codex-thread-discovery.d.ts.map +1 -0
- package/server/dist/core/codex-thread-discovery.js +169 -0
- package/server/dist/core/codex-thread-discovery.js.map +1 -0
- package/server/dist/core/codextender-auth-file-sweep.d.ts +41 -0
- package/server/dist/core/codextender-auth-file-sweep.d.ts.map +1 -0
- package/server/dist/core/codextender-auth-file-sweep.js +97 -0
- package/server/dist/core/codextender-auth-file-sweep.js.map +1 -0
- package/server/dist/core/codextender-proxy-probe.d.ts +80 -0
- package/server/dist/core/codextender-proxy-probe.d.ts.map +1 -0
- package/server/dist/core/codextender-proxy-probe.js +179 -0
- package/server/dist/core/codextender-proxy-probe.js.map +1 -0
- package/server/dist/core/contract-version.d.ts +16 -1
- package/server/dist/core/contract-version.d.ts.map +1 -1
- package/server/dist/core/contract-version.js +16 -1
- package/server/dist/core/contract-version.js.map +1 -1
- package/server/dist/core/launcher-codex.d.ts +61 -0
- package/server/dist/core/launcher-codex.d.ts.map +1 -0
- package/server/dist/core/launcher-codex.js +187 -0
- package/server/dist/core/launcher-codex.js.map +1 -0
- package/server/dist/core/launcher-codextender-env.d.ts +44 -0
- package/server/dist/core/launcher-codextender-env.d.ts.map +1 -0
- package/server/dist/core/launcher-codextender-env.js +212 -0
- package/server/dist/core/launcher-codextender-env.js.map +1 -0
- package/server/dist/core/launcher-codextender.d.ts +72 -0
- package/server/dist/core/launcher-codextender.d.ts.map +1 -0
- package/server/dist/core/launcher-codextender.js +98 -0
- package/server/dist/core/launcher-codextender.js.map +1 -0
- package/server/dist/core/launcher-codextender.smoke-helpers.d.ts +25 -0
- package/server/dist/core/launcher-codextender.smoke-helpers.d.ts.map +1 -0
- package/server/dist/core/launcher-codextender.smoke-helpers.js +211 -0
- package/server/dist/core/launcher-codextender.smoke-helpers.js.map +1 -0
- package/server/dist/core/launcher-permission-flags.d.ts +17 -0
- package/server/dist/core/launcher-permission-flags.d.ts.map +1 -0
- package/server/dist/core/launcher-permission-flags.js +27 -0
- package/server/dist/core/launcher-permission-flags.js.map +1 -0
- package/server/dist/core/launcher.d.ts +18 -0
- package/server/dist/core/launcher.d.ts.map +1 -1
- package/server/dist/core/launcher.js +6 -0
- package/server/dist/core/launcher.js.map +1 -1
- package/server/dist/core/leadwright-preflight-transport.d.ts +27 -0
- package/server/dist/core/leadwright-preflight-transport.d.ts.map +1 -0
- package/server/dist/core/leadwright-preflight-transport.js +124 -0
- package/server/dist/core/leadwright-preflight-transport.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-tests-ac.d.ts +6 -0
- package/server/dist/core/mission-context/artifacts-tests-ac.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts-tests-ac.js +31 -0
- package/server/dist/core/mission-context/artifacts-tests-ac.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-tests.d.ts.map +1 -1
- package/server/dist/core/mission-context/artifacts-tests.js +20 -0
- package/server/dist/core/mission-context/artifacts-tests.js.map +1 -1
- package/server/dist/core/mission-context/resolver-io.d.ts +10 -0
- package/server/dist/core/mission-context/resolver-io.d.ts.map +1 -1
- package/server/dist/core/mission-context/resolver-parts.d.ts +8 -7
- package/server/dist/core/mission-context/resolver-parts.d.ts.map +1 -1
- package/server/dist/core/mission-context/resolver-parts.js +22 -14
- package/server/dist/core/mission-context/resolver-parts.js.map +1 -1
- package/server/dist/core/mission-context/resolver.d.ts.map +1 -1
- package/server/dist/core/mission-context/resolver.js +1 -1
- package/server/dist/core/mission-context/resolver.js.map +1 -1
- package/server/dist/core/mission-context/run-id-recovery.d.ts +18 -2
- package/server/dist/core/mission-context/run-id-recovery.d.ts.map +1 -1
- package/server/dist/core/mission-context/run-id-recovery.js +38 -18
- package/server/dist/core/mission-context/run-id-recovery.js.map +1 -1
- package/server/dist/core/mission-context/traceability.d.ts.map +1 -1
- package/server/dist/core/mission-context/traceability.js +15 -1
- package/server/dist/core/mission-context/traceability.js.map +1 -1
- package/server/dist/core/mission-context/types-slice2.d.ts +44 -0
- package/server/dist/core/mission-context/types-slice2.d.ts.map +1 -1
- package/server/dist/core/model-tier-config-reader.d.ts +14 -1
- package/server/dist/core/model-tier-config-reader.d.ts.map +1 -1
- package/server/dist/core/model-tier-config-reader.js +34 -2
- package/server/dist/core/model-tier-config-reader.js.map +1 -1
- package/server/dist/core/powershell-probe.smoke-helpers.d.ts +12 -0
- package/server/dist/core/powershell-probe.smoke-helpers.d.ts.map +1 -0
- package/server/dist/core/powershell-probe.smoke-helpers.js +80 -0
- package/server/dist/core/powershell-probe.smoke-helpers.js.map +1 -0
- package/server/dist/core/readiness-install-hints.d.ts +1 -1
- package/server/dist/core/readiness-install-hints.d.ts.map +1 -1
- package/server/dist/core/readiness-install-hints.js +5 -0
- package/server/dist/core/readiness-install-hints.js.map +1 -1
- package/server/dist/core/readiness-probe-run.d.ts +61 -0
- package/server/dist/core/readiness-probe-run.d.ts.map +1 -1
- package/server/dist/core/readiness-probe-run.js +93 -15
- package/server/dist/core/readiness-probe-run.js.map +1 -1
- package/server/dist/core/readiness-probe.d.ts +1 -1
- package/server/dist/core/readiness-probe.d.ts.map +1 -1
- package/server/dist/core/readiness-probe.js +36 -8
- package/server/dist/core/readiness-probe.js.map +1 -1
- package/server/dist/core/sdk-sessions-store.d.ts +46 -0
- package/server/dist/core/sdk-sessions-store.d.ts.map +1 -1
- package/server/dist/core/sdk-sessions-store.js +1 -0
- package/server/dist/core/sdk-sessions-store.js.map +1 -1
- package/server/dist/core/sdk-sessions-validate.d.ts.map +1 -1
- package/server/dist/core/sdk-sessions-validate.js +11 -0
- package/server/dist/core/sdk-sessions-validate.js.map +1 -1
- package/server/dist/core/settings-reader.d.ts +18 -0
- package/server/dist/core/settings-reader.d.ts.map +1 -0
- package/server/dist/core/settings-reader.js +40 -0
- package/server/dist/core/settings-reader.js.map +1 -0
- package/server/dist/core/shell-quote.d.ts +29 -0
- package/server/dist/core/shell-quote.d.ts.map +1 -1
- package/server/dist/core/shell-quote.js +34 -0
- package/server/dist/core/shell-quote.js.map +1 -1
- package/server/dist/core/task-editability.d.ts +1 -1
- package/server/dist/core/task-editability.d.ts.map +1 -1
- package/server/dist/core/task-editability.js +1 -0
- package/server/dist/core/task-editability.js.map +1 -1
- package/server/dist/core/triage-cli-runner.d.ts.map +1 -1
- package/server/dist/core/triage-cli-runner.js +6 -21
- package/server/dist/core/triage-cli-runner.js.map +1 -1
- package/server/dist/core/triage-compose.d.ts.map +1 -1
- package/server/dist/core/triage-compose.js +34 -3
- package/server/dist/core/triage-compose.js.map +1 -1
- package/server/dist/core/triage-store.d.ts +2 -1
- package/server/dist/core/triage-store.d.ts.map +1 -1
- package/server/dist/core/triage-store.js +1 -1
- package/server/dist/core/triage-store.js.map +1 -1
- package/server/dist/external/create-external-routes-args.d.ts +122 -0
- package/server/dist/external/create-external-routes-args.d.ts.map +1 -0
- package/server/dist/external/create-external-routes-args.js +2 -0
- package/server/dist/external/create-external-routes-args.js.map +1 -0
- package/server/dist/external/inbox/_codex.d.ts +14 -0
- package/server/dist/external/inbox/_codex.d.ts.map +1 -0
- package/server/dist/external/inbox/_codex.js +88 -0
- package/server/dist/external/inbox/_codex.js.map +1 -0
- package/server/dist/external/inbox/_derive.d.ts.map +1 -1
- package/server/dist/external/inbox/_derive.js +11 -0
- package/server/dist/external/inbox/_derive.js.map +1 -1
- package/server/dist/external/inbox/_types.d.ts +23 -0
- package/server/dist/external/inbox/_types.d.ts.map +1 -1
- package/server/dist/external/inbox/_types.js +8 -5
- package/server/dist/external/inbox/_types.js.map +1 -1
- package/server/dist/external/inbox/routes.d.ts +7 -0
- package/server/dist/external/inbox/routes.d.ts.map +1 -1
- package/server/dist/external/inbox/routes.js +15 -2
- package/server/dist/external/inbox/routes.js.map +1 -1
- package/server/dist/external/launch/_helpers.d.ts +4 -0
- package/server/dist/external/launch/_helpers.d.ts.map +1 -1
- package/server/dist/external/launch/_helpers.js.map +1 -1
- package/server/dist/external/launch/action-substitution-branch.d.ts +12 -0
- package/server/dist/external/launch/action-substitution-branch.d.ts.map +1 -1
- package/server/dist/external/launch/action-substitution-branch.js +35 -1
- package/server/dist/external/launch/action-substitution-branch.js.map +1 -1
- package/server/dist/external/launch/branch-dispatch.d.ts +15 -0
- package/server/dist/external/launch/branch-dispatch.d.ts.map +1 -0
- package/server/dist/external/launch/branch-dispatch.js +73 -0
- package/server/dist/external/launch/branch-dispatch.js.map +1 -0
- package/server/dist/external/launch/campaign-step-branch.d.ts +7 -1
- package/server/dist/external/launch/campaign-step-branch.d.ts.map +1 -1
- package/server/dist/external/launch/campaign-step-branch.js +70 -2
- package/server/dist/external/launch/campaign-step-branch.js.map +1 -1
- package/server/dist/external/launch/claim-executor-permissions.d.ts +31 -0
- package/server/dist/external/launch/claim-executor-permissions.d.ts.map +1 -0
- package/server/dist/external/launch/claim-executor-permissions.js +107 -0
- package/server/dist/external/launch/claim-executor-permissions.js.map +1 -0
- package/server/dist/external/launch/claim-executor-template-arming.d.ts +42 -0
- package/server/dist/external/launch/claim-executor-template-arming.d.ts.map +1 -0
- package/server/dist/external/launch/claim-executor-template-arming.js +121 -0
- package/server/dist/external/launch/claim-executor-template-arming.js.map +1 -0
- package/server/dist/external/launch/claim-holder-gate.d.ts +9 -0
- package/server/dist/external/launch/claim-holder-gate.d.ts.map +1 -1
- package/server/dist/external/launch/claim-holder-gate.js +10 -2
- package/server/dist/external/launch/claim-holder-gate.js.map +1 -1
- package/server/dist/external/launch/claim-permission-perimeter-assert.d.ts +3 -0
- package/server/dist/external/launch/claim-permission-perimeter-assert.d.ts.map +1 -0
- package/server/dist/external/launch/claim-permission-perimeter-assert.js +24 -0
- package/server/dist/external/launch/claim-permission-perimeter-assert.js.map +1 -0
- package/server/dist/external/launch/legacy-fallback-branch.d.ts +14 -0
- package/server/dist/external/launch/legacy-fallback-branch.d.ts.map +1 -1
- package/server/dist/external/launch/legacy-fallback-branch.js +3 -1
- package/server/dist/external/launch/legacy-fallback-branch.js.map +1 -1
- package/server/dist/external/launch/master-run-branch.js +2 -2
- package/server/dist/external/launch/master-run-branch.js.map +1 -1
- package/server/dist/external/launch/mixed-intents-guard.d.ts +10 -0
- package/server/dist/external/launch/mixed-intents-guard.d.ts.map +1 -0
- package/server/dist/external/launch/mixed-intents-guard.js +49 -0
- package/server/dist/external/launch/mixed-intents-guard.js.map +1 -0
- package/server/dist/external/launch/parse-body.d.ts +29 -0
- package/server/dist/external/launch/parse-body.d.ts.map +1 -1
- package/server/dist/external/launch/parse-body.js +66 -0
- package/server/dist/external/launch/parse-body.js.map +1 -1
- package/server/dist/external/launch/routes.d.ts +3 -0
- package/server/dist/external/launch/routes.d.ts.map +1 -1
- package/server/dist/external/launch/routes.js +76 -109
- package/server/dist/external/launch/routes.js.map +1 -1
- package/server/dist/external/launch/runtime-chokepoint-codextender.d.ts +20 -0
- package/server/dist/external/launch/runtime-chokepoint-codextender.d.ts.map +1 -0
- package/server/dist/external/launch/runtime-chokepoint-codextender.js +51 -0
- package/server/dist/external/launch/runtime-chokepoint-codextender.js.map +1 -0
- package/server/dist/external/launch/runtime-chokepoint-errors.d.ts +33 -0
- package/server/dist/external/launch/runtime-chokepoint-errors.d.ts.map +1 -0
- package/server/dist/external/launch/runtime-chokepoint-errors.js +63 -0
- package/server/dist/external/launch/runtime-chokepoint-errors.js.map +1 -0
- package/server/dist/external/launch/runtime-chokepoint.d.ts +120 -0
- package/server/dist/external/launch/runtime-chokepoint.d.ts.map +1 -0
- package/server/dist/external/launch/runtime-chokepoint.js +201 -0
- package/server/dist/external/launch/runtime-chokepoint.js.map +1 -0
- package/server/dist/external/mission-context/routes.d.ts +33 -27
- package/server/dist/external/mission-context/routes.d.ts.map +1 -1
- package/server/dist/external/mission-context/routes.js +30 -27
- package/server/dist/external/mission-context/routes.js.map +1 -1
- package/server/dist/external/mission-context/test-harness.d.ts +6 -0
- package/server/dist/external/mission-context/test-harness.d.ts.map +1 -1
- package/server/dist/external/mission-context/test-harness.js +6 -1
- package/server/dist/external/mission-context/test-harness.js.map +1 -1
- package/server/dist/external/mission-context/wire.d.ts.map +1 -1
- package/server/dist/external/mission-context/wire.js +24 -2
- package/server/dist/external/mission-context/wire.js.map +1 -1
- package/server/dist/external/org/audit-log.d.ts +19 -0
- package/server/dist/external/org/audit-log.d.ts.map +1 -1
- package/server/dist/external/org/audit-log.js +33 -18
- package/server/dist/external/org/audit-log.js.map +1 -1
- package/server/dist/external/org/beat-effect-audit-read.d.ts +15 -0
- package/server/dist/external/org/beat-effect-audit-read.d.ts.map +1 -0
- package/server/dist/external/org/beat-effect-audit-read.js +73 -0
- package/server/dist/external/org/beat-effect-audit-read.js.map +1 -0
- package/server/dist/external/org/beat-register-health.d.ts +57 -0
- package/server/dist/external/org/beat-register-health.d.ts.map +1 -0
- package/server/dist/external/org/beat-register-health.js +125 -0
- package/server/dist/external/org/beat-register-health.js.map +1 -0
- package/server/dist/external/org/beat-register-release-core.d.ts.map +1 -1
- package/server/dist/external/org/beat-register-release-core.js +4 -1
- package/server/dist/external/org/beat-register-release-core.js.map +1 -1
- package/server/dist/external/org/beat-register-release-request.d.ts +20 -0
- package/server/dist/external/org/beat-register-release-request.d.ts.map +1 -0
- package/server/dist/external/org/beat-register-release-request.js +92 -0
- package/server/dist/external/org/beat-register-release-request.js.map +1 -0
- package/server/dist/external/org/beat-register-release.d.ts +3 -1
- package/server/dist/external/org/beat-register-release.d.ts.map +1 -1
- package/server/dist/external/org/beat-register-release.js +15 -57
- package/server/dist/external/org/beat-register-release.js.map +1 -1
- package/server/dist/external/org/beat-register.d.ts +18 -20
- package/server/dist/external/org/beat-register.d.ts.map +1 -1
- package/server/dist/external/org/beat-register.js +30 -56
- package/server/dist/external/org/beat-register.js.map +1 -1
- package/server/dist/external/org/beat-steps-read.d.ts +17 -0
- package/server/dist/external/org/beat-steps-read.d.ts.map +1 -0
- package/server/dist/external/org/beat-steps-read.js +89 -0
- package/server/dist/external/org/beat-steps-read.js.map +1 -0
- package/server/dist/external/org/charter-authority-read.d.ts +39 -0
- package/server/dist/external/org/charter-authority-read.d.ts.map +1 -0
- package/server/dist/external/org/charter-authority-read.js +142 -0
- package/server/dist/external/org/charter-authority-read.js.map +1 -0
- package/server/dist/external/org/commit-validate.d.ts +18 -0
- package/server/dist/external/org/commit-validate.d.ts.map +1 -0
- package/server/dist/external/org/commit-validate.js +59 -0
- package/server/dist/external/org/commit-validate.js.map +1 -0
- package/server/dist/external/org/commit-writes.d.ts +68 -0
- package/server/dist/external/org/commit-writes.d.ts.map +1 -0
- package/server/dist/external/org/commit-writes.js +110 -0
- package/server/dist/external/org/commit-writes.js.map +1 -0
- package/server/dist/external/org/commit.d.ts +73 -0
- package/server/dist/external/org/commit.d.ts.map +1 -0
- package/server/dist/external/org/commit.js +181 -0
- package/server/dist/external/org/commit.js.map +1 -0
- package/server/dist/external/org/commit.test-fixtures.d.ts +38 -0
- package/server/dist/external/org/commit.test-fixtures.d.ts.map +1 -0
- package/server/dist/external/org/commit.test-fixtures.js +67 -0
- package/server/dist/external/org/commit.test-fixtures.js.map +1 -0
- package/server/dist/external/org/countersign-core.d.ts +19 -0
- package/server/dist/external/org/countersign-core.d.ts.map +1 -0
- package/server/dist/external/org/countersign-core.js +122 -0
- package/server/dist/external/org/countersign-core.js.map +1 -0
- package/server/dist/external/org/countersign-request.d.ts +14 -0
- package/server/dist/external/org/countersign-request.d.ts.map +1 -0
- package/server/dist/external/org/countersign-request.js +78 -0
- package/server/dist/external/org/countersign-request.js.map +1 -0
- package/server/dist/external/org/countersign.d.ts +6 -5
- package/server/dist/external/org/countersign.d.ts.map +1 -1
- package/server/dist/external/org/countersign.js +12 -141
- package/server/dist/external/org/countersign.js.map +1 -1
- package/server/dist/external/org/daemon-config-read.d.ts +31 -0
- package/server/dist/external/org/daemon-config-read.d.ts.map +1 -0
- package/server/dist/external/org/daemon-config-read.js +50 -0
- package/server/dist/external/org/daemon-config-read.js.map +1 -0
- package/server/dist/external/org/decisions-lock.d.ts +6 -4
- package/server/dist/external/org/decisions-lock.d.ts.map +1 -1
- package/server/dist/external/org/decisions-lock.js +9 -8
- package/server/dist/external/org/decisions-lock.js.map +1 -1
- package/server/dist/external/org/domains.d.ts +35 -0
- package/server/dist/external/org/domains.d.ts.map +1 -0
- package/server/dist/external/org/domains.js +29 -0
- package/server/dist/external/org/domains.js.map +1 -0
- package/server/dist/external/org/existing-charters-read.d.ts +5 -0
- package/server/dist/external/org/existing-charters-read.d.ts.map +1 -0
- package/server/dist/external/org/existing-charters-read.js +31 -0
- package/server/dist/external/org/existing-charters-read.js.map +1 -0
- package/server/dist/external/org/leadwright-proposal-merge.d.ts +54 -0
- package/server/dist/external/org/leadwright-proposal-merge.d.ts.map +1 -0
- package/server/dist/external/org/leadwright-proposal-merge.js +47 -0
- package/server/dist/external/org/leadwright-proposal-merge.js.map +1 -0
- package/server/dist/external/org/mount.d.ts +10 -2
- package/server/dist/external/org/mount.d.ts.map +1 -1
- package/server/dist/external/org/mount.js +6 -1
- package/server/dist/external/org/mount.js.map +1 -1
- package/server/dist/external/org/org-chart-full-read.d.ts +19 -0
- package/server/dist/external/org/org-chart-full-read.d.ts.map +1 -0
- package/server/dist/external/org/org-chart-full-read.js +58 -0
- package/server/dist/external/org/org-chart-full-read.js.map +1 -0
- package/server/dist/external/org/org-file-lock.d.ts +41 -0
- package/server/dist/external/org/org-file-lock.d.ts.map +1 -0
- package/server/dist/external/org/org-file-lock.js +90 -0
- package/server/dist/external/org/org-file-lock.js.map +1 -0
- package/server/dist/external/org/routes.d.ts +10 -0
- package/server/dist/external/org/routes.d.ts.map +1 -1
- package/server/dist/external/org/routes.js +22 -1
- package/server/dist/external/org/routes.js.map +1 -1
- package/server/dist/external/org/verdict.d.ts +57 -0
- package/server/dist/external/org/verdict.d.ts.map +1 -0
- package/server/dist/external/org/verdict.js +74 -0
- package/server/dist/external/org/verdict.js.map +1 -0
- package/server/dist/external/routes.d.ts +3 -101
- package/server/dist/external/routes.d.ts.map +1 -1
- package/server/dist/external/routes.js +19 -4
- package/server/dist/external/routes.js.map +1 -1
- package/server/dist/external/tasks/create.d.ts.map +1 -1
- package/server/dist/external/tasks/create.js +8 -0
- package/server/dist/external/tasks/create.js.map +1 -1
- package/server/dist/external/tasks/fork.d.ts +29 -0
- package/server/dist/external/tasks/fork.d.ts.map +1 -0
- package/server/dist/external/tasks/fork.js +166 -0
- package/server/dist/external/tasks/fork.js.map +1 -0
- package/server/dist/external/tasks/lifecycle.d.ts.map +1 -1
- package/server/dist/external/tasks/lifecycle.js +10 -57
- package/server/dist/external/tasks/lifecycle.js.map +1 -1
- package/server/dist/external/tasks/patch.d.ts.map +1 -1
- package/server/dist/external/tasks/patch.js +17 -0
- package/server/dist/external/tasks/patch.js.map +1 -1
- package/server/dist/external/tasks/routes.d.ts +2 -0
- package/server/dist/external/tasks/routes.d.ts.map +1 -1
- package/server/dist/external/tasks/routes.js +7 -0
- package/server/dist/external/tasks/routes.js.map +1 -1
- package/server/dist/external/transcript/routes.d.ts.map +1 -1
- package/server/dist/external/transcript/routes.js +25 -3
- package/server/dist/external/transcript/routes.js.map +1 -1
- package/server/dist/external-routes-wiring.d.ts +28 -0
- package/server/dist/external-routes-wiring.d.ts.map +1 -0
- package/server/dist/external-routes-wiring.js +61 -0
- package/server/dist/external-routes-wiring.js.map +1 -0
- package/server/dist/index.d.ts.map +1 -1
- package/server/dist/index.js +111 -44
- package/server/dist/index.js.map +1 -1
- package/server/dist/lib/resolveHonoHost.d.ts.map +1 -1
- package/server/dist/lib/resolveHonoHost.js +16 -1
- package/server/dist/lib/resolveHonoHost.js.map +1 -1
- package/server/dist/routes/_triage-api-harness.d.ts +1 -1
- package/server/dist/routes/_triage-api-harness.d.ts.map +1 -1
- package/server/dist/routes/_triage-api-harness.js.map +1 -1
- package/server/dist/routes/campaigns-readiness.d.ts +10 -0
- package/server/dist/routes/campaigns-readiness.d.ts.map +1 -0
- package/server/dist/routes/campaigns-readiness.js +58 -0
- package/server/dist/routes/campaigns-readiness.js.map +1 -0
- package/server/dist/routes/campaigns.d.ts.map +1 -1
- package/server/dist/routes/campaigns.js +3 -0
- package/server/dist/routes/campaigns.js.map +1 -1
- package/server/dist/routes/codex-models.d.ts +15 -0
- package/server/dist/routes/codex-models.d.ts.map +1 -0
- package/server/dist/routes/codex-models.js +77 -0
- package/server/dist/routes/codex-models.js.map +1 -0
- package/server/dist/routes/codextender-models.d.ts +16 -0
- package/server/dist/routes/codextender-models.d.ts.map +1 -0
- package/server/dist/routes/codextender-models.js +81 -0
- package/server/dist/routes/codextender-models.js.map +1 -0
- package/server/dist/routes/diagnostics.d.ts +15 -0
- package/server/dist/routes/diagnostics.d.ts.map +1 -1
- package/server/dist/routes/diagnostics.js +1 -0
- package/server/dist/routes/diagnostics.js.map +1 -1
- package/server/dist/routes/org-chart-lead-guard.d.ts +10 -0
- package/server/dist/routes/org-chart-lead-guard.d.ts.map +1 -0
- package/server/dist/routes/org-chart-lead-guard.js +49 -0
- package/server/dist/routes/org-chart-lead-guard.js.map +1 -0
- package/server/dist/routes/org-inventory-composite.d.ts +20 -0
- package/server/dist/routes/org-inventory-composite.d.ts.map +1 -0
- package/server/dist/routes/org-inventory-composite.js +100 -0
- package/server/dist/routes/org-inventory-composite.js.map +1 -0
- package/server/dist/routes/org-lead-setup-wizard.d.ts +10 -0
- package/server/dist/routes/org-lead-setup-wizard.d.ts.map +1 -0
- package/server/dist/routes/org-lead-setup-wizard.js +51 -0
- package/server/dist/routes/org-lead-setup-wizard.js.map +1 -0
- package/server/dist/routes/org-leads-composite.d.ts.map +1 -1
- package/server/dist/routes/org-leads-composite.js +35 -9
- package/server/dist/routes/org-leads-composite.js.map +1 -1
- package/server/dist/routes/org-writes.d.ts +14 -0
- package/server/dist/routes/org-writes.d.ts.map +1 -0
- package/server/dist/routes/org-writes.js +61 -0
- package/server/dist/routes/org-writes.js.map +1 -0
- package/server/dist/routes/org.d.ts +11 -2
- package/server/dist/routes/org.d.ts.map +1 -1
- package/server/dist/routes/org.js +50 -47
- package/server/dist/routes/org.js.map +1 -1
- package/server/dist/routes/settings.d.ts.map +1 -1
- package/server/dist/routes/settings.js +23 -2
- package/server/dist/routes/settings.js.map +1 -1
- package/server/dist/routes/triage.d.ts +17 -0
- package/server/dist/routes/triage.d.ts.map +1 -1
- package/server/dist/routes/triage.js +29 -0
- package/server/dist/routes/triage.js.map +1 -1
- package/server/dist/terminal/pty-manager.d.ts +14 -0
- package/server/dist/terminal/pty-manager.d.ts.map +1 -1
- package/server/dist/terminal/pty-manager.js +11 -0
- package/server/dist/terminal/pty-manager.js.map +1 -1
- package/server/dist/terminal/routes.d.ts.map +1 -1
- package/server/dist/terminal/routes.js +9 -0
- package/server/dist/terminal/routes.js.map +1 -1
- package/server/dist/terminal/ws-upgrade-handler.d.ts.map +1 -1
- package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts.map +1 -1
- package/server/dist/terminal/ws-upgrade-handler.fixtures.js +1 -0
- package/server/dist/terminal/ws-upgrade-handler.fixtures.js.map +1 -1
- package/server/dist/terminal/ws-upgrade-handler.js +14 -5
- package/server/dist/terminal/ws-upgrade-handler.js.map +1 -1
- package/server/dist/test/event-test-counts-fixtures.d.ts +40 -0
- package/server/dist/test/event-test-counts-fixtures.d.ts.map +1 -0
- package/server/dist/test/event-test-counts-fixtures.js +56 -0
- package/server/dist/test/event-test-counts-fixtures.js.map +1 -0
- package/server/dist/types/leadwright-beat-step.d.ts +19 -0
- package/server/dist/types/leadwright-beat-step.d.ts.map +1 -0
- package/server/dist/types/leadwright-beat-step.js +56 -0
- package/server/dist/types/leadwright-beat-step.js.map +1 -0
- package/server/dist/types/leadwright-preflight.d.ts +90 -0
- package/server/dist/types/leadwright-preflight.d.ts.map +1 -0
- package/server/dist/types/leadwright-preflight.js +65 -0
- package/server/dist/types/leadwright-preflight.js.map +1 -0
- package/server/dist/types/leadwright-schema-drift.d.ts +28 -0
- package/server/dist/types/leadwright-schema-drift.d.ts.map +1 -0
- package/server/dist/types/leadwright-schema-drift.js +89 -0
- package/server/dist/types/leadwright-schema-drift.js.map +1 -0
- package/server/dist/types/org-inventory.d.ts +53 -0
- package/server/dist/types/org-inventory.d.ts.map +1 -0
- package/server/dist/types/org-inventory.js +11 -0
- package/server/dist/types/org-inventory.js.map +1 -0
- package/server/dist/types/org.d.ts +57 -6
- package/server/dist/types/org.d.ts.map +1 -1
- package/server/dist/types/run-config-retry.d.ts +29 -0
- package/server/dist/types/run-config-retry.d.ts.map +1 -0
- package/server/dist/types/run-config-retry.js +47 -0
- package/server/dist/types/run-config-retry.js.map +1 -0
- package/server/dist/types/run-config-v2.d.ts +29 -41
- package/server/dist/types/run-config-v2.d.ts.map +1 -1
- package/server/dist/types/run-config-v2.js +16 -50
- package/server/dist/types/run-config-v2.js.map +1 -1
- package/server/dist/types/settings.d.ts +33 -0
- package/server/dist/types/settings.d.ts.map +1 -1
- package/server/dist/vendor/leadwright/beat-step.schema.json +83 -0
- package/server/dist/vendor/leadwright/claim-record-lock-contract.json +15 -0
- package/server/dist/vendor/leadwright/org-chart.schema.json +195 -0
- package/server/dist/vendor/leadwright/preflight-input.schema.json +318 -0
- package/server/dist/vendor/leadwright/preflight-result.schema.json +56 -0
- package/server/package.json +1 -1
- package/client/dist/assets/channel-BfmIcrp7.js +0 -1
- package/client/dist/assets/classDiagram-OUVF2IWQ-HfUQZ6Uc.js +0 -1
- package/client/dist/assets/classDiagram-v2-EOCWNBFH-HfUQZ6Uc.js +0 -1
- package/client/dist/assets/index-CKU9dY18.css +0 -1
- package/client/dist/assets/index-DOMl6atu.js +0 -847
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-srkiu3Ib.js +0 -1
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-Dq-0K9Zm.js +0 -8
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* cli-child-spawn.ts — shared spawn wrapper for the short-lived CLI
|
|
3
|
+
* bridges (`triage-cli-runner.ts`, `codex-oracle-runner.ts`). Both wrap
|
|
4
|
+
* `uv run --no-project --python ">=3.11" <script>` and previously carried
|
|
5
|
+
* byte-identical `execFile(..., { timeout }, cb)` implementations —
|
|
6
|
+
* factored out here so a fix lands once instead of twice, and so the two
|
|
7
|
+
* copies can't re-diverge.
|
|
8
|
+
*
|
|
9
|
+
* Required-CI PR-review finding on PR #466: `execFile`'s own `timeout`
|
|
10
|
+
* option only signals the IMMEDIATE child (`uv`); if `uv run` has already
|
|
11
|
+
* forked a Python grandchild by the time it fires, Node does not reap that
|
|
12
|
+
* grandchild on Windows. Accepted as low-severity for triage-cli-runner.ts
|
|
13
|
+
* (fires only on a user click) but NOT for codex-oracle-runner.ts, which
|
|
14
|
+
* fires every 60s per stalled task indefinitely — the same theoretical gap
|
|
15
|
+
* at a much higher exposure rate. Fixed here by driving our OWN timer that
|
|
16
|
+
* tree-kills the whole process group instead of relying on Node's
|
|
17
|
+
* single-process kill — reusing `preview-child-lifecycle.ts`'s `treeKill`
|
|
18
|
+
* (win32 `taskkill /t /f`, POSIX `kill(-pid)`) rather than adding the
|
|
19
|
+
* `tree-kill` npm package, which `decision_log.md` records as a
|
|
20
|
+
* deliberately pruned dependency.
|
|
21
|
+
*
|
|
22
|
+
* `execFile` is replaced with `spawn` (matching `preview-session-manager.
|
|
23
|
+
* ts`'s own spawn call) because `execFile`'s TypeScript surface has no
|
|
24
|
+
* `detached` option at all — and `detached: platform !== "win32"` is
|
|
25
|
+
* load-bearing, not incidental: POSIX `treeKill` signals the process
|
|
26
|
+
* GROUP via a negative pid, which only exists if the child led its own
|
|
27
|
+
* group at spawn time. Without it `kill(-pid)` ESRCHes and silently
|
|
28
|
+
* degrades to a single-process kill — the exact case this module exists
|
|
29
|
+
* to close. stdout/stderr are accumulated manually and truncated (not
|
|
30
|
+
* errored) past the 1MB cap — a truncated JSON payload still fails the
|
|
31
|
+
* caller's `JSON.parse` the same way an old `maxBuffer` error used to,
|
|
32
|
+
* without adding a distinct overflow error path to keep in sync.
|
|
33
|
+
*
|
|
34
|
+
* `error.killed` is NOT how a timeout is detected here (unlike the old
|
|
35
|
+
* per-file implementations) — our tree-kill goes around `child.kill()`
|
|
36
|
+
* entirely (an external `taskkill` process, or a raw `process.kill(-pid)`),
|
|
37
|
+
* so `ChildProcess#killed` never flips true for it. An explicit `timedOut`
|
|
38
|
+
* flag, set the instant our timer fires, is the only correct signal.
|
|
39
|
+
*/
|
|
40
|
+
import { spawn } from "node:child_process";
|
|
41
|
+
import { treeKill as realTreeKill } from "./preview-child-lifecycle.js";
|
|
42
|
+
const MAX_BUFFER_CHARS = 1024 * 1024;
|
|
43
|
+
// Every real child this process has spawned via `createCliChildSpawn` and
|
|
44
|
+
// has not yet seen exit — index.ts's shutdown() tree-kills whatever remains
|
|
45
|
+
// here, mirroring the existing `previewManager.killAll()` / `ptyManager.
|
|
46
|
+
// killAll()` precedent (a stalled-task tick can leave one in flight; the
|
|
47
|
+
// 30s-per-call timeout alone is not a shutdown guarantee, since a hard
|
|
48
|
+
// process.exit() can fire well inside that window).
|
|
49
|
+
const trackedChildren = new Set();
|
|
50
|
+
/** Tree-kill every currently in-flight CLI child. Best-effort, synchronous
|
|
51
|
+
* (matches `PreviewSessionManager.killAll()` / `PtyManager.killAll()`).
|
|
52
|
+
* `treeKillFn` is injectable — tests exercise the registry without a real
|
|
53
|
+
* platform-dependent `taskkill`/`process.kill` side effect. */
|
|
54
|
+
export function killAllTrackedCliChildren(treeKillFn = realTreeKill) {
|
|
55
|
+
for (const child of trackedChildren) {
|
|
56
|
+
try {
|
|
57
|
+
treeKillFn(child, "SIGKILL");
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// best-effort — nothing more to do for an already-dead child
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
trackedChildren.clear();
|
|
64
|
+
}
|
|
65
|
+
function appendBounded(current, chunk) {
|
|
66
|
+
const next = current + chunk;
|
|
67
|
+
return next.length > MAX_BUFFER_CHARS ? next.slice(0, MAX_BUFFER_CHARS) : next;
|
|
68
|
+
}
|
|
69
|
+
// Local PR-review preflight finding, round 2 (PR #466): the tree-kill call
|
|
70
|
+
// on timeout is fire-and-forget — an external `taskkill` process (win32) or
|
|
71
|
+
// a raw `process.kill(-pid)` (POSIX) — and neither GUARANTEES a `close`
|
|
72
|
+
// event follows (an unresponsive process, a `taskkill` that itself failed
|
|
73
|
+
// silently). Without a second bound, a failed kill would leave the
|
|
74
|
+
// returned promise pending and the child in `trackedChildren` forever,
|
|
75
|
+
// defeating the "bounded" half of "bounded/reaped subprocess strategy".
|
|
76
|
+
const KILL_GRACE_MS = 5000;
|
|
77
|
+
export function createCliChildSpawn(deps = {}) {
|
|
78
|
+
const spawnFn = deps.spawnFn ?? spawn;
|
|
79
|
+
const treeKillFn = deps.treeKillFn ?? realTreeKill;
|
|
80
|
+
const platform = deps.platform ?? process.platform;
|
|
81
|
+
return (bin, args, options) => new Promise((resolve) => {
|
|
82
|
+
let timedOut = false;
|
|
83
|
+
let settled = false;
|
|
84
|
+
let stdout = "";
|
|
85
|
+
let stderr = "";
|
|
86
|
+
let timer;
|
|
87
|
+
let killGraceTimer;
|
|
88
|
+
const child = spawnFn(bin, args, {
|
|
89
|
+
windowsHide: true,
|
|
90
|
+
env: options.env,
|
|
91
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
92
|
+
// See module header — spawn/kill must agree on whether a
|
|
93
|
+
// process group exists.
|
|
94
|
+
detached: platform !== "win32",
|
|
95
|
+
});
|
|
96
|
+
trackedChildren.add(child);
|
|
97
|
+
child.stdout?.setEncoding("utf-8");
|
|
98
|
+
child.stderr?.setEncoding("utf-8");
|
|
99
|
+
child.stdout?.on("data", (chunk) => {
|
|
100
|
+
stdout = appendBounded(stdout, chunk);
|
|
101
|
+
});
|
|
102
|
+
child.stderr?.on("data", (chunk) => {
|
|
103
|
+
stderr = appendBounded(stderr, chunk);
|
|
104
|
+
});
|
|
105
|
+
const finish = (result) => {
|
|
106
|
+
if (settled)
|
|
107
|
+
return;
|
|
108
|
+
settled = true;
|
|
109
|
+
clearTimeout(timer);
|
|
110
|
+
if (killGraceTimer)
|
|
111
|
+
clearTimeout(killGraceTimer);
|
|
112
|
+
trackedChildren.delete(child);
|
|
113
|
+
resolve(result);
|
|
114
|
+
};
|
|
115
|
+
child.once("error", (err) => {
|
|
116
|
+
finish({
|
|
117
|
+
code: -1,
|
|
118
|
+
stdout,
|
|
119
|
+
stderr,
|
|
120
|
+
spawnError: typeof err.code === "string" ? err.code : "spawn_error",
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
child.once("close", (code) => {
|
|
124
|
+
if (timedOut)
|
|
125
|
+
return finish({ code: 124, stdout, stderr, spawnError: "timeout" });
|
|
126
|
+
return finish({ code: code ?? 1, stdout, stderr });
|
|
127
|
+
});
|
|
128
|
+
timer = setTimeout(() => {
|
|
129
|
+
timedOut = true;
|
|
130
|
+
try {
|
|
131
|
+
treeKillFn(child, "SIGKILL", { platform });
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
// best-effort — the grace timer below bounds the promise
|
|
135
|
+
// regardless of whether the kill itself threw or was ignored.
|
|
136
|
+
}
|
|
137
|
+
killGraceTimer = setTimeout(() => {
|
|
138
|
+
finish({ code: 124, stdout, stderr, spawnError: "timeout" });
|
|
139
|
+
}, KILL_GRACE_MS);
|
|
140
|
+
killGraceTimer.unref?.();
|
|
141
|
+
}, options.timeoutMs);
|
|
142
|
+
timer.unref?.();
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
export const defaultCliChildSpawn = createCliChildSpawn();
|
|
146
|
+
//# sourceMappingURL=cli-child-spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-child-spawn.js","sourceRoot":"","sources":["../../src/core/cli-child-spawn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type RunFn } from "./readiness-probe-run.js";
|
|
2
|
+
export interface CodexModelCatalogEntry {
|
|
3
|
+
slug: string;
|
|
4
|
+
display_name: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CodexModelsProbeResult {
|
|
7
|
+
ok: boolean;
|
|
8
|
+
models: CodexModelCatalogEntry[];
|
|
9
|
+
}
|
|
10
|
+
export interface CodexModelsProbeDeps {
|
|
11
|
+
run?: RunFn;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Run `codex debug models` and reduce its raw catalog (which also carries
|
|
15
|
+
* per-model reasoning-level metadata and multi-KB prompt text this codebase
|
|
16
|
+
* has no use for) down to the `{slug, display_name}` pairs a launch-form
|
|
17
|
+
* combobox needs. Never throws.
|
|
18
|
+
*
|
|
19
|
+
* Filters to entries that are objects with a `slug` matching the existing
|
|
20
|
+
* `CODEX_MODEL_SLUG_PATTERN` (the same syntactic gate `parse-body.ts` applies
|
|
21
|
+
* to a launch request — imported directly here since this is an intra-server
|
|
22
|
+
* import, not the cross-package case DO-NOT #7 forbids) and a non-empty
|
|
23
|
+
* string `display_name`, with `visibility === "list"` (excludes
|
|
24
|
+
* internal/reserved entries like `codex-auto-review`). A single malformed
|
|
25
|
+
* entry is dropped, not fatal to the rest of the list — this is untrusted
|
|
26
|
+
* external-process output whose shape this codebase does not control.
|
|
27
|
+
* (external review fix, both reviewers, 2026-09-19 architecture review.)
|
|
28
|
+
*
|
|
29
|
+
* Gates on `result.code === 0`, NOT `result.ok` — `readiness-probe-run.ts`'s
|
|
30
|
+
* shared `ok` heuristic (`!error && /\d+\.\d+/.test(stdout+stderr)`) was
|
|
31
|
+
* written for `--version` probes and requires a dotted version number
|
|
32
|
+
* somewhere in the output. A real catalog containing only integer-suffixed
|
|
33
|
+
* slugs (no dotted version anywhere in the JSON) would trip that heuristic to
|
|
34
|
+
* `false` despite a clean exit and fully valid JSON — exactly the false
|
|
35
|
+
* `unavailable` gap `RunResult.code`'s own doc comment already names `code`
|
|
36
|
+
* as the fix for (code-review finding, 2026-09-19). `code` can be `null` on
|
|
37
|
+
* ENOENT/timeout, hence the strict `=== 0`.
|
|
38
|
+
*
|
|
39
|
+
* De-duplicates on `slug`, first-wins — the CLI's own catalog shape is
|
|
40
|
+
* untrusted external-process output (same reasoning as the per-entry
|
|
41
|
+
* shape checks above), and a duplicate slug would otherwise reach the
|
|
42
|
+
* client as two `<option>`s sharing one React key (doubt-review finding,
|
|
43
|
+
* 2026-09-19).
|
|
44
|
+
*/
|
|
45
|
+
export declare function runCodexModelsProbe(deps: CodexModelsProbeDeps): Promise<CodexModelsProbeResult>;
|
|
46
|
+
//# sourceMappingURL=codex-models-probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-models-probe.d.ts","sourceRoot":"","sources":["../../src/core/codex-models-probe.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAkB,KAAK,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtE,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,sBAAsB,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,KAAK,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAmCrG"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* codex-models-probe — the "codex debug models" catalog PROBE
|
|
3
|
+
* (iterate-2026-09-19-codex-model-catalog, follow-up to shipwright#471/#473).
|
|
4
|
+
*
|
|
5
|
+
* Replaces the withdrawn hardcoded model-slug enum (shipwright#771) with a
|
|
6
|
+
* live probe of the Codex CLI's own catalog, so the New Iterate combobox
|
|
7
|
+
* never lags the provider's own model lineup. Reuses `defaultRunShim` from
|
|
8
|
+
* `readiness-probe-run.ts` — `codex` installs as a Windows `.cmd` PATHEXT
|
|
9
|
+
* shim (no `codex.exe`), which `execFile(cmd, args, {shell:false})` cannot
|
|
10
|
+
* invoke directly (see that module's own doc comment); `defaultRunShim`
|
|
11
|
+
* already solves this for the readiness probe's `codex --version` check, and
|
|
12
|
+
* this is the same binary.
|
|
13
|
+
*
|
|
14
|
+
* Runs with NO extra flags — deliberately not `--bundled` ("skip refresh,
|
|
15
|
+
* dump only the catalog shipped with this binary"): empirically, `--bundled`
|
|
16
|
+
* returns a visibly OLDER catalog (verified during this iterate's Confidence
|
|
17
|
+
* Calibration — missing a newly-listed model, carrying stale entries the
|
|
18
|
+
* refreshed call no longer lists). The whole point of this probe is to stay
|
|
19
|
+
* ahead of a hand-maintained list, so the default (refreshing) invocation is
|
|
20
|
+
* the only one that serves that goal.
|
|
21
|
+
*
|
|
22
|
+
* Verified during this iterate: `codex debug models` requires NO
|
|
23
|
+
* authentication (re-ran with an empty `CODEX_HOME` — no `auth.json` — and
|
|
24
|
+
* it still exited 0 with the full catalog), so this probe has no
|
|
25
|
+
* auth-specific degraded path to handle.
|
|
26
|
+
*/
|
|
27
|
+
import { CODEX_MODEL_SLUG_PATTERN } from "../external/launch/parse-body.js";
|
|
28
|
+
import { defaultRunShim } from "./readiness-probe-run.js";
|
|
29
|
+
/**
|
|
30
|
+
* Run `codex debug models` and reduce its raw catalog (which also carries
|
|
31
|
+
* per-model reasoning-level metadata and multi-KB prompt text this codebase
|
|
32
|
+
* has no use for) down to the `{slug, display_name}` pairs a launch-form
|
|
33
|
+
* combobox needs. Never throws.
|
|
34
|
+
*
|
|
35
|
+
* Filters to entries that are objects with a `slug` matching the existing
|
|
36
|
+
* `CODEX_MODEL_SLUG_PATTERN` (the same syntactic gate `parse-body.ts` applies
|
|
37
|
+
* to a launch request — imported directly here since this is an intra-server
|
|
38
|
+
* import, not the cross-package case DO-NOT #7 forbids) and a non-empty
|
|
39
|
+
* string `display_name`, with `visibility === "list"` (excludes
|
|
40
|
+
* internal/reserved entries like `codex-auto-review`). A single malformed
|
|
41
|
+
* entry is dropped, not fatal to the rest of the list — this is untrusted
|
|
42
|
+
* external-process output whose shape this codebase does not control.
|
|
43
|
+
* (external review fix, both reviewers, 2026-09-19 architecture review.)
|
|
44
|
+
*
|
|
45
|
+
* Gates on `result.code === 0`, NOT `result.ok` — `readiness-probe-run.ts`'s
|
|
46
|
+
* shared `ok` heuristic (`!error && /\d+\.\d+/.test(stdout+stderr)`) was
|
|
47
|
+
* written for `--version` probes and requires a dotted version number
|
|
48
|
+
* somewhere in the output. A real catalog containing only integer-suffixed
|
|
49
|
+
* slugs (no dotted version anywhere in the JSON) would trip that heuristic to
|
|
50
|
+
* `false` despite a clean exit and fully valid JSON — exactly the false
|
|
51
|
+
* `unavailable` gap `RunResult.code`'s own doc comment already names `code`
|
|
52
|
+
* as the fix for (code-review finding, 2026-09-19). `code` can be `null` on
|
|
53
|
+
* ENOENT/timeout, hence the strict `=== 0`.
|
|
54
|
+
*
|
|
55
|
+
* De-duplicates on `slug`, first-wins — the CLI's own catalog shape is
|
|
56
|
+
* untrusted external-process output (same reasoning as the per-entry
|
|
57
|
+
* shape checks above), and a duplicate slug would otherwise reach the
|
|
58
|
+
* client as two `<option>`s sharing one React key (doubt-review finding,
|
|
59
|
+
* 2026-09-19).
|
|
60
|
+
*/
|
|
61
|
+
export async function runCodexModelsProbe(deps) {
|
|
62
|
+
const run = deps.run ?? defaultRunShim;
|
|
63
|
+
let result;
|
|
64
|
+
try {
|
|
65
|
+
result = await run("codex", ["debug", "models"]);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// `defaultRunShim`/`defaultRun` never reject (execFile's callback always
|
|
69
|
+
// resolves a RunResult) — this guards a rejecting `run` override, so the
|
|
70
|
+
// "never throws" contract this docstring promises actually holds for any
|
|
71
|
+
// caller's `deps.run`, not just the two shipped implementations
|
|
72
|
+
// (external code-review finding, 2026-09-19).
|
|
73
|
+
return { ok: false, models: [] };
|
|
74
|
+
}
|
|
75
|
+
if (result.code !== 0)
|
|
76
|
+
return { ok: false, models: [] };
|
|
77
|
+
let parsed;
|
|
78
|
+
try {
|
|
79
|
+
parsed = JSON.parse(result.stdout);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return { ok: false, models: [] };
|
|
83
|
+
}
|
|
84
|
+
const rawModels = parsed?.models;
|
|
85
|
+
if (!Array.isArray(rawModels))
|
|
86
|
+
return { ok: false, models: [] };
|
|
87
|
+
const bySlug = new Map();
|
|
88
|
+
for (const entry of rawModels) {
|
|
89
|
+
if (!entry || typeof entry !== "object")
|
|
90
|
+
continue;
|
|
91
|
+
const { slug, display_name, visibility } = entry;
|
|
92
|
+
if (visibility !== "list")
|
|
93
|
+
continue;
|
|
94
|
+
if (typeof slug !== "string" || !CODEX_MODEL_SLUG_PATTERN.test(slug))
|
|
95
|
+
continue;
|
|
96
|
+
if (typeof display_name !== "string" || display_name.trim() === "")
|
|
97
|
+
continue;
|
|
98
|
+
if (!bySlug.has(slug))
|
|
99
|
+
bySlug.set(slug, { slug, display_name });
|
|
100
|
+
}
|
|
101
|
+
return { ok: true, models: [...bySlug.values()] };
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=codex-models-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-models-probe.js","sourceRoot":"","sources":["../../src/core/codex-models-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAc,MAAM,0BAA0B,CAAC;AAgBtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAA0B;IAClE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC;IACvC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,yEAAyE;QACzE,yEAAyE;QACzE,gEAAgE;QAChE,8CAA8C;QAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAExD,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,SAAS,GAAI,MAAsC,EAAE,MAAM,CAAC;IAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAEhE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkC,CAAC;IACzD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAClD,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,KAAgC,CAAC;QAC5E,IAAI,UAAU,KAAK,MAAM;YAAE,SAAS;QACpC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAC/E,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,SAAS;QAC7E,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type RunFn } from "./readiness-probe.js";
|
|
2
|
+
export declare const CODEX_ORACLE_TIMEOUT_MS = 30000;
|
|
3
|
+
/** Verbatim mirror of `codex_completion_oracle.py`'s `verdict` field. */
|
|
4
|
+
export type OracleVerdict = "done" | "not_done" | "delivery_pending" | "no_oracle";
|
|
5
|
+
export interface OracleEvidence {
|
|
6
|
+
/**
|
|
7
|
+
* §5.1's correction — present only on an `iterate`-phase `delivery_pending`
|
|
8
|
+
* verdict. `"error"` = watch_pr_delivery.py's checks_failed/closed branch
|
|
9
|
+
* (a PR exists but its delivery failed — never re-poll forever). Absent or
|
|
10
|
+
* `"indeterminate"` = case 13 proper (CI/review/auto-merge still running,
|
|
11
|
+
* or the watcher itself produced no verdict) — safe to keep re-polling.
|
|
12
|
+
*/
|
|
13
|
+
delivery_state?: "error" | "indeterminate";
|
|
14
|
+
[key: string]: unknown;
|
|
15
|
+
}
|
|
16
|
+
export interface OracleResult {
|
|
17
|
+
verdict: OracleVerdict;
|
|
18
|
+
phase: string;
|
|
19
|
+
session: string;
|
|
20
|
+
evidence: OracleEvidence;
|
|
21
|
+
}
|
|
22
|
+
export type OracleOutcome = {
|
|
23
|
+
kind: "ok";
|
|
24
|
+
result: OracleResult;
|
|
25
|
+
} | {
|
|
26
|
+
kind: "engine-unavailable";
|
|
27
|
+
reason: string;
|
|
28
|
+
repairCommand: string;
|
|
29
|
+
} | {
|
|
30
|
+
kind: "failed";
|
|
31
|
+
reason: string;
|
|
32
|
+
};
|
|
33
|
+
export interface OracleSpawnResult {
|
|
34
|
+
code: number;
|
|
35
|
+
stdout: string;
|
|
36
|
+
stderr: string;
|
|
37
|
+
spawnError?: string;
|
|
38
|
+
}
|
|
39
|
+
export type OracleSpawnFn = (bin: string, args: string[], options: {
|
|
40
|
+
timeoutMs: number;
|
|
41
|
+
env: NodeJS.ProcessEnv;
|
|
42
|
+
}) => Promise<OracleSpawnResult>;
|
|
43
|
+
export declare const defaultSpawnOracle: OracleSpawnFn;
|
|
44
|
+
export interface RunCodexOracleInput {
|
|
45
|
+
projectRoot: string;
|
|
46
|
+
phase: string;
|
|
47
|
+
session: string;
|
|
48
|
+
/** ISO-8601 with timezone — the §2.4 degradation-path floor. */
|
|
49
|
+
since?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface CodexOracleDeps {
|
|
52
|
+
run?: RunFn;
|
|
53
|
+
spawn?: OracleSpawnFn;
|
|
54
|
+
existsFn?: (p: string) => boolean;
|
|
55
|
+
homeDir?: string;
|
|
56
|
+
scriptOverride?: string;
|
|
57
|
+
timeoutMs?: number;
|
|
58
|
+
baseEnv?: NodeJS.ProcessEnv;
|
|
59
|
+
}
|
|
60
|
+
/** Resolve the single cache-owned oracle CLI shipped with the Shipwright runtime. */
|
|
61
|
+
export declare function resolveCodexOracleScript(deps?: Pick<CodexOracleDeps, "existsFn" | "homeDir" | "scriptOverride">): string | null;
|
|
62
|
+
/**
|
|
63
|
+
* Run `codex_completion_oracle.py --project-root <root> --phase <p>
|
|
64
|
+
* --session <sid> [--since <iso>]` and parse its JSON verdict. Never
|
|
65
|
+
* throws for an oracle failure — only a programming error would reject.
|
|
66
|
+
*/
|
|
67
|
+
export declare function runCodexOracle(input: RunCodexOracleInput, deps?: CodexOracleDeps): Promise<OracleOutcome>;
|
|
68
|
+
//# sourceMappingURL=codex-oracle-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-oracle-runner.d.ts","sourceRoot":"","sources":["../../src/core/codex-oracle-runner.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAiD,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAGjG,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAE9C,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,UAAU,GAAG,kBAAkB,GAAG,WAAW,CAAC;AAEnF,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,eAAe,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KACnD,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEhC,eAAO,MAAM,kBAAkB,EAAE,aAAoC,CAAC;AAEtE,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CAC7B;AAED,qFAAqF;AACrF,wBAAgB,wBAAwB,CACtC,IAAI,GAAE,IAAI,CAAC,eAAe,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAM,GAC1E,MAAM,GAAG,IAAI,CAWf;AAQD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,mBAAmB,EAC1B,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,aAAa,CAAC,CAuExB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* core/codex-oracle-runner.ts — the injection-safe bridge to `shared/
|
|
3
|
+
* scripts/tools/codex_completion_oracle.py` (Codex Light §1.7).
|
|
4
|
+
*
|
|
5
|
+
* Mirrors `triage-cli-runner.ts`'s spawn discipline verbatim (same reason:
|
|
6
|
+
* `uv run --no-project --python ">=3.11"` so the script always runs in a
|
|
7
|
+
* Python that actually satisfies its own floor, never whichever of
|
|
8
|
+
* python3/python/py answers `--version` first — see that module's header
|
|
9
|
+
* for the incident this avoids). `--no-project` matters here too: the
|
|
10
|
+
* oracle script has no `pyproject.toml` of its own (it's a plain module
|
|
11
|
+
* under `shared/scripts/tools/`), so an ambient one discovered by walking
|
|
12
|
+
* up from the SPAWNING PROCESS's cwd must never get silently activated.
|
|
13
|
+
*
|
|
14
|
+
* Unlike `grade-runner.ts` / `triage-cli-runner.ts`, the oracle CLI prints
|
|
15
|
+
* its JSON payload on EVERY exit code (0-3 all carry a verdict; there is no
|
|
16
|
+
* "non-JSON means engine trouble" branch) — see `codex_completion_oracle.py`
|
|
17
|
+
* `main()`. This wrapper therefore always attempts to parse stdout first and
|
|
18
|
+
* only falls back to an engine-unavailable/failed outcome when uv/the
|
|
19
|
+
* script itself couldn't be resolved or spawned at all.
|
|
20
|
+
*
|
|
21
|
+
* Required-CI PR-review finding (PR #466): the spawn pattern was a
|
|
22
|
+
* verbatim mirror of `triage-cli-runner.ts` (already in production), but
|
|
23
|
+
* the CADENCE is new — this runs every 60s tick for as long as a task
|
|
24
|
+
* stays stalled, where the triage call site fires once per user-initiated
|
|
25
|
+
* transition. `execFile`'s own `timeout` only SIGTERMs the immediate `uv`
|
|
26
|
+
* child; if `uv run` had already forked a Python grandchild, Node would
|
|
27
|
+
* not reap that process tree on Windows by default. Fixed (not merely
|
|
28
|
+
* accepted) via `cli-child-spawn.ts`'s shared tree-kill-on-timeout
|
|
29
|
+
* wrapper, shared with `triage-cli-runner.ts` so the two can't re-diverge.
|
|
30
|
+
*/
|
|
31
|
+
import { existsSync } from "node:fs";
|
|
32
|
+
import os from "node:os";
|
|
33
|
+
import path from "node:path";
|
|
34
|
+
import { defaultCliChildSpawn } from "./cli-child-spawn.js";
|
|
35
|
+
import { READINESS_REPAIR_COMMAND, shipwrightCacheRoot } from "./readiness-probe.js";
|
|
36
|
+
import { resolveUv } from "./uv-runner.js";
|
|
37
|
+
export const CODEX_ORACLE_TIMEOUT_MS = 30_000;
|
|
38
|
+
export const defaultSpawnOracle = defaultCliChildSpawn;
|
|
39
|
+
/** Resolve the single cache-owned oracle CLI shipped with the Shipwright runtime. */
|
|
40
|
+
export function resolveCodexOracleScript(deps = {}) {
|
|
41
|
+
const exists = deps.existsFn ?? existsSync;
|
|
42
|
+
if (deps.scriptOverride)
|
|
43
|
+
return exists(deps.scriptOverride) ? deps.scriptOverride : null;
|
|
44
|
+
const candidate = path.join(shipwrightCacheRoot(deps.homeDir ?? os.homedir()), "shared", "scripts", "tools", "codex_completion_oracle.py");
|
|
45
|
+
return exists(candidate) ? candidate : null;
|
|
46
|
+
}
|
|
47
|
+
function cleanStderr(stderr) {
|
|
48
|
+
return stderr.split(/\r?\n/).map((line) => line.trim()).filter(Boolean).pop() ?? "";
|
|
49
|
+
}
|
|
50
|
+
const ENGINE_UNAVAILABLE_REASON = "The Codex completion oracle isn't installed.";
|
|
51
|
+
/**
|
|
52
|
+
* Run `codex_completion_oracle.py --project-root <root> --phase <p>
|
|
53
|
+
* --session <sid> [--since <iso>]` and parse its JSON verdict. Never
|
|
54
|
+
* throws for an oracle failure — only a programming error would reject.
|
|
55
|
+
*/
|
|
56
|
+
export async function runCodexOracle(input, deps = {}) {
|
|
57
|
+
const script = resolveCodexOracleScript(deps);
|
|
58
|
+
if (!script) {
|
|
59
|
+
return { kind: "engine-unavailable", reason: ENGINE_UNAVAILABLE_REASON, repairCommand: READINESS_REPAIR_COMMAND };
|
|
60
|
+
}
|
|
61
|
+
const uv = await resolveUv({ run: deps.run, homeDir: deps.homeDir, baseEnv: deps.baseEnv });
|
|
62
|
+
if (!uv) {
|
|
63
|
+
return {
|
|
64
|
+
kind: "engine-unavailable",
|
|
65
|
+
reason: "uv isn't installed — the Codex completion oracle needs it to run in a managed Python 3.11+.",
|
|
66
|
+
repairCommand: READINESS_REPAIR_COMMAND,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
const spawn = deps.spawn ?? defaultSpawnOracle;
|
|
70
|
+
const args = [
|
|
71
|
+
"run",
|
|
72
|
+
"--no-project",
|
|
73
|
+
"--python",
|
|
74
|
+
">=3.11",
|
|
75
|
+
script,
|
|
76
|
+
"--project-root",
|
|
77
|
+
input.projectRoot,
|
|
78
|
+
"--phase",
|
|
79
|
+
input.phase,
|
|
80
|
+
"--session",
|
|
81
|
+
input.session,
|
|
82
|
+
...(input.since ? ["--since", input.since] : []),
|
|
83
|
+
];
|
|
84
|
+
const result = await spawn(uv.bin, args, {
|
|
85
|
+
timeoutMs: deps.timeoutMs ?? CODEX_ORACLE_TIMEOUT_MS,
|
|
86
|
+
env: uv.env,
|
|
87
|
+
});
|
|
88
|
+
if (result.code === -1) {
|
|
89
|
+
return { kind: "engine-unavailable", reason: "uv couldn't start on this machine.", repairCommand: READINESS_REPAIR_COMMAND };
|
|
90
|
+
}
|
|
91
|
+
// Every other exit (0-3 documented, anything else a crash) prints JSON on
|
|
92
|
+
// stdout per the script's own contract — try to parse before giving up.
|
|
93
|
+
try {
|
|
94
|
+
const payload = JSON.parse(result.stdout);
|
|
95
|
+
if ((payload.verdict === "done" ||
|
|
96
|
+
payload.verdict === "not_done" ||
|
|
97
|
+
payload.verdict === "delivery_pending" ||
|
|
98
|
+
payload.verdict === "no_oracle") &&
|
|
99
|
+
typeof payload.phase === "string" &&
|
|
100
|
+
typeof payload.session === "string" &&
|
|
101
|
+
payload.evidence &&
|
|
102
|
+
typeof payload.evidence === "object") {
|
|
103
|
+
return {
|
|
104
|
+
kind: "ok",
|
|
105
|
+
result: {
|
|
106
|
+
verdict: payload.verdict,
|
|
107
|
+
phase: payload.phase,
|
|
108
|
+
session: payload.session,
|
|
109
|
+
evidence: payload.evidence,
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
/* fall through to the failed branch below */
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
kind: "failed",
|
|
119
|
+
reason: result.spawnError === "timeout"
|
|
120
|
+
? "The completion oracle took too long and was stopped."
|
|
121
|
+
: cleanStderr(result.stderr) || "The completion oracle returned an unrecognised response.",
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=codex-oracle-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-oracle-runner.js","sourceRoot":"","sources":["../../src/core/codex-oracle-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAc,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AA0C9C,MAAM,CAAC,MAAM,kBAAkB,GAAkB,oBAAoB,CAAC;AAoBtE,qFAAqF;AACrF,MAAM,UAAU,wBAAwB,CACtC,OAAyE,EAAE;IAE3E,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC;IAC3C,IAAI,IAAI,CAAC,cAAc;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IACzF,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,mBAAmB,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,EACjD,QAAQ,EACR,SAAS,EACT,OAAO,EACP,4BAA4B,CAC7B,CAAC;IACF,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AACtF,CAAC;AAED,MAAM,yBAAyB,GAAG,8CAA8C,CAAC;AAEjF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAA0B,EAC1B,OAAwB,EAAE;IAE1B,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,yBAAyB,EAAE,aAAa,EAAE,wBAAwB,EAAE,CAAC;IACpH,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5F,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO;YACL,IAAI,EAAE,oBAAoB;YAC1B,MAAM,EAAE,6FAA6F;YACrG,aAAa,EAAE,wBAAwB;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,kBAAkB,CAAC;IAC/C,MAAM,IAAI,GAAG;QACX,KAAK;QACL,cAAc;QACd,UAAU;QACV,QAAQ;QACR,MAAM;QACN,gBAAgB;QAChB,KAAK,CAAC,WAAW;QACjB,SAAS;QACT,KAAK,CAAC,KAAK;QACX,WAAW;QACX,KAAK,CAAC,OAAO;QACb,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE;QACvC,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,uBAAuB;QACpD,GAAG,EAAE,EAAE,CAAC,GAAG;KACZ,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,MAAM,EAAE,oCAAoC,EAAE,aAAa,EAAE,wBAAwB,EAAE,CAAC;IAC/H,CAAC;IACD,0EAA0E;IAC1E,wEAAwE;IACxE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAA0B,CAAC;QACnE,IACE,CAAC,OAAO,CAAC,OAAO,KAAK,MAAM;YACzB,OAAO,CAAC,OAAO,KAAK,UAAU;YAC9B,OAAO,CAAC,OAAO,KAAK,kBAAkB;YACtC,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC;YAClC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;YACjC,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ;YACnC,OAAO,CAAC,QAAQ;YAChB,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,EACpC,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE;oBACN,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,QAAQ,EAAE,OAAO,CAAC,QAA0B;iBAC7C;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,MAAM,EACJ,MAAM,CAAC,UAAU,KAAK,SAAS;YAC7B,CAAC,CAAC,sDAAsD;YACxD,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,0DAA0D;KAC/F,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-status-report.d.ts","sourceRoot":"","sources":["../../src/core/codex-status-report.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf;AAQD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAiBvF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* core/codex-status-report.ts — §5.4's structured self-report parser.
|
|
3
|
+
*
|
|
4
|
+
* Every Codex launch prompt (`launcher-codex.ts buildCodexPrompt`) ends
|
|
5
|
+
* with an instruction to close with a fenced ```SHIPWRIGHT-STATUS {json}```
|
|
6
|
+
* block. §5.4 (hard v1 scope, not an "Open item"): "Parsed from terminal
|
|
7
|
+
* scrollback, cross-checked against the oracle verdict: agreement raises
|
|
8
|
+
* confidence; disagreement always defers to the oracle. This gives
|
|
9
|
+
* `no_oracle` phases a real, if weaker, signal."
|
|
10
|
+
*
|
|
11
|
+
* Pure parser — no I/O. `CodexTaskWatcher` reads the terminal text (via
|
|
12
|
+
* `PtyManager.peekTerminalText`'s visible-viewport snapshot, the same
|
|
13
|
+
* mechanism `appendCodexTerminalSignals` already uses for approval-request
|
|
14
|
+
* detection) and hands it here.
|
|
15
|
+
*/
|
|
16
|
+
// Matches the exact fence `buildCodexPrompt` instructs Codex to emit. Global
|
|
17
|
+
// so a viewport containing more than one report (e.g. an earlier nudge's
|
|
18
|
+
// echoed instruction text plus a real closing report) is fully scanned —
|
|
19
|
+
// the LAST well-formed match wins, since that's the most recent status.
|
|
20
|
+
const FENCE_RE = /```SHIPWRIGHT-STATUS\s*\r?\n([\s\S]*?)```/g;
|
|
21
|
+
export function parseShipwrightStatusReport(text) {
|
|
22
|
+
let match;
|
|
23
|
+
let last = null;
|
|
24
|
+
FENCE_RE.lastIndex = 0;
|
|
25
|
+
while ((match = FENCE_RE.exec(text)) !== null) {
|
|
26
|
+
try {
|
|
27
|
+
const parsed = JSON.parse(match[1].trim());
|
|
28
|
+
if (parsed && typeof parsed === "object" && typeof parsed.done === "boolean") {
|
|
29
|
+
const p = parsed;
|
|
30
|
+
last = { phase: typeof p.phase === "string" ? p.phase : "", done: p.done };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Malformed block (truncated viewport, stray backticks in unrelated
|
|
35
|
+
// output) — skip it and keep scanning for an earlier well-formed one.
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return last;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=codex-status-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-status-report.js","sourceRoot":"","sources":["../../src/core/codex-status-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,6EAA6E;AAC7E,yEAAyE;AACzE,yEAAyE;AACzE,wEAAwE;AACxE,MAAM,QAAQ,GAAG,4CAA4C,CAAC;AAE9D,MAAM,UAAU,2BAA2B,CAAC,IAAY;IACtD,IAAI,KAA6B,CAAC;IAClC,IAAI,IAAI,GAAkC,IAAI,CAAC;IAC/C,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAQ,MAAkC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAC1G,MAAM,CAAC,GAAG,MAAiC,CAAC;gBAC5C,IAAI,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAe,EAAE,CAAC;YACxF,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;YACpE,sEAAsE;QACxE,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ExternalTask } from "./sdk-sessions-store.js";
|
|
2
|
+
import type { OracleOutcome, RunCodexOracleInput } from "./codex-oracle-runner.js";
|
|
3
|
+
/** Settings default per §5 (min 5 — Settings enforces the floor, not this module). */
|
|
4
|
+
export declare const DEFAULT_STALL_TIMEOUT_MS: number;
|
|
5
|
+
/** §5.2 launch-confirmation window — distinct from, and shorter than, the
|
|
6
|
+
* mid-task stall trigger above. */
|
|
7
|
+
export declare const DEFAULT_LAUNCH_CONFIRM_TIMEOUT_MS: number;
|
|
8
|
+
export type CodexWatcherNoticeKind = "nudge_sent" | "delivery_error" | "no_oracle_unresolved" | "launch_confirmation_failed";
|
|
9
|
+
export interface CodexWatcherNotice {
|
|
10
|
+
taskId: string;
|
|
11
|
+
kind: CodexWatcherNoticeKind;
|
|
12
|
+
detail: string;
|
|
13
|
+
at: number;
|
|
14
|
+
}
|
|
15
|
+
export interface CodexTaskWatcherStore {
|
|
16
|
+
list(): ExternalTask[];
|
|
17
|
+
patch(taskId: string, patch: Partial<ExternalTask>): ExternalTask | undefined;
|
|
18
|
+
persist(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export interface CodexTaskWatcherPtyManager {
|
|
21
|
+
getLastDataAt(taskId: string): number | null;
|
|
22
|
+
attachCount(taskId: string): number;
|
|
23
|
+
write(taskId: string, data: string): void;
|
|
24
|
+
}
|
|
25
|
+
export interface CodexTaskWatcherDeps {
|
|
26
|
+
store: CodexTaskWatcherStore;
|
|
27
|
+
ptyManager: CodexTaskWatcherPtyManager;
|
|
28
|
+
getProjectById: (id: string) => {
|
|
29
|
+
path: string;
|
|
30
|
+
} | undefined;
|
|
31
|
+
runOracle: (input: RunCodexOracleInput) => Promise<OracleOutcome>;
|
|
32
|
+
/**
|
|
33
|
+
* §4 — best-effort, filename-first discovery of a fresh launch's thread
|
|
34
|
+
* id (`core/codex-thread-discovery.ts`). Optional: omitting it just means
|
|
35
|
+
* no task ever gets a `threadId`, i.e. `resume` never fires (§4's earlier,
|
|
36
|
+
* pre-discovery behavior) — tests that don't care about §4 can skip it.
|
|
37
|
+
*/
|
|
38
|
+
discoverThreadId?: (args: {
|
|
39
|
+
cwd: string;
|
|
40
|
+
sinceIso: string;
|
|
41
|
+
excludeThreadIds?: ReadonlySet<string>;
|
|
42
|
+
}) => Promise<string | null>;
|
|
43
|
+
now?: () => number;
|
|
44
|
+
/**
|
|
45
|
+
* Settings-backed (`GlobalSettings.codexStallTimeoutMinutes`) — a plain
|
|
46
|
+
* number OR a (possibly async) getter, so a caller that re-reads
|
|
47
|
+
* settings.json can hand in `async () => (await readSettings())...` and
|
|
48
|
+
* have a live-edited Settings value take effect on the very next tick,
|
|
49
|
+
* without reconstructing the watcher (which would drop in-flight
|
|
50
|
+
* episode/notice state).
|
|
51
|
+
*/
|
|
52
|
+
stallTimeoutMs?: number | (() => number | Promise<number>);
|
|
53
|
+
launchConfirmTimeoutMs?: number | (() => number | Promise<number>);
|
|
54
|
+
/**
|
|
55
|
+
* §5.4 — best-effort visible-viewport text for the self-report parser
|
|
56
|
+
* (`codex-status-report.ts`). Optional and best-effort by design, same
|
|
57
|
+
* as `PtyManager.peekTerminalText` itself: `null`/omitted just means no
|
|
58
|
+
* self-report signal is available (headless mirror disabled, no live
|
|
59
|
+
* entry) — the oracle-only classification path is unaffected either way.
|
|
60
|
+
*/
|
|
61
|
+
peekTerminalText?: (taskId: string) => string | null;
|
|
62
|
+
}
|
|
63
|
+
export interface EpisodeState {
|
|
64
|
+
/** The `lastDataAt` value this episode "belongs to" — a newer value
|
|
65
|
+
* means fresh output arrived, which starts a brand-new episode. */
|
|
66
|
+
lastSeenDataAt: number;
|
|
67
|
+
nudged: boolean;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=codex-task-watcher-types.d.ts.map
|