@svenroth-ai/shipwright 0.27.0 → 0.29.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/apple-touch-icon.png +0 -0
- package/client/dist/assets/{EmbeddedTerminal-CqCQUDtp.js → EmbeddedTerminal-IkAS1bic.js} +30 -30
- package/client/dist/assets/{abnfDiagram-VRR7QNED-DX2objTP.js → abnfDiagram-VCTEODGH-CclAL-Ri.js} +1 -1
- package/client/dist/assets/arc-C8vUxwav.js +1 -0
- package/client/dist/assets/architectureDiagram-5GKGNRK7-DdrrZJx7.js +36 -0
- package/client/dist/assets/blockDiagram-I7D4REHJ-CMhbhsVq.js +129 -0
- package/client/dist/assets/c4Diagram-7LVT6UL2-OvlH6BiV.js +38 -0
- package/client/dist/assets/channel-BtkABUIE.js +1 -0
- package/client/dist/assets/{chunk-2Q5K7J3B-C111EHL6.js → chunk-2Q5K7J3B-BxUk85j7.js} +1 -1
- package/client/dist/assets/{chunk-5VM5RSS4-DIejoaXS.js → chunk-5VM5RSS4-DoTSs3Kn.js} +1 -1
- package/client/dist/assets/{chunk-32BRIVSS-DrCYs2XG.js → chunk-F27PBJKO-DquVu1wX.js} +1 -1
- package/client/dist/assets/{chunk-EX3LRPZG-CGWNeH2g.js → chunk-IMKFNOWR-8l4wPLQK.js} +5 -5
- package/client/dist/assets/{chunk-JWPE2WC7-CCH0SRFY.js → chunk-JWPE2WC7-CTAa0a4O.js} +1 -1
- package/client/dist/assets/chunk-POPQ4Y6H-BZ6zpqEF.js +1 -0
- package/client/dist/assets/{chunk-MOJQB5TN-B3OpZGRv.js → chunk-SVP7TREG-Dx7pMiq4.js} +1 -1
- package/client/dist/assets/{chunk-V7JOEXUC-B6Bu8x1y.js → chunk-TICWLB2K-BtDKT858.js} +1 -1
- package/client/dist/assets/{chunk-XXDRQBXY-xyjuuhxl.js → chunk-XXDRQBXY-BbrrrzuM.js} +1 -1
- package/client/dist/assets/classDiagram-ZZMXUADV-2gEcH3cX.js +1 -0
- package/client/dist/assets/classDiagram-v2-VYDZK3BY-2gEcH3cX.js +1 -0
- package/client/dist/assets/{cose-bilkent-JH36ORCC-BQIH3SCK.js → cose-bilkent-JH36ORCC-Bhem6unn.js} +1 -1
- package/client/dist/assets/{cynefin-VYW2F7L2-oyLAz8te.js → cynefin-OW5HDTMX-hukx0bAt.js} +3 -3
- package/client/dist/assets/{cynefinDiagram-TSTJHNR4-DoLCsH0l.js → cynefinDiagram-5FMLGOSQ-CGogKYMK.js} +1 -1
- package/client/dist/assets/dagre-GXQ25YYZ-BiLo3XBj.js +4 -0
- package/client/dist/assets/diagram-S7CK7UJ4-DBfdjdN6.js +30 -0
- package/client/dist/assets/diagram-UQ7AKVKN-3CvmyZYO.js +41 -0
- package/client/dist/assets/{diagram-FQU43EPY-DFuYE0Vf.js → diagram-VSXAHHWV-COG9399I.js} +2 -2
- package/client/dist/assets/{diagram-G47NLZAW-CffCZVXk.js → diagram-VX7I27RA-Dftpj84a.js} +1 -1
- package/client/dist/assets/{diagram-NH7WQ7WH-BhrHtUlt.js → diagram-Z3DM3KII-Dw9_CGLA.js} +1 -1
- package/client/dist/assets/{ebnfDiagram-CCIWWBDH-DfV7gT4m.js → ebnfDiagram-PWID7BFC-CJirhPah.js} +1 -1
- package/client/dist/assets/erDiagram-RLTQ6QDP-B11aYoo6.js +99 -0
- package/client/dist/assets/flowDiagram-HODETNUW-CPC6X9E5.js +168 -0
- package/client/dist/assets/{ganttDiagram-NO4QXBWP-BclyOgMb.js → ganttDiagram-EL5Y4UJY-DDSk2AAg.js} +4 -4
- package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-BXT4rIKj.js → gitGraphDiagram-WWUBYQGX-D_2UGciq.js} +1 -1
- package/client/dist/assets/index-DDSwQXcp.js +924 -0
- package/client/dist/assets/index-DWrPE3aq.css +1 -0
- package/client/dist/assets/infoDiagram-27XIBGKW-BuUv5Wms.js +2 -0
- package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-BBUFWq5C.js → ishikawaDiagram-5VMMS53U-DpnAnJ0q.js} +4 -4
- package/client/dist/assets/{journeyDiagram-5HDEW3XC-CmclipcQ.js → journeyDiagram-3NMN7TZE-CFUsXz2q.js} +2 -2
- package/client/dist/assets/{kanban-definition-HUTT4EX6-eIzUeZ03.js → kanban-definition-UXKFOSKX-BAq4Kujj.js} +8 -8
- package/client/dist/assets/katex-C5jXJg4s.js +257 -0
- package/client/dist/assets/layout-CccpfEe3.js +1 -0
- package/client/dist/assets/{linear-DGiT7uKK.js → linear-BIeIr2tp.js} +1 -1
- package/client/dist/assets/mermaid.core-B-Ezy6Me.js +312 -0
- package/client/dist/assets/{mindmap-definition-LN4V7U3C-C4ANnNiP.js → mindmap-definition-YA3MSWOX-CMPZ0Ggp.js} +2 -2
- package/client/dist/assets/{pegDiagram-2B236MQR-DnMeh3Yh.js → pegDiagram-XKGWAZYB-B0_2KQ6f.js} +1 -1
- package/client/dist/assets/{pieDiagram-ENE6RG2P-CKV_rkhF.js → pieDiagram-E7YTZNPT-1-nOk5pZ.js} +3 -3
- package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-BuUsGwHh.js → quadrantDiagram-AXDQQJYC-C_RdmOuq.js} +1 -1
- package/client/dist/assets/{railroadDiagram-RFXS5EU6-BwwdKnFL.js → railroadDiagram-O6MQD6OU-o73KM0oq.js} +1 -1
- package/client/dist/assets/{requirementDiagram-TGXJPOKE-CpQZouJV.js → requirementDiagram-BXWQKSXE-DnhCWJHv.js} +5 -5
- package/client/dist/assets/{sankeyDiagram-HTMAVEWB-4fnDUNVa.js → sankeyDiagram-P5KCCOFB-CVkYgfTV.js} +4 -4
- package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-BOcaWlM0.js → sequenceDiagram-WJ2MYXX4-BYLed29R.js} +1 -1
- package/client/dist/assets/{sizeCapture-X5ZJPWSS-_pv-9R0c.js → sizeCapture-INFHLROL-CYb4HDaH.js} +1 -1
- package/client/dist/assets/stateDiagram-D77RDMKH-CNKFRye_.js +1 -0
- package/client/dist/assets/stateDiagram-v2-MP3YSRHH-NpMhMQ36.js +1 -0
- package/client/dist/assets/swimlanes-42K2YHIH-BhsYrplp.js +1 -0
- package/client/dist/assets/swimlanesDiagram-VR7AAH4N-B4frkWBG.js +8 -0
- package/client/dist/assets/{timeline-definition-FHXFAJF6-rhGYElgn.js → timeline-definition-24CTP7MA-DiUXzB2p.js} +3 -3
- package/client/dist/assets/{vennDiagram-L72KCM5P-BoGjRxyA.js → vennDiagram-4TSXK5OY-aE4j6W86.js} +5 -5
- package/client/dist/assets/{wardleyDiagram-EHGQE667-D-IGv5bH.js → wardleyDiagram-VM6X3IG4-BxJXq0mU.js} +1 -1
- package/client/dist/assets/xychartDiagram-S5SC5T6Z-4vHeL9zc.js +7 -0
- package/client/dist/favicon-16.png +0 -0
- package/client/dist/favicon-32.png +0 -0
- package/client/dist/icon-192.png +0 -0
- package/client/dist/icon-512.png +0 -0
- package/client/dist/icon-maskable-512.png +0 -0
- package/client/dist/index.html +11 -2
- package/client/dist/manifest.json +13 -0
- package/lib/preflight.mjs +24 -5
- package/lib/util.mjs +5 -1
- package/package.json +2 -2
- 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 +8 -2
- package/server/dist/config.js.map +1 -1
- package/server/dist/core/adopt-scan-findings.d.ts +12 -0
- package/server/dist/core/adopt-scan-findings.d.ts.map +1 -0
- package/server/dist/core/adopt-scan-findings.js +96 -0
- package/server/dist/core/adopt-scan-findings.js.map +1 -0
- package/server/dist/core/adopt-scan.d.ts +49 -0
- package/server/dist/core/adopt-scan.d.ts.map +1 -0
- package/server/dist/core/adopt-scan.js +201 -0
- package/server/dist/core/adopt-scan.js.map +1 -0
- 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/custom-profile-command-policy.d.ts +6 -0
- package/server/dist/core/custom-profile-command-policy.d.ts.map +1 -0
- package/server/dist/core/custom-profile-command-policy.js +110 -0
- package/server/dist/core/custom-profile-command-policy.js.map +1 -0
- package/server/dist/core/custom-profile-loader.d.ts +34 -0
- package/server/dist/core/custom-profile-loader.d.ts.map +1 -0
- package/server/dist/core/custom-profile-loader.js +225 -0
- package/server/dist/core/custom-profile-loader.js.map +1 -0
- 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/preview-child-lifecycle.d.ts +7 -2
- package/server/dist/core/preview-child-lifecycle.d.ts.map +1 -1
- package/server/dist/core/preview-child-lifecycle.js +17 -5
- package/server/dist/core/preview-child-lifecycle.js.map +1 -1
- package/server/dist/core/preview-session-manager.d.ts +1 -0
- package/server/dist/core/preview-session-manager.d.ts.map +1 -1
- package/server/dist/core/preview-session-manager.js +2 -2
- package/server/dist/core/preview-session-manager.js.map +1 -1
- package/server/dist/core/project-actions-loader.d.ts +13 -0
- package/server/dist/core/project-actions-loader.d.ts.map +1 -1
- package/server/dist/core/project-actions-loader.js +28 -6
- package/server/dist/core/project-actions-loader.js.map +1 -1
- package/server/dist/core/project-data-dir.d.ts +41 -0
- package/server/dist/core/project-data-dir.d.ts.map +1 -0
- package/server/dist/core/project-data-dir.js +64 -0
- package/server/dist/core/project-data-dir.js.map +1 -0
- package/server/dist/core/project-data-migrate.d.ts +14 -0
- package/server/dist/core/project-data-migrate.d.ts.map +1 -0
- package/server/dist/core/project-data-migrate.js +94 -0
- package/server/dist/core/project-data-migrate.js.map +1 -0
- package/server/dist/core/project-manager.d.ts.map +1 -1
- package/server/dist/core/project-manager.js +9 -10
- package/server/dist/core/project-manager.js.map +1 -1
- 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/session-file/access.d.ts +26 -0
- package/server/dist/core/session-file/access.d.ts.map +1 -0
- package/server/dist/core/session-file/access.js +143 -0
- package/server/dist/core/session-file/access.js.map +1 -0
- package/server/dist/core/session-file/asset-access.d.ts +15 -0
- package/server/dist/core/session-file/asset-access.d.ts.map +1 -0
- package/server/dist/core/session-file/asset-access.js +141 -0
- package/server/dist/core/session-file/asset-access.js.map +1 -0
- package/server/dist/core/session-file/evidence.d.ts +25 -0
- package/server/dist/core/session-file/evidence.d.ts.map +1 -0
- package/server/dist/core/session-file/evidence.js +201 -0
- package/server/dist/core/session-file/evidence.js.map +1 -0
- package/server/dist/core/session-file/probe.d.ts +16 -0
- package/server/dist/core/session-file/probe.d.ts.map +1 -0
- package/server/dist/core/session-file/probe.js +63 -0
- package/server/dist/core/session-file/probe.js.map +1 -0
- package/server/dist/core/session-file/safe-read.d.ts +33 -0
- package/server/dist/core/session-file/safe-read.d.ts.map +1 -0
- package/server/dist/core/session-file/safe-read.js +103 -0
- package/server/dist/core/session-file/safe-read.js.map +1 -0
- package/server/dist/core/session-file/sensitive.d.ts +5 -0
- package/server/dist/core/session-file/sensitive.d.ts.map +1 -0
- package/server/dist/core/session-file/sensitive.js +52 -0
- package/server/dist/core/session-file/sensitive.js.map +1 -0
- package/server/dist/core/session-info/collect.d.ts +70 -0
- package/server/dist/core/session-info/collect.d.ts.map +1 -0
- package/server/dist/core/session-info/collect.js +248 -0
- package/server/dist/core/session-info/collect.js.map +1 -0
- package/server/dist/core/session-info/line-scan.d.ts +20 -0
- package/server/dist/core/session-info/line-scan.d.ts.map +1 -0
- package/server/dist/core/session-info/line-scan.js +109 -0
- package/server/dist/core/session-info/line-scan.js.map +1 -0
- package/server/dist/core/session-info/remote-control.d.ts +9 -0
- package/server/dist/core/session-info/remote-control.d.ts.map +1 -0
- package/server/dist/core/session-info/remote-control.js +64 -0
- package/server/dist/core/session-info/remote-control.js.map +1 -0
- package/server/dist/core/session-info/session-info.d.ts +18 -0
- package/server/dist/core/session-info/session-info.d.ts.map +1 -0
- package/server/dist/core/session-info/session-info.js +170 -0
- package/server/dist/core/session-info/session-info.js.map +1 -0
- package/server/dist/core/session-info/small-file.d.ts +2 -0
- package/server/dist/core/session-info/small-file.d.ts.map +1 -0
- package/server/dist/core/session-info/small-file.js +42 -0
- package/server/dist/core/session-info/small-file.js.map +1 -0
- package/server/dist/core/session-info/subagent-transcript.d.ts +12 -0
- package/server/dist/core/session-info/subagent-transcript.d.ts.map +1 -0
- package/server/dist/core/session-info/subagent-transcript.js +78 -0
- package/server/dist/core/session-info/subagent-transcript.js.map +1 -0
- package/server/dist/core/session-info/subagents.d.ts +14 -0
- package/server/dist/core/session-info/subagents.d.ts.map +1 -0
- package/server/dist/core/session-info/subagents.js +92 -0
- package/server/dist/core/session-info/subagents.js.map +1 -0
- package/server/dist/core/session-info/test-fixtures.d.ts +50 -0
- package/server/dist/core/session-info/test-fixtures.d.ts.map +1 -0
- package/server/dist/core/session-info/test-fixtures.js +43 -0
- package/server/dist/core/session-info/test-fixtures.js.map +1 -0
- package/server/dist/core/session-info/types.d.ts +77 -0
- package/server/dist/core/session-info/types.d.ts.map +1 -0
- package/server/dist/core/session-info/types.js +14 -0
- package/server/dist/core/session-info/types.js.map +1 -0
- 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/stack-profiles-create.d.ts +31 -0
- package/server/dist/core/stack-profiles-create.d.ts.map +1 -0
- package/server/dist/core/stack-profiles-create.js +128 -0
- package/server/dist/core/stack-profiles-create.js.map +1 -0
- package/server/dist/core/stack-profiles.d.ts +49 -0
- package/server/dist/core/stack-profiles.d.ts.map +1 -0
- package/server/dist/core/stack-profiles.js +142 -0
- package/server/dist/core/stack-profiles.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/_shared/helpers.d.ts +2 -0
- package/server/dist/external/_shared/helpers.d.ts.map +1 -1
- package/server/dist/external/_shared/helpers.js.map +1 -1
- package/server/dist/external/actions/get.d.ts +3 -1
- package/server/dist/external/actions/get.d.ts.map +1 -1
- package/server/dist/external/actions/get.js +15 -4
- package/server/dist/external/actions/get.js.map +1 -1
- package/server/dist/external/actions/routes.d.ts +3 -1
- package/server/dist/external/actions/routes.d.ts.map +1 -1
- package/server/dist/external/actions/routes.js.map +1 -1
- package/server/dist/external/actions/stub.d.ts.map +1 -1
- package/server/dist/external/actions/stub.js +15 -4
- package/server/dist/external/actions/stub.js.map +1 -1
- package/server/dist/external/actions/upload-delete.d.ts.map +1 -1
- package/server/dist/external/actions/upload-delete.js +30 -20
- package/server/dist/external/actions/upload-delete.js.map +1 -1
- package/server/dist/external/actions/upload.d.ts.map +1 -1
- package/server/dist/external/actions/upload.js +5 -4
- package/server/dist/external/actions/upload.js.map +1 -1
- package/server/dist/external/create-external-routes-args.d.ts +124 -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/_phase-gate.d.ts +9 -0
- package/server/dist/external/inbox/_phase-gate.d.ts.map +1 -0
- package/server/dist/external/inbox/_phase-gate.js +87 -0
- package/server/dist/external/inbox/_phase-gate.js.map +1 -0
- package/server/dist/external/inbox/_types.d.ts +30 -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 +17 -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 +37 -3
- 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/facts.js +2 -2
- package/server/dist/external/mission-context/facts.js.map +1 -1
- 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/preview/routes.d.ts +3 -1
- package/server/dist/external/preview/routes.d.ts.map +1 -1
- package/server/dist/external/preview/routes.js +8 -1
- package/server/dist/external/preview/routes.js.map +1 -1
- 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 +21 -6
- package/server/dist/external/routes.js.map +1 -1
- package/server/dist/external/session-file/probe-route.d.ts +4 -0
- package/server/dist/external/session-file/probe-route.d.ts.map +1 -0
- package/server/dist/external/session-file/probe-route.js +66 -0
- package/server/dist/external/session-file/probe-route.js.map +1 -0
- package/server/dist/external/session-file/routes.d.ts +12 -0
- package/server/dist/external/session-file/routes.d.ts.map +1 -0
- package/server/dist/external/session-file/routes.js +90 -0
- package/server/dist/external/session-file/routes.js.map +1 -0
- package/server/dist/external/session-file/session-file.fixture.d.ts +45 -0
- package/server/dist/external/session-file/session-file.fixture.d.ts.map +1 -0
- package/server/dist/external/session-file/session-file.fixture.js +41 -0
- package/server/dist/external/session-file/session-file.fixture.js.map +1 -0
- package/server/dist/external/session-info/routes.d.ts +15 -0
- package/server/dist/external/session-info/routes.d.ts.map +1 -0
- package/server/dist/external/session-info/routes.js +57 -0
- package/server/dist/external/session-info/routes.js.map +1 -0
- package/server/dist/external/tasks/_phase-helpers.js +2 -2
- package/server/dist/external/tasks/_phase-helpers.js.map +1 -1
- package/server/dist/external/tasks/create.d.ts.map +1 -1
- package/server/dist/external/tasks/create.js +10 -2
- 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 +70 -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 +117 -52
- 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/adopt-scan.d.ts +4 -0
- package/server/dist/routes/adopt-scan.d.ts.map +1 -0
- package/server/dist/routes/adopt-scan.js +27 -0
- package/server/dist/routes/adopt-scan.js.map +1 -0
- 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/profiles.d.ts +7 -0
- package/server/dist/routes/profiles.d.ts.map +1 -1
- package/server/dist/routes/profiles.js +13 -0
- package/server/dist/routes/profiles.js.map +1 -1
- package/server/dist/routes/projects.d.ts.map +1 -1
- package/server/dist/routes/projects.js +58 -16
- package/server/dist/routes/projects.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/stack-profiles.d.ts +10 -0
- package/server/dist/routes/stack-profiles.d.ts.map +1 -0
- package/server/dist/routes/stack-profiles.js +65 -0
- package/server/dist/routes/stack-profiles.js.map +1 -0
- 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/data-target.d.ts +17 -0
- package/server/dist/terminal/data-target.d.ts.map +1 -0
- package/server/dist/terminal/data-target.js +56 -0
- package/server/dist/terminal/data-target.js.map +1 -0
- package/server/dist/terminal/image-paste.d.ts +2 -0
- package/server/dist/terminal/image-paste.d.ts.map +1 -1
- package/server/dist/terminal/image-paste.js +11 -12
- package/server/dist/terminal/image-paste.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 +5 -0
- package/server/dist/terminal/routes.d.ts.map +1 -1
- package/server/dist/terminal/routes.js +20 -13
- 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/project.d.ts +9 -0
- package/server/dist/types/project.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/types/stack-profile-contract.d.ts +33 -0
- package/server/dist/types/stack-profile-contract.d.ts.map +1 -0
- package/server/dist/types/stack-profile-contract.js +11 -0
- package/server/dist/types/stack-profile-contract.js.map +1 -0
- 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 +3 -3
- package/client/dist/assets/arc-DQmjbsFU.js +0 -1
- package/client/dist/assets/architectureDiagram-ZJ3FMSHR-DAvCsPCW.js +0 -36
- package/client/dist/assets/blockDiagram-677ZJIJ3-DC-dlyYI.js +0 -132
- package/client/dist/assets/c4Diagram-LMCZKHZV-DSlmXfhE.js +0 -10
- package/client/dist/assets/channel-BfmIcrp7.js +0 -1
- package/client/dist/assets/chunk-RYQCIY6F-BKhdp_8v.js +0 -1
- package/client/dist/assets/chunk-VR4S4FIN-OgFi2_iB.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/dagre-VKFMJZFB-D7djx1_Y.js +0 -4
- package/client/dist/assets/diagram-OA4YK3LP-CwQPbOn0.js +0 -30
- package/client/dist/assets/diagram-WEI45ONY-abtYnYqH.js +0 -41
- package/client/dist/assets/erDiagram-Q63AITRT-vtbCprgH.js +0 -85
- package/client/dist/assets/flowDiagram-23GEKE2U-CVCgcyDF.js +0 -156
- package/client/dist/assets/graph-C9eacEi8.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/infoDiagram-FWYZ7A6U-Dr4mN24J.js +0 -2
- package/client/dist/assets/katex-DkKDou_j.js +0 -257
- package/client/dist/assets/layout-DEXfKzaS.js +0 -1
- package/client/dist/assets/map-Czzmt4hB.js +0 -1
- package/client/dist/assets/mermaid.core-BcLNGbxW.js +0 -314
- package/client/dist/assets/stateDiagram-2N3HPSRC-CFwCOonY.js +0 -1
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-srkiu3Ib.js +0 -1
- package/client/dist/assets/swimlanes-5IMT3BWC-DFa2tzxu.js +0 -2
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-Dq-0K9Zm.js +0 -8
- package/client/dist/assets/xychartDiagram-FW5EYKEG-D9PFTCfm.js +0 -7
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export interface SessionContextInfo {
|
|
2
|
+
/** input + cache_read + cache_creation of the newest non-synthetic assistant message; null when none seen. */
|
|
3
|
+
tokens: number | null;
|
|
4
|
+
model: string | null;
|
|
5
|
+
/** Timestamp of the message the numbers came from. */
|
|
6
|
+
at: string | null;
|
|
7
|
+
/** A compaction happened AFTER that message, so `tokens` is stale. */
|
|
8
|
+
compactedSince: boolean;
|
|
9
|
+
/** The compactor's own post-compaction estimate; only set while `compactedSince`, null when it recorded none. */
|
|
10
|
+
tokensAfterCompaction: number | null;
|
|
11
|
+
}
|
|
12
|
+
export interface SessionCompactionInfo {
|
|
13
|
+
/** Compactions seen inside the scanned window. */
|
|
14
|
+
count: number;
|
|
15
|
+
last: {
|
|
16
|
+
at: string | null;
|
|
17
|
+
preTokens: number | null;
|
|
18
|
+
postTokens: number | null;
|
|
19
|
+
} | null;
|
|
20
|
+
}
|
|
21
|
+
export interface SessionOutputFile {
|
|
22
|
+
/** Absolute, normalised against the cwd of the entry that wrote it. */
|
|
23
|
+
path: string;
|
|
24
|
+
tool: "Write" | "Edit" | "NotebookEdit" | "MultiEdit";
|
|
25
|
+
firstAt: string | null;
|
|
26
|
+
lastAt: string | null;
|
|
27
|
+
/** Agent id when a subagent produced it; null for the session itself. */
|
|
28
|
+
agentId: string | null;
|
|
29
|
+
}
|
|
30
|
+
export interface SessionRemoteControl {
|
|
31
|
+
/** A LIVE process of this session currently has a bridge session. */
|
|
32
|
+
active: boolean;
|
|
33
|
+
/** A bridge-session record exists in the JSONL — it was enabled at least once. */
|
|
34
|
+
onceEnabled: boolean;
|
|
35
|
+
pid: number | null;
|
|
36
|
+
}
|
|
37
|
+
export type SubagentState = "running" | "finished" | "finished-stale";
|
|
38
|
+
export interface SessionSubagent {
|
|
39
|
+
agentId: string;
|
|
40
|
+
agentType: string | null;
|
|
41
|
+
description: string | null;
|
|
42
|
+
toolUseId: string | null;
|
|
43
|
+
spawnDepth: number | null;
|
|
44
|
+
/** Set for depth-2 agents (a reviewer spawned by a sub-iterate). */
|
|
45
|
+
parentAgentId: string | null;
|
|
46
|
+
model: string | null;
|
|
47
|
+
prompt: string | null;
|
|
48
|
+
/** Last assistant text of the agent's own file (the notification's result is often just a pointer). */
|
|
49
|
+
answer: string | null;
|
|
50
|
+
startedAt: string | null;
|
|
51
|
+
endedAt: string | null;
|
|
52
|
+
durationMs: number | null;
|
|
53
|
+
state: SubagentState;
|
|
54
|
+
/** completed | failed | killed | stopped, from the parent's task-notification; null without one. */
|
|
55
|
+
status: string | null;
|
|
56
|
+
tokens: number | null;
|
|
57
|
+
toolUses: number | null;
|
|
58
|
+
}
|
|
59
|
+
export interface SessionInfoScan {
|
|
60
|
+
/** True when the session file was larger than the scan window; older history is not reflected. */
|
|
61
|
+
truncated: boolean;
|
|
62
|
+
scannedBytes: number;
|
|
63
|
+
sizeBytes: number;
|
|
64
|
+
/** Outputs / subagents beyond the caps (MAX_OUTPUTS, MAX_SUBAGENTS) that were not returned. */
|
|
65
|
+
outputsTruncated: number;
|
|
66
|
+
subagentsTruncated: number;
|
|
67
|
+
}
|
|
68
|
+
export interface SessionInfo {
|
|
69
|
+
sessionUuid: string;
|
|
70
|
+
context: SessionContextInfo;
|
|
71
|
+
compaction: SessionCompactionInfo;
|
|
72
|
+
outputs: SessionOutputFile[];
|
|
73
|
+
remoteControl: SessionRemoteControl;
|
|
74
|
+
subagents: SessionSubagent[];
|
|
75
|
+
scan: SessionInfoScan;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/session-info/types.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,8GAA8G;IAC9G,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,sDAAsD;IACtD,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,sEAAsE;IACtE,cAAc,EAAE,OAAO,CAAC;IACxB,iHAAiH;IACjH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACzF;AAED,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,WAAW,CAAC;IACtD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,yEAAyE;IACzE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;IAChB,kFAAkF;IAClF,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAEtE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oEAAoE;IACpE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uGAAuG;IACvG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,oGAAoG;IACpG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,kGAAkG;IAClG,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,qBAAqB,CAAC;IAClC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,aAAa,EAAE,oBAAoB,CAAC;IACpC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,IAAI,EAAE,eAAe,CAAC;CACvB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Wire shapes of GET /api/external/tasks/:id/session-info (campaign
|
|
3
|
+
* mission-desktop-style, M2). READ-ONLY view derived from Claude's own files
|
|
4
|
+
* (CLAUDE.md DO-NOT #1) — nothing here is ever written back.
|
|
5
|
+
*
|
|
6
|
+
* Outputs are ATTEMPTED-then-not-rejected writes: a tool_use whose result is_error is retracted.
|
|
7
|
+
* Runtime: Claude only (Codex tasks have no such JSONL and answer status "missing").
|
|
8
|
+
*
|
|
9
|
+
* Deliberately absent: a context PERCENTAGE and a context WINDOW SIZE. The
|
|
10
|
+
* window depends on the model/plan and is not recorded in the JSONL; inventing
|
|
11
|
+
* one would be a guess dressed as a fact. Consumers show the raw token count.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/session-info/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { GlobalSettings } from "../types/settings.js";
|
|
2
|
+
export declare const DEFAULT_GLOBAL_SETTINGS: GlobalSettings;
|
|
3
|
+
export interface SettingsReaderDeps {
|
|
4
|
+
readFile: (path: string, encoding: string) => Promise<string>;
|
|
5
|
+
existsSync: (path: string) => boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Back-compat for the `codexRuntimeDefault` -> `runtimeDefault` rename
|
|
9
|
+
* (Codextender integration, Part B.1). A settings.json written before the
|
|
10
|
+
* rename has `codexRuntimeDefault` but no `runtimeDefault`; without this,
|
|
11
|
+
* the parsed value is silently dropped on read and an operator's configured
|
|
12
|
+
* default reverts to "claude". Read-side only — a PUT always writes
|
|
13
|
+
* whatever field name the caller sends, so a re-save completes the
|
|
14
|
+
* migration on disk.
|
|
15
|
+
*/
|
|
16
|
+
export declare function migrateLegacyRuntimeDefault(parsed: Record<string, unknown>): Record<string, unknown>;
|
|
17
|
+
export declare function readGlobalSettings(settingsPath: string, deps: SettingsReaderDeps): Promise<GlobalSettings>;
|
|
18
|
+
//# sourceMappingURL=settings-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-reader.d.ts","sourceRoot":"","sources":["../../src/core/settings-reader.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,eAAO,MAAM,uBAAuB,EAAE,cAKrC,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAED,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,cAAc,CAAC,CAYzB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const DEFAULT_GLOBAL_SETTINGS = {
|
|
2
|
+
port: 3847,
|
|
3
|
+
maxConcurrent: 3,
|
|
4
|
+
heartbeatIntervalMs: 30000,
|
|
5
|
+
runtimeDefault: "claude",
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Back-compat for the `codexRuntimeDefault` -> `runtimeDefault` rename
|
|
9
|
+
* (Codextender integration, Part B.1). A settings.json written before the
|
|
10
|
+
* rename has `codexRuntimeDefault` but no `runtimeDefault`; without this,
|
|
11
|
+
* the parsed value is silently dropped on read and an operator's configured
|
|
12
|
+
* default reverts to "claude". Read-side only — a PUT always writes
|
|
13
|
+
* whatever field name the caller sends, so a re-save completes the
|
|
14
|
+
* migration on disk.
|
|
15
|
+
*/
|
|
16
|
+
export function migrateLegacyRuntimeDefault(parsed) {
|
|
17
|
+
if (parsed.runtimeDefault !== undefined)
|
|
18
|
+
return parsed;
|
|
19
|
+
const legacy = parsed.codexRuntimeDefault;
|
|
20
|
+
if (legacy !== "claude" && legacy !== "codex")
|
|
21
|
+
return parsed;
|
|
22
|
+
return { ...parsed, runtimeDefault: legacy };
|
|
23
|
+
}
|
|
24
|
+
export async function readGlobalSettings(settingsPath, deps) {
|
|
25
|
+
if (!deps.existsSync(settingsPath))
|
|
26
|
+
return { ...DEFAULT_GLOBAL_SETTINGS };
|
|
27
|
+
try {
|
|
28
|
+
const content = await deps.readFile(settingsPath, "utf-8");
|
|
29
|
+
if (!content.trim())
|
|
30
|
+
return { ...DEFAULT_GLOBAL_SETTINGS };
|
|
31
|
+
return {
|
|
32
|
+
...DEFAULT_GLOBAL_SETTINGS,
|
|
33
|
+
...migrateLegacyRuntimeDefault(JSON.parse(content)),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return { ...DEFAULT_GLOBAL_SETTINGS };
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=settings-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-reader.js","sourceRoot":"","sources":["../../src/core/settings-reader.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,IAAI,EAAE,IAAI;IACV,aAAa,EAAE,CAAC;IAChB,mBAAmB,EAAE,KAAK;IAC1B,cAAc,EAAE,QAAQ;CACzB,CAAC;AAOF;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAA+B;IAE/B,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAC1C,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,MAAM,CAAC;IAC7D,OAAO,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,IAAwB;IAExB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,GAAG,uBAAuB,EAAE,CAAC;IAC1E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,GAAG,uBAAuB,EAAE,CAAC;QAC3D,OAAO;YACL,GAAG,uBAAuB;YAC1B,GAAG,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACpD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,GAAG,uBAAuB,EAAE,CAAC;IACxC,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,33 @@
|
|
|
1
1
|
export declare function qPs(v: string): string;
|
|
2
|
+
/**
|
|
3
|
+
* PowerShell arg-quoting for text that may contain embedded newlines
|
|
4
|
+
* (multi-paragraph prompts) — used where `qPs()` alone is not safe.
|
|
5
|
+
*
|
|
6
|
+
* `qPs()` produces syntactically correct PowerShell (the tokenizer is
|
|
7
|
+
* quote-aware and does not get confused by content inside an open single-
|
|
8
|
+
* quoted string), but that is not sufficient here: PSReadLine (PowerShell 7)
|
|
9
|
+
* maintains its OWN multi-line edit buffer as input arrives, and when that
|
|
10
|
+
* input is delivered via pty keystroke injection (not a real interactive
|
|
11
|
+
* paste event) rather than typed by a human, a literal newline inside the
|
|
12
|
+
* still-open quoted string can corrupt that buffer — a trailing fragment of
|
|
13
|
+
* the string then gets parsed and executed as its own bare command once
|
|
14
|
+
* Enter is finally processed. Reproduced live against a real pwsh.exe pty
|
|
15
|
+
* (iterate-2026-09-19-codex-launch-powershell-chunk); confirmed independent
|
|
16
|
+
* of write-chunking (fails identically via one atomic `pty.write()`) and
|
|
17
|
+
* independent of bracketed-paste wrapping (PS7's bracketed-paste handling
|
|
18
|
+
* does not prevent it either) — the only thing that avoided it was removing
|
|
19
|
+
* every literal newline from the bytes actually sent to the pty.
|
|
20
|
+
*
|
|
21
|
+
* A value with no `\r`/`\n` takes the plain `qPs()` path unchanged (stays
|
|
22
|
+
* human-readable for manual copy/paste). A value containing either is
|
|
23
|
+
* Base64-encoded — the encoded text itself has no `\r`/`\n` by construction
|
|
24
|
+
* (RFC 4648 alphabet) — and wrapped in a PowerShell sub-expression that
|
|
25
|
+
* decodes it back to the exact original string at parse time, before the
|
|
26
|
+
* command it's embedded in ever runs. `$(...)` around a native-command
|
|
27
|
+
* argument passes its result as ONE argument regardless of embedded
|
|
28
|
+
* whitespace, so this is transparent to the receiving process.
|
|
29
|
+
*/
|
|
30
|
+
export declare function qPsMultiline(v: string): string;
|
|
2
31
|
export declare function qCmd(v: string): string;
|
|
3
32
|
export declare function qPosix(v: string): string;
|
|
4
33
|
export declare function toPosixPath(p: string): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-quote.d.ts","sourceRoot":"","sources":["../../src/core/shell-quote.ts"],"names":[],"mappings":"AAYA,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrC;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBtC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C"}
|
|
1
|
+
{"version":3,"file":"shell-quote.d.ts","sourceRoot":"","sources":["../../src/core/shell-quote.ts"],"names":[],"mappings":"AAYA,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI9C;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBtC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C"}
|
|
@@ -13,6 +13,40 @@ export function qPs(v) {
|
|
|
13
13
|
// PS single-quoted: embedded `'` → `''`.
|
|
14
14
|
return `'${v.replace(/'/g, "''")}'`;
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* PowerShell arg-quoting for text that may contain embedded newlines
|
|
18
|
+
* (multi-paragraph prompts) — used where `qPs()` alone is not safe.
|
|
19
|
+
*
|
|
20
|
+
* `qPs()` produces syntactically correct PowerShell (the tokenizer is
|
|
21
|
+
* quote-aware and does not get confused by content inside an open single-
|
|
22
|
+
* quoted string), but that is not sufficient here: PSReadLine (PowerShell 7)
|
|
23
|
+
* maintains its OWN multi-line edit buffer as input arrives, and when that
|
|
24
|
+
* input is delivered via pty keystroke injection (not a real interactive
|
|
25
|
+
* paste event) rather than typed by a human, a literal newline inside the
|
|
26
|
+
* still-open quoted string can corrupt that buffer — a trailing fragment of
|
|
27
|
+
* the string then gets parsed and executed as its own bare command once
|
|
28
|
+
* Enter is finally processed. Reproduced live against a real pwsh.exe pty
|
|
29
|
+
* (iterate-2026-09-19-codex-launch-powershell-chunk); confirmed independent
|
|
30
|
+
* of write-chunking (fails identically via one atomic `pty.write()`) and
|
|
31
|
+
* independent of bracketed-paste wrapping (PS7's bracketed-paste handling
|
|
32
|
+
* does not prevent it either) — the only thing that avoided it was removing
|
|
33
|
+
* every literal newline from the bytes actually sent to the pty.
|
|
34
|
+
*
|
|
35
|
+
* A value with no `\r`/`\n` takes the plain `qPs()` path unchanged (stays
|
|
36
|
+
* human-readable for manual copy/paste). A value containing either is
|
|
37
|
+
* Base64-encoded — the encoded text itself has no `\r`/`\n` by construction
|
|
38
|
+
* (RFC 4648 alphabet) — and wrapped in a PowerShell sub-expression that
|
|
39
|
+
* decodes it back to the exact original string at parse time, before the
|
|
40
|
+
* command it's embedded in ever runs. `$(...)` around a native-command
|
|
41
|
+
* argument passes its result as ONE argument regardless of embedded
|
|
42
|
+
* whitespace, so this is transparent to the receiving process.
|
|
43
|
+
*/
|
|
44
|
+
export function qPsMultiline(v) {
|
|
45
|
+
if (!/[\r\n]/.test(v))
|
|
46
|
+
return qPs(v);
|
|
47
|
+
const b64 = Buffer.from(v, "utf8").toString("base64");
|
|
48
|
+
return `$([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(${qPs(b64)})))`;
|
|
49
|
+
}
|
|
16
50
|
export function qCmd(v) {
|
|
17
51
|
// cmd.exe double-quoted argument, escaped per CommandLineToArgvW (the prior
|
|
18
52
|
// `"${v.replace(/"/g,'\\"')}"` left backslashes unescaped — CodeQL
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-quote.js","sourceRoot":"","sources":["../../src/core/shell-quote.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,mBAAmB;AACnB,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,oCAAoC;AAEpC,MAAM,UAAU,GAAG,CAAC,CAAS;IAC3B,yCAAyC;IACzC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,4EAA4E;IAC5E,mEAAmE;IACnE,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,qEAAqE;IACrE,8EAA8E;IAC9E,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,kBAAkB,IAAI,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;QACD,kBAAkB,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,qCAAqC;IACrC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"shell-quote.js","sourceRoot":"","sources":["../../src/core/shell-quote.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,mBAAmB;AACnB,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,oCAAoC;AAEpC,MAAM,UAAU,GAAG,CAAC,CAAS;IAC3B,yCAAyC;IACzC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACtC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtD,OAAO,+EAA+E,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,4EAA4E;IAC5E,mEAAmE;IACnE,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,qEAAqE;IACrE,8EAA8E;IAC9E,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,kBAAkB,IAAI,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;QACD,kBAAkB,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,qCAAqC;IACrC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type StackProfileDeps } from "./stack-profiles.js";
|
|
2
|
+
export type StackProfileScope = "project" | "user";
|
|
3
|
+
export type CreateOutcome = {
|
|
4
|
+
status: "created";
|
|
5
|
+
name: string;
|
|
6
|
+
path: string;
|
|
7
|
+
} | {
|
|
8
|
+
status: "invalid-request";
|
|
9
|
+
reason: string;
|
|
10
|
+
} | {
|
|
11
|
+
status: "exists";
|
|
12
|
+
reason: string;
|
|
13
|
+
} | {
|
|
14
|
+
status: "failed";
|
|
15
|
+
reason: string;
|
|
16
|
+
};
|
|
17
|
+
export interface CreateStackProfileInput {
|
|
18
|
+
from: string;
|
|
19
|
+
name: string;
|
|
20
|
+
scope: StackProfileScope;
|
|
21
|
+
/** Required for scope "project" (destination). For scope "user" it only widens the
|
|
22
|
+
* collision check + validation to that project's own profiles. */
|
|
23
|
+
projectRoot?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface CreateStackProfileDeps extends StackProfileDeps {
|
|
26
|
+
userProfilesDir?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function userProfilesDir(deps?: Pick<CreateStackProfileDeps, "userProfilesDir" | "homeDir">): string;
|
|
29
|
+
export declare function validateNewProfileName(name: unknown): string | null;
|
|
30
|
+
export declare function createStackProfileFromBundled(input: CreateStackProfileInput, deps?: CreateStackProfileDeps): Promise<CreateOutcome>;
|
|
31
|
+
//# sourceMappingURL=stack-profiles-create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-profiles-create.d.ts","sourceRoot":"","sources":["../../src/core/stack-profiles-create.ts"],"names":[],"mappings":"AAoBA,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAM7B,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,iBAAiB,CAAC;IACzB;uEACmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAWD,wBAAgB,eAAe,CAAC,IAAI,GAAE,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,GAAG,SAAS,CAAM,GAAG,MAAM,CAM9G;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CASnE;AAED,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,uBAAuB,EAC9B,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,aAAa,CAAC,CAUxB"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* stack-profiles-create.ts — "create a custom profile from a bundled one".
|
|
3
|
+
*
|
|
4
|
+
* The ONLY write surface of the stack-profile feature, and deliberately tiny:
|
|
5
|
+
* it copies a bundled profile's JSON under a NEW name into the project's
|
|
6
|
+
* `.shipwright/profiles/` or the user's `~/.shipwright/profiles/`
|
|
7
|
+
* (`SHIPWRIGHT_USER_PROFILES_DIR` overrides, same as the resolver). Rules:
|
|
8
|
+
* - the name is validated against the resolver's own NAME_RE and must be
|
|
9
|
+
* unused in EVERY source — shadowing a bundled profile is the resolver's
|
|
10
|
+
* "same-name shadow" regression case, so the UI never creates one;
|
|
11
|
+
* - `wx` open — an existing file is never overwritten (race-safe, no
|
|
12
|
+
* check-then-write window);
|
|
13
|
+
* - the result is validated through the resolver; a copy it rejects is
|
|
14
|
+
* removed again, so a failed create leaves nothing behind.
|
|
15
|
+
*/
|
|
16
|
+
import { promises as fsp } from "node:fs";
|
|
17
|
+
import os from "node:os";
|
|
18
|
+
import path from "node:path";
|
|
19
|
+
import { MAX_PROFILE_NAME_LENGTH, isProfileNameShape, listStackProfiles, validateStackProfile, } from "./stack-profiles.js";
|
|
20
|
+
/** Names the resolver reserves as sentinels, never real profiles. */
|
|
21
|
+
const RESERVED = new Set(["generic", "detecting", "custom"]);
|
|
22
|
+
const WINDOWS_DEVICE = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/;
|
|
23
|
+
function samePath(a, b) {
|
|
24
|
+
if (typeof a !== "string")
|
|
25
|
+
return false;
|
|
26
|
+
const norm = (x) => (process.platform === "win32" ? path.resolve(x).toLowerCase() : path.resolve(x));
|
|
27
|
+
return norm(a) === norm(b);
|
|
28
|
+
}
|
|
29
|
+
/** Names being created right now - two concurrent creates of one name never both run. */
|
|
30
|
+
const inFlight = new Set();
|
|
31
|
+
export function userProfilesDir(deps = {}) {
|
|
32
|
+
return (deps.userProfilesDir ??
|
|
33
|
+
(process.env.SHIPWRIGHT_USER_PROFILES_DIR?.trim() || undefined) ??
|
|
34
|
+
path.join(deps.homeDir ?? os.homedir(), ".shipwright", "profiles"));
|
|
35
|
+
}
|
|
36
|
+
export function validateNewProfileName(name) {
|
|
37
|
+
if (typeof name === "string" && name.length > MAX_PROFILE_NAME_LENGTH) {
|
|
38
|
+
return `Keep the name under ${MAX_PROFILE_NAME_LENGTH + 1} characters.`;
|
|
39
|
+
}
|
|
40
|
+
if (!isProfileNameShape(name)) {
|
|
41
|
+
return "Use lowercase letters, digits and dashes only (it must start with a letter or digit).";
|
|
42
|
+
}
|
|
43
|
+
if (RESERVED.has(name) || WINDOWS_DEVICE.test(name))
|
|
44
|
+
return `“${name}” is reserved — pick another name.`;
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
export async function createStackProfileFromBundled(input, deps = {}) {
|
|
48
|
+
if (typeof input.name === "string" && inFlight.has(input.name)) {
|
|
49
|
+
return { status: "exists", reason: `“${input.name}” is already being created.` };
|
|
50
|
+
}
|
|
51
|
+
inFlight.add(input.name);
|
|
52
|
+
try {
|
|
53
|
+
return await createUnlocked(input, deps);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
inFlight.delete(input.name);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function createUnlocked(input, deps) {
|
|
60
|
+
const nameProblem = validateNewProfileName(input.name);
|
|
61
|
+
if (nameProblem)
|
|
62
|
+
return { status: "invalid-request", reason: nameProblem };
|
|
63
|
+
if (input.scope === "project" && !input.projectRoot) {
|
|
64
|
+
return { status: "invalid-request", reason: "A project profile needs a project." };
|
|
65
|
+
}
|
|
66
|
+
const listed = await listStackProfiles({ projectRoot: input.projectRoot }, deps);
|
|
67
|
+
if (listed.status !== "ok") {
|
|
68
|
+
return { status: "failed", reason: listed.status === "failed" ? listed.reason : "The profile resolver isn't available." };
|
|
69
|
+
}
|
|
70
|
+
const source = listed.report.profiles.find((p) => p.name === input.from && p.source === "bundled");
|
|
71
|
+
if (!source || !source.valid) {
|
|
72
|
+
return { status: "invalid-request", reason: `“${input.from}” isn't a usable built-in profile.` };
|
|
73
|
+
}
|
|
74
|
+
if (listed.report.profiles.some((p) => p.name === input.name)) {
|
|
75
|
+
return { status: "exists", reason: `A profile called “${input.name}” already exists.` };
|
|
76
|
+
}
|
|
77
|
+
let content;
|
|
78
|
+
try {
|
|
79
|
+
const data = JSON.parse(await fsp.readFile(source.path, "utf-8"));
|
|
80
|
+
content = `${JSON.stringify({ ...data, name: input.name }, null, 2)}\n`;
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
return { status: "failed", reason: `Couldn't read the built-in profile: ${String(err)}` };
|
|
84
|
+
}
|
|
85
|
+
const dir = input.scope === "project"
|
|
86
|
+
? path.join(input.projectRoot, ".shipwright", "profiles")
|
|
87
|
+
: userProfilesDir(deps);
|
|
88
|
+
const target = path.join(dir, `${input.name}.json`);
|
|
89
|
+
try {
|
|
90
|
+
await fsp.mkdir(dir, { recursive: true });
|
|
91
|
+
// DO-NOT #10: a symlinked .shipwright / profiles dir must not redirect the write.
|
|
92
|
+
if (input.scope === "project") {
|
|
93
|
+
const rel = path.relative(await fsp.realpath(input.projectRoot), await fsp.realpath(dir));
|
|
94
|
+
if (rel.startsWith("..") || path.isAbsolute(rel)) {
|
|
95
|
+
return { status: "failed", reason: "The project's profiles folder points outside the project, so nothing was written." };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
await fsp.writeFile(target, content, { encoding: "utf-8", flag: "wx" });
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
if (err.code === "EEXIST") {
|
|
102
|
+
return { status: "exists", reason: `A profile called “${input.name}” already exists.` };
|
|
103
|
+
}
|
|
104
|
+
return { status: "failed", reason: `Couldn't write the profile: ${String(err)}` };
|
|
105
|
+
}
|
|
106
|
+
const checked = await validateStackProfile({ name: input.name, projectRoot: input.projectRoot }, deps);
|
|
107
|
+
// A copy stays ONLY on the resolver's explicit "valid" for THIS very file. Any
|
|
108
|
+
// other outcome (invalid, unreachable, timeout, newer contract, or the resolver
|
|
109
|
+
// resolving the name to a different file) removes the file this request created
|
|
110
|
+
// (wx guarantees it is ours) and says exactly why.
|
|
111
|
+
const sameFile = checked.status === "ok" && checked.report.valid && "path" in checked.report && samePath(checked.report.path, target);
|
|
112
|
+
if (!sameFile) {
|
|
113
|
+
const why = checked.status !== "ok"
|
|
114
|
+
? "the resolver couldn't be reached to check it"
|
|
115
|
+
: !checked.report.valid
|
|
116
|
+
? "error" in checked.report ? checked.report.error : "the resolver rejected it"
|
|
117
|
+
: "the resolver resolved that name to a different profile";
|
|
118
|
+
try {
|
|
119
|
+
await fsp.rm(target, { force: true });
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return { status: "failed", reason: `The new profile didn't validate (${why}) and couldn't be removed — delete ${target} by hand.` };
|
|
123
|
+
}
|
|
124
|
+
return { status: "failed", reason: `The new profile didn't validate (${why}), so it was removed again.` };
|
|
125
|
+
}
|
|
126
|
+
return { status: "created", name: input.name, path: target };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=stack-profiles-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-profiles-create.js","sourceRoot":"","sources":["../../src/core/stack-profiles-create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,GAErB,MAAM,qBAAqB,CAAC;AAE7B,qEAAqE;AACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7D,MAAM,cAAc,GAAG,uCAAuC,CAAC;AAuB/D,SAAS,QAAQ,CAAC,CAAU,EAAE,CAAS;IACrC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACxC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,yFAAyF;AACzF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;AAEnC,MAAM,UAAU,eAAe,CAAC,OAAoE,EAAE;IACpG,OAAO,CACL,IAAI,CAAC,eAAe;QACpB,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,CAAC,CACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;QACtE,OAAO,uBAAuB,uBAAuB,GAAG,CAAC,cAAc,CAAC;IAC1E,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,uFAAuF,CAAC;IACjG,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,IAAI,oCAAoC,CAAC;IACzG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,KAA8B,EAC9B,OAA+B,EAAE;IAEjC,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,6BAA6B,EAAE,CAAC;IACnF,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,MAAM,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,KAA8B,EAC9B,IAA4B;IAE5B,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,WAAW;QAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC3E,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACpD,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC;IACrF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;IACjF,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,uCAAuC,EAAE,CAAC;IAC5H,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IACnG,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC7B,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,oCAAoC,EAAE,CAAC;IACnG,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,KAAK,CAAC,IAAI,mBAAmB,EAAE,CAAC;IAC1F,CAAC;IAED,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAA4B,CAAC;QAC7F,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,uCAAuC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC5F,CAAC;IAED,MAAM,GAAG,GACP,KAAK,CAAC,KAAK,KAAK,SAAS;QACvB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAqB,EAAE,aAAa,EAAE,UAAU,CAAC;QACnE,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,kFAAkF;QAClF,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAqB,CAAC,EAAE,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACpG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,mFAAmF,EAAE,CAAC;YAC3H,CAAC;QACH,CAAC;QACD,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,KAAK,CAAC,IAAI,mBAAmB,EAAE,CAAC;QAC1F,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,+BAA+B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IACpF,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;IACvG,+EAA+E;IAC/E,gFAAgF;IAChF,gFAAgF;IAChF,mDAAmD;IACnD,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACvH,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,GAAG,GACP,OAAO,CAAC,MAAM,KAAK,IAAI;YACrB,CAAC,CAAC,8CAA8C;YAChD,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;gBACrB,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,0BAA0B;gBAC/E,CAAC,CAAC,wDAAwD,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,oCAAoC,GAAG,sCAAsC,MAAM,WAAW,EAAE,CAAC;QACtI,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,oCAAoC,GAAG,6BAA6B,EAAE,CAAC;IAC5G,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type CliChildSpawnFn } from "./cli-child-spawn.js";
|
|
2
|
+
import { type RunFn } from "./readiness-probe.js";
|
|
3
|
+
import { type StackProfileListReport, type StackProfileValidateReport } from "../types/stack-profile-contract.js";
|
|
4
|
+
export declare const STACK_PROFILE_CLI_TIMEOUT_MS = 20000;
|
|
5
|
+
/** Mirror of the resolver's NAME_RE + a filename-safe length cap. A name that
|
|
6
|
+
* fails this never reaches argv (a leading `-` would parse as an option). */
|
|
7
|
+
export declare const PROFILE_NAME_RE: RegExp;
|
|
8
|
+
export declare const MAX_PROFILE_NAME_LENGTH = 64;
|
|
9
|
+
export declare function isProfileNameShape(name: unknown): name is string;
|
|
10
|
+
export type StackProfileOutcome<T> = {
|
|
11
|
+
status: "ok";
|
|
12
|
+
report: T;
|
|
13
|
+
} | {
|
|
14
|
+
status: "unsupported-contract";
|
|
15
|
+
version: string;
|
|
16
|
+
} | {
|
|
17
|
+
status: "engine-unavailable";
|
|
18
|
+
reason: string;
|
|
19
|
+
repairCommand: string;
|
|
20
|
+
} | {
|
|
21
|
+
status: "failed";
|
|
22
|
+
reason: string;
|
|
23
|
+
};
|
|
24
|
+
export interface StackProfileDeps {
|
|
25
|
+
run?: RunFn;
|
|
26
|
+
spawn?: CliChildSpawnFn;
|
|
27
|
+
existsFn?: (p: string) => boolean;
|
|
28
|
+
homeDir?: string;
|
|
29
|
+
baseEnv?: NodeJS.ProcessEnv;
|
|
30
|
+
scriptOverride?: string;
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
}
|
|
33
|
+
/** The cache-owned resolver CLI (`SHIPWRIGHT_RESOLVE_PROFILE_SCRIPT` overrides
|
|
34
|
+
* the location — isolated E2E stacks run with an ephemeral HOME). */
|
|
35
|
+
export declare function resolveProfileScript(deps?: Pick<StackProfileDeps, "existsFn" | "homeDir" | "scriptOverride">): string | null;
|
|
36
|
+
export declare function listStackProfiles(input: {
|
|
37
|
+
projectRoot?: string;
|
|
38
|
+
}, deps?: StackProfileDeps): Promise<StackProfileOutcome<StackProfileListReport>>;
|
|
39
|
+
/** Validate one profile by NAME (resolved through the normal lookup order). A
|
|
40
|
+
* profile the resolver rejects is `{valid:false}` data, not a transport failure. */
|
|
41
|
+
export declare function validateStackProfile(input: {
|
|
42
|
+
name: string;
|
|
43
|
+
projectRoot?: string;
|
|
44
|
+
}, deps?: StackProfileDeps): Promise<StackProfileOutcome<StackProfileValidateReport | {
|
|
45
|
+
valid: false;
|
|
46
|
+
name: string;
|
|
47
|
+
error: string;
|
|
48
|
+
}>>;
|
|
49
|
+
//# sourceMappingURL=stack-profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-profiles.d.ts","sourceRoot":"","sources":["../../src/core/stack-profiles.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAiD,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEjG,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAChC,MAAM,oCAAoC,CAAC;AAE5C,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD;8EAC8E;AAC9E,eAAO,MAAM,eAAe,QAAyB,CAAC;AACtD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEhE;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAC7B;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,MAAM,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;sEACsE;AACtE,wBAAgB,oBAAoB,CAClC,IAAI,GAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAM,GAC3E,MAAM,GAAG,IAAI,CAOf;AAoED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,CAAC,CAkBtD;AAED;qFACqF;AACrF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,0BAA0B,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAwB1G"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* stack-profiles.ts — the READ-ONLY bridge to the monorepo's stack-profile
|
|
3
|
+
* resolver CLI (`shared/scripts/tools/resolve_profile.py list|validate --json`,
|
|
4
|
+
* cross-repo contract_version 1, mirrored in `types/stack-profile-contract.ts`).
|
|
5
|
+
* The WebUI never re-implements the lookup order (project → user → bundled) or
|
|
6
|
+
* the schema — it renders the resolver's verdict, exactly as the campaign DAG
|
|
7
|
+
* renders the scheduler's (`campaign-readiness.ts`, which this mirrors).
|
|
8
|
+
*
|
|
9
|
+
* Spawn discipline: `uv run --no-project --python ">=3.11"`, shell:false,
|
|
10
|
+
* fixed argv, honest engine-unavailable when uv / the script is absent — never
|
|
11
|
+
* a silent fallback to the bundled `server/profiles/` snapshot (that snapshot
|
|
12
|
+
* knows nothing of custom profiles, which is the point of this module).
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync } from "node:fs";
|
|
15
|
+
import os from "node:os";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
import { defaultCliChildSpawn } from "./cli-child-spawn.js";
|
|
18
|
+
import { READINESS_REPAIR_COMMAND, shipwrightCacheRoot } from "./readiness-probe.js";
|
|
19
|
+
import { resolveUv } from "./uv-runner.js";
|
|
20
|
+
import { SUPPORTED_STACK_PROFILE_CONTRACT, } from "../types/stack-profile-contract.js";
|
|
21
|
+
export const STACK_PROFILE_CLI_TIMEOUT_MS = 20_000;
|
|
22
|
+
/** Mirror of the resolver's NAME_RE + a filename-safe length cap. A name that
|
|
23
|
+
* fails this never reaches argv (a leading `-` would parse as an option). */
|
|
24
|
+
export const PROFILE_NAME_RE = /^[a-z0-9][a-z0-9-]*$/;
|
|
25
|
+
export const MAX_PROFILE_NAME_LENGTH = 64;
|
|
26
|
+
export function isProfileNameShape(name) {
|
|
27
|
+
return typeof name === "string" && name.length <= MAX_PROFILE_NAME_LENGTH && PROFILE_NAME_RE.test(name);
|
|
28
|
+
}
|
|
29
|
+
/** The cache-owned resolver CLI (`SHIPWRIGHT_RESOLVE_PROFILE_SCRIPT` overrides
|
|
30
|
+
* the location — isolated E2E stacks run with an ephemeral HOME). */
|
|
31
|
+
export function resolveProfileScript(deps = {}) {
|
|
32
|
+
const exists = deps.existsFn ?? existsSync;
|
|
33
|
+
const candidate = deps.scriptOverride ??
|
|
34
|
+
process.env.SHIPWRIGHT_RESOLVE_PROFILE_SCRIPT ??
|
|
35
|
+
path.join(shipwrightCacheRoot(deps.homeDir ?? os.homedir()), "shared", "scripts", "tools", "resolve_profile.py");
|
|
36
|
+
return exists(candidate) ? candidate : null;
|
|
37
|
+
}
|
|
38
|
+
function lastLine(text) {
|
|
39
|
+
const lines = text.split(/\r?\n/).map((l) => l.trim()).filter(Boolean);
|
|
40
|
+
const err = [...lines].reverse().find((l) => l.startsWith("error:"));
|
|
41
|
+
return (err ?? lines.pop() ?? "").replace(/^error:\s*/, "");
|
|
42
|
+
}
|
|
43
|
+
function isEntryShape(e) {
|
|
44
|
+
return (isObject(e) &&
|
|
45
|
+
typeof e.name === "string" &&
|
|
46
|
+
typeof e.path === "string" &&
|
|
47
|
+
typeof e.valid === "boolean" &&
|
|
48
|
+
(e.source === "project" || e.source === "user" || e.source === "bundled"));
|
|
49
|
+
}
|
|
50
|
+
function isObject(v) {
|
|
51
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
52
|
+
}
|
|
53
|
+
/** Run one resolver subcommand. `cliArgs` positions are fixed; the only caller-supplied
|
|
54
|
+
* values are a shape-checked profile name (`--name=...`) and a registry-sourced path. */
|
|
55
|
+
async function runResolver(cliArgs, deps) {
|
|
56
|
+
const unavailable = (reason) => ({
|
|
57
|
+
status: "engine-unavailable",
|
|
58
|
+
reason,
|
|
59
|
+
repairCommand: READINESS_REPAIR_COMMAND,
|
|
60
|
+
});
|
|
61
|
+
const script = resolveProfileScript(deps);
|
|
62
|
+
if (!script)
|
|
63
|
+
return unavailable("The Shipwright profile resolver isn't installed.");
|
|
64
|
+
const uv = await resolveUv({ run: deps.run, homeDir: deps.homeDir, baseEnv: deps.baseEnv });
|
|
65
|
+
if (!uv)
|
|
66
|
+
return unavailable("uv isn't installed — profiles need it to run in a managed Python 3.11+.");
|
|
67
|
+
const spawn = deps.spawn ?? defaultCliChildSpawn;
|
|
68
|
+
const result = await spawn(uv.bin, ["run", "--no-project", "--python", ">=3.11", script, ...cliArgs], { timeoutMs: deps.timeoutMs ?? STACK_PROFILE_CLI_TIMEOUT_MS, env: uv.env });
|
|
69
|
+
if (result.code === -1)
|
|
70
|
+
return unavailable("uv couldn't start on this machine.");
|
|
71
|
+
if (result.spawnError === "timeout") {
|
|
72
|
+
return { status: "failed", reason: "Reading the profiles took too long and was stopped." };
|
|
73
|
+
}
|
|
74
|
+
return { stdout: result.stdout, code: result.code, stderr: result.stderr };
|
|
75
|
+
}
|
|
76
|
+
function isOutcome(v) {
|
|
77
|
+
return isObject(v) && typeof v.status === "string";
|
|
78
|
+
}
|
|
79
|
+
function parseJson(stdout) {
|
|
80
|
+
// `validate` prints a human line (`profile 'x': source=...`) before the JSON, so
|
|
81
|
+
// parse from the first line that STARTS with a brace - a brace inside that
|
|
82
|
+
// human line (a path, a name) must not be mistaken for the document.
|
|
83
|
+
const m = /^\{/m.exec(stdout);
|
|
84
|
+
if (!m)
|
|
85
|
+
return undefined;
|
|
86
|
+
try {
|
|
87
|
+
return JSON.parse(stdout.slice(m.index));
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export async function listStackProfiles(input, deps = {}) {
|
|
94
|
+
const args = ["list", "--json", ...(input.projectRoot ? ["--project-root", input.projectRoot] : [])];
|
|
95
|
+
const ran = await runResolver(args, deps);
|
|
96
|
+
if (isOutcome(ran))
|
|
97
|
+
return ran;
|
|
98
|
+
if (ran.code !== 0)
|
|
99
|
+
return { status: "failed", reason: lastLine(ran.stderr) || "The profile resolver exited with an error." };
|
|
100
|
+
const parsed = parseJson(ran.stdout);
|
|
101
|
+
if (!isObject(parsed)) {
|
|
102
|
+
return { status: "failed", reason: "The profile resolver returned something unreadable." };
|
|
103
|
+
}
|
|
104
|
+
const version = parsed.contract_version;
|
|
105
|
+
if (version !== SUPPORTED_STACK_PROFILE_CONTRACT) {
|
|
106
|
+
return { status: "unsupported-contract", version: String(version) };
|
|
107
|
+
}
|
|
108
|
+
if (!Array.isArray(parsed.profiles) || !parsed.profiles.every(isEntryShape)) {
|
|
109
|
+
return { status: "failed", reason: "The profile resolver returned something unreadable." };
|
|
110
|
+
}
|
|
111
|
+
return { status: "ok", report: parsed };
|
|
112
|
+
}
|
|
113
|
+
/** Validate one profile by NAME (resolved through the normal lookup order). A
|
|
114
|
+
* profile the resolver rejects is `{valid:false}` data, not a transport failure. */
|
|
115
|
+
export async function validateStackProfile(input, deps = {}) {
|
|
116
|
+
if (!isProfileNameShape(input.name)) {
|
|
117
|
+
return { status: "ok", report: { valid: false, name: input.name, error: "That isn't a valid profile name." } };
|
|
118
|
+
}
|
|
119
|
+
const args = ["validate", "--json", `--name=${input.name}`, ...(input.projectRoot ? ["--project-root", input.projectRoot] : [])];
|
|
120
|
+
const ran = await runResolver(args, deps);
|
|
121
|
+
if (isOutcome(ran))
|
|
122
|
+
return ran;
|
|
123
|
+
if (ran.code !== 0) {
|
|
124
|
+
// 1/2/3 with the resolver's own "error:" line are verdicts (invalid / not found /
|
|
125
|
+
// bad JSON). Anything else (a crash traceback) is an outage, not "your profile is bad".
|
|
126
|
+
const verdict = [1, 2, 3].includes(ran.code) && /^error:/m.test(ran.stderr);
|
|
127
|
+
if (!verdict)
|
|
128
|
+
return { status: "failed", reason: lastLine(ran.stderr) || "The profile resolver crashed." };
|
|
129
|
+
return { status: "ok", report: { valid: false, name: input.name, error: lastLine(ran.stderr) || "The profile is not valid." } };
|
|
130
|
+
}
|
|
131
|
+
const parsed = parseJson(ran.stdout);
|
|
132
|
+
if (!isObject(parsed) || typeof parsed.valid !== "boolean") {
|
|
133
|
+
return { status: "failed", reason: "The profile resolver returned something unreadable." };
|
|
134
|
+
}
|
|
135
|
+
// `validate --json` carries no contract_version today; if upstream ever adds
|
|
136
|
+
// one, a different major must not be rendered as a green "valid".
|
|
137
|
+
if (parsed.contract_version !== undefined && parsed.contract_version !== SUPPORTED_STACK_PROFILE_CONTRACT) {
|
|
138
|
+
return { status: "unsupported-contract", version: String(parsed.contract_version) };
|
|
139
|
+
}
|
|
140
|
+
return { status: "ok", report: parsed };
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=stack-profiles.js.map
|