@svenroth-ai/shipwright 0.24.1-next.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/LICENSE +21 -0
- package/README.md +55 -0
- package/bin/shipwright.mjs +187 -0
- package/client/dist/assets/EmbeddedTerminal-6GBZ9nXN.css +32 -0
- package/client/dist/assets/EmbeddedTerminal-CpeDvtzx.js +123 -0
- package/client/dist/assets/MarkdownEditorModal-Di9HN39z.js +212 -0
- package/client/dist/assets/abnfDiagram-VRR7QNED-BbSdq0X7.js +1 -0
- package/client/dist/assets/arc-BZT7vKjm.js +1 -0
- package/client/dist/assets/architectureDiagram-ZJ3FMSHR-BuRwoNgV.js +36 -0
- package/client/dist/assets/blockDiagram-677ZJIJ3-B2RNYWcr.js +132 -0
- package/client/dist/assets/c4Diagram-LMCZKHZV-fbXlt08K.js +10 -0
- package/client/dist/assets/channel-2-wkFEKK.js +1 -0
- package/client/dist/assets/chunk-2Q5K7J3B-NqMRUe5-.js +1 -0
- package/client/dist/assets/chunk-32BRIVSS-CIr9bFCd.js +1 -0
- package/client/dist/assets/chunk-5VM5RSS4-l0I6rbZN.js +15 -0
- package/client/dist/assets/chunk-EX3LRPZG-DXinoCxp.js +231 -0
- package/client/dist/assets/chunk-JWPE2WC7-BAcCano9.js +1 -0
- package/client/dist/assets/chunk-MOJQB5TN-DMVOqL7C.js +88 -0
- package/client/dist/assets/chunk-RYQCIY6F-CtNSAItH.js +1 -0
- package/client/dist/assets/chunk-V7JOEXUC-CufSmC93.js +206 -0
- package/client/dist/assets/chunk-VR4S4FIN-_BbUF9fa.js +1 -0
- package/client/dist/assets/chunk-XXDRQBXY-uQ35hUPB.js +1 -0
- package/client/dist/assets/classDiagram-OUVF2IWQ-A9SpDakb.js +1 -0
- package/client/dist/assets/classDiagram-v2-EOCWNBFH-A9SpDakb.js +1 -0
- package/client/dist/assets/cose-bilkent-JH36ORCC-B9q9uYCX.js +1 -0
- package/client/dist/assets/cynefin-VYW2F7L2-C2_bJyZA.js +178 -0
- package/client/dist/assets/cynefinDiagram-TSTJHNR4-0mzVmPv4.js +62 -0
- package/client/dist/assets/cytoscape.esm-DTSO7Bv0.js +331 -0
- package/client/dist/assets/dagre-VKFMJZFB-CIE9HMtr.js +4 -0
- package/client/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/client/dist/assets/diagram-FQU43EPY-DdkBaZrX.js +3 -0
- package/client/dist/assets/diagram-G47NLZAW-Cql4k2sg.js +24 -0
- package/client/dist/assets/diagram-NH7WQ7WH-FRAUyqEu.js +24 -0
- package/client/dist/assets/diagram-OA4YK3LP-DXo8GTB8.js +30 -0
- package/client/dist/assets/diagram-WEI45ONY-DqVtWGdt.js +41 -0
- package/client/dist/assets/ebnfDiagram-CCIWWBDH-B0La0RsO.js +1 -0
- package/client/dist/assets/erDiagram-Q63AITRT-DHbbqiY9.js +85 -0
- package/client/dist/assets/flowDiagram-23GEKE2U-I6vhJlCk.js +156 -0
- package/client/dist/assets/ganttDiagram-NO4QXBWP-CDYZHcsU.js +292 -0
- package/client/dist/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
- package/client/dist/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
- package/client/dist/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
- package/client/dist/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
- package/client/dist/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
- package/client/dist/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
- package/client/dist/assets/gitGraphDiagram-IHSO6WYX-dyf7caP8.js +106 -0
- package/client/dist/assets/graph-C9eacEi8.js +1 -0
- package/client/dist/assets/index-BYrVLOXw.js +609 -0
- package/client/dist/assets/index-BZvZ9izZ.css +1 -0
- package/client/dist/assets/infoDiagram-FWYZ7A6U-BlWH6vM3.js +2 -0
- package/client/dist/assets/init-Gi6I4Gst.js +1 -0
- package/client/dist/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/client/dist/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/client/dist/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/client/dist/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/client/dist/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/client/dist/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/client/dist/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/client/dist/assets/ishikawaDiagram-FXEZZL3T-BEKH-_6E.js +70 -0
- package/client/dist/assets/journeyDiagram-5HDEW3XC-cn_mQ2U9.js +139 -0
- package/client/dist/assets/kanban-definition-HUTT4EX6-DGZiYhYV.js +89 -0
- package/client/dist/assets/katex-DkKDou_j.js +257 -0
- package/client/dist/assets/layout-DEXfKzaS.js +1 -0
- package/client/dist/assets/linear-CdtYl6qR.js +1 -0
- package/client/dist/assets/map-Czzmt4hB.js +1 -0
- package/client/dist/assets/mermaid.core-CrKi1642.js +314 -0
- package/client/dist/assets/mindmap-definition-LN4V7U3C-G_CA7V9L.js +96 -0
- package/client/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/client/dist/assets/pegDiagram-2B236MQR-6ZeO9kDM.js +1 -0
- package/client/dist/assets/pieDiagram-ENE6RG2P-Bd0InZSQ.js +39 -0
- package/client/dist/assets/quadrantDiagram-ABIIQ3AL-Bg1m9Csn.js +7 -0
- package/client/dist/assets/railroadDiagram-RFXS5EU6-CCzPP1JU.js +1 -0
- package/client/dist/assets/requirementDiagram-TGXJPOKE-iN7kyPgM.js +84 -0
- package/client/dist/assets/sankeyDiagram-HTMAVEWB-DN1v_DUJ.js +40 -0
- package/client/dist/assets/sequenceDiagram-DBY2YBRQ-C5LMp5Sa.js +162 -0
- package/client/dist/assets/sizeCapture-X5ZJPWSS-Bp9jVLhL.js +1 -0
- package/client/dist/assets/stateDiagram-2N3HPSRC-VbWBetTf.js +1 -0
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-BuaUtNAG.js +1 -0
- package/client/dist/assets/swimlanes-5IMT3BWC-CrXokvQ-.js +2 -0
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-C6hwc993.js +8 -0
- package/client/dist/assets/timeline-definition-FHXFAJF6-Cxx1NT9A.js +120 -0
- package/client/dist/assets/vennDiagram-L72KCM5P-C6DBgaEy.js +34 -0
- package/client/dist/assets/wardleyDiagram-EHGQE667-RV7xMg8g.js +78 -0
- package/client/dist/assets/xychartDiagram-FW5EYKEG-Llhe9pB1.js +7 -0
- package/client/dist/backdrops/deck-golden.jpg +0 -0
- package/client/dist/backdrops/lighthouse.jpg +0 -0
- package/client/dist/index.html +27 -0
- package/client/dist/shipwright-logo-white.png +0 -0
- package/lib/cache-runtime.mjs +72 -0
- package/lib/cache-sync.mjs +243 -0
- package/lib/claude-cli.mjs +173 -0
- package/lib/plugins.mjs +181 -0
- package/lib/preflight.mjs +208 -0
- package/lib/probes.mjs +53 -0
- package/lib/server.mjs +315 -0
- package/lib/util.mjs +83 -0
- package/lib/version-check.mjs +76 -0
- package/lib/win32-spawn.mjs +253 -0
- package/package.json +67 -0
- package/scripts/deploy-procs.mjs +208 -0
- package/scripts/deploy-swap.mjs +276 -0
- package/scripts/kill-targets.js +140 -0
- package/scripts/repair-claude-json.mjs +295 -0
- package/server/dist/config/default-actions.json +90 -0
- package/server/dist/config.d.ts +96 -0
- package/server/dist/config.d.ts.map +1 -0
- package/server/dist/config.js +68 -0
- package/server/dist/config.js.map +1 -0
- package/server/dist/core/actions-schema-validator.d.ts +8 -0
- package/server/dist/core/actions-schema-validator.d.ts.map +1 -0
- package/server/dist/core/actions-schema-validator.js +394 -0
- package/server/dist/core/actions-schema-validator.js.map +1 -0
- package/server/dist/core/actions-substitute.d.ts +115 -0
- package/server/dist/core/actions-substitute.d.ts.map +1 -0
- package/server/dist/core/actions-substitute.js +549 -0
- package/server/dist/core/actions-substitute.js.map +1 -0
- package/server/dist/core/board-column.d.ts +3 -0
- package/server/dist/core/board-column.d.ts.map +1 -0
- package/server/dist/core/board-column.js +4 -0
- package/server/dist/core/board-column.js.map +1 -0
- package/server/dist/core/campaign-events.d.ts +39 -0
- package/server/dist/core/campaign-events.d.ts.map +1 -0
- package/server/dist/core/campaign-events.js +192 -0
- package/server/dist/core/campaign-events.js.map +1 -0
- package/server/dist/core/campaign-loop-state.d.ts +31 -0
- package/server/dist/core/campaign-loop-state.d.ts.map +1 -0
- package/server/dist/core/campaign-loop-state.js +124 -0
- package/server/dist/core/campaign-loop-state.js.map +1 -0
- package/server/dist/core/campaign-parse.d.ts +28 -0
- package/server/dist/core/campaign-parse.d.ts.map +1 -0
- package/server/dist/core/campaign-parse.js +174 -0
- package/server/dist/core/campaign-parse.js.map +1 -0
- package/server/dist/core/campaign-paths.d.ts +24 -0
- package/server/dist/core/campaign-paths.d.ts.map +1 -0
- package/server/dist/core/campaign-paths.js +111 -0
- package/server/dist/core/campaign-paths.js.map +1 -0
- package/server/dist/core/campaign-route-helpers.d.ts +19 -0
- package/server/dist/core/campaign-route-helpers.d.ts.map +1 -0
- package/server/dist/core/campaign-route-helpers.js +51 -0
- package/server/dist/core/campaign-route-helpers.js.map +1 -0
- package/server/dist/core/campaign-status-json.d.ts +55 -0
- package/server/dist/core/campaign-status-json.d.ts.map +1 -0
- package/server/dist/core/campaign-status-json.js +57 -0
- package/server/dist/core/campaign-status-json.js.map +1 -0
- package/server/dist/core/campaign-store.d.ts +10 -0
- package/server/dist/core/campaign-store.d.ts.map +1 -0
- package/server/dist/core/campaign-store.js +245 -0
- package/server/dist/core/campaign-store.js.map +1 -0
- package/server/dist/core/campaign-types.d.ts +101 -0
- package/server/dist/core/campaign-types.d.ts.map +1 -0
- package/server/dist/core/campaign-types.js +10 -0
- package/server/dist/core/campaign-types.js.map +1 -0
- package/server/dist/core/campaign-write.d.ts +13 -0
- package/server/dist/core/campaign-write.d.ts.map +1 -0
- package/server/dist/core/campaign-write.js +128 -0
- package/server/dist/core/campaign-write.js.map +1 -0
- package/server/dist/core/cascade-delete-project-tasks.d.ts +14 -0
- package/server/dist/core/cascade-delete-project-tasks.d.ts.map +1 -0
- package/server/dist/core/cascade-delete-project-tasks.js +68 -0
- package/server/dist/core/cascade-delete-project-tasks.js.map +1 -0
- package/server/dist/core/claude-bin-resolver.d.ts +62 -0
- package/server/dist/core/claude-bin-resolver.d.ts.map +1 -0
- package/server/dist/core/claude-bin-resolver.js +208 -0
- package/server/dist/core/claude-bin-resolver.js.map +1 -0
- package/server/dist/core/claude-theme-reader.d.ts +15 -0
- package/server/dist/core/claude-theme-reader.d.ts.map +1 -0
- package/server/dist/core/claude-theme-reader.js +52 -0
- package/server/dist/core/claude-theme-reader.js.map +1 -0
- package/server/dist/core/cli-compat.d.ts +43 -0
- package/server/dist/core/cli-compat.d.ts.map +1 -0
- package/server/dist/core/cli-compat.js +88 -0
- package/server/dist/core/cli-compat.js.map +1 -0
- package/server/dist/core/compliance-dimensions.d.ts +20 -0
- package/server/dist/core/compliance-dimensions.d.ts.map +1 -0
- package/server/dist/core/compliance-dimensions.js +114 -0
- package/server/dist/core/compliance-dimensions.js.map +1 -0
- package/server/dist/core/compliance-reader.d.ts +49 -0
- package/server/dist/core/compliance-reader.d.ts.map +1 -0
- package/server/dist/core/compliance-reader.js +147 -0
- package/server/dist/core/compliance-reader.js.map +1 -0
- package/server/dist/core/contract-version.d.ts +72 -0
- package/server/dist/core/contract-version.d.ts.map +1 -0
- package/server/dist/core/contract-version.js +114 -0
- package/server/dist/core/contract-version.js.map +1 -0
- package/server/dist/core/design-feedback.d.ts +29 -0
- package/server/dist/core/design-feedback.d.ts.map +1 -0
- package/server/dist/core/design-feedback.js +80 -0
- package/server/dist/core/design-feedback.js.map +1 -0
- package/server/dist/core/dismissed-campaigns-store.d.ts +45 -0
- package/server/dist/core/dismissed-campaigns-store.d.ts.map +1 -0
- package/server/dist/core/dismissed-campaigns-store.js +147 -0
- package/server/dist/core/dismissed-campaigns-store.js.map +1 -0
- package/server/dist/core/event-log-reader.d.ts +19 -0
- package/server/dist/core/event-log-reader.d.ts.map +1 -0
- package/server/dist/core/event-log-reader.js +209 -0
- package/server/dist/core/event-log-reader.js.map +1 -0
- package/server/dist/core/event-log-types.d.ts +99 -0
- package/server/dist/core/event-log-types.d.ts.map +1 -0
- package/server/dist/core/event-log-types.js +14 -0
- package/server/dist/core/event-log-types.js.map +1 -0
- package/server/dist/core/gitignore-cache.d.ts +16 -0
- package/server/dist/core/gitignore-cache.d.ts.map +1 -0
- package/server/dist/core/gitignore-cache.js +103 -0
- package/server/dist/core/gitignore-cache.js.map +1 -0
- package/server/dist/core/grade-runner.d.ts +63 -0
- package/server/dist/core/grade-runner.d.ts.map +1 -0
- package/server/dist/core/grade-runner.js +176 -0
- package/server/dist/core/grade-runner.js.map +1 -0
- package/server/dist/core/grade-target.d.ts +43 -0
- package/server/dist/core/grade-target.d.ts.map +1 -0
- package/server/dist/core/grade-target.js +162 -0
- package/server/dist/core/grade-target.js.map +1 -0
- package/server/dist/core/inbox-derive.d.ts +56 -0
- package/server/dist/core/inbox-derive.d.ts.map +1 -0
- package/server/dist/core/inbox-derive.js +211 -0
- package/server/dist/core/inbox-derive.js.map +1 -0
- package/server/dist/core/jsonl-decode.d.ts +28 -0
- package/server/dist/core/jsonl-decode.d.ts.map +1 -0
- package/server/dist/core/jsonl-decode.js +96 -0
- package/server/dist/core/jsonl-decode.js.map +1 -0
- package/server/dist/core/jsonl-records.d.ts +104 -0
- package/server/dist/core/jsonl-records.d.ts.map +1 -0
- package/server/dist/core/jsonl-records.js +222 -0
- package/server/dist/core/jsonl-records.js.map +1 -0
- package/server/dist/core/launcher.d.ts +74 -0
- package/server/dist/core/launcher.d.ts.map +1 -0
- package/server/dist/core/launcher.js +192 -0
- package/server/dist/core/launcher.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-commit.d.ts +28 -0
- package/server/dist/core/mission-context/artifacts-commit.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts-commit.js +98 -0
- package/server/dist/core/mission-context/artifacts-commit.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-decisions.d.ts +5 -0
- package/server/dist/core/mission-context/artifacts-decisions.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts-decisions.js +114 -0
- package/server/dist/core/mission-context/artifacts-decisions.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-slice2.d.ts +12 -0
- package/server/dist/core/mission-context/artifacts-slice2.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts-slice2.js +125 -0
- package/server/dist/core/mission-context/artifacts-slice2.js.map +1 -0
- package/server/dist/core/mission-context/artifacts-tests.d.ts +34 -0
- package/server/dist/core/mission-context/artifacts-tests.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts-tests.js +236 -0
- package/server/dist/core/mission-context/artifacts-tests.js.map +1 -0
- package/server/dist/core/mission-context/artifacts.d.ts +33 -0
- package/server/dist/core/mission-context/artifacts.d.ts.map +1 -0
- package/server/dist/core/mission-context/artifacts.js +186 -0
- package/server/dist/core/mission-context/artifacts.js.map +1 -0
- package/server/dist/core/mission-context/association.d.ts +27 -0
- package/server/dist/core/mission-context/association.d.ts.map +1 -0
- package/server/dist/core/mission-context/association.js +69 -0
- package/server/dist/core/mission-context/association.js.map +1 -0
- package/server/dist/core/mission-context/campaign-artifacts.d.ts +9 -0
- package/server/dist/core/mission-context/campaign-artifacts.d.ts.map +1 -0
- package/server/dist/core/mission-context/campaign-artifacts.js +195 -0
- package/server/dist/core/mission-context/campaign-artifacts.js.map +1 -0
- package/server/dist/core/mission-context/campaign-facts.d.ts +99 -0
- package/server/dist/core/mission-context/campaign-facts.d.ts.map +1 -0
- package/server/dist/core/mission-context/campaign-facts.js +111 -0
- package/server/dist/core/mission-context/campaign-facts.js.map +1 -0
- package/server/dist/core/mission-context/decision-drops.d.ts +46 -0
- package/server/dist/core/mission-context/decision-drops.d.ts.map +1 -0
- package/server/dist/core/mission-context/decision-drops.js +269 -0
- package/server/dist/core/mission-context/decision-drops.js.map +1 -0
- package/server/dist/core/mission-context/decisions.d.ts +91 -0
- package/server/dist/core/mission-context/decisions.d.ts.map +1 -0
- package/server/dist/core/mission-context/decisions.js +222 -0
- package/server/dist/core/mission-context/decisions.js.map +1 -0
- package/server/dist/core/mission-context/doc-ids.d.ts +35 -0
- package/server/dist/core/mission-context/doc-ids.d.ts.map +1 -0
- package/server/dist/core/mission-context/doc-ids.js +78 -0
- package/server/dist/core/mission-context/doc-ids.js.map +1 -0
- package/server/dist/core/mission-context/document-read.d.ts +14 -0
- package/server/dist/core/mission-context/document-read.d.ts.map +1 -0
- package/server/dist/core/mission-context/document-read.js +36 -0
- package/server/dist/core/mission-context/document-read.js.map +1 -0
- package/server/dist/core/mission-context/fold-map.d.ts +45 -0
- package/server/dist/core/mission-context/fold-map.d.ts.map +1 -0
- package/server/dist/core/mission-context/fold-map.js +168 -0
- package/server/dist/core/mission-context/fold-map.js.map +1 -0
- package/server/dist/core/mission-context/fs-read.d.ts +47 -0
- package/server/dist/core/mission-context/fs-read.d.ts.map +1 -0
- package/server/dist/core/mission-context/fs-read.js +104 -0
- package/server/dist/core/mission-context/fs-read.js.map +1 -0
- package/server/dist/core/mission-context/iterate-record.d.ts +52 -0
- package/server/dist/core/mission-context/iterate-record.d.ts.map +1 -0
- package/server/dist/core/mission-context/iterate-record.js +156 -0
- package/server/dist/core/mission-context/iterate-record.js.map +1 -0
- package/server/dist/core/mission-context/merge-check.d.ts +60 -0
- package/server/dist/core/mission-context/merge-check.d.ts.map +1 -0
- package/server/dist/core/mission-context/merge-check.js +217 -0
- package/server/dist/core/mission-context/merge-check.js.map +1 -0
- package/server/dist/core/mission-context/merge-refresh.d.ts +14 -0
- package/server/dist/core/mission-context/merge-refresh.d.ts.map +1 -0
- package/server/dist/core/mission-context/merge-refresh.js +53 -0
- package/server/dist/core/mission-context/merge-refresh.js.map +1 -0
- package/server/dist/core/mission-context/merged-events.d.ts +34 -0
- package/server/dist/core/mission-context/merged-events.d.ts.map +1 -0
- package/server/dist/core/mission-context/merged-events.js +120 -0
- package/server/dist/core/mission-context/merged-events.js.map +1 -0
- package/server/dist/core/mission-context/pipeline-artifacts.d.ts +53 -0
- package/server/dist/core/mission-context/pipeline-artifacts.d.ts.map +1 -0
- package/server/dist/core/mission-context/pipeline-artifacts.js +161 -0
- package/server/dist/core/mission-context/pipeline-artifacts.js.map +1 -0
- package/server/dist/core/mission-context/planned-impact.d.ts +28 -0
- package/server/dist/core/mission-context/planned-impact.d.ts.map +1 -0
- package/server/dist/core/mission-context/planned-impact.js +129 -0
- package/server/dist/core/mission-context/planned-impact.js.map +1 -0
- package/server/dist/core/mission-context/pointer.d.ts +44 -0
- package/server/dist/core/mission-context/pointer.d.ts.map +1 -0
- package/server/dist/core/mission-context/pointer.js +165 -0
- package/server/dist/core/mission-context/pointer.js.map +1 -0
- package/server/dist/core/mission-context/resolver-io.d.ts +47 -0
- package/server/dist/core/mission-context/resolver-io.d.ts.map +1 -0
- package/server/dist/core/mission-context/resolver-io.js +11 -0
- package/server/dist/core/mission-context/resolver-io.js.map +1 -0
- package/server/dist/core/mission-context/resolver-parts.d.ts +57 -0
- package/server/dist/core/mission-context/resolver-parts.d.ts.map +1 -0
- package/server/dist/core/mission-context/resolver-parts.js +136 -0
- package/server/dist/core/mission-context/resolver-parts.js.map +1 -0
- package/server/dist/core/mission-context/resolver.d.ts +11 -0
- package/server/dist/core/mission-context/resolver.d.ts.map +1 -0
- package/server/dist/core/mission-context/resolver.js +261 -0
- package/server/dist/core/mission-context/resolver.js.map +1 -0
- package/server/dist/core/mission-context/review-record-entry.d.ts +45 -0
- package/server/dist/core/mission-context/review-record-entry.d.ts.map +1 -0
- package/server/dist/core/mission-context/review-record-entry.js +214 -0
- package/server/dist/core/mission-context/review-record-entry.js.map +1 -0
- package/server/dist/core/mission-context/review-record.d.ts +35 -0
- package/server/dist/core/mission-context/review-record.d.ts.map +1 -0
- package/server/dist/core/mission-context/review-record.js +259 -0
- package/server/dist/core/mission-context/review-record.js.map +1 -0
- package/server/dist/core/mission-context/review-state.d.ts +33 -0
- package/server/dist/core/mission-context/review-state.d.ts.map +1 -0
- package/server/dist/core/mission-context/review-state.js +249 -0
- package/server/dist/core/mission-context/review-state.js.map +1 -0
- package/server/dist/core/mission-context/run-id-recovery.d.ts +44 -0
- package/server/dist/core/mission-context/run-id-recovery.d.ts.map +1 -0
- package/server/dist/core/mission-context/run-id-recovery.js +175 -0
- package/server/dist/core/mission-context/run-id-recovery.js.map +1 -0
- package/server/dist/core/mission-context/scenario.d.ts +121 -0
- package/server/dist/core/mission-context/scenario.d.ts.map +1 -0
- package/server/dist/core/mission-context/scenario.js +151 -0
- package/server/dist/core/mission-context/scenario.js.map +1 -0
- package/server/dist/core/mission-context/slice2-sources.d.ts +40 -0
- package/server/dist/core/mission-context/slice2-sources.d.ts.map +1 -0
- package/server/dist/core/mission-context/slice2-sources.js +80 -0
- package/server/dist/core/mission-context/slice2-sources.js.map +1 -0
- package/server/dist/core/mission-context/slice2-test-fixtures.d.ts +17 -0
- package/server/dist/core/mission-context/slice2-test-fixtures.d.ts.map +1 -0
- package/server/dist/core/mission-context/slice2-test-fixtures.js +61 -0
- package/server/dist/core/mission-context/slice2-test-fixtures.js.map +1 -0
- package/server/dist/core/mission-context/slice3-sources.d.ts +43 -0
- package/server/dist/core/mission-context/slice3-sources.d.ts.map +1 -0
- package/server/dist/core/mission-context/slice3-sources.js +192 -0
- package/server/dist/core/mission-context/slice3-sources.js.map +1 -0
- package/server/dist/core/mission-context/spec-candidates.d.ts +66 -0
- package/server/dist/core/mission-context/spec-candidates.d.ts.map +1 -0
- package/server/dist/core/mission-context/spec-candidates.js +164 -0
- package/server/dist/core/mission-context/spec-candidates.js.map +1 -0
- package/server/dist/core/mission-context/test-evidence.d.ts +14 -0
- package/server/dist/core/mission-context/test-evidence.d.ts.map +1 -0
- package/server/dist/core/mission-context/test-evidence.js +53 -0
- package/server/dist/core/mission-context/test-evidence.js.map +1 -0
- package/server/dist/core/mission-context/tests-diff.d.ts +68 -0
- package/server/dist/core/mission-context/tests-diff.d.ts.map +1 -0
- package/server/dist/core/mission-context/tests-diff.js +151 -0
- package/server/dist/core/mission-context/tests-diff.js.map +1 -0
- package/server/dist/core/mission-context/traceability.d.ts +58 -0
- package/server/dist/core/mission-context/traceability.d.ts.map +1 -0
- package/server/dist/core/mission-context/traceability.js +168 -0
- package/server/dist/core/mission-context/traceability.js.map +1 -0
- package/server/dist/core/mission-context/types-slice2.d.ts +192 -0
- package/server/dist/core/mission-context/types-slice2.d.ts.map +1 -0
- package/server/dist/core/mission-context/types-slice2.js +15 -0
- package/server/dist/core/mission-context/types-slice2.js.map +1 -0
- package/server/dist/core/mission-context/types-slice3.d.ts +84 -0
- package/server/dist/core/mission-context/types-slice3.d.ts.map +1 -0
- package/server/dist/core/mission-context/types-slice3.js +24 -0
- package/server/dist/core/mission-context/types-slice3.js.map +1 -0
- package/server/dist/core/mission-context/types.d.ts +198 -0
- package/server/dist/core/mission-context/types.d.ts.map +1 -0
- package/server/dist/core/mission-context/types.js +44 -0
- package/server/dist/core/mission-context/types.js.map +1 -0
- package/server/dist/core/mission-context/worktree-roots.d.ts +103 -0
- package/server/dist/core/mission-context/worktree-roots.d.ts.map +1 -0
- package/server/dist/core/mission-context/worktree-roots.js +201 -0
- package/server/dist/core/mission-context/worktree-roots.js.map +1 -0
- package/server/dist/core/model-tier-config-reader.d.ts +16 -0
- package/server/dist/core/model-tier-config-reader.d.ts.map +1 -0
- package/server/dist/core/model-tier-config-reader.js +87 -0
- package/server/dist/core/model-tier-config-reader.js.map +1 -0
- package/server/dist/core/normalize-fs-path.d.ts +2 -0
- package/server/dist/core/normalize-fs-path.d.ts.map +1 -0
- package/server/dist/core/normalize-fs-path.js +31 -0
- package/server/dist/core/normalize-fs-path.js.map +1 -0
- package/server/dist/core/parameter-resolver.d.ts +32 -0
- package/server/dist/core/parameter-resolver.d.ts.map +1 -0
- package/server/dist/core/parameter-resolver.js +300 -0
- package/server/dist/core/parameter-resolver.js.map +1 -0
- package/server/dist/core/path-guard.d.ts +40 -0
- package/server/dist/core/path-guard.d.ts.map +1 -0
- package/server/dist/core/path-guard.js +147 -0
- package/server/dist/core/path-guard.js.map +1 -0
- package/server/dist/core/pr-status.d.ts +47 -0
- package/server/dist/core/pr-status.d.ts.map +1 -0
- package/server/dist/core/pr-status.js +157 -0
- package/server/dist/core/pr-status.js.map +1 -0
- package/server/dist/core/preview-child-lifecycle.d.ts +77 -0
- package/server/dist/core/preview-child-lifecycle.d.ts.map +1 -0
- package/server/dist/core/preview-child-lifecycle.js +223 -0
- package/server/dist/core/preview-child-lifecycle.js.map +1 -0
- package/server/dist/core/preview-coherence.d.ts +59 -0
- package/server/dist/core/preview-coherence.d.ts.map +1 -0
- package/server/dist/core/preview-coherence.js +66 -0
- package/server/dist/core/preview-coherence.js.map +1 -0
- package/server/dist/core/preview-session-manager.d.ts +86 -0
- package/server/dist/core/preview-session-manager.d.ts.map +1 -0
- package/server/dist/core/preview-session-manager.js +303 -0
- package/server/dist/core/preview-session-manager.js.map +1 -0
- package/server/dist/core/preview-win32-spawn.d.ts +11 -0
- package/server/dist/core/preview-win32-spawn.d.ts.map +1 -0
- package/server/dist/core/preview-win32-spawn.js +45 -0
- package/server/dist/core/preview-win32-spawn.js.map +1 -0
- package/server/dist/core/profile-loader.d.ts +65 -0
- package/server/dist/core/profile-loader.d.ts.map +1 -0
- package/server/dist/core/profile-loader.js +125 -0
- package/server/dist/core/profile-loader.js.map +1 -0
- package/server/dist/core/project-actions-loader.d.ts +103 -0
- package/server/dist/core/project-actions-loader.d.ts.map +1 -0
- package/server/dist/core/project-actions-loader.js +161 -0
- package/server/dist/core/project-actions-loader.js.map +1 -0
- package/server/dist/core/project-manager.d.ts +110 -0
- package/server/dist/core/project-manager.d.ts.map +1 -0
- package/server/dist/core/project-manager.js +339 -0
- package/server/dist/core/project-manager.js.map +1 -0
- package/server/dist/core/project-registry-io.d.ts +64 -0
- package/server/dist/core/project-registry-io.d.ts.map +1 -0
- package/server/dist/core/project-registry-io.js +194 -0
- package/server/dist/core/project-registry-io.js.map +1 -0
- package/server/dist/core/readiness-probe.d.ts +89 -0
- package/server/dist/core/readiness-probe.d.ts.map +1 -0
- package/server/dist/core/readiness-probe.js +216 -0
- package/server/dist/core/readiness-probe.js.map +1 -0
- package/server/dist/core/run-config-reader.d.ts +35 -0
- package/server/dist/core/run-config-reader.d.ts.map +1 -0
- package/server/dist/core/run-config-reader.js +362 -0
- package/server/dist/core/run-config-reader.js.map +1 -0
- package/server/dist/core/run-data-join.d.ts +60 -0
- package/server/dist/core/run-data-join.d.ts.map +1 -0
- package/server/dist/core/run-data-join.js +264 -0
- package/server/dist/core/run-data-join.js.map +1 -0
- package/server/dist/core/run-data-types.d.ts +126 -0
- package/server/dist/core/run-data-types.d.ts.map +1 -0
- package/server/dist/core/run-data-types.js +25 -0
- package/server/dist/core/run-data-types.js.map +1 -0
- package/server/dist/core/run-loop-state-reader.d.ts +27 -0
- package/server/dist/core/run-loop-state-reader.d.ts.map +1 -0
- package/server/dist/core/run-loop-state-reader.js +79 -0
- package/server/dist/core/run-loop-state-reader.js.map +1 -0
- package/server/dist/core/sdk-sessions-merge.d.ts +60 -0
- package/server/dist/core/sdk-sessions-merge.d.ts.map +1 -0
- package/server/dist/core/sdk-sessions-merge.js +220 -0
- package/server/dist/core/sdk-sessions-merge.js.map +1 -0
- package/server/dist/core/sdk-sessions-store.d.ts +261 -0
- package/server/dist/core/sdk-sessions-store.d.ts.map +1 -0
- package/server/dist/core/sdk-sessions-store.js +315 -0
- package/server/dist/core/sdk-sessions-store.js.map +1 -0
- package/server/dist/core/sdk-sessions-validate.d.ts +9 -0
- package/server/dist/core/sdk-sessions-validate.d.ts.map +1 -0
- package/server/dist/core/sdk-sessions-validate.js +237 -0
- package/server/dist/core/sdk-sessions-validate.js.map +1 -0
- package/server/dist/core/session-jsonl-io.d.ts +35 -0
- package/server/dist/core/session-jsonl-io.d.ts.map +1 -0
- package/server/dist/core/session-jsonl-io.js +128 -0
- package/server/dist/core/session-jsonl-io.js.map +1 -0
- package/server/dist/core/session-parser.d.ts +81 -0
- package/server/dist/core/session-parser.d.ts.map +1 -0
- package/server/dist/core/session-parser.js +168 -0
- package/server/dist/core/session-parser.js.map +1 -0
- package/server/dist/core/session-watcher-debug.d.ts +7 -0
- package/server/dist/core/session-watcher-debug.d.ts.map +1 -0
- package/server/dist/core/session-watcher-debug.js +31 -0
- package/server/dist/core/session-watcher-debug.js.map +1 -0
- package/server/dist/core/session-watcher.d.ts +101 -0
- package/server/dist/core/session-watcher.d.ts.map +1 -0
- package/server/dist/core/session-watcher.js +226 -0
- package/server/dist/core/session-watcher.js.map +1 -0
- package/server/dist/core/shell-quote.d.ts +5 -0
- package/server/dist/core/shell-quote.d.ts.map +1 -0
- package/server/dist/core/shell-quote.js +49 -0
- package/server/dist/core/shell-quote.js.map +1 -0
- package/server/dist/core/task-editability.d.ts +22 -0
- package/server/dist/core/task-editability.d.ts.map +1 -0
- package/server/dist/core/task-editability.js +34 -0
- package/server/dist/core/task-editability.js.map +1 -0
- package/server/dist/core/terminal-prompt-detect.d.ts +7 -0
- package/server/dist/core/terminal-prompt-detect.d.ts.map +1 -0
- package/server/dist/core/terminal-prompt-detect.js +128 -0
- package/server/dist/core/terminal-prompt-detect.js.map +1 -0
- package/server/dist/core/tests-gate.d.ts +23 -0
- package/server/dist/core/tests-gate.d.ts.map +1 -0
- package/server/dist/core/tests-gate.js +92 -0
- package/server/dist/core/tests-gate.js.map +1 -0
- package/server/dist/core/triage-amend.d.ts +33 -0
- package/server/dist/core/triage-amend.d.ts.map +1 -0
- package/server/dist/core/triage-amend.js +109 -0
- package/server/dist/core/triage-amend.js.map +1 -0
- package/server/dist/core/triage-board-read.d.ts +37 -0
- package/server/dist/core/triage-board-read.d.ts.map +1 -0
- package/server/dist/core/triage-board-read.js +148 -0
- package/server/dist/core/triage-board-read.js.map +1 -0
- package/server/dist/core/triage-cli-runner.d.ts +61 -0
- package/server/dist/core/triage-cli-runner.d.ts.map +1 -0
- package/server/dist/core/triage-cli-runner.js +92 -0
- package/server/dist/core/triage-cli-runner.js.map +1 -0
- package/server/dist/core/triage-compose.d.ts +33 -0
- package/server/dist/core/triage-compose.d.ts.map +1 -0
- package/server/dist/core/triage-compose.js +51 -0
- package/server/dist/core/triage-compose.js.map +1 -0
- package/server/dist/core/triage-contract.d.ts +18 -0
- package/server/dist/core/triage-contract.d.ts.map +1 -0
- package/server/dist/core/triage-contract.js +45 -0
- package/server/dist/core/triage-contract.js.map +1 -0
- package/server/dist/core/triage-defer.d.ts +36 -0
- package/server/dist/core/triage-defer.d.ts.map +1 -0
- package/server/dist/core/triage-defer.js +117 -0
- package/server/dist/core/triage-defer.js.map +1 -0
- package/server/dist/core/triage-enrich.d.ts +31 -0
- package/server/dist/core/triage-enrich.d.ts.map +1 -0
- package/server/dist/core/triage-enrich.js +127 -0
- package/server/dist/core/triage-enrich.js.map +1 -0
- package/server/dist/core/triage-lock.d.ts +12 -0
- package/server/dist/core/triage-lock.d.ts.map +1 -0
- package/server/dist/core/triage-lock.js +41 -0
- package/server/dist/core/triage-lock.js.map +1 -0
- package/server/dist/core/triage-origin.d.ts +52 -0
- package/server/dist/core/triage-origin.d.ts.map +1 -0
- package/server/dist/core/triage-origin.js +0 -0
- package/server/dist/core/triage-origin.js.map +1 -0
- package/server/dist/core/triage-paths.d.ts +25 -0
- package/server/dist/core/triage-paths.d.ts.map +1 -0
- package/server/dist/core/triage-paths.js +125 -0
- package/server/dist/core/triage-paths.js.map +1 -0
- package/server/dist/core/triage-raw.d.ts +33 -0
- package/server/dist/core/triage-raw.d.ts.map +1 -0
- package/server/dist/core/triage-raw.js +66 -0
- package/server/dist/core/triage-raw.js.map +1 -0
- package/server/dist/core/triage-store.d.ts +42 -0
- package/server/dist/core/triage-store.d.ts.map +1 -0
- package/server/dist/core/triage-store.js +268 -0
- package/server/dist/core/triage-store.js.map +1 -0
- package/server/dist/core/triage-validation.d.ts +58 -0
- package/server/dist/core/triage-validation.d.ts.map +1 -0
- package/server/dist/core/triage-validation.js +198 -0
- package/server/dist/core/triage-validation.js.map +1 -0
- package/server/dist/core/win32-spawn.d.ts +29 -0
- package/server/dist/core/win32-spawn.d.ts.map +1 -0
- package/server/dist/core/win32-spawn.js +271 -0
- package/server/dist/core/win32-spawn.js.map +1 -0
- package/server/dist/external/__tests__/api-contract-probes.d.ts +49 -0
- package/server/dist/external/__tests__/api-contract-probes.d.ts.map +1 -0
- package/server/dist/external/__tests__/api-contract-probes.js +295 -0
- package/server/dist/external/__tests__/api-contract-probes.js.map +1 -0
- package/server/dist/external/_lead-fields-tag-filter-harness.d.ts +7 -0
- package/server/dist/external/_lead-fields-tag-filter-harness.d.ts.map +1 -0
- package/server/dist/external/_lead-fields-tag-filter-harness.js +41 -0
- package/server/dist/external/_lead-fields-tag-filter-harness.js.map +1 -0
- package/server/dist/external/_routes-edit-fields-harness.d.ts +8 -0
- package/server/dist/external/_routes-edit-fields-harness.d.ts.map +1 -0
- package/server/dist/external/_routes-edit-fields-harness.js +49 -0
- package/server/dist/external/_routes-edit-fields-harness.js.map +1 -0
- package/server/dist/external/_shared/helpers.d.ts +143 -0
- package/server/dist/external/_shared/helpers.d.ts.map +1 -0
- package/server/dist/external/_shared/helpers.js +231 -0
- package/server/dist/external/_shared/helpers.js.map +1 -0
- package/server/dist/external/actions/_helpers.d.ts +15 -0
- package/server/dist/external/actions/_helpers.d.ts.map +1 -0
- package/server/dist/external/actions/_helpers.js +48 -0
- package/server/dist/external/actions/_helpers.js.map +1 -0
- package/server/dist/external/actions/get.d.ts +8 -0
- package/server/dist/external/actions/get.d.ts.map +1 -0
- package/server/dist/external/actions/get.js +96 -0
- package/server/dist/external/actions/get.js.map +1 -0
- package/server/dist/external/actions/routes.d.ts +9 -0
- package/server/dist/external/actions/routes.d.ts.map +1 -0
- package/server/dist/external/actions/routes.js +33 -0
- package/server/dist/external/actions/routes.js.map +1 -0
- package/server/dist/external/actions/stub.d.ts +6 -0
- package/server/dist/external/actions/stub.d.ts.map +1 -0
- package/server/dist/external/actions/stub.js +51 -0
- package/server/dist/external/actions/stub.js.map +1 -0
- package/server/dist/external/actions/upload-delete.d.ts +6 -0
- package/server/dist/external/actions/upload-delete.d.ts.map +1 -0
- package/server/dist/external/actions/upload-delete.js +46 -0
- package/server/dist/external/actions/upload-delete.js.map +1 -0
- package/server/dist/external/actions/upload.d.ts +6 -0
- package/server/dist/external/actions/upload.d.ts.map +1 -0
- package/server/dist/external/actions/upload.js +141 -0
- package/server/dist/external/actions/upload.js.map +1 -0
- package/server/dist/external/compliance/routes.d.ts +9 -0
- package/server/dist/external/compliance/routes.d.ts.map +1 -0
- package/server/dist/external/compliance/routes.js +46 -0
- package/server/dist/external/compliance/routes.js.map +1 -0
- package/server/dist/external/design-review/__tests__/_helpers.d.ts +16 -0
- package/server/dist/external/design-review/__tests__/_helpers.d.ts.map +1 -0
- package/server/dist/external/design-review/__tests__/_helpers.js +92 -0
- package/server/dist/external/design-review/__tests__/_helpers.js.map +1 -0
- package/server/dist/external/design-review/feedback-write.d.ts +7 -0
- package/server/dist/external/design-review/feedback-write.d.ts.map +1 -0
- package/server/dist/external/design-review/feedback-write.js +126 -0
- package/server/dist/external/design-review/feedback-write.js.map +1 -0
- package/server/dist/external/design-review/gate.d.ts +11 -0
- package/server/dist/external/design-review/gate.d.ts.map +1 -0
- package/server/dist/external/design-review/gate.js +39 -0
- package/server/dist/external/design-review/gate.js.map +1 -0
- package/server/dist/external/design-review/routes.d.ts +9 -0
- package/server/dist/external/design-review/routes.d.ts.map +1 -0
- package/server/dist/external/design-review/routes.js +25 -0
- package/server/dist/external/design-review/routes.js.map +1 -0
- package/server/dist/external/design-review/serve.d.ts +10 -0
- package/server/dist/external/design-review/serve.d.ts.map +1 -0
- package/server/dist/external/design-review/serve.js +184 -0
- package/server/dist/external/design-review/serve.js.map +1 -0
- package/server/dist/external/events/routes.d.ts +16 -0
- package/server/dist/external/events/routes.d.ts.map +1 -0
- package/server/dist/external/events/routes.js +46 -0
- package/server/dist/external/events/routes.js.map +1 -0
- package/server/dist/external/file/_helpers.d.ts +62 -0
- package/server/dist/external/file/_helpers.d.ts.map +1 -0
- package/server/dist/external/file/_helpers.js +146 -0
- package/server/dist/external/file/_helpers.js.map +1 -0
- package/server/dist/external/file/routes.d.ts +7 -0
- package/server/dist/external/file/routes.d.ts.map +1 -0
- package/server/dist/external/file/routes.js +122 -0
- package/server/dist/external/file/routes.js.map +1 -0
- package/server/dist/external/file/write.d.ts +20 -0
- package/server/dist/external/file/write.d.ts.map +1 -0
- package/server/dist/external/file/write.js +172 -0
- package/server/dist/external/file/write.js.map +1 -0
- package/server/dist/external/inbox/_cache.d.ts +48 -0
- package/server/dist/external/inbox/_cache.d.ts.map +1 -0
- package/server/dist/external/inbox/_cache.js +46 -0
- package/server/dist/external/inbox/_cache.js.map +1 -0
- package/server/dist/external/inbox/_derive.d.ts +56 -0
- package/server/dist/external/inbox/_derive.d.ts.map +1 -0
- package/server/dist/external/inbox/_derive.js +231 -0
- package/server/dist/external/inbox/_derive.js.map +1 -0
- package/server/dist/external/inbox/routes.d.ts +13 -0
- package/server/dist/external/inbox/routes.d.ts.map +1 -0
- package/server/dist/external/inbox/routes.js +59 -0
- package/server/dist/external/inbox/routes.js.map +1 -0
- package/server/dist/external/launch/_helpers.d.ts +17 -0
- package/server/dist/external/launch/_helpers.d.ts.map +1 -0
- package/server/dist/external/launch/_helpers.js +25 -0
- package/server/dist/external/launch/_helpers.js.map +1 -0
- package/server/dist/external/launch/action-substitution-branch.d.ts +11 -0
- package/server/dist/external/launch/action-substitution-branch.d.ts.map +1 -0
- package/server/dist/external/launch/action-substitution-branch.js +112 -0
- package/server/dist/external/launch/action-substitution-branch.js.map +1 -0
- package/server/dist/external/launch/campaign-branch.d.ts +12 -0
- package/server/dist/external/launch/campaign-branch.d.ts.map +1 -0
- package/server/dist/external/launch/campaign-branch.js +95 -0
- package/server/dist/external/launch/campaign-branch.js.map +1 -0
- package/server/dist/external/launch/campaign-step-branch.d.ts +12 -0
- package/server/dist/external/launch/campaign-step-branch.d.ts.map +1 -0
- package/server/dist/external/launch/campaign-step-branch.js +108 -0
- package/server/dist/external/launch/campaign-step-branch.js.map +1 -0
- package/server/dist/external/launch/legacy-fallback-branch.d.ts +12 -0
- package/server/dist/external/launch/legacy-fallback-branch.d.ts.map +1 -0
- package/server/dist/external/launch/legacy-fallback-branch.js +29 -0
- package/server/dist/external/launch/legacy-fallback-branch.js.map +1 -0
- package/server/dist/external/launch/master-run-branch.d.ts +24 -0
- package/server/dist/external/launch/master-run-branch.d.ts.map +1 -0
- package/server/dist/external/launch/master-run-branch.js +168 -0
- package/server/dist/external/launch/master-run-branch.js.map +1 -0
- package/server/dist/external/launch/parse-body.d.ts +46 -0
- package/server/dist/external/launch/parse-body.d.ts.map +1 -0
- package/server/dist/external/launch/parse-body.js +115 -0
- package/server/dist/external/launch/parse-body.js.map +1 -0
- package/server/dist/external/launch/phase-task-branch.d.ts +18 -0
- package/server/dist/external/launch/phase-task-branch.d.ts.map +1 -0
- package/server/dist/external/launch/phase-task-branch.js +170 -0
- package/server/dist/external/launch/phase-task-branch.js.map +1 -0
- package/server/dist/external/launch/routes.d.ts +23 -0
- package/server/dist/external/launch/routes.d.ts.map +1 -0
- package/server/dist/external/launch/routes.js +198 -0
- package/server/dist/external/launch/routes.js.map +1 -0
- package/server/dist/external/media/_helpers.d.ts +32 -0
- package/server/dist/external/media/_helpers.d.ts.map +1 -0
- package/server/dist/external/media/_helpers.js +77 -0
- package/server/dist/external/media/_helpers.js.map +1 -0
- package/server/dist/external/media/routes.d.ts +7 -0
- package/server/dist/external/media/routes.d.ts.map +1 -0
- package/server/dist/external/media/routes.js +120 -0
- package/server/dist/external/media/routes.js.map +1 -0
- package/server/dist/external/mission-context/facts-slice3.d.ts +22 -0
- package/server/dist/external/mission-context/facts-slice3.d.ts.map +1 -0
- package/server/dist/external/mission-context/facts-slice3.js +143 -0
- package/server/dist/external/mission-context/facts-slice3.js.map +1 -0
- package/server/dist/external/mission-context/facts.d.ts +44 -0
- package/server/dist/external/mission-context/facts.d.ts.map +1 -0
- package/server/dist/external/mission-context/facts.js +109 -0
- package/server/dist/external/mission-context/facts.js.map +1 -0
- package/server/dist/external/mission-context/routes.d.ts +83 -0
- package/server/dist/external/mission-context/routes.d.ts.map +1 -0
- package/server/dist/external/mission-context/routes.js +226 -0
- package/server/dist/external/mission-context/routes.js.map +1 -0
- package/server/dist/external/mission-context/test-harness.d.ts +62 -0
- package/server/dist/external/mission-context/test-harness.d.ts.map +1 -0
- package/server/dist/external/mission-context/test-harness.js +121 -0
- package/server/dist/external/mission-context/test-harness.js.map +1 -0
- package/server/dist/external/mission-context/wire.d.ts +12 -0
- package/server/dist/external/mission-context/wire.d.ts.map +1 -0
- package/server/dist/external/mission-context/wire.js +62 -0
- package/server/dist/external/mission-context/wire.js.map +1 -0
- package/server/dist/external/model-config/routes.d.ts +9 -0
- package/server/dist/external/model-config/routes.d.ts.map +1 -0
- package/server/dist/external/model-config/routes.js +18 -0
- package/server/dist/external/model-config/routes.js.map +1 -0
- package/server/dist/external/org/__tests__/fixtures/lock-race-worker.d.ts +2 -0
- package/server/dist/external/org/__tests__/fixtures/lock-race-worker.d.ts.map +1 -0
- package/server/dist/external/org/__tests__/fixtures/lock-race-worker.js +67 -0
- package/server/dist/external/org/__tests__/fixtures/lock-race-worker.js.map +1 -0
- package/server/dist/external/org/_helpers.d.ts +67 -0
- package/server/dist/external/org/_helpers.d.ts.map +1 -0
- package/server/dist/external/org/_helpers.js +146 -0
- package/server/dist/external/org/_helpers.js.map +1 -0
- package/server/dist/external/org/beat-register-release-audit.d.ts +17 -0
- package/server/dist/external/org/beat-register-release-audit.d.ts.map +1 -0
- package/server/dist/external/org/beat-register-release-audit.js +96 -0
- package/server/dist/external/org/beat-register-release-audit.js.map +1 -0
- package/server/dist/external/org/beat-register-release-core.d.ts +50 -0
- package/server/dist/external/org/beat-register-release-core.d.ts.map +1 -0
- package/server/dist/external/org/beat-register-release-core.js +183 -0
- package/server/dist/external/org/beat-register-release-core.js.map +1 -0
- package/server/dist/external/org/beat-register-release.d.ts +13 -0
- package/server/dist/external/org/beat-register-release.d.ts.map +1 -0
- package/server/dist/external/org/beat-register-release.js +81 -0
- package/server/dist/external/org/beat-register-release.js.map +1 -0
- package/server/dist/external/org/beat-register.d.ts +100 -0
- package/server/dist/external/org/beat-register.d.ts.map +1 -0
- package/server/dist/external/org/beat-register.js +198 -0
- package/server/dist/external/org/beat-register.js.map +1 -0
- package/server/dist/external/org/countersign.d.ts +8 -0
- package/server/dist/external/org/countersign.d.ts.map +1 -0
- package/server/dist/external/org/countersign.js +157 -0
- package/server/dist/external/org/countersign.js.map +1 -0
- package/server/dist/external/org/cron.d.ts +22 -0
- package/server/dist/external/org/cron.d.ts.map +1 -0
- package/server/dist/external/org/cron.js +59 -0
- package/server/dist/external/org/cron.js.map +1 -0
- package/server/dist/external/org/decisions-lock.d.ts +68 -0
- package/server/dist/external/org/decisions-lock.d.ts.map +1 -0
- package/server/dist/external/org/decisions-lock.js +209 -0
- package/server/dist/external/org/decisions-lock.js.map +1 -0
- package/server/dist/external/org/file-read.d.ts +14 -0
- package/server/dist/external/org/file-read.d.ts.map +1 -0
- package/server/dist/external/org/file-read.js +80 -0
- package/server/dist/external/org/file-read.js.map +1 -0
- package/server/dist/external/org/file-write.d.ts +14 -0
- package/server/dist/external/org/file-write.d.ts.map +1 -0
- package/server/dist/external/org/file-write.js +205 -0
- package/server/dist/external/org/file-write.js.map +1 -0
- package/server/dist/external/org/last-run.d.ts +28 -0
- package/server/dist/external/org/last-run.d.ts.map +1 -0
- package/server/dist/external/org/last-run.js +137 -0
- package/server/dist/external/org/last-run.js.map +1 -0
- package/server/dist/external/org/org-chart-lookup.d.ts +16 -0
- package/server/dist/external/org/org-chart-lookup.d.ts.map +1 -0
- package/server/dist/external/org/org-chart-lookup.js +100 -0
- package/server/dist/external/org/org-chart-lookup.js.map +1 -0
- package/server/dist/external/org/org-chart.d.ts +25 -0
- package/server/dist/external/org/org-chart.d.ts.map +1 -0
- package/server/dist/external/org/org-chart.js +110 -0
- package/server/dist/external/org/org-chart.js.map +1 -0
- package/server/dist/external/org/routes.d.ts +12 -0
- package/server/dist/external/org/routes.d.ts.map +1 -0
- package/server/dist/external/org/routes.js +90 -0
- package/server/dist/external/org/routes.js.map +1 -0
- package/server/dist/external/org/usage.d.ts +24 -0
- package/server/dist/external/org/usage.d.ts.map +1 -0
- package/server/dist/external/org/usage.js +110 -0
- package/server/dist/external/org/usage.js.map +1 -0
- package/server/dist/external/pr-status/routes.d.ts +7 -0
- package/server/dist/external/pr-status/routes.d.ts.map +1 -0
- package/server/dist/external/pr-status/routes.js +37 -0
- package/server/dist/external/pr-status/routes.js.map +1 -0
- package/server/dist/external/preview/routes.d.ts +10 -0
- package/server/dist/external/preview/routes.d.ts.map +1 -0
- package/server/dist/external/preview/routes.js +71 -0
- package/server/dist/external/preview/routes.js.map +1 -0
- package/server/dist/external/routes.d.ts +106 -0
- package/server/dist/external/routes.d.ts.map +1 -0
- package/server/dist/external/routes.js +162 -0
- package/server/dist/external/routes.js.map +1 -0
- package/server/dist/external/run-config/routes.d.ts +9 -0
- package/server/dist/external/run-config/routes.d.ts.map +1 -0
- package/server/dist/external/run-config/routes.js +55 -0
- package/server/dist/external/run-config/routes.js.map +1 -0
- package/server/dist/external/runs/routes.d.ts +16 -0
- package/server/dist/external/runs/routes.d.ts.map +1 -0
- package/server/dist/external/runs/routes.js +69 -0
- package/server/dist/external/runs/routes.js.map +1 -0
- package/server/dist/external/tasks/_phase-helpers.d.ts +37 -0
- package/server/dist/external/tasks/_phase-helpers.d.ts.map +1 -0
- package/server/dist/external/tasks/_phase-helpers.js +101 -0
- package/server/dist/external/tasks/_phase-helpers.js.map +1 -0
- package/server/dist/external/tasks/create.d.ts +12 -0
- package/server/dist/external/tasks/create.d.ts.map +1 -0
- package/server/dist/external/tasks/create.js +139 -0
- package/server/dist/external/tasks/create.js.map +1 -0
- package/server/dist/external/tasks/lifecycle.d.ts +12 -0
- package/server/dist/external/tasks/lifecycle.d.ts.map +1 -0
- package/server/dist/external/tasks/lifecycle.js +231 -0
- package/server/dist/external/tasks/lifecycle.js.map +1 -0
- package/server/dist/external/tasks/list-get.d.ts +11 -0
- package/server/dist/external/tasks/list-get.d.ts.map +1 -0
- package/server/dist/external/tasks/list-get.js +50 -0
- package/server/dist/external/tasks/list-get.js.map +1 -0
- package/server/dist/external/tasks/patch.d.ts +12 -0
- package/server/dist/external/tasks/patch.d.ts.map +1 -0
- package/server/dist/external/tasks/patch.js +192 -0
- package/server/dist/external/tasks/patch.js.map +1 -0
- package/server/dist/external/tasks/routes.d.ts +18 -0
- package/server/dist/external/tasks/routes.d.ts.map +1 -0
- package/server/dist/external/tasks/routes.js +49 -0
- package/server/dist/external/tasks/routes.js.map +1 -0
- package/server/dist/external/transcript/routes.d.ts +12 -0
- package/server/dist/external/transcript/routes.d.ts.map +1 -0
- package/server/dist/external/transcript/routes.js +160 -0
- package/server/dist/external/transcript/routes.js.map +1 -0
- package/server/dist/external/tree/routes.d.ts +7 -0
- package/server/dist/external/tree/routes.d.ts.map +1 -0
- package/server/dist/external/tree/routes.js +96 -0
- package/server/dist/external/tree/routes.js.map +1 -0
- package/server/dist/index.d.ts +3 -0
- package/server/dist/index.d.ts.map +1 -0
- package/server/dist/index.js +774 -0
- package/server/dist/index.js.map +1 -0
- package/server/dist/lib/bind-errors.d.ts +18 -0
- package/server/dist/lib/bind-errors.d.ts.map +1 -0
- package/server/dist/lib/bind-errors.js +43 -0
- package/server/dist/lib/bind-errors.js.map +1 -0
- package/server/dist/lib/resolveHonoHost.d.ts +3 -0
- package/server/dist/lib/resolveHonoHost.d.ts.map +1 -0
- package/server/dist/lib/resolveHonoHost.js +34 -0
- package/server/dist/lib/resolveHonoHost.js.map +1 -0
- package/server/dist/lib/resolveNetworkProfile.d.ts +28 -0
- package/server/dist/lib/resolveNetworkProfile.d.ts.map +1 -0
- package/server/dist/lib/resolveNetworkProfile.js +42 -0
- package/server/dist/lib/resolveNetworkProfile.js.map +1 -0
- package/server/dist/lib/resolveTailscaleIp.d.ts +26 -0
- package/server/dist/lib/resolveTailscaleIp.d.ts.map +1 -0
- package/server/dist/lib/resolveTailscaleIp.js +61 -0
- package/server/dist/lib/resolveTailscaleIp.js.map +1 -0
- package/server/dist/lib/resolveTrustedOrigins.d.ts +9 -0
- package/server/dist/lib/resolveTrustedOrigins.d.ts.map +1 -0
- package/server/dist/lib/resolveTrustedOrigins.js +154 -0
- package/server/dist/lib/resolveTrustedOrigins.js.map +1 -0
- package/server/dist/middleware/error-handler.d.ts +8 -0
- package/server/dist/middleware/error-handler.d.ts.map +1 -0
- package/server/dist/middleware/error-handler.js +75 -0
- package/server/dist/middleware/error-handler.js.map +1 -0
- package/server/dist/middleware/logger.d.ts +3 -0
- package/server/dist/middleware/logger.d.ts.map +1 -0
- package/server/dist/middleware/logger.js +13 -0
- package/server/dist/middleware/logger.js.map +1 -0
- package/server/dist/routes/_triage-api-harness.d.ts +16 -0
- package/server/dist/routes/_triage-api-harness.d.ts.map +1 -0
- package/server/dist/routes/_triage-api-harness.js +89 -0
- package/server/dist/routes/_triage-api-harness.js.map +1 -0
- package/server/dist/routes/campaigns.d.ts +26 -0
- package/server/dist/routes/campaigns.d.ts.map +1 -0
- package/server/dist/routes/campaigns.js +237 -0
- package/server/dist/routes/campaigns.js.map +1 -0
- package/server/dist/routes/diagnostics.d.ts +84 -0
- package/server/dist/routes/diagnostics.d.ts.map +1 -0
- package/server/dist/routes/diagnostics.js +143 -0
- package/server/dist/routes/diagnostics.js.map +1 -0
- package/server/dist/routes/grade.d.ts +13 -0
- package/server/dist/routes/grade.d.ts.map +1 -0
- package/server/dist/routes/grade.js +45 -0
- package/server/dist/routes/grade.js.map +1 -0
- package/server/dist/routes/profiles.d.ts +25 -0
- package/server/dist/routes/profiles.d.ts.map +1 -0
- package/server/dist/routes/profiles.js +58 -0
- package/server/dist/routes/profiles.js.map +1 -0
- package/server/dist/routes/projects.d.ts +20 -0
- package/server/dist/routes/projects.d.ts.map +1 -0
- package/server/dist/routes/projects.js +105 -0
- package/server/dist/routes/projects.js.map +1 -0
- package/server/dist/routes/readiness.d.ts +11 -0
- package/server/dist/routes/readiness.d.ts.map +1 -0
- package/server/dist/routes/readiness.js +52 -0
- package/server/dist/routes/readiness.js.map +1 -0
- package/server/dist/routes/settings.d.ts +13 -0
- package/server/dist/routes/settings.d.ts.map +1 -0
- package/server/dist/routes/settings.js +69 -0
- package/server/dist/routes/settings.js.map +1 -0
- package/server/dist/routes/terminal-appearance.d.ts +7 -0
- package/server/dist/routes/terminal-appearance.d.ts.map +1 -0
- package/server/dist/routes/terminal-appearance.js +28 -0
- package/server/dist/routes/terminal-appearance.js.map +1 -0
- package/server/dist/routes/triage.d.ts +35 -0
- package/server/dist/routes/triage.d.ts.map +1 -0
- package/server/dist/routes/triage.js +496 -0
- package/server/dist/routes/triage.js.map +1 -0
- package/server/dist/terminal/backpressure-telemetry.d.ts +86 -0
- package/server/dist/terminal/backpressure-telemetry.d.ts.map +1 -0
- package/server/dist/terminal/backpressure-telemetry.js +158 -0
- package/server/dist/terminal/backpressure-telemetry.js.map +1 -0
- package/server/dist/terminal/boot-wipe.d.ts +47 -0
- package/server/dist/terminal/boot-wipe.d.ts.map +1 -0
- package/server/dist/terminal/boot-wipe.js +122 -0
- package/server/dist/terminal/boot-wipe.js.map +1 -0
- package/server/dist/terminal/headless-mirror.d.ts +139 -0
- package/server/dist/terminal/headless-mirror.d.ts.map +1 -0
- package/server/dist/terminal/headless-mirror.js +389 -0
- package/server/dist/terminal/headless-mirror.js.map +1 -0
- package/server/dist/terminal/headless-probe.d.ts +26 -0
- package/server/dist/terminal/headless-probe.d.ts.map +1 -0
- package/server/dist/terminal/headless-probe.js +99 -0
- package/server/dist/terminal/headless-probe.js.map +1 -0
- package/server/dist/terminal/idle-reaper.d.ts +47 -0
- package/server/dist/terminal/idle-reaper.d.ts.map +1 -0
- package/server/dist/terminal/idle-reaper.js +95 -0
- package/server/dist/terminal/idle-reaper.js.map +1 -0
- package/server/dist/terminal/image-paste.d.ts +60 -0
- package/server/dist/terminal/image-paste.d.ts.map +1 -0
- package/server/dist/terminal/image-paste.js +260 -0
- package/server/dist/terminal/image-paste.js.map +1 -0
- package/server/dist/terminal/pty-manager.d.ts +452 -0
- package/server/dist/terminal/pty-manager.d.ts.map +1 -0
- package/server/dist/terminal/pty-manager.js +1014 -0
- package/server/dist/terminal/pty-manager.js.map +1 -0
- package/server/dist/terminal/replay-snapshot.d.ts +25 -0
- package/server/dist/terminal/replay-snapshot.d.ts.map +1 -0
- package/server/dist/terminal/replay-snapshot.js +124 -0
- package/server/dist/terminal/replay-snapshot.js.map +1 -0
- package/server/dist/terminal/resync-gate.d.ts +20 -0
- package/server/dist/terminal/resync-gate.d.ts.map +1 -0
- package/server/dist/terminal/resync-gate.js +58 -0
- package/server/dist/terminal/resync-gate.js.map +1 -0
- package/server/dist/terminal/routes.d.ts +67 -0
- package/server/dist/terminal/routes.d.ts.map +1 -0
- package/server/dist/terminal/routes.js +455 -0
- package/server/dist/terminal/routes.js.map +1 -0
- package/server/dist/terminal/scrollback-store.d.ts +120 -0
- package/server/dist/terminal/scrollback-store.d.ts.map +1 -0
- package/server/dist/terminal/scrollback-store.js +572 -0
- package/server/dist/terminal/scrollback-store.js.map +1 -0
- package/server/dist/terminal/snapshot-preserve.d.ts +63 -0
- package/server/dist/terminal/snapshot-preserve.d.ts.map +1 -0
- package/server/dist/terminal/snapshot-preserve.js +116 -0
- package/server/dist/terminal/snapshot-preserve.js.map +1 -0
- package/server/dist/terminal/snapshot-store.d.ts +147 -0
- package/server/dist/terminal/snapshot-store.d.ts.map +1 -0
- package/server/dist/terminal/snapshot-store.js +439 -0
- package/server/dist/terminal/snapshot-store.js.map +1 -0
- package/server/dist/terminal/snapshot-tmp-sweep.d.ts +48 -0
- package/server/dist/terminal/snapshot-tmp-sweep.d.ts.map +1 -0
- package/server/dist/terminal/snapshot-tmp-sweep.js +141 -0
- package/server/dist/terminal/snapshot-tmp-sweep.js.map +1 -0
- package/server/dist/terminal/spawn-env.d.ts +46 -0
- package/server/dist/terminal/spawn-env.d.ts.map +1 -0
- package/server/dist/terminal/spawn-env.js +232 -0
- package/server/dist/terminal/spawn-env.js.map +1 -0
- package/server/dist/terminal/terminal-reset.d.ts +31 -0
- package/server/dist/terminal/terminal-reset.d.ts.map +1 -0
- package/server/dist/terminal/terminal-reset.js +43 -0
- package/server/dist/terminal/terminal-reset.js.map +1 -0
- package/server/dist/terminal/ws-heartbeat.d.ts +78 -0
- package/server/dist/terminal/ws-heartbeat.d.ts.map +1 -0
- package/server/dist/terminal/ws-heartbeat.js +164 -0
- package/server/dist/terminal/ws-heartbeat.js.map +1 -0
- package/server/dist/terminal/ws-upgrade-handler.d.ts +96 -0
- package/server/dist/terminal/ws-upgrade-handler.d.ts.map +1 -0
- package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts +46 -0
- package/server/dist/terminal/ws-upgrade-handler.fixtures.d.ts.map +1 -0
- package/server/dist/terminal/ws-upgrade-handler.fixtures.js +126 -0
- package/server/dist/terminal/ws-upgrade-handler.fixtures.js.map +1 -0
- package/server/dist/terminal/ws-upgrade-handler.js +518 -0
- package/server/dist/terminal/ws-upgrade-handler.js.map +1 -0
- package/server/dist/types/action-schema.d.ts +75 -0
- package/server/dist/types/action-schema.d.ts.map +1 -0
- package/server/dist/types/action-schema.js +32 -0
- package/server/dist/types/action-schema.js.map +1 -0
- package/server/dist/types/project.d.ts +72 -0
- package/server/dist/types/project.d.ts.map +1 -0
- package/server/dist/types/project.js +16 -0
- package/server/dist/types/project.js.map +1 -0
- package/server/dist/types/run-config-v2.d.ts +172 -0
- package/server/dist/types/run-config-v2.d.ts.map +1 -0
- package/server/dist/types/run-config-v2.js +169 -0
- package/server/dist/types/run-config-v2.js.map +1 -0
- package/server/dist/types/settings.d.ts +25 -0
- package/server/dist/types/settings.d.ts.map +1 -0
- package/server/dist/types/settings.js +12 -0
- package/server/dist/types/settings.js.map +1 -0
- package/server/dist/types/task.d.ts +55 -0
- package/server/dist/types/task.d.ts.map +1 -0
- package/server/dist/types/task.js +13 -0
- package/server/dist/types/task.js.map +1 -0
- package/server/dist/types/triage.d.ts +135 -0
- package/server/dist/types/triage.d.ts.map +1 -0
- package/server/dist/types/triage.js +15 -0
- package/server/dist/types/triage.js.map +1 -0
- package/server/package.json +43 -0
- package/server/profiles/PROFILE_SCHEMA_VERSION +1 -0
- package/server/profiles/README.md +27 -0
- package/server/profiles/python-plugin-monorepo.json +35 -0
- package/server/profiles/supabase-nextjs.json +253 -0
- package/server/profiles/vite-hono.json +92 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { CampaignLifecycleStatus } from "./campaign-status-json.js";
|
|
2
|
+
export type CampaignStepStatus = "pending" | "in_progress" | "complete" | "failed" | "escalated";
|
|
3
|
+
export type { CampaignLifecycleStatus };
|
|
4
|
+
export interface CampaignStep {
|
|
5
|
+
id: string;
|
|
6
|
+
slug: string;
|
|
7
|
+
title: string;
|
|
8
|
+
status: CampaignStepStatus;
|
|
9
|
+
/**
|
|
10
|
+
* Where THIS step's `status` came from.
|
|
11
|
+
*
|
|
12
|
+
* Per-step, not per-campaign, because the claim it qualifies is per-step. A
|
|
13
|
+
* campaign can legitimately mix: `status.json` lists S1 but not S2, so S1's
|
|
14
|
+
* status is live and S2's comes from the plan table. A campaign-level flag
|
|
15
|
+
* would report "live" for both and drop the disclosure on exactly the unit
|
|
16
|
+
* that needed it (external plan review, openai HIGH #5).
|
|
17
|
+
*/
|
|
18
|
+
statusSource: "status_json" | "campaign_md" | "events" | "default";
|
|
19
|
+
/** Project-root-relative, POSIX-separated path to the sub-iterate spec.
|
|
20
|
+
* Null when the file is missing, escapes the root, or holds shell-hostile
|
|
21
|
+
* chars (so the copy-launch command is never malformed). */
|
|
22
|
+
specPath: string | null;
|
|
23
|
+
commit: string | null;
|
|
24
|
+
branch: string | null;
|
|
25
|
+
/** Forward-compat plan-first/risk marker read from the sub-iterate spec's
|
|
26
|
+
* optional frontmatter (`plan_first`/`risk`). False for every campaign that
|
|
27
|
+
* exists today (the producer writes no frontmatter); the autonomous-launch
|
|
28
|
+
* guardrail surfaces it the day a producer emits one. See
|
|
29
|
+
* `campaign-parse.ts parseSpecFrontmatter`. */
|
|
30
|
+
planFirst: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* WHERE this campaign's per-unit facts came from, and whether getting them cost
|
|
34
|
+
* us something.
|
|
35
|
+
*
|
|
36
|
+
* The fallback chain (`status.json` → the `campaign.md` table → `pending`) is
|
|
37
|
+
* genuinely useful and stays. What it must stop doing is being SILENT: a
|
|
38
|
+
* consumer that renders "S2 is running now" from a hand-maintained Markdown
|
|
39
|
+
* table, because the live status file was torn, is making a claim it cannot
|
|
40
|
+
* support, and today nothing on the wire lets it know.
|
|
41
|
+
*/
|
|
42
|
+
export interface CampaignProvenance {
|
|
43
|
+
/**
|
|
44
|
+
* `status_json` — at least one unit's status came from the live status file.
|
|
45
|
+
* `campaign_md` — every status came from the plan document's table.
|
|
46
|
+
* `events` — reconstructed from the tracked event log because the
|
|
47
|
+
* campaign directory is absent (a fresh clone). Completed
|
|
48
|
+
* units only, so `total == done` says nothing about units
|
|
49
|
+
* that never completed.
|
|
50
|
+
* `none` — no unit statuses were resolved from any source.
|
|
51
|
+
*/
|
|
52
|
+
statusSource: "status_json" | "campaign_md" | "events" | "none";
|
|
53
|
+
/**
|
|
54
|
+
* True when a source EXISTED and could not be read (a torn/malformed
|
|
55
|
+
* `status.json`, an unreadable `campaign.md`). NOT set merely because a file
|
|
56
|
+
* is absent — an absent status file is an ordinary legacy campaign.
|
|
57
|
+
*
|
|
58
|
+
* Kept as the single "should this be qualified at all" switch; WHICH source
|
|
59
|
+
* failed is the pair of fields below, because a disclosure that names the
|
|
60
|
+
* wrong file is itself a false statement (external code review, openai #4).
|
|
61
|
+
*/
|
|
62
|
+
degraded: boolean;
|
|
63
|
+
/** `status.json`: read fine · not there at all · there and unusable. */
|
|
64
|
+
statusJsonState: "ok" | "absent" | "unreadable";
|
|
65
|
+
/** `campaign.md` existed and could not be read. */
|
|
66
|
+
campaignMdUnreadable: boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface Campaign {
|
|
69
|
+
slug: string;
|
|
70
|
+
intent: string;
|
|
71
|
+
branchStrategy: string | null;
|
|
72
|
+
expandsTriage: string | null;
|
|
73
|
+
/** Producer-owned lifecycle status; null when the producer hasn't written
|
|
74
|
+
* one yet (legacy → consumers fall back to done/total). */
|
|
75
|
+
status: CampaignLifecycleStatus | null;
|
|
76
|
+
/** Where the per-unit facts came from, and whether a read degraded. */
|
|
77
|
+
provenance: CampaignProvenance;
|
|
78
|
+
steps: CampaignStep[];
|
|
79
|
+
done: number;
|
|
80
|
+
total: number;
|
|
81
|
+
/** First step whose status is not complete (the step the campaign is blocked
|
|
82
|
+
* on, incl. a failed/escalated step that needs a re-run). Null when all
|
|
83
|
+
* complete. */
|
|
84
|
+
nextPending: {
|
|
85
|
+
id: string;
|
|
86
|
+
specPath: string | null;
|
|
87
|
+
} | null;
|
|
88
|
+
/**
|
|
89
|
+
* True when an autonomous run is currently attached to this campaign — a live
|
|
90
|
+
* `loop_state.json` `in_progress` unit, OR a `status.json` step `in_progress`.
|
|
91
|
+
* Populated by `routes/campaigns.ts` (this reader leaves it undefined). The
|
|
92
|
+
* launch CTAs disable/relabel on it to prevent spawning a SECOND orchestrator
|
|
93
|
+
* on the same campaign. Optional for deploy-skew safety. See `core/campaign-loop-state.ts`.
|
|
94
|
+
*/
|
|
95
|
+
attachedRun?: boolean;
|
|
96
|
+
/** Reconstructed purely from tracked events.jsonl when the campaign dir is absent (a clone): completed subs only, total==done, specPath null. Set by `core/campaign-events.ts`. */
|
|
97
|
+
derivedFromEvents?: boolean;
|
|
98
|
+
/** True when an operator manually dismissed this campaign from the board (a webui-owned quittance, NOT a producer status). Set by `routes/campaigns.ts` from `core/dismissed-campaigns-store.ts`; optional for deploy-skew. */
|
|
99
|
+
dismissed?: boolean;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=campaign-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-types.d.ts","sourceRoot":"","sources":["../../src/core/campaign-types.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEzE,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,aAAa,GACb,UAAU,GACV,QAAQ,GACR,WAAW,CAAC;AAKhB,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAExC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,kBAAkB,CAAC;IAC3B;;;;;;;;OAQG;IACH,YAAY,EAAE,aAAa,GAAG,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnE;;iEAE6D;IAC7D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;oDAIgD;IAChD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;OAQG;IACH,YAAY,EAAE,aAAa,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChE;;;;;;;;OAQG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,wEAAwE;IACxE,eAAe,EAAE,IAAI,GAAG,QAAQ,GAAG,YAAY,CAAC;IAChD,mDAAmD;IACnD,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;gEAC4D;IAC5D,MAAM,EAAE,uBAAuB,GAAG,IAAI,CAAC;IACvC,uEAAuE;IACvE,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd;;oBAEgB;IAChB,WAAW,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5D;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mLAAmL;IACnL,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+NAA+N;IAC/N,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* campaign-types.ts — the shapes `campaign-store.ts` produces.
|
|
3
|
+
*
|
|
4
|
+
* Split out when `CampaignProvenance` pushed the store past the 300-LOC rule.
|
|
5
|
+
* A cohesive split along the obvious seam: this file declares WHAT a campaign
|
|
6
|
+
* is, `campaign-store.ts` decides how to READ one off disk. The store re-exports
|
|
7
|
+
* everything here, so no consumer's import site moved.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=campaign-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-types.js","sourceRoot":"","sources":["../../src/core/campaign-types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { CampaignLifecycleStatus } from "./campaign-status-json.js";
|
|
2
|
+
export type CampaignWriteErrorCode = "no_writable_status_target" | "campaign_write_failed";
|
|
3
|
+
export declare class CampaignWriteError extends Error {
|
|
4
|
+
readonly code: CampaignWriteErrorCode;
|
|
5
|
+
constructor(code: CampaignWriteErrorCode, message: string);
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Set the campaign-level lifecycle `status`. Writes status.json if present,
|
|
9
|
+
* else the campaign.md frontmatter; throws `no_writable_status_target` when
|
|
10
|
+
* neither exists. Caller MUST hold the campaign-dir lock.
|
|
11
|
+
*/
|
|
12
|
+
export declare function setCampaignStatus(campaignDir: string, status: CampaignLifecycleStatus): void;
|
|
13
|
+
//# sourceMappingURL=campaign-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-write.d.ts","sourceRoot":"","sources":["../../src/core/campaign-write.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEzE,MAAM,MAAM,sBAAsB,GAC9B,2BAA2B,GAC3B,uBAAuB,CAAC;AAE5B,qBAAa,kBAAmB,SAAQ,KAAK;IAEzC,QAAQ,CAAC,IAAI,EAAE,sBAAsB;gBAA5B,IAAI,EAAE,sBAAsB,EACrC,OAAO,EAAE,MAAM;CAKlB;AAgFD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,uBAAuB,GAC9B,IAAI,CAqBN"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* campaign-write.ts — the ONLY WebUI write to campaign lifecycle state.
|
|
3
|
+
*
|
|
4
|
+
* Sets a campaign's top-level lifecycle `status` (the `draft → active` flip
|
|
5
|
+
* behind the Triage "Start Campaign" action). A deliberate, narrow relaxation
|
|
6
|
+
* of the "WebUI is read-only on campaign state" rule — the same operator-write
|
|
7
|
+
* established write pattern (ADR-101/106): caller holds the lock; this
|
|
8
|
+
* module just does the read-modify-write of a single field.
|
|
9
|
+
*
|
|
10
|
+
* Write target mirrors the READ precedence in `pickLifecycle` (status.json
|
|
11
|
+
* top-level `status` wins, else `campaign.md` frontmatter), so a write always
|
|
12
|
+
* lands where the next read looks:
|
|
13
|
+
* - `status.json` exists → JSON.parse, set top-level `status`, re-serialize.
|
|
14
|
+
* - else `campaign.md` has a frontmatter block → replace/insert `status:`
|
|
15
|
+
* INSIDE the leading `---…---` block only (never the body).
|
|
16
|
+
* - neither → `CampaignWriteError("no_writable_status_target")` (the route
|
|
17
|
+
* maps it to 422) — we never blindly create/append, which could corrupt.
|
|
18
|
+
*
|
|
19
|
+
* All writes are atomic (temp file + rename) so a crash mid-write can't leave a
|
|
20
|
+
* half-written status.json / campaign.md (external review HIGH #2 / #1).
|
|
21
|
+
*/
|
|
22
|
+
import { existsSync, readFileSync, writeFileSync, renameSync } from "node:fs";
|
|
23
|
+
import path from "node:path";
|
|
24
|
+
export class CampaignWriteError extends Error {
|
|
25
|
+
code;
|
|
26
|
+
constructor(code, message) {
|
|
27
|
+
super(message);
|
|
28
|
+
this.code = code;
|
|
29
|
+
this.name = "CampaignWriteError";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const VALID_LIFECYCLE = new Set([
|
|
33
|
+
"draft",
|
|
34
|
+
"active",
|
|
35
|
+
"complete",
|
|
36
|
+
]);
|
|
37
|
+
/** Write `content` to `file` atomically (same-dir temp + rename). */
|
|
38
|
+
function atomicWrite(file, content) {
|
|
39
|
+
const tmp = `${file}.tmp-${process.pid}`;
|
|
40
|
+
writeFileSync(tmp, content, "utf-8");
|
|
41
|
+
renameSync(tmp, file);
|
|
42
|
+
}
|
|
43
|
+
/** Set status.json top-level `status` when status.json exists. */
|
|
44
|
+
function writeStatusJson(campaignDir, status) {
|
|
45
|
+
const p = path.join(campaignDir, "status.json");
|
|
46
|
+
if (!existsSync(p))
|
|
47
|
+
return false;
|
|
48
|
+
let parsed;
|
|
49
|
+
try {
|
|
50
|
+
parsed = JSON.parse(readFileSync(p, "utf-8"));
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
throw new CampaignWriteError("campaign_write_failed", "status.json is not valid JSON; refusing to rewrite");
|
|
54
|
+
}
|
|
55
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
56
|
+
throw new CampaignWriteError("campaign_write_failed", "status.json is not a JSON object; refusing to rewrite");
|
|
57
|
+
}
|
|
58
|
+
parsed.status = status;
|
|
59
|
+
atomicWrite(p, JSON.stringify(parsed, null, 2) + "\n");
|
|
60
|
+
return true;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Set the `status:` key INSIDE the leading `---…---` frontmatter block of
|
|
64
|
+
* campaign.md (never the body). Tolerates CRLF + an existing `status:` line.
|
|
65
|
+
* Returns false when there is no frontmatter block to write into.
|
|
66
|
+
*/
|
|
67
|
+
function writeFrontmatterStatus(campaignDir, status) {
|
|
68
|
+
const p = path.join(campaignDir, "campaign.md");
|
|
69
|
+
if (!existsSync(p))
|
|
70
|
+
return false;
|
|
71
|
+
const md = readFileSync(p, "utf-8");
|
|
72
|
+
// Capture the leading frontmatter block: opening `---<eol>`, body, closing `<eol>---`.
|
|
73
|
+
const m = md.match(/^(---[ \t]*\r?\n)([\s\S]*?)(\r?\n---[ \t]*)(\r?\n|$)/);
|
|
74
|
+
if (!m)
|
|
75
|
+
return false; // no frontmatter block — refuse (route → 422)
|
|
76
|
+
const open = m[1];
|
|
77
|
+
const body = m[2];
|
|
78
|
+
const close = m[3];
|
|
79
|
+
const after = m[4];
|
|
80
|
+
// Only treat this as YAML frontmatter (not a leading `---` thematic break
|
|
81
|
+
// wrapping prose) if the block has at least one TOP-LEVEL `key:` line. A
|
|
82
|
+
// prose block fenced by `---` has none → refuse (route → 422) rather than
|
|
83
|
+
// splice `status:` into the middle of prose (review MEDIUM #1).
|
|
84
|
+
if (!/^[A-Za-z0-9_-]+[ \t]*:/m.test(body))
|
|
85
|
+
return false;
|
|
86
|
+
const eol = open.includes("\r\n") ? "\r\n" : "\n";
|
|
87
|
+
const lines = body.split(/\r?\n/);
|
|
88
|
+
let found = false;
|
|
89
|
+
const rewritten = lines.map((ln) => {
|
|
90
|
+
// Column-0 anchor: only the TOP-LEVEL `status:` (the lifecycle field
|
|
91
|
+
// `pickLifecycle` reads) is rewritten — an indented `status:` nested under
|
|
92
|
+
// another mapping is left byte-intact (review MEDIUM #2).
|
|
93
|
+
if (/^status[ \t]*:/.test(ln)) {
|
|
94
|
+
found = true;
|
|
95
|
+
return `status: ${status}`;
|
|
96
|
+
}
|
|
97
|
+
return ln;
|
|
98
|
+
});
|
|
99
|
+
if (!found)
|
|
100
|
+
rewritten.push(`status: ${status}`);
|
|
101
|
+
const newBlock = open + rewritten.join(eol) + close + after;
|
|
102
|
+
const newMd = md.slice(0, m.index ?? 0) + newBlock + md.slice((m.index ?? 0) + m[0].length);
|
|
103
|
+
atomicWrite(p, newMd);
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Set the campaign-level lifecycle `status`. Writes status.json if present,
|
|
108
|
+
* else the campaign.md frontmatter; throws `no_writable_status_target` when
|
|
109
|
+
* neither exists. Caller MUST hold the campaign-dir lock.
|
|
110
|
+
*/
|
|
111
|
+
export function setCampaignStatus(campaignDir, status) {
|
|
112
|
+
if (!VALID_LIFECYCLE.has(status)) {
|
|
113
|
+
throw new CampaignWriteError("campaign_write_failed", `invalid lifecycle status: ${String(status)}`);
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
if (writeStatusJson(campaignDir, status))
|
|
117
|
+
return;
|
|
118
|
+
if (writeFrontmatterStatus(campaignDir, status))
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
if (err instanceof CampaignWriteError)
|
|
123
|
+
throw err;
|
|
124
|
+
throw new CampaignWriteError("campaign_write_failed", `campaign status write failed: ${String(err).slice(0, 200)}`);
|
|
125
|
+
}
|
|
126
|
+
throw new CampaignWriteError("no_writable_status_target", "campaign has neither a status.json nor a campaign.md frontmatter block to write the status into");
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=campaign-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-write.js","sourceRoot":"","sources":["../../src/core/campaign-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9E,OAAO,IAAI,MAAM,WAAW,CAAC;AAQ7B,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAEhC;IADX,YACW,IAA4B,EACrC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAwB;QAIrC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IACnD,OAAO;IACP,QAAQ;IACR,UAAU;CACX,CAAC,CAAC;AAEH,qEAAqE;AACrE,SAAS,WAAW,CAAC,IAAY,EAAE,OAAe;IAChD,MAAM,GAAG,GAAG,GAAG,IAAI,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACrC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,kEAAkE;AAClE,SAAS,eAAe,CAAC,WAAmB,EAAE,MAAc;IAC1D,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,kBAAkB,CAC1B,uBAAuB,EACvB,oDAAoD,CACrD,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,kBAAkB,CAC1B,uBAAuB,EACvB,uDAAuD,CACxD,CAAC;IACJ,CAAC;IACA,MAAkC,CAAC,MAAM,GAAG,MAAM,CAAC;IACpD,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAAC,WAAmB,EAAE,MAAc;IACjE,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACpC,uFAAuF;IACvF,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC3E,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC,CAAC,8CAA8C;IACpE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,0EAA0E;IAC1E,yEAAyE;IACzE,0EAA0E;IAC1E,gEAAgE;IAChE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACjC,qEAAqE;QACrE,2EAA2E;QAC3E,0DAA0D;QAC1D,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,KAAK,GAAG,IAAI,CAAC;YACb,OAAO,WAAW,MAAM,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,KAAK;QAAE,SAAS,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;IAC5D,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5F,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACtB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAAmB,EACnB,MAA+B;IAE/B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,kBAAkB,CAC1B,uBAAuB,EACvB,6BAA6B,MAAM,CAAC,MAAM,CAAC,EAAE,CAC9C,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,IAAI,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC;YAAE,OAAO;QACjD,IAAI,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC;YAAE,OAAO;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,kBAAkB;YAAE,MAAM,GAAG,CAAC;QACjD,MAAM,IAAI,kBAAkB,CAC1B,uBAAuB,EACvB,iCAAiC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC7D,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,kBAAkB,CAC1B,2BAA2B,EAC3B,iGAAiG,CAClG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SdkSessionsStore } from "./sdk-sessions-store.js";
|
|
2
|
+
export interface CascadeDeleteProjectTasksDeps {
|
|
3
|
+
store: SdkSessionsStore;
|
|
4
|
+
ptyKillBestEffort?: (taskId: string) => Promise<void>;
|
|
5
|
+
scrollbackClearBestEffort?: (taskId: string) => Promise<void>;
|
|
6
|
+
snapshotClearBestEffort?: (taskId: string) => Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Remove every task whose `projectId === projectId`. Persists once (not
|
|
10
|
+
* per-task) iff at least one task was removed, then runs the best-effort
|
|
11
|
+
* scrollback + snapshot cleanup. Returns the number of tasks removed.
|
|
12
|
+
*/
|
|
13
|
+
export declare function cascadeDeleteProjectTasks(projectId: string, deps: CascadeDeleteProjectTasksDeps): Promise<number>;
|
|
14
|
+
//# sourceMappingURL=cascade-delete-project-tasks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade-delete-project-tasks.d.ts","sourceRoot":"","sources":["../../src/core/cascade-delete-project-tasks.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,gBAAgB,CAAC;IAIxB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,yBAAyB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,6BAA6B,GAClC,OAAO,CAAC,MAAM,CAAC,CA6CjB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* cascade-delete-project-tasks.ts —
|
|
3
|
+
* iterate-2026-07-06-project-delete-cascades-tasks.
|
|
4
|
+
*
|
|
5
|
+
* When a project is deleted (DELETE /api/projects/:id) every task that
|
|
6
|
+
* belonged to it must be removed too. Otherwise those tasks keep a dangling
|
|
7
|
+
* projectId and ProjectManager.getAll() perpetually synthesizes a phantom
|
|
8
|
+
* "Unassigned" row for them — one the client can neither clear nor filter,
|
|
9
|
+
* because the dangling id never equals the reserved "unassigned" sentinel
|
|
10
|
+
* (so the row also shows a count of 0). The load-time O26 normalization in
|
|
11
|
+
* sdk-sessions-store.ts only self-heals stale references on the NEXT server
|
|
12
|
+
* restart; this closes the runtime gap.
|
|
13
|
+
*
|
|
14
|
+
* Behaviour mirrors the single-task DELETE cascade in
|
|
15
|
+
* external/tasks/lifecycle.ts: drop the store row, then best-effort clear the
|
|
16
|
+
* scrollback + cell-state snapshot (both may hold secrets — the delete is the
|
|
17
|
+
* authoritative privacy boundary, ADR-068-A1 + ADR-087 MEDIUM-B1). The
|
|
18
|
+
* on-disk Claude JSONL under ~/.claude is NOT touched (webui is a read-only
|
|
19
|
+
* observer of that directory).
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Remove every task whose `projectId === projectId`. Persists once (not
|
|
23
|
+
* per-task) iff at least one task was removed, then runs the best-effort
|
|
24
|
+
* scrollback + snapshot cleanup. Returns the number of tasks removed.
|
|
25
|
+
*/
|
|
26
|
+
export async function cascadeDeleteProjectTasks(projectId, deps) {
|
|
27
|
+
const { store, ptyKillBestEffort, scrollbackClearBestEffort, snapshotClearBestEffort, } = deps;
|
|
28
|
+
const doomed = store.list().filter((t) => t.projectId === projectId);
|
|
29
|
+
if (doomed.length === 0)
|
|
30
|
+
return 0;
|
|
31
|
+
for (const t of doomed) {
|
|
32
|
+
store.delete(t.taskId);
|
|
33
|
+
}
|
|
34
|
+
await store.persist();
|
|
35
|
+
// Side-file cleanup runs AFTER the authoritative store mutation. Each call
|
|
36
|
+
// is independently best-effort: a failure to clear one task's scrollback
|
|
37
|
+
// must not abort the rest or reject the cascade.
|
|
38
|
+
for (const t of doomed) {
|
|
39
|
+
// D01/F01 — kill the live pty BEFORE this task's clears so its
|
|
40
|
+
// last-detach flush / kill-finalize cannot resurrect the wiped files.
|
|
41
|
+
if (ptyKillBestEffort) {
|
|
42
|
+
try {
|
|
43
|
+
await ptyKillBestEffort(t.taskId);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
/* best-effort */
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (scrollbackClearBestEffort) {
|
|
50
|
+
try {
|
|
51
|
+
await scrollbackClearBestEffort(t.taskId);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
/* best-effort */
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (snapshotClearBestEffort) {
|
|
58
|
+
try {
|
|
59
|
+
await snapshotClearBestEffort(t.taskId);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
/* best-effort */
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return doomed.length;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=cascade-delete-project-tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cascade-delete-project-tasks.js","sourceRoot":"","sources":["../../src/core/cascade-delete-project-tasks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAcH;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAiB,EACjB,IAAmC;IAEnC,MAAM,EACJ,KAAK,EACL,iBAAiB,EACjB,yBAAyB,EACzB,uBAAuB,GACxB,GAAG,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAElC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IAEtB,2EAA2E;IAC3E,yEAAyE;IACzE,iDAAiD;IACjD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,+DAA+D;QAC/D,sEAAsE;QACtE,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;QACD,IAAI,yBAAyB,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,yBAAyB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;QACD,IAAI,uBAAuB,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
/**
|
|
3
|
+
* Resolve an absolute path to the claude CLI.
|
|
4
|
+
*
|
|
5
|
+
* iterate-2026-05-08 v0.8.8 AC-2 — multi-strategy lookup:
|
|
6
|
+
*
|
|
7
|
+
* 1. `SHIPWRIGHT_CLAUDE_BIN` env override (operator pin). Loud reject
|
|
8
|
+
* if the path doesn't exist — falling back silently would mask
|
|
9
|
+
* misconfiguration that the operator explicitly set.
|
|
10
|
+
*
|
|
11
|
+
* 2. Primary: `where claude` (Windows) / `which claude` (POSIX).
|
|
12
|
+
* Inherits the launching shell's PATH. Prefers `.cmd` shim on
|
|
13
|
+
* Windows when multiple results match.
|
|
14
|
+
*
|
|
15
|
+
* 3. Fallback: walk a curated list of known install paths. Catches
|
|
16
|
+
* the common case where the launching shell's PATH did NOT include
|
|
17
|
+
* `~/.local/bin/`, npm-global, winget shim — even though the binary
|
|
18
|
+
* exists on disk. Empirically observed: tsx-watch reload after a
|
|
19
|
+
* shell change, claude installed AFTER server start, and so on.
|
|
20
|
+
*
|
|
21
|
+
* 4. Returns null when nothing resolves. `/api/diagnostics` then
|
|
22
|
+
* reports `claudeCli.supported = false` and the UI shows the
|
|
23
|
+
* "Claude Code CLI not found" warning.
|
|
24
|
+
*
|
|
25
|
+
* Logs a structured stderr line on every fallback hit so production
|
|
26
|
+
* operators can diagnose PATH-drift in the server log without DevTools.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveClaudeBin(): string | null;
|
|
29
|
+
export interface ResolveClaudeBinDeps {
|
|
30
|
+
platform: NodeJS.Platform | string;
|
|
31
|
+
spawnSync: typeof spawnSync;
|
|
32
|
+
existsSync: (p: string) => boolean;
|
|
33
|
+
env: Record<string, string | undefined>;
|
|
34
|
+
}
|
|
35
|
+
/** Test-friendly variant of resolveClaudeBin — all environment hooks injectable. */
|
|
36
|
+
export declare function resolveClaudeBinWith(deps: ResolveClaudeBinDeps): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* iterate-2026-05-08 v0.8.8 AC-3 — boot-time PATH self-heal.
|
|
39
|
+
*
|
|
40
|
+
* When the AC-2 fallback resolved a binary that lives in a directory
|
|
41
|
+
* NOT on `process.env.PATH`, prepend that directory so subsequent
|
|
42
|
+
* child processes (node-pty, preview-session-manager) inherit the
|
|
43
|
+
* augmented PATH. Common scenario: user installed claude into
|
|
44
|
+
* `~/.local/bin/`, opened the server from a shell that doesn't
|
|
45
|
+
* source the PATH-extending dotfile (e.g. PowerShell from a fresh
|
|
46
|
+
* Windows session).
|
|
47
|
+
*
|
|
48
|
+
* Idempotent — case-insensitive comparison on Windows, case-sensitive
|
|
49
|
+
* on POSIX. Loud-logs the prepend so production operators see PATH
|
|
50
|
+
* drift in the boot log.
|
|
51
|
+
*/
|
|
52
|
+
export interface SelfHealClaudePathDeps {
|
|
53
|
+
bin: string | null;
|
|
54
|
+
env: Record<string, string | undefined>;
|
|
55
|
+
platform: NodeJS.Platform | string;
|
|
56
|
+
}
|
|
57
|
+
export interface SelfHealResult {
|
|
58
|
+
augmented: boolean;
|
|
59
|
+
parentDir: string | null;
|
|
60
|
+
}
|
|
61
|
+
export declare function selfHealClaudePath(deps: SelfHealClaudePathDeps): SelfHealResult;
|
|
62
|
+
//# sourceMappingURL=claude-bin-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-bin-resolver.d.ts","sourceRoot":"","sources":["../../src/core/claude-bin-resolver.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAK/C;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAOhD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;IACnC,SAAS,EAAE,OAAO,SAAS,CAAC;IAC5B,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACzC;AAED,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAkE9E;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,sBAAsB,GAAG,cAAc,CAmD/E"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* claude-bin-resolver.ts — WHERE the Claude CLI is, and getting its parent dir
|
|
3
|
+
* onto PATH so child processes inherit it.
|
|
4
|
+
*
|
|
5
|
+
* Split out of cli-compat.ts (iterate-2026-07-31-win32-shell-spawn-remediation).
|
|
6
|
+
* That module is the CLI *version gate* — its own header says so — and had grown
|
|
7
|
+
* a second, unrelated concern: binary discovery, bolted on in v0.8.8. The two
|
|
8
|
+
* together carried the file 34 lines past the 300-line ceiling, where it sat as a
|
|
9
|
+
* grandfathered bloat-baseline entry; a security remediation needing a few lines
|
|
10
|
+
* there could not land without paying that debt down first.
|
|
11
|
+
*
|
|
12
|
+
* This is a PURE RELOCATION — not one line of logic changed in the move. The
|
|
13
|
+
* version gate keeps its own home, so CLAUDE.md architecture rule 10
|
|
14
|
+
* ("MIN_SUPPORTED_CLI is pinned in core/cli-compat.ts") still holds.
|
|
15
|
+
*
|
|
16
|
+
* The `[cli-compat]` prefix on the operator warnings below is LEFT ALONE on
|
|
17
|
+
* purpose. Those strings are observable output that production operators grep
|
|
18
|
+
* for in the boot log; renaming them would make this a behaviour change rather
|
|
19
|
+
* than a relocation, and would silently break anyone's existing log filter.
|
|
20
|
+
*/
|
|
21
|
+
import { spawnSync } from "node:child_process";
|
|
22
|
+
import { existsSync as fsExistsSync } from "node:fs";
|
|
23
|
+
import { platform } from "node:os";
|
|
24
|
+
import path from "node:path";
|
|
25
|
+
/**
|
|
26
|
+
* Resolve an absolute path to the claude CLI.
|
|
27
|
+
*
|
|
28
|
+
* iterate-2026-05-08 v0.8.8 AC-2 — multi-strategy lookup:
|
|
29
|
+
*
|
|
30
|
+
* 1. `SHIPWRIGHT_CLAUDE_BIN` env override (operator pin). Loud reject
|
|
31
|
+
* if the path doesn't exist — falling back silently would mask
|
|
32
|
+
* misconfiguration that the operator explicitly set.
|
|
33
|
+
*
|
|
34
|
+
* 2. Primary: `where claude` (Windows) / `which claude` (POSIX).
|
|
35
|
+
* Inherits the launching shell's PATH. Prefers `.cmd` shim on
|
|
36
|
+
* Windows when multiple results match.
|
|
37
|
+
*
|
|
38
|
+
* 3. Fallback: walk a curated list of known install paths. Catches
|
|
39
|
+
* the common case where the launching shell's PATH did NOT include
|
|
40
|
+
* `~/.local/bin/`, npm-global, winget shim — even though the binary
|
|
41
|
+
* exists on disk. Empirically observed: tsx-watch reload after a
|
|
42
|
+
* shell change, claude installed AFTER server start, and so on.
|
|
43
|
+
*
|
|
44
|
+
* 4. Returns null when nothing resolves. `/api/diagnostics` then
|
|
45
|
+
* reports `claudeCli.supported = false` and the UI shows the
|
|
46
|
+
* "Claude Code CLI not found" warning.
|
|
47
|
+
*
|
|
48
|
+
* Logs a structured stderr line on every fallback hit so production
|
|
49
|
+
* operators can diagnose PATH-drift in the server log without DevTools.
|
|
50
|
+
*/
|
|
51
|
+
export function resolveClaudeBin() {
|
|
52
|
+
return resolveClaudeBinWith({
|
|
53
|
+
platform: platform(),
|
|
54
|
+
spawnSync,
|
|
55
|
+
existsSync: fsExistsSync,
|
|
56
|
+
env: process.env,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/** Test-friendly variant of resolveClaudeBin — all environment hooks injectable. */
|
|
60
|
+
export function resolveClaudeBinWith(deps) {
|
|
61
|
+
const isWin = deps.platform === "win32";
|
|
62
|
+
// (1) Env override — explicit operator pin.
|
|
63
|
+
const override = deps.env.SHIPWRIGHT_CLAUDE_BIN?.trim();
|
|
64
|
+
if (override) {
|
|
65
|
+
if (deps.existsSync(override))
|
|
66
|
+
return override;
|
|
67
|
+
// Loud reject — operator set this on purpose; falling back silently
|
|
68
|
+
// would hide the typo.
|
|
69
|
+
// eslint-disable-next-line no-console
|
|
70
|
+
console.warn(`[cli-compat] SHIPWRIGHT_CLAUDE_BIN=${override} does not exist; resolveClaudeBin returning null`);
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
// (2) Primary lookup via `where` / `which`. Wrapped in try so a
|
|
74
|
+
// missing system binary (rare on Windows, possible on minimal
|
|
75
|
+
// POSIX containers) doesn't preempt the curated fallback.
|
|
76
|
+
//
|
|
77
|
+
// External code review fix (gemini high): `where claude` on Windows
|
|
78
|
+
// emits `INFO: Could not find files for the given pattern(s).` to
|
|
79
|
+
// STDOUT (not stderr) when no match. Filter that out, otherwise the
|
|
80
|
+
// first-line fallback would parse the INFO line as a path and the
|
|
81
|
+
// existsSync check at the call-site would never run.
|
|
82
|
+
let primaryResult = null;
|
|
83
|
+
try {
|
|
84
|
+
const lookup = isWin ? "where" : "which";
|
|
85
|
+
const r = deps.spawnSync(lookup, ["claude"], { encoding: "utf-8", shell: false });
|
|
86
|
+
if (!r.error) {
|
|
87
|
+
const lines = (r.stdout ?? "")
|
|
88
|
+
.split(/\r?\n/)
|
|
89
|
+
.map((l) => l.trim())
|
|
90
|
+
.filter(Boolean)
|
|
91
|
+
.filter((l) => !/^INFO:/i.test(l)); // drop `where`'s "Could not find" notice
|
|
92
|
+
if (isWin) {
|
|
93
|
+
const dotCmd = lines.find((l) => /\.cmd$/i.test(l));
|
|
94
|
+
if (dotCmd)
|
|
95
|
+
primaryResult = dotCmd;
|
|
96
|
+
}
|
|
97
|
+
primaryResult = primaryResult ?? lines[0] ?? null;
|
|
98
|
+
// Defense-in-depth: ensure the resolved path actually exists on
|
|
99
|
+
// disk. `where` can sometimes return stale alias entries that
|
|
100
|
+
// no longer point at a real file (operator un-installed claude
|
|
101
|
+
// but kept the App Execution Alias entry).
|
|
102
|
+
if (primaryResult && !deps.existsSync(primaryResult)) {
|
|
103
|
+
primaryResult = null;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
/* fall through to curated paths */
|
|
109
|
+
}
|
|
110
|
+
if (primaryResult)
|
|
111
|
+
return primaryResult;
|
|
112
|
+
// (3) Curated fallback paths. Per-platform, priority-ordered.
|
|
113
|
+
const candidates = curatedCandidates(isWin, deps.env);
|
|
114
|
+
for (const candidate of candidates) {
|
|
115
|
+
if (deps.existsSync(candidate)) {
|
|
116
|
+
// eslint-disable-next-line no-console
|
|
117
|
+
console.warn(`[cli-compat] resolved claude via fallback path: ${candidate} (PATH lookup empty — operator may want to add the parent dir to PATH OR set SHIPWRIGHT_CLAUDE_BIN)`);
|
|
118
|
+
return candidate;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
export function selfHealClaudePath(deps) {
|
|
124
|
+
if (!deps.bin)
|
|
125
|
+
return { augmented: false, parentDir: null };
|
|
126
|
+
const isWin = deps.platform === "win32";
|
|
127
|
+
const sep = isWin ? ";" : ":";
|
|
128
|
+
// Use the explicit platform's path module — NOT the runner-native
|
|
129
|
+
// `path` default. The runner is POSIX on Linux CI, which silently
|
|
130
|
+
// mis-parses `C:\...` inputs as a single basename and returns "."
|
|
131
|
+
// from `dirname`. Empirically: the 4 win32 test cases below passed on
|
|
132
|
+
// Windows dev machines but failed on Ubuntu CI for 9 push-runs after
|
|
133
|
+
// v0.8.5 because of this exact gap.
|
|
134
|
+
const pathMod = isWin ? path.win32 : path.posix;
|
|
135
|
+
const parentDir = pathMod.dirname(deps.bin);
|
|
136
|
+
// External code review fix (openai medium): on Windows, environment
|
|
137
|
+
// variables are case-insensitive AND many process spawners expose the
|
|
138
|
+
// path variable as `Path` rather than `PATH`. If we always read+write
|
|
139
|
+
// `env.PATH`, we may be looking at an empty string while the real
|
|
140
|
+
// value lives at `Path` — and child processes that inherit `Path`
|
|
141
|
+
// would not see the prepended dir. Detect the existing key (any
|
|
142
|
+
// case) on Windows and update it in place.
|
|
143
|
+
let pathKey = "PATH";
|
|
144
|
+
if (isWin) {
|
|
145
|
+
for (const k of Object.keys(deps.env)) {
|
|
146
|
+
if (k.toLowerCase() === "path") {
|
|
147
|
+
pathKey = k;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const currentPath = deps.env[pathKey] ?? "";
|
|
153
|
+
const entries = currentPath.length > 0 ? currentPath.split(sep) : [];
|
|
154
|
+
// Normalize both sides identically: strip trailing slashes/backslashes
|
|
155
|
+
// (`C:\foo\` vs `C:\foo`), and case-fold on Windows.
|
|
156
|
+
const stripTrailing = (s) => s.replace(/[\\/]+$/, "");
|
|
157
|
+
const norm = (s) => {
|
|
158
|
+
const t = stripTrailing(s);
|
|
159
|
+
return isWin ? t.toLowerCase() : t;
|
|
160
|
+
};
|
|
161
|
+
const parentNorm = norm(parentDir);
|
|
162
|
+
const alreadyPresent = entries.some((e) => norm(e) === parentNorm);
|
|
163
|
+
if (alreadyPresent) {
|
|
164
|
+
return { augmented: false, parentDir };
|
|
165
|
+
}
|
|
166
|
+
deps.env[pathKey] =
|
|
167
|
+
currentPath.length > 0 ? `${parentDir}${sep}${currentPath}` : parentDir;
|
|
168
|
+
// eslint-disable-next-line no-console
|
|
169
|
+
console.warn(`[cli-compat] PATH self-heal: prepended ${parentDir} into env.${pathKey} (claude resolved via fallback; child-process spawns inherit augmented PATH)`);
|
|
170
|
+
return { augmented: true, parentDir };
|
|
171
|
+
}
|
|
172
|
+
function curatedCandidates(isWin, env) {
|
|
173
|
+
if (isWin) {
|
|
174
|
+
const userProfile = env.USERPROFILE ?? "";
|
|
175
|
+
const appData = env.APPDATA ?? "";
|
|
176
|
+
const localAppData = env.LOCALAPPDATA ?? "";
|
|
177
|
+
const programFiles = env.ProgramFiles ?? "";
|
|
178
|
+
const c = [];
|
|
179
|
+
if (userProfile) {
|
|
180
|
+
c.push(path.join(userProfile, ".local", "bin", "claude.exe"));
|
|
181
|
+
c.push(path.join(userProfile, ".local", "bin", "claude.cmd"));
|
|
182
|
+
}
|
|
183
|
+
if (appData) {
|
|
184
|
+
// npm global install
|
|
185
|
+
c.push(path.join(appData, "npm", "claude.cmd"));
|
|
186
|
+
c.push(path.join(appData, "npm", "claude.exe"));
|
|
187
|
+
}
|
|
188
|
+
if (localAppData) {
|
|
189
|
+
// winget shim
|
|
190
|
+
c.push(path.join(localAppData, "Microsoft", "WinGet", "Links", "claude.exe"));
|
|
191
|
+
}
|
|
192
|
+
if (programFiles) {
|
|
193
|
+
c.push(path.join(programFiles, "Claude Code", "claude.exe"));
|
|
194
|
+
}
|
|
195
|
+
return c;
|
|
196
|
+
}
|
|
197
|
+
// POSIX
|
|
198
|
+
const home = env.HOME ?? "";
|
|
199
|
+
const c = [];
|
|
200
|
+
if (home) {
|
|
201
|
+
c.push(path.posix.join(home, ".local", "bin", "claude"));
|
|
202
|
+
c.push(path.posix.join(home, ".npm-global", "bin", "claude"));
|
|
203
|
+
}
|
|
204
|
+
c.push("/usr/local/bin/claude");
|
|
205
|
+
c.push("/opt/homebrew/bin/claude"); // Apple Silicon Homebrew
|
|
206
|
+
return c;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=claude-bin-resolver.js.map
|