@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,111 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* campaign-paths.ts — centralized resolver for a project's campaigns dir
|
|
3
|
+
* `<project>/.shipwright/planning/iterate/campaigns`.
|
|
4
|
+
*
|
|
5
|
+
* Sibling of `triage-paths.ts` (ADR-101): same realpath + path.relative
|
|
6
|
+
* containment semantics so a symlinked `.shipwright` (or any ancestor)
|
|
7
|
+
* pointing outside the project can't redirect reads. The campaigns dir is
|
|
8
|
+
* four segments deep and frequently does not exist yet, so the "not present"
|
|
9
|
+
* case is a normal `{ ok:true, existed:false }` result — the route turns that
|
|
10
|
+
* into `200 { campaigns: [] }`, NOT a 404 (404 is reserved for unknown /
|
|
11
|
+
* synthesized project ids).
|
|
12
|
+
*
|
|
13
|
+
* Returns the realpath-resolved campaigns dir when it exists; otherwise the
|
|
14
|
+
* static candidate path after verifying the nearest existing ancestor is
|
|
15
|
+
* within the (realpath-resolved) project root.
|
|
16
|
+
*/
|
|
17
|
+
import path from "node:path";
|
|
18
|
+
import { existsSync, realpathSync, statSync } from "node:fs";
|
|
19
|
+
/** `.shipwright/planning/iterate/campaigns` — constant, no user input. */
|
|
20
|
+
const SUBDIR_SEGMENTS = [
|
|
21
|
+
".shipwright",
|
|
22
|
+
"planning",
|
|
23
|
+
"iterate",
|
|
24
|
+
"campaigns",
|
|
25
|
+
];
|
|
26
|
+
export function resolveCampaignsDir(project) {
|
|
27
|
+
if (project.synthesized) {
|
|
28
|
+
return { ok: false, error: { reason: "synthesized_project" } };
|
|
29
|
+
}
|
|
30
|
+
if (!project.path || typeof project.path !== "string") {
|
|
31
|
+
return { ok: false, error: { reason: "missing_project_path" } };
|
|
32
|
+
}
|
|
33
|
+
// Resolve project.path to its realpath when it exists; fall through to the
|
|
34
|
+
// literal resolve otherwise (the candidate is still emitted — readCampaigns
|
|
35
|
+
// returns [] for a non-existent dir).
|
|
36
|
+
let projectRoot;
|
|
37
|
+
try {
|
|
38
|
+
projectRoot = realpathSync(project.path);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
projectRoot = path.resolve(project.path);
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const st = statSync(projectRoot);
|
|
45
|
+
if (!st.isDirectory()) {
|
|
46
|
+
return { ok: false, error: { reason: "project_root_not_directory" } };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Project root doesn't exist — emit the candidate; the store reads [].
|
|
51
|
+
const candidate = path.join(projectRoot, ...SUBDIR_SEGMENTS);
|
|
52
|
+
return { ok: true, absolute: candidate, projectRoot, existed: false };
|
|
53
|
+
}
|
|
54
|
+
const candidate = path.resolve(projectRoot, ...SUBDIR_SEGMENTS);
|
|
55
|
+
// Dir exists → realpath it (defeats a symlinked ancestor) + verify within.
|
|
56
|
+
if (existsSync(candidate)) {
|
|
57
|
+
let resolved;
|
|
58
|
+
try {
|
|
59
|
+
resolved = realpathSync(candidate);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return { ok: false, error: { reason: "path_traversal" } };
|
|
63
|
+
}
|
|
64
|
+
if (!isWithin(projectRoot, resolved)) {
|
|
65
|
+
return { ok: false, error: { reason: "path_traversal" } };
|
|
66
|
+
}
|
|
67
|
+
return { ok: true, absolute: resolved, projectRoot, existed: true };
|
|
68
|
+
}
|
|
69
|
+
// Dir doesn't exist — walk up to the nearest EXISTING ancestor and verify
|
|
70
|
+
// it stays within the project root (a symlinked `.shipwright` pointing
|
|
71
|
+
// outside is the escape vector this guards).
|
|
72
|
+
let ancestor = path.dirname(candidate);
|
|
73
|
+
while (ancestor &&
|
|
74
|
+
ancestor !== path.dirname(ancestor) &&
|
|
75
|
+
!existsSync(ancestor)) {
|
|
76
|
+
ancestor = path.dirname(ancestor);
|
|
77
|
+
}
|
|
78
|
+
if (existsSync(ancestor)) {
|
|
79
|
+
let resolvedAncestor;
|
|
80
|
+
try {
|
|
81
|
+
resolvedAncestor = realpathSync(ancestor);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return { ok: false, error: { reason: "path_traversal" } };
|
|
85
|
+
}
|
|
86
|
+
if (!isWithin(projectRoot, resolvedAncestor)) {
|
|
87
|
+
return { ok: false, error: { reason: "path_traversal" } };
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { ok: true, absolute: candidate, projectRoot, existed: false };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* True when `candidate` is `projectRoot` itself or a descendant of it.
|
|
94
|
+
* Exported so `campaign-store.ts` shares the single containment SSoT for its
|
|
95
|
+
* per-step spec-file symlink-escape guard.
|
|
96
|
+
*/
|
|
97
|
+
export function isWithin(projectRoot, candidate) {
|
|
98
|
+
const rel = path.relative(projectRoot, candidate);
|
|
99
|
+
if (!rel)
|
|
100
|
+
return true; // exact match — root itself
|
|
101
|
+
if (path.isAbsolute(rel))
|
|
102
|
+
return false; // different drive / root
|
|
103
|
+
// Reject only a genuine upward escape — a leading ".." SEGMENT — so a real
|
|
104
|
+
// descendant directory literally named "..safe" is not falsely rejected
|
|
105
|
+
// (external code review). Mirrors core/path-guard.ts.
|
|
106
|
+
if (rel === ".." || rel.startsWith(".." + path.sep) || rel.startsWith("../")) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=campaign-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-paths.js","sourceRoot":"","sources":["../../src/core/campaign-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Context } from "hono";
|
|
2
|
+
/** True for a proper-lockfile contention error (retries exhausted). */
|
|
3
|
+
export declare function isElockedError(err: unknown): boolean;
|
|
4
|
+
/** 503 body for a contended campaign lock — the client retries. */
|
|
5
|
+
export declare function lockUnavailable(c: Context): Response & import("hono").TypedResponse<{
|
|
6
|
+
error: string;
|
|
7
|
+
message: string;
|
|
8
|
+
}, 503, "json">;
|
|
9
|
+
/** Release a held lock, swallowing (warn-logging) a release failure. */
|
|
10
|
+
export declare function releaseQuietly(release: () => Promise<void>): Promise<void>;
|
|
11
|
+
/**
|
|
12
|
+
* Guard a campaign slug used as a dismissed-state map key (not a filesystem
|
|
13
|
+
* path — dismiss/restore never touch the campaign dir, which may not exist for
|
|
14
|
+
* a derivedFromEvents ghost). Rejects empty, over-long, and any input bearing a
|
|
15
|
+
* C0 control char or a path separator, so a malformed param can't poison the
|
|
16
|
+
* webui-owned state file.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isValidCampaignSlug(slug: string): boolean;
|
|
19
|
+
//# sourceMappingURL=campaign-route-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-route-helpers.d.ts","sourceRoot":"","sources":["../../src/core/campaign-route-helpers.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAMpD;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO;;;gBAQzC;AAED,wEAAwE;AACxE,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOzD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* campaign-route-helpers.ts — shared helpers for the Campaigns routes.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `routes/campaigns.ts` so the `start` and `dismiss`/`restore`
|
|
5
|
+
* write endpoints share one copy of the lock-failure classification (mirrors
|
|
6
|
+
* triage.ts / ADR-106) and the route file stays under the 300-LOC ceiling.
|
|
7
|
+
*/
|
|
8
|
+
/** True for a proper-lockfile contention error (retries exhausted). */
|
|
9
|
+
export function isElockedError(err) {
|
|
10
|
+
return (typeof err === "object" &&
|
|
11
|
+
err !== null &&
|
|
12
|
+
err.code === "ELOCKED");
|
|
13
|
+
}
|
|
14
|
+
/** 503 body for a contended campaign lock — the client retries. */
|
|
15
|
+
export function lockUnavailable(c) {
|
|
16
|
+
return c.json({
|
|
17
|
+
error: "lock_unavailable",
|
|
18
|
+
message: "Campaign storage is busy — please retry in a moment.",
|
|
19
|
+
}, 503);
|
|
20
|
+
}
|
|
21
|
+
/** Release a held lock, swallowing (warn-logging) a release failure. */
|
|
22
|
+
export async function releaseQuietly(release) {
|
|
23
|
+
try {
|
|
24
|
+
await release();
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
console.warn(JSON.stringify({
|
|
28
|
+
level: "warn",
|
|
29
|
+
message: "campaign route: lock release failed (ignored)",
|
|
30
|
+
error: String(err).slice(0, 200),
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Guard a campaign slug used as a dismissed-state map key (not a filesystem
|
|
36
|
+
* path — dismiss/restore never touch the campaign dir, which may not exist for
|
|
37
|
+
* a derivedFromEvents ghost). Rejects empty, over-long, and any input bearing a
|
|
38
|
+
* C0 control char or a path separator, so a malformed param can't poison the
|
|
39
|
+
* webui-owned state file.
|
|
40
|
+
*/
|
|
41
|
+
export function isValidCampaignSlug(slug) {
|
|
42
|
+
if (typeof slug !== "string" || slug.length === 0 || slug.length > 200)
|
|
43
|
+
return false;
|
|
44
|
+
for (let i = 0; i < slug.length; i++) {
|
|
45
|
+
const code = slug.charCodeAt(i);
|
|
46
|
+
if (code < 0x20 || code === 0x2f || code === 0x5c)
|
|
47
|
+
return false; // C0, '/', '\'
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=campaign-route-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-route-helpers.js","sourceRoot":"","sources":["../../src/core/campaign-route-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO,CACL,OAAO,GAAG,KAAK,QAAQ;QACvB,GAAG,KAAK,IAAI;QACX,GAA0B,CAAC,IAAI,KAAK,SAAS,CAC/C,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,eAAe,CAAC,CAAU;IACxC,OAAO,CAAC,CAAC,IAAI,CACX;QACE,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE,sDAAsD;KAChE,EACD,GAAG,CACJ,CAAC;AACJ,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA4B;IAC/D,IAAI,CAAC;QACH,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,IAAI,CAAC,SAAS,CAAC;YACb,KAAK,EAAE,MAAM;YACb,OAAO,EAAE,+CAA+C;YACxD,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;SACjC,CAAC,CACH,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IACrF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC,CAAC,eAAe;IAClF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Campaign-level lifecycle status, producer-owned (status.json top-level
|
|
3
|
+
* `status`, or hand-authored campaign.md frontmatter `status:`). Optional — a
|
|
4
|
+
* campaign without it is "legacy" and consumers fall back to derived done/total.
|
|
5
|
+
* draft = planned (triage-only), active = running (shown on the board),
|
|
6
|
+
* complete = done (hidden).
|
|
7
|
+
*/
|
|
8
|
+
export type CampaignLifecycleStatus = "draft" | "active" | "complete";
|
|
9
|
+
export interface StatusSubIterate {
|
|
10
|
+
id?: unknown;
|
|
11
|
+
slug?: unknown;
|
|
12
|
+
status?: unknown;
|
|
13
|
+
commit?: unknown;
|
|
14
|
+
branch?: unknown;
|
|
15
|
+
}
|
|
16
|
+
export interface StatusJson {
|
|
17
|
+
branch_strategy?: unknown;
|
|
18
|
+
status?: unknown;
|
|
19
|
+
sub_iterates?: unknown;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The three genuinely different outcomes of reading `status.json`.
|
|
23
|
+
*
|
|
24
|
+
* `readStatusJson` collapses `absent` and `unreadable` into one `null`, and that
|
|
25
|
+
* collapse is a defect the consumer cannot recover from: falling back to the
|
|
26
|
+
* `campaign.md` table is CORRECT in both cases, but only one of them is a fault.
|
|
27
|
+
* "This campaign has no live status file" and "this campaign's live status file
|
|
28
|
+
* could not be read" support very different claims, and a caller that cannot
|
|
29
|
+
* tell them apart ends up presenting a stale table row as current fact.
|
|
30
|
+
*/
|
|
31
|
+
export type StatusJsonRead = {
|
|
32
|
+
state: "ok";
|
|
33
|
+
json: StatusJson;
|
|
34
|
+
} | {
|
|
35
|
+
state: "absent";
|
|
36
|
+
} | {
|
|
37
|
+
state: "unreadable";
|
|
38
|
+
};
|
|
39
|
+
/** Read + JSON-parse `<campaignDir>/status.json`, keeping WHY it failed. */
|
|
40
|
+
export declare function readStatusJsonRead(campaignDir: string): StatusJsonRead;
|
|
41
|
+
/**
|
|
42
|
+
* Read + JSON-parse `<campaignDir>/status.json`, or null when absent/torn.
|
|
43
|
+
*
|
|
44
|
+
* Back-compat wrapper over `readStatusJsonRead` for callers that only need the
|
|
45
|
+
* payload. Anything RENDERING a claim derived from this should use the
|
|
46
|
+
* discriminated form instead — see the type doc above.
|
|
47
|
+
*/
|
|
48
|
+
export declare function readStatusJson(campaignDir: string): StatusJson | null;
|
|
49
|
+
/**
|
|
50
|
+
* Resolve the campaign-level lifecycle status: status.json top-level `status`
|
|
51
|
+
* wins, else the campaign.md frontmatter `status:`. Unknown / absent → null
|
|
52
|
+
* (legacy; the consumer falls back to done/total).
|
|
53
|
+
*/
|
|
54
|
+
export declare function pickLifecycle(status: StatusJson | null, fm: Record<string, string>): CampaignLifecycleStatus | null;
|
|
55
|
+
//# sourceMappingURL=campaign-status-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-status-json.d.ts","sourceRoot":"","sources":["../../src/core/campaign-status-json.ts"],"names":[],"mappings":"AAcA;;;;;;GAMG;AACH,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAQtE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GACjC;IAAE,KAAK,EAAE,QAAQ,CAAA;CAAE,GACnB;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAE5B,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CActE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAGrE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,GAAG,IAAI,EACzB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACzB,uBAAuB,GAAG,IAAI,CAKhC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* campaign-status-json.ts — the `status.json` input-reader for campaigns
|
|
3
|
+
* (the JSON-side sibling of `campaign-parse.ts`, which reads campaign.md).
|
|
4
|
+
*
|
|
5
|
+
* `status.json` is written by `campaign_init.py` / `campaign_progress.py` /
|
|
6
|
+
* the autonomous loop. It carries per-sub-iterate status + (new) a top-level
|
|
7
|
+
* campaign lifecycle `status`. Reads are torn-read tolerant (the 3 s poll can
|
|
8
|
+
* race a Python write) — a malformed/half-written file resolves to null and the
|
|
9
|
+
* caller falls back to campaign.md.
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
12
|
+
import path from "node:path";
|
|
13
|
+
const VALID_LIFECYCLE = new Set([
|
|
14
|
+
"draft",
|
|
15
|
+
"active",
|
|
16
|
+
"complete",
|
|
17
|
+
]);
|
|
18
|
+
/** Read + JSON-parse `<campaignDir>/status.json`, keeping WHY it failed. */
|
|
19
|
+
export function readStatusJsonRead(campaignDir) {
|
|
20
|
+
const p = path.join(campaignDir, "status.json");
|
|
21
|
+
if (!existsSync(p))
|
|
22
|
+
return { state: "absent" };
|
|
23
|
+
try {
|
|
24
|
+
const parsed = JSON.parse(readFileSync(p, "utf-8"));
|
|
25
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
26
|
+
// A file that IS there and holds a non-object is malformed, not absent.
|
|
27
|
+
return { state: "unreadable" };
|
|
28
|
+
}
|
|
29
|
+
return { state: "ok", json: parsed };
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// torn read / malformed / permission → the file exists and we cannot use it
|
|
33
|
+
return { state: "unreadable" };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Read + JSON-parse `<campaignDir>/status.json`, or null when absent/torn.
|
|
38
|
+
*
|
|
39
|
+
* Back-compat wrapper over `readStatusJsonRead` for callers that only need the
|
|
40
|
+
* payload. Anything RENDERING a claim derived from this should use the
|
|
41
|
+
* discriminated form instead — see the type doc above.
|
|
42
|
+
*/
|
|
43
|
+
export function readStatusJson(campaignDir) {
|
|
44
|
+
const r = readStatusJsonRead(campaignDir);
|
|
45
|
+
return r.state === "ok" ? r.json : null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Resolve the campaign-level lifecycle status: status.json top-level `status`
|
|
49
|
+
* wins, else the campaign.md frontmatter `status:`. Unknown / absent → null
|
|
50
|
+
* (legacy; the consumer falls back to done/total).
|
|
51
|
+
*/
|
|
52
|
+
export function pickLifecycle(status, fm) {
|
|
53
|
+
const fromJson = status && typeof status.status === "string" ? status.status : "";
|
|
54
|
+
const raw = (fromJson || fm.status || "").trim().toLowerCase();
|
|
55
|
+
return VALID_LIFECYCLE.has(raw) ? raw : null;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=campaign-status-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-status-json.js","sourceRoot":"","sources":["../../src/core/campaign-status-json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAW7B,MAAM,eAAe,GAAwB,IAAI,GAAG,CAAC;IACnD,OAAO;IACP,QAAQ;IACR,UAAU;CACX,CAAC,CAAC;AA+BH,4EAA4E;AAC5E,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,wEAAwE;YACxE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAoB,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,4EAA4E;QAC5E,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,MAAM,CAAC,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAyB,EACzB,EAA0B;IAE1B,MAAM,QAAQ,GACZ,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/D,OAAO,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,GAA+B,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Campaign } from "./campaign-types.js";
|
|
2
|
+
export type { Campaign, CampaignProvenance, CampaignStep, CampaignStepStatus, } from "./campaign-types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Read every campaign under `campaignsDir`. Returns [] when the dir is
|
|
5
|
+
* missing/unreadable. `projectRoot` (realpath-resolved) is used to derive
|
|
6
|
+
* project-root-relative spec paths. Sorted by slug descending (date-prefixed
|
|
7
|
+
* slugs → newest first; assumes a sortable prefix).
|
|
8
|
+
*/
|
|
9
|
+
export declare function readCampaigns(campaignsDir: string, projectRoot: string): Campaign[];
|
|
10
|
+
//# sourceMappingURL=campaign-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-store.d.ts","sourceRoot":"","sources":["../../src/core/campaign-store.ts"],"names":[],"mappings":"AAsCA,OAAO,KAAK,EACV,QAAQ,EAIT,MAAM,qBAAqB,CAAC;AAI7B,YAAY,EACV,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AA0M7B;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,QAAQ,EAAE,CA8BZ"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* campaign-store.ts — read-only reader for Shipwright iterate campaigns under
|
|
3
|
+
* `<project>/.shipwright/planning/iterate/campaigns/<slug>/`.
|
|
4
|
+
*
|
|
5
|
+
* Producer/consumer boundary (see iterate spec "Affected Boundaries"):
|
|
6
|
+
* - `campaign.md` — `campaign_init.py init_campaign` (parsed by
|
|
7
|
+
* `campaign-parse.ts`: frontmatter + `## Intent` + `## Sub-Iterates` table).
|
|
8
|
+
* - `status.json` — `campaign_init.py` + `campaign_progress.py
|
|
9
|
+
* cmd_update_status`: `{ branch_strategy, sub_iterates:[{id, slug,
|
|
10
|
+
* status, commit, branch, …}] }`.
|
|
11
|
+
*
|
|
12
|
+
* Resolution contract:
|
|
13
|
+
* - `status.json` is authoritative for per-step status / commit / branch.
|
|
14
|
+
* - `campaign.md` table provides ordering + titles (status.json has no title).
|
|
15
|
+
* - status.json absent → status derived from the campaign.md table column.
|
|
16
|
+
* - Every campaign dir is parsed under its own try/catch: a malformed or
|
|
17
|
+
* half-written file (the 3 s poll WILL race a Python write) is tolerated —
|
|
18
|
+
* a bad `status.json` falls back to the table; a dir with nothing parseable
|
|
19
|
+
* is skipped (warn-logged). One bad campaign never hides the others.
|
|
20
|
+
*
|
|
21
|
+
* No cache: a single active project polled at 3 s reads a handful of tiny files.
|
|
22
|
+
*/
|
|
23
|
+
import { existsSync, readFileSync, readdirSync, realpathSync } from "node:fs";
|
|
24
|
+
import path from "node:path";
|
|
25
|
+
import { isWithin } from "./campaign-paths.js";
|
|
26
|
+
import { parseFrontmatter, parseIntent, parseSubIteratesTable, parseSpecFrontmatter, } from "./campaign-parse.js";
|
|
27
|
+
import { readStatusJsonRead, pickLifecycle } from "./campaign-status-json.js";
|
|
28
|
+
const VALID_STATUSES = new Set([
|
|
29
|
+
"pending",
|
|
30
|
+
"in_progress",
|
|
31
|
+
"complete",
|
|
32
|
+
"failed",
|
|
33
|
+
"escalated",
|
|
34
|
+
]);
|
|
35
|
+
/**
|
|
36
|
+
* True when a derived spec path holds a double-quote or any C0 control char.
|
|
37
|
+
* Such a path would break out of the double-quoted launch command, so we
|
|
38
|
+
* null it out rather than hand the operator a malformed string. Spaces and
|
|
39
|
+
* hyphens are fine — slugs are full of hyphens and the command quotes the path.
|
|
40
|
+
*/
|
|
41
|
+
function hasUnsafeChar(s) {
|
|
42
|
+
for (let i = 0; i < s.length; i++) {
|
|
43
|
+
const code = s.charCodeAt(i);
|
|
44
|
+
if (code < 0x20 || code === 0x22)
|
|
45
|
+
return true; // C0 control or '"'
|
|
46
|
+
}
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Derive a step's `{ specPath, planFirst }` from its sub-iterate spec file in
|
|
51
|
+
* ONE existence + symlink-containment guard (external review HIGH #6/#7):
|
|
52
|
+
* - specPath: project-root-relative POSIX path, or null when the file is
|
|
53
|
+
* missing / escapes the root / holds shell-hostile chars.
|
|
54
|
+
* - planFirst: the forward-compat plan-first/risk frontmatter marker (false
|
|
55
|
+
* for every campaign today — the producer writes none).
|
|
56
|
+
* Tolerant: any miss / escape / torn read → `{ specPath:null, planFirst:false }`.
|
|
57
|
+
*/
|
|
58
|
+
function deriveSpecMeta(projectRoot, campaignDir, id, slug) {
|
|
59
|
+
const miss = { specPath: null, planFirst: false };
|
|
60
|
+
if (!slug)
|
|
61
|
+
return miss; // can't form the `<id>-<slug>.md` filename
|
|
62
|
+
const specFile = path.join(campaignDir, "sub-iterates", `${id}-${slug}.md`);
|
|
63
|
+
if (!existsSync(specFile))
|
|
64
|
+
return miss;
|
|
65
|
+
let planFirst = false;
|
|
66
|
+
try {
|
|
67
|
+
if (!isWithin(projectRoot, realpathSync(specFile)))
|
|
68
|
+
return miss;
|
|
69
|
+
planFirst = parseSpecFrontmatter(readFileSync(specFile, "utf-8")).planFirst;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return miss;
|
|
73
|
+
}
|
|
74
|
+
const rel = path.relative(projectRoot, specFile);
|
|
75
|
+
if (!rel || rel.startsWith("..") || path.isAbsolute(rel))
|
|
76
|
+
return { specPath: null, planFirst };
|
|
77
|
+
const posix = rel.split(path.sep).join("/");
|
|
78
|
+
if (hasUnsafeChar(posix))
|
|
79
|
+
return { specPath: null, planFirst };
|
|
80
|
+
return { specPath: posix, planFirst };
|
|
81
|
+
}
|
|
82
|
+
/** Build a single Campaign from its dir, or null when nothing parseable. */
|
|
83
|
+
function buildCampaign(campaignDir, slug, projectRoot) {
|
|
84
|
+
const mdPath = path.join(campaignDir, "campaign.md");
|
|
85
|
+
let md = "";
|
|
86
|
+
// A campaign.md that is THERE and unreadable is a fault; one that is simply
|
|
87
|
+
// absent is not. The two used to be one empty string.
|
|
88
|
+
let mdUnreadable = false;
|
|
89
|
+
if (existsSync(mdPath)) {
|
|
90
|
+
try {
|
|
91
|
+
md = readFileSync(mdPath, "utf-8");
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
md = "";
|
|
95
|
+
mdUnreadable = true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const statusRead = readStatusJsonRead(campaignDir);
|
|
99
|
+
const status = statusRead.state === "ok" ? statusRead.json : null;
|
|
100
|
+
// Neither source present → not a campaign (empty/garbage dir) → skip.
|
|
101
|
+
// Unchanged on purpose: a dir with NOTHING usable already resolves to a
|
|
102
|
+
// typed `unavailable` downstream (no record found), which is honest. The
|
|
103
|
+
// degradation this iterate fixes is the one that produces a campaign object.
|
|
104
|
+
if (!md && !status)
|
|
105
|
+
return null;
|
|
106
|
+
const fm = parseFrontmatter(md);
|
|
107
|
+
const tableRows = parseSubIteratesTable(md);
|
|
108
|
+
const statusById = new Map();
|
|
109
|
+
const statusSubs = Array.isArray(status?.sub_iterates)
|
|
110
|
+
? status.sub_iterates
|
|
111
|
+
: [];
|
|
112
|
+
for (const si of statusSubs) {
|
|
113
|
+
if (si && typeof si.id === "string")
|
|
114
|
+
statusById.set(si.id, si);
|
|
115
|
+
}
|
|
116
|
+
// Membership + order: the campaign.md table when present, else status.json.
|
|
117
|
+
const bases = tableRows.length > 0
|
|
118
|
+
? tableRows.map((r) => ({
|
|
119
|
+
id: r.id,
|
|
120
|
+
slug: r.slug,
|
|
121
|
+
title: r.title,
|
|
122
|
+
tableStatus: r.status,
|
|
123
|
+
}))
|
|
124
|
+
: statusSubs
|
|
125
|
+
.filter((si) => si && typeof si.id === "string")
|
|
126
|
+
.map((si) => ({
|
|
127
|
+
id: si.id,
|
|
128
|
+
slug: typeof si.slug === "string" ? si.slug : "",
|
|
129
|
+
title: typeof si.slug === "string" ? si.slug : si.id,
|
|
130
|
+
tableStatus: "",
|
|
131
|
+
}));
|
|
132
|
+
const steps = bases.map((b) => {
|
|
133
|
+
const sj = statusById.get(b.id);
|
|
134
|
+
const stepSlug = b.slug || (sj && typeof sj.slug === "string" ? sj.slug : "");
|
|
135
|
+
// status.json wins; else the table column; else pending. The SOURCE is
|
|
136
|
+
// recorded alongside the value — a status is a claim, and this is its basis.
|
|
137
|
+
const fromJson = sj && typeof sj.status === "string" && VALID_STATUSES.has(sj.status);
|
|
138
|
+
const fromTable = VALID_STATUSES.has(b.tableStatus);
|
|
139
|
+
const resolvedStatus = fromJson
|
|
140
|
+
? sj.status
|
|
141
|
+
: fromTable
|
|
142
|
+
? b.tableStatus
|
|
143
|
+
: "pending";
|
|
144
|
+
const statusSource = fromJson
|
|
145
|
+
? "status_json"
|
|
146
|
+
: fromTable
|
|
147
|
+
? "campaign_md"
|
|
148
|
+
// Neither source named this unit: `pending` is this reader's default,
|
|
149
|
+
// not anybody's record of the unit.
|
|
150
|
+
: "default";
|
|
151
|
+
const specMeta = deriveSpecMeta(projectRoot, campaignDir, b.id, stepSlug);
|
|
152
|
+
return {
|
|
153
|
+
id: b.id,
|
|
154
|
+
slug: stepSlug,
|
|
155
|
+
title: b.title || stepSlug || b.id,
|
|
156
|
+
status: resolvedStatus,
|
|
157
|
+
statusSource,
|
|
158
|
+
specPath: specMeta.specPath,
|
|
159
|
+
planFirst: specMeta.planFirst,
|
|
160
|
+
commit: sj && typeof sj.commit === "string" ? sj.commit : null,
|
|
161
|
+
branch: sj && typeof sj.branch === "string" ? sj.branch : null,
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
const done = steps.filter((s) => s.status === "complete").length;
|
|
165
|
+
const nextStep = steps.find((s) => s.status !== "complete") ?? null;
|
|
166
|
+
// Where the STATUS claims came from. `status.json` only counts when it
|
|
167
|
+
// actually supplied a usable status for at least one step — a file that
|
|
168
|
+
// parsed but lists nobody has told us nothing about these units.
|
|
169
|
+
const anyFromStatusJson = bases.some((b) => {
|
|
170
|
+
const sj = statusById.get(b.id);
|
|
171
|
+
return !!sj && typeof sj.status === "string" && VALID_STATUSES.has(sj.status);
|
|
172
|
+
});
|
|
173
|
+
const provenance = {
|
|
174
|
+
statusSource: anyFromStatusJson
|
|
175
|
+
? "status_json"
|
|
176
|
+
: steps.length > 0
|
|
177
|
+
? "campaign_md"
|
|
178
|
+
: "none",
|
|
179
|
+
// Only a source that EXISTED and failed. An absent status.json is an
|
|
180
|
+
// ordinary legacy campaign, not a degradation.
|
|
181
|
+
degraded: statusRead.state === "unreadable" || mdUnreadable,
|
|
182
|
+
statusJsonState: statusRead.state,
|
|
183
|
+
campaignMdUnreadable: mdUnreadable,
|
|
184
|
+
};
|
|
185
|
+
const branchStrategy = fm.branch_strategy ||
|
|
186
|
+
(typeof status?.branch_strategy === "string"
|
|
187
|
+
? status.branch_strategy
|
|
188
|
+
: "") ||
|
|
189
|
+
null;
|
|
190
|
+
const expandsTriage = fm.expandsTriage || fm.expands_triage || null;
|
|
191
|
+
return {
|
|
192
|
+
slug,
|
|
193
|
+
intent: parseIntent(md),
|
|
194
|
+
branchStrategy,
|
|
195
|
+
expandsTriage,
|
|
196
|
+
status: pickLifecycle(status, fm),
|
|
197
|
+
provenance,
|
|
198
|
+
steps,
|
|
199
|
+
done,
|
|
200
|
+
total: steps.length,
|
|
201
|
+
nextPending: nextStep
|
|
202
|
+
? { id: nextStep.id, specPath: nextStep.specPath }
|
|
203
|
+
: null,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Read every campaign under `campaignsDir`. Returns [] when the dir is
|
|
208
|
+
* missing/unreadable. `projectRoot` (realpath-resolved) is used to derive
|
|
209
|
+
* project-root-relative spec paths. Sorted by slug descending (date-prefixed
|
|
210
|
+
* slugs → newest first; assumes a sortable prefix).
|
|
211
|
+
*/
|
|
212
|
+
export function readCampaigns(campaignsDir, projectRoot) {
|
|
213
|
+
if (!existsSync(campaignsDir))
|
|
214
|
+
return [];
|
|
215
|
+
let names;
|
|
216
|
+
try {
|
|
217
|
+
names = readdirSync(campaignsDir, { withFileTypes: true })
|
|
218
|
+
.filter((d) => d.isDirectory())
|
|
219
|
+
.map((d) => d.name);
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return [];
|
|
223
|
+
}
|
|
224
|
+
const campaigns = [];
|
|
225
|
+
for (const slug of names) {
|
|
226
|
+
try {
|
|
227
|
+
const c = buildCampaign(path.join(campaignsDir, slug), slug, projectRoot);
|
|
228
|
+
if (c)
|
|
229
|
+
campaigns.push(c);
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
// Per-campaign isolation (external review HIGH #2): one bad dir must
|
|
233
|
+
// never hide the rest or 500 the route.
|
|
234
|
+
console.warn(JSON.stringify({
|
|
235
|
+
level: "warn",
|
|
236
|
+
message: "campaign read failed",
|
|
237
|
+
slug,
|
|
238
|
+
error: String(err).slice(0, 200),
|
|
239
|
+
}));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
campaigns.sort((a, b) => (a.slug < b.slug ? 1 : a.slug > b.slug ? -1 : 0));
|
|
243
|
+
return campaigns;
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=campaign-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-store.js","sourceRoot":"","sources":["../../src/core/campaign-store.ts"],"names":[],"mappings":"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"}
|