@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,549 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Command-template placeholder substitution with per-shell escaping.
|
|
3
|
+
*
|
|
4
|
+
* Iterate 3 section 03 / plan.md § 2.2 — the SECURITY BOUNDARY for
|
|
5
|
+
* command-template substitution. The placeholder allowlist is NOT the
|
|
6
|
+
* security boundary on its own: it only guards template-shape
|
|
7
|
+
* corruption. Actual protection against shell injection comes from the
|
|
8
|
+
* per-shell escape discipline in this module (qPs / qCmd / qPosix,
|
|
9
|
+
* re-exported from launcher.ts).
|
|
10
|
+
*
|
|
11
|
+
* Contract:
|
|
12
|
+
* substitutePlaceholders(template, ctx, shellForm) → string
|
|
13
|
+
* - Replaces every `{placeholder}` / `{placeholder?}` token with its
|
|
14
|
+
* shell-escaped substitution.
|
|
15
|
+
* - Unknown placeholder → throws InvalidPlaceholderError.
|
|
16
|
+
* - A task description spanning multiple lines is FLATTENED — each
|
|
17
|
+
* newline run collapses to a single space — so it survives as a
|
|
18
|
+
* single-line `claude` argument. The launch command must stay one
|
|
19
|
+
* physical line (copy-paste + embedded-terminal auto-execute both
|
|
20
|
+
* break on an embedded newline). A multi-line brief — common for
|
|
21
|
+
* triage-promoted tasks — is flattened, never rejected.
|
|
22
|
+
* - `{task.phase}` that does NOT match ctx.allowedPhaseIds → throws
|
|
23
|
+
* UnknownPhaseError.
|
|
24
|
+
* - Unsupported shell form → throws UnsupportedShellError.
|
|
25
|
+
*
|
|
26
|
+
* Optional-suffix semantics:
|
|
27
|
+
* `{task.description?}` / `{task.autonomy_flag?}` wrap in a ` \\\n `
|
|
28
|
+
* leading continuation prefix when the value is non-empty, and emit
|
|
29
|
+
* the empty string when the value is absent. The prefix is part of
|
|
30
|
+
* the replacement, NOT of the template — this is how the three-form
|
|
31
|
+
* output stays byte-identical to the mockup.
|
|
32
|
+
*
|
|
33
|
+
* Security:
|
|
34
|
+
* User-derived placeholders (`{task.title}`, `{task.description?}`,
|
|
35
|
+
* `{task.phase_label}`, `{project.path}`) are always shell-escaped.
|
|
36
|
+
* Server-generated literals (`{task.uuid}`, `{project.id}`,
|
|
37
|
+
* `{task.phase}`) pass through unquoted — they are UUIDs or allowlist
|
|
38
|
+
* ids and safe as raw tokens.
|
|
39
|
+
*
|
|
40
|
+
* `{plugin.dirs}` expands into a space-joined sequence of
|
|
41
|
+
* `--plugin-dir <escaped>` pairs.
|
|
42
|
+
*/
|
|
43
|
+
import { qPs, qCmd, qPosix, toPosixPath, buildCdPrefix } from "./launcher.js";
|
|
44
|
+
export class InvalidPlaceholderError extends Error {
|
|
45
|
+
placeholder;
|
|
46
|
+
actionId;
|
|
47
|
+
template;
|
|
48
|
+
constructor(placeholder, actionId, template) {
|
|
49
|
+
super(`Unknown placeholder {${placeholder}} in action "${actionId}" template`);
|
|
50
|
+
this.name = "InvalidPlaceholderError";
|
|
51
|
+
this.placeholder = placeholder;
|
|
52
|
+
this.actionId = actionId;
|
|
53
|
+
this.template = template;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export class InvalidTitleError extends Error {
|
|
57
|
+
constructor() {
|
|
58
|
+
super("task.title cannot contain newlines (breaks single-line copy-paste)");
|
|
59
|
+
this.name = "InvalidTitleError";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class InvalidParameterError extends Error {
|
|
63
|
+
cli_flag;
|
|
64
|
+
constructor(cli_flag, reason) {
|
|
65
|
+
super(`Invalid parameter value for ${cli_flag}: ${reason}`);
|
|
66
|
+
this.name = "InvalidParameterError";
|
|
67
|
+
this.cli_flag = cli_flag;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export class UnknownActionError extends Error {
|
|
71
|
+
actionId;
|
|
72
|
+
constructor(actionId) {
|
|
73
|
+
super(`Action id "${actionId}" is not one of the bundled actions ("new-task", "new-iterate", "new-pipeline") and has no valid "slash_command". A custom action whose command_template uses {task.initial_prompt} must declare a "slash_command" matching ${SLASH_COMMAND_PATTERN.source} (e.g. "/content-orchestrator"). Alternatively, use the {task.description?} placeholder instead of {task.initial_prompt}.`);
|
|
74
|
+
this.name = "UnknownActionError";
|
|
75
|
+
this.actionId = actionId;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
export class UnknownPhaseError extends Error {
|
|
79
|
+
phase;
|
|
80
|
+
constructor(phase) {
|
|
81
|
+
super(`Unknown phase id "${phase}" — not in actions.phases[].id allowlist`);
|
|
82
|
+
this.name = "UnknownPhaseError";
|
|
83
|
+
this.phase = phase;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export class UnsupportedShellError extends Error {
|
|
87
|
+
shellForm;
|
|
88
|
+
constructor(shellForm) {
|
|
89
|
+
super(`Unsupported shell form: ${shellForm}`);
|
|
90
|
+
this.name = "UnsupportedShellError";
|
|
91
|
+
this.shellForm = shellForm;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Canonical placeholder names. Anything not on this list is rejected.
|
|
96
|
+
* The allowlist is NOT a security boundary — it prevents typos and
|
|
97
|
+
* template-shape corruption. The real security guard is the escaping
|
|
98
|
+
* discipline below.
|
|
99
|
+
*/
|
|
100
|
+
const ALLOWED_PLACEHOLDERS = new Set([
|
|
101
|
+
"project.id",
|
|
102
|
+
"project.path",
|
|
103
|
+
"task.uuid",
|
|
104
|
+
"task.title",
|
|
105
|
+
"task.session_name",
|
|
106
|
+
"task.description?",
|
|
107
|
+
"task.phase",
|
|
108
|
+
"task.phase_label",
|
|
109
|
+
"task.autonomy_flag?",
|
|
110
|
+
"task.parameters?",
|
|
111
|
+
"task.initial_prompt",
|
|
112
|
+
"plugin.dirs",
|
|
113
|
+
"cd.prefix",
|
|
114
|
+
]);
|
|
115
|
+
/**
|
|
116
|
+
* iterate/fix-adopt-prompt-shape § 1 — slash-command shapes per bundled
|
|
117
|
+
* actionId. The substituter's {task.initial_prompt} branch dispatches on
|
|
118
|
+
* ctx.actionId. Custom actions outside this set must NOT use the
|
|
119
|
+
* placeholder (UnknownActionError).
|
|
120
|
+
*
|
|
121
|
+
* iterate-2026-05-21-triage-fix-now-and-phase-slash — workaround for
|
|
122
|
+
* Claude Code skill resolution: four bundled slash commands fail to
|
|
123
|
+
* resolve in the bare `/shipwright-<plugin>` form and must be emitted
|
|
124
|
+
* as the explicit `<plugin>:<skill>` namespaced form. The four flagged
|
|
125
|
+
* empirically (Sven 2026-05-21):
|
|
126
|
+
* - `/shipwright-plan` → `/shipwright-plan:plan`
|
|
127
|
+
* - `/shipwright-test` → `/shipwright-test:test`
|
|
128
|
+
* - `/shipwright-security` → `/shipwright-security:security`
|
|
129
|
+
* - `/shipwright-run` → `/shipwright-run:run`
|
|
130
|
+
* Every other phase (`build`, `design`, `deploy`, `changelog`, `compliance`,
|
|
131
|
+
* `adopt`, `project`) AND `/shipwright-iterate` work in the bare form, so
|
|
132
|
+
* the workaround is intentionally narrow. If more phases break the same
|
|
133
|
+
* way in future, add them to `NAMESPACED_PHASES`.
|
|
134
|
+
*
|
|
135
|
+
* This belongs in webui because Claude Code skill registration is owned
|
|
136
|
+
* upstream; aligning the plugin names there has been attempted multiple
|
|
137
|
+
* times without success. Treat as a local compatibility shim.
|
|
138
|
+
*/
|
|
139
|
+
const NAMESPACED_PHASES = new Set(["plan", "test", "security"]);
|
|
140
|
+
// iterate-2026-06-11-custom-action-slash-command — the three bundled action
|
|
141
|
+
// ids whose slash command is hardcoded in `buildSlashCommand`. Any OTHER id is
|
|
142
|
+
// "custom" and supplies its slash via the action-schema `slash_command` field
|
|
143
|
+
// (SubstitutionContext.slashCommand). Builtins always win. SSoT for the
|
|
144
|
+
// validator's "which actions require slash_command" decision.
|
|
145
|
+
export const BUILTIN_INITIAL_PROMPT_ACTIONS = new Set([
|
|
146
|
+
"new-task",
|
|
147
|
+
"new-iterate",
|
|
148
|
+
"new-pipeline",
|
|
149
|
+
]);
|
|
150
|
+
// Allowlist for a custom action's `slash_command` (leading-slash skill token,
|
|
151
|
+
// e.g. `/content-orchestrator`). Still q()-escaped at substitution time; this
|
|
152
|
+
// pattern rejects garbage at load and is reused by `validateActionsSchema`.
|
|
153
|
+
export const SLASH_COMMAND_PATTERN = /^\/[A-Za-z][A-Za-z0-9:_-]*$/;
|
|
154
|
+
function buildSlashCommand(actionId, phase, slashCommand) {
|
|
155
|
+
if (actionId === "new-task") {
|
|
156
|
+
return NAMESPACED_PHASES.has(phase)
|
|
157
|
+
? `/shipwright-${phase}:${phase}`
|
|
158
|
+
: `/shipwright-${phase}`;
|
|
159
|
+
}
|
|
160
|
+
if (actionId === "new-iterate")
|
|
161
|
+
return `/shipwright-iterate`;
|
|
162
|
+
if (actionId === "new-pipeline")
|
|
163
|
+
return `/shipwright-run:run`;
|
|
164
|
+
// Custom (non-builtin) action: fall back to the declared slash_command when
|
|
165
|
+
// present + well-formed; else null → UnknownActionError (fail-loud backstop;
|
|
166
|
+
// the schema validator catches missing/invalid earlier). Trim so a padded
|
|
167
|
+
// value (" /content-orchestrator ") matches the validator (which also trims).
|
|
168
|
+
const sc = slashCommand?.trim();
|
|
169
|
+
if (sc && SLASH_COMMAND_PATTERN.test(sc)) {
|
|
170
|
+
return sc;
|
|
171
|
+
}
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* iterate/fix-adopt-prompt-shape § 1 — render a single ResolvedParam
|
|
176
|
+
* RAW (no shell escape) for use INSIDE {task.initial_prompt}. The outer
|
|
177
|
+
* `q()` wraps the entire prompt and handles all per-shell escaping in one
|
|
178
|
+
* place; nested escaping would corrupt the result.
|
|
179
|
+
*/
|
|
180
|
+
function formatParameterRaw(p) {
|
|
181
|
+
if (p.value === undefined)
|
|
182
|
+
return ` ${p.cli_flag}`;
|
|
183
|
+
if (p.separator === "equals")
|
|
184
|
+
return ` ${p.cli_flag}=${p.value}`;
|
|
185
|
+
if (p.separator === "none")
|
|
186
|
+
return ` ${p.cli_flag}${p.value}`;
|
|
187
|
+
return ` ${p.cli_flag} ${p.value}`;
|
|
188
|
+
}
|
|
189
|
+
function pickEscaper(shellForm) {
|
|
190
|
+
if (shellForm === "powershell")
|
|
191
|
+
return qPs;
|
|
192
|
+
if (shellForm === "cmd")
|
|
193
|
+
return qCmd;
|
|
194
|
+
if (shellForm === "posix")
|
|
195
|
+
return qPosix;
|
|
196
|
+
throw new UnsupportedShellError(shellForm);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Flatten a task description into a single physical line: every newline
|
|
200
|
+
* run (LF / CR / CRLF), together with any spaces or tabs hugging it,
|
|
201
|
+
* collapses to one space, and outer whitespace is trimmed. The launch
|
|
202
|
+
* command must stay one line — copy-paste and the embedded-terminal
|
|
203
|
+
* auto-execute (which sends `command + "\r"`) both treat an embedded
|
|
204
|
+
* newline as a premature Enter. Multi-line briefs (typical for
|
|
205
|
+
* triage-promoted tasks) are flattened here rather than rejected, so
|
|
206
|
+
* every action's description placeholder is launch-safe. Returns "" for
|
|
207
|
+
* undefined / whitespace-only input.
|
|
208
|
+
*/
|
|
209
|
+
function flattenDescription(raw) {
|
|
210
|
+
if (!raw)
|
|
211
|
+
return "";
|
|
212
|
+
return raw.replace(/[ \t]*[\r\n]+[ \t]*/g, " ").trim();
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Render a single ResolvedParam to its shell-token form. Always begins
|
|
216
|
+
* with a leading space so the join() in the `task.parameters?` branch
|
|
217
|
+
* stays clean — adjacent placeholders like `{plugin.dirs}{task.parameters?}`
|
|
218
|
+
* collapse correctly via the post-substitute whitespace pass.
|
|
219
|
+
*
|
|
220
|
+
* Format per separator:
|
|
221
|
+
* none + no value → ` <flag>` (boolean)
|
|
222
|
+
* space + value → ` <flag> <q(value)>` (most flags)
|
|
223
|
+
* equals + value → ` <flag>=<q(value)>` (q wraps the VALUE only)
|
|
224
|
+
* none + value → ` <flag><q(value)>` (positional `@<file>`)
|
|
225
|
+
*
|
|
226
|
+
* Pre-flight throws InvalidParameterError on \n / \r in the value to
|
|
227
|
+
* preserve the single-line copy-paste invariant (analog to
|
|
228
|
+
* task.description? handling).
|
|
229
|
+
*/
|
|
230
|
+
function formatParameter(p, q) {
|
|
231
|
+
const value = p.value;
|
|
232
|
+
if (value !== undefined && /[\r\n]/.test(value)) {
|
|
233
|
+
throw new InvalidParameterError(p.cli_flag, "value cannot contain newlines");
|
|
234
|
+
}
|
|
235
|
+
if (value === undefined) {
|
|
236
|
+
// Boolean / valueless flag.
|
|
237
|
+
return ` ${p.cli_flag}`;
|
|
238
|
+
}
|
|
239
|
+
const escaped = q(value);
|
|
240
|
+
if (p.separator === "equals")
|
|
241
|
+
return ` ${p.cli_flag}=${escaped}`;
|
|
242
|
+
if (p.separator === "none")
|
|
243
|
+
return ` ${p.cli_flag}${escaped}`;
|
|
244
|
+
// Default and "space".
|
|
245
|
+
return ` ${p.cli_flag} ${escaped}`;
|
|
246
|
+
}
|
|
247
|
+
function transformPath(shellForm, p) {
|
|
248
|
+
// POSIX form converts Windows separators to forward slashes (matches
|
|
249
|
+
// launcher.ts behaviour). The other two forms pass paths through as-is.
|
|
250
|
+
return shellForm === "posix" ? toPosixPath(p) : p;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Build the substitution for a single placeholder key. Returns the
|
|
254
|
+
* replacement string (may be empty when the `?` suffix is absent).
|
|
255
|
+
* Callers are responsible for validating the placeholder exists in
|
|
256
|
+
* ALLOWED_PLACEHOLDERS first.
|
|
257
|
+
*/
|
|
258
|
+
function substituteOne(key, ctx, shellForm) {
|
|
259
|
+
const q = pickEscaper(shellForm);
|
|
260
|
+
switch (key) {
|
|
261
|
+
case "project.id":
|
|
262
|
+
return ctx.project.id;
|
|
263
|
+
case "project.path":
|
|
264
|
+
return q(transformPath(shellForm, ctx.project.path));
|
|
265
|
+
case "task.uuid":
|
|
266
|
+
return ctx.task.uuid;
|
|
267
|
+
case "task.title":
|
|
268
|
+
return q(ctx.task.title);
|
|
269
|
+
case "task.session_name": {
|
|
270
|
+
// iterate-2026-05-19-fix-launch-name-quoting — composes the Claude
|
|
271
|
+
// session display name (the `--name` value) and shell-escapes it
|
|
272
|
+
// ONCE. Templates MUST use bare `--name {task.session_name}`, never
|
|
273
|
+
// `--name "{task.session_name}"`: the result is already a single
|
|
274
|
+
// shell-quoted token. The previous bundled templates wrapped a
|
|
275
|
+
// q()-escaped `{task.title}` in literal double-quotes, so Claude
|
|
276
|
+
// received a name with stray inner quotes (`--name "'My Task'"`).
|
|
277
|
+
//
|
|
278
|
+
// Per-action prefix mirrors the historical bundled names; the
|
|
279
|
+
// three bundled actionId strings below are a contract with
|
|
280
|
+
// default-actions.json. Unlike {task.initial_prompt} (which throws
|
|
281
|
+
// UnknownActionError for non-bundled actions — a slash command is
|
|
282
|
+
// bundled-mode-only), a session NAME is meaningful for every
|
|
283
|
+
// action, so a non-bundled / custom actionId deliberately falls
|
|
284
|
+
// back to the bare title rather than throwing.
|
|
285
|
+
const title = ctx.task.title;
|
|
286
|
+
let composed;
|
|
287
|
+
if (ctx.actionId === "new-pipeline") {
|
|
288
|
+
composed = `Pipeline: ${title}`;
|
|
289
|
+
}
|
|
290
|
+
else if (ctx.actionId === "new-iterate") {
|
|
291
|
+
composed = `Iterate: ${title}`;
|
|
292
|
+
}
|
|
293
|
+
else if (ctx.actionId === "new-task") {
|
|
294
|
+
const label = ctx.task.phase_label.trim();
|
|
295
|
+
composed = label ? `${label}: ${title}` : title;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
composed = title;
|
|
299
|
+
}
|
|
300
|
+
return q(composed);
|
|
301
|
+
}
|
|
302
|
+
case "task.phase":
|
|
303
|
+
if (!ctx.allowedPhaseIds.has(ctx.task.phase)) {
|
|
304
|
+
throw new UnknownPhaseError(ctx.task.phase);
|
|
305
|
+
}
|
|
306
|
+
return ctx.task.phase;
|
|
307
|
+
case "task.phase_label":
|
|
308
|
+
return q(ctx.task.phase_label);
|
|
309
|
+
case "task.description?": {
|
|
310
|
+
// Multi-line briefs are flattened to one line (see flattenDescription)
|
|
311
|
+
// rather than rejected — the launch command must stay single-line.
|
|
312
|
+
const d = flattenDescription(ctx.task.description);
|
|
313
|
+
if (!d)
|
|
314
|
+
return "";
|
|
315
|
+
// ` \\\n ` leading continuation prefix — the optional-suffix
|
|
316
|
+
// semantics covered in the header comment.
|
|
317
|
+
return ` \\\n ${q(d)}`;
|
|
318
|
+
}
|
|
319
|
+
case "task.autonomy_flag?": {
|
|
320
|
+
if (ctx.task.autonomy === "autonomous") {
|
|
321
|
+
return ` \\\n --autonomous`;
|
|
322
|
+
}
|
|
323
|
+
return "";
|
|
324
|
+
}
|
|
325
|
+
case "task.parameters?": {
|
|
326
|
+
const params = ctx.task.parameters;
|
|
327
|
+
if (!params || params.length === 0)
|
|
328
|
+
return "";
|
|
329
|
+
return params.map((p) => formatParameter(p, q)).join("");
|
|
330
|
+
}
|
|
331
|
+
case "task.initial_prompt": {
|
|
332
|
+
// iterate/fix-adopt-prompt-shape § 1 — build slash + autonomy +
|
|
333
|
+
// params + description as ONE raw inner string, then shell-quote
|
|
334
|
+
// the whole thing as a single argument. Skill flags belong INSIDE
|
|
335
|
+
// this quoted prompt (Claude treats it as the user's first
|
|
336
|
+
// message in interactive mode), not as Claude CLI flags.
|
|
337
|
+
//
|
|
338
|
+
// Phase validation: new-task uses {ctx.task.phase} in the slash;
|
|
339
|
+
// an unknown phase would silently emit /shipwright-<garbage>. The
|
|
340
|
+
// legacy `task.phase` placeholder branch already throws
|
|
341
|
+
// UnknownPhaseError; we re-do the check here because the new
|
|
342
|
+
// placeholder bypasses that branch entirely.
|
|
343
|
+
if (ctx.actionId === "new-task" &&
|
|
344
|
+
ctx.task.phase &&
|
|
345
|
+
!ctx.allowedPhaseIds.has(ctx.task.phase)) {
|
|
346
|
+
throw new UnknownPhaseError(ctx.task.phase);
|
|
347
|
+
}
|
|
348
|
+
const slash = buildSlashCommand(ctx.actionId, ctx.task.phase, ctx.slashCommand);
|
|
349
|
+
if (!slash) {
|
|
350
|
+
throw new UnknownActionError(ctx.actionId);
|
|
351
|
+
}
|
|
352
|
+
let inner = slash;
|
|
353
|
+
if (ctx.task.autonomy === "autonomous") {
|
|
354
|
+
inner += " --autonomous";
|
|
355
|
+
}
|
|
356
|
+
if (ctx.task.parameters && ctx.task.parameters.length > 0) {
|
|
357
|
+
for (const p of ctx.task.parameters) {
|
|
358
|
+
inner += formatParameterRaw(p);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
// Flattened to one line — see flattenDescription. The whole prompt
|
|
362
|
+
// is shell-quoted once by q() below, so a multi-line brief must
|
|
363
|
+
// already be single-line here or the quoted argument would break
|
|
364
|
+
// the single-line launch-command invariant.
|
|
365
|
+
const desc = flattenDescription(ctx.task.description);
|
|
366
|
+
if (desc) {
|
|
367
|
+
inner += ` ${desc}`;
|
|
368
|
+
}
|
|
369
|
+
return q(inner);
|
|
370
|
+
}
|
|
371
|
+
case "plugin.dirs": {
|
|
372
|
+
const dirs = ctx.pluginDirs;
|
|
373
|
+
if (!dirs || dirs.length === 0)
|
|
374
|
+
return "";
|
|
375
|
+
return dirs
|
|
376
|
+
.map((d) => `--plugin-dir ${q(transformPath(shellForm, d))}`)
|
|
377
|
+
.join(" ");
|
|
378
|
+
}
|
|
379
|
+
case "cd.prefix": {
|
|
380
|
+
// 2026-04-23 — iterate-20260423-launch-cwd-prefix.
|
|
381
|
+
//
|
|
382
|
+
// `--add-dir <path>` only grants Claude tool-access to that
|
|
383
|
+
// directory; it does NOT change the shell's working directory.
|
|
384
|
+
// When the user pastes the copy command in a terminal parked in
|
|
385
|
+
// $HOME, the skill runs with `pwd === $HOME`, fails to find
|
|
386
|
+
// shipwright_run_config.json, and exits immediately. The cd.prefix
|
|
387
|
+
// placeholder expands to a shell-specific `cd` command + separator
|
|
388
|
+
// so the slash command runs with the project as cwd regardless of
|
|
389
|
+
// where the terminal happened to be.
|
|
390
|
+
//
|
|
391
|
+
// Form per shell:
|
|
392
|
+
// PowerShell — `Set-Location <escaped> -ErrorAction Stop; `
|
|
393
|
+
// (PS5 lacks `&&`; `-ErrorAction Stop` upgrades the
|
|
394
|
+
// otherwise non-terminating `Set-Location` error to a
|
|
395
|
+
// terminating one so the user sees the actual cd
|
|
396
|
+
// failure rather than a confusing missing-config
|
|
397
|
+
// error from the skill)
|
|
398
|
+
// cmd.exe — `cd /d <escaped> && ` (`/d` flag is required to
|
|
399
|
+
// also change drive letter on Windows)
|
|
400
|
+
// POSIX — `cd <escaped> && ` (standard short-circuit)
|
|
401
|
+
//
|
|
402
|
+
// Empty project.path → empty string. The pasted command degrades
|
|
403
|
+
// to current behavior (runs in whatever cwd the terminal had);
|
|
404
|
+
// surfacing the empty-path case as a UI/server error is out of
|
|
405
|
+
// scope for this iterate.
|
|
406
|
+
//
|
|
407
|
+
// Security: the same `qPs/qCmd/qPosix` escapers used for
|
|
408
|
+
// `{project.path}` are reused here. The `qCmd` trailing-backslash
|
|
409
|
+
// assumption (launcher.ts:185-189) still applies — directory-picker
|
|
410
|
+
// paths cannot end on `\` in practice, so the assumption holds.
|
|
411
|
+
// `cd.prefix` is the first place a server-trusted path gets
|
|
412
|
+
// injected at the START of the command line, which widens the blast
|
|
413
|
+
// radius if that assumption ever breaks.
|
|
414
|
+
//
|
|
415
|
+
// 2026-04-23 — iterate-20260423-resume-cwd-prefix extracted the
|
|
416
|
+
// shell-specific formatting into `buildCdPrefix` in launcher.ts so
|
|
417
|
+
// the legacy `buildCopyCommands` (Resume / Fork) path emits
|
|
418
|
+
// byte-identical prefixes. `buildCdPrefix` already handles empty
|
|
419
|
+
// cwd and the POSIX `toPosixPath` transform internally.
|
|
420
|
+
return buildCdPrefix(shellForm, ctx.project.path);
|
|
421
|
+
}
|
|
422
|
+
default:
|
|
423
|
+
// This branch is unreachable when callers pre-validate via
|
|
424
|
+
// ALLOWED_PLACEHOLDERS; guarded here so a misuse fails loudly.
|
|
425
|
+
throw new InvalidPlaceholderError(key, ctx.actionId, "");
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
/**
|
|
429
|
+
* Substitute placeholders in `template` for a given shell form. Throws
|
|
430
|
+
* on unknown placeholders, title newlines, parameter newlines, unknown
|
|
431
|
+
* phase ids, and unsupported shell forms. A multi-line task description
|
|
432
|
+
* is flattened (not rejected) — see flattenDescription.
|
|
433
|
+
*/
|
|
434
|
+
export function substitutePlaceholders(template, ctx, shellForm) {
|
|
435
|
+
// Validate shell form up front so a template with no placeholders
|
|
436
|
+
// still rejects "fish".
|
|
437
|
+
pickEscaper(shellForm);
|
|
438
|
+
// Note: a multi-line `ctx.task.description` is NOT rejected — the
|
|
439
|
+
// description placeholder branches flatten it via flattenDescription.
|
|
440
|
+
// Pre-flight reject of title newlines (analog to parameters below).
|
|
441
|
+
// iterate-2026-05-19-fix-launch-name-quoting — the title feeds
|
|
442
|
+
// {task.title} and {task.session_name} (the `--name` value); an
|
|
443
|
+
// interior newline would break the single-line copy-paste / WS
|
|
444
|
+
// auto-execute invariant. The PATCH /tasks handler already rejects
|
|
445
|
+
// title newlines; the create route only trims — so the substituter
|
|
446
|
+
// is the fail-closed backstop on the launch path.
|
|
447
|
+
if (/[\r\n]/.test(ctx.task.title)) {
|
|
448
|
+
throw new InvalidTitleError();
|
|
449
|
+
}
|
|
450
|
+
// Pre-flight reject of parameter newlines (analog to description). The
|
|
451
|
+
// route layer should have caught these already, but this makes the
|
|
452
|
+
// substituter fail-safe regardless of upstream discipline.
|
|
453
|
+
if (ctx.task.parameters) {
|
|
454
|
+
for (const p of ctx.task.parameters) {
|
|
455
|
+
if (p.value !== undefined && /[\r\n]/.test(p.value)) {
|
|
456
|
+
throw new InvalidParameterError(p.cli_flag, "value cannot contain newlines");
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
// Regex matches `{anything-up-to-closing-brace}` with no nesting. The
|
|
461
|
+
// `?` is part of the placeholder key for optional tokens.
|
|
462
|
+
const substituted = template.replace(/\{([^}]+)\}/g, (_match, rawKey) => {
|
|
463
|
+
const key = rawKey.trim();
|
|
464
|
+
if (!ALLOWED_PLACEHOLDERS.has(key)) {
|
|
465
|
+
throw new InvalidPlaceholderError(key, ctx.actionId, template);
|
|
466
|
+
}
|
|
467
|
+
return substituteOne(key, ctx, shellForm);
|
|
468
|
+
});
|
|
469
|
+
// 2026-04-23 — iterate-20260423-shell-line-continuations.
|
|
470
|
+
//
|
|
471
|
+
// The bundled command_template AND the optional-suffix renderers emit
|
|
472
|
+
// POSIX `\<newline> ` continuations for readability. Those are ONLY
|
|
473
|
+
// valid in POSIX shells — PowerShell and cmd.exe treat the backslash as
|
|
474
|
+
// a literal token, drop everything after the newline, and the user ends
|
|
475
|
+
// up pasting just `claude /shipwright-<phase>` with a stray `\`. The
|
|
476
|
+
// safest cross-shell form is a single line (every shell parses a long
|
|
477
|
+
// one-line command identically). We therefore collapse every
|
|
478
|
+
// `<ws>\<newline><ws>` sequence to a single space AFTER substitution.
|
|
479
|
+
// Trailing whitespace is trimmed so an empty optional suffix at the
|
|
480
|
+
// end of the template doesn't leave a dangling blank.
|
|
481
|
+
return substituted.replace(/[ \t]*\\\r?\n[ \t]*/g, " ").replace(/[ \t]+$/, "");
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Parallel evaluation across all three shell forms. Useful for the
|
|
485
|
+
* launch route which returns `{powershell, cmd, posix}` to the client.
|
|
486
|
+
* Each form is evaluated independently so an escape-drift bug in one
|
|
487
|
+
* can't corrupt the others.
|
|
488
|
+
*/
|
|
489
|
+
export function substituteAllForms(template, ctx) {
|
|
490
|
+
return {
|
|
491
|
+
powershell: substitutePlaceholders(template, ctx, "powershell"),
|
|
492
|
+
cmd: substitutePlaceholders(template, ctx, "cmd"),
|
|
493
|
+
posix: substitutePlaceholders(template, ctx, "posix"),
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Convenience wrapper: the route layer's single entry point for producing
|
|
498
|
+
* the 3 shell forms from a command template + context. Delegates directly
|
|
499
|
+
* to substituteAllForms but reads better at the call site.
|
|
500
|
+
*/
|
|
501
|
+
export function buildExternalLaunchCommand(args) {
|
|
502
|
+
return substituteAllForms(args.template, args.ctx);
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* Dry-run validator used by the actions route to verify every
|
|
506
|
+
* `command_template` is substitution-safe at load time. Constructs a
|
|
507
|
+
* synthetic context with representative values and re-runs all three
|
|
508
|
+
* shell forms. Returns the first error encountered, or null on success.
|
|
509
|
+
*
|
|
510
|
+
* Does NOT raise UnknownPhaseError — the validator's job is to catch
|
|
511
|
+
* placeholder typos and shape corruption, not to fail-close when a
|
|
512
|
+
* phase allowlist is empty (e.g. during initial setup). The actual
|
|
513
|
+
* phase check runs at launch time with the real task state.
|
|
514
|
+
*/
|
|
515
|
+
export function validateTemplate(template, actionId, phaseIds, slashCommand) {
|
|
516
|
+
const ctx = {
|
|
517
|
+
project: { id: "dry-run-project", path: "/tmp/dry-run" },
|
|
518
|
+
task: {
|
|
519
|
+
uuid: "00000000-0000-0000-0000-000000000000",
|
|
520
|
+
title: "dry run",
|
|
521
|
+
phase: phaseIds[0] ?? "dry-run-phase",
|
|
522
|
+
phase_label: "Dry Run",
|
|
523
|
+
// Synthetic parameters so {task.parameters?} doesn't render as a
|
|
524
|
+
// no-op during validation — exercises the substituter branch.
|
|
525
|
+
parameters: [
|
|
526
|
+
{ cli_flag: "--dry-flag", value: "x", separator: "space" },
|
|
527
|
+
],
|
|
528
|
+
},
|
|
529
|
+
pluginDirs: [],
|
|
530
|
+
allowedPhaseIds: new Set([...phaseIds, "dry-run-phase"]),
|
|
531
|
+
actionId,
|
|
532
|
+
// Pass slash_command so a custom {task.initial_prompt} template dry-runs
|
|
533
|
+
// without throwing UnknownActionError (a GET /actions 500). Builtins ignore it.
|
|
534
|
+
slashCommand,
|
|
535
|
+
};
|
|
536
|
+
try {
|
|
537
|
+
substituteAllForms(template, ctx);
|
|
538
|
+
return null;
|
|
539
|
+
}
|
|
540
|
+
catch (err) {
|
|
541
|
+
if (err instanceof InvalidPlaceholderError)
|
|
542
|
+
return err;
|
|
543
|
+
// Other error classes (UnsupportedShellError, UnknownPhaseError,
|
|
544
|
+
// InvalidTitleError) do not apply to the dry-run context because we
|
|
545
|
+
// supply clean values.
|
|
546
|
+
throw err;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
//# sourceMappingURL=actions-substitute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions-substitute.js","sourceRoot":"","sources":["../../src/core/actions-substitute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-column.d.ts","sourceRoot":"","sources":["../../src/core/board-column.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,MAAM,CAAC;AAE7D,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,WAAW,CAE1D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"board-column.js","sourceRoot":"","sources":["../../src/core/board-column.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,OAAO,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,MAAM,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Campaign } from "./campaign-store.js";
|
|
2
|
+
export interface SubEventProjection {
|
|
3
|
+
/** Commit sha from the latest matching `work_completed` event, or null when
|
|
4
|
+
* it carried none (a worktree F5b event is written with `commit==""`). Tests
|
|
5
|
+
* are intentionally NOT projected — the board renders no test column. */
|
|
6
|
+
commit: string | null;
|
|
7
|
+
}
|
|
8
|
+
/** slug → (sub_iterate_id → projection of its latest `work_completed` event). */
|
|
9
|
+
export type CampaignEventsProjection = Map<string, Map<string, SubEventProjection>>;
|
|
10
|
+
/**
|
|
11
|
+
* Pure projection of campaign sub-iterate completions from event-log lines.
|
|
12
|
+
* Parity with `campaign_status.py::_project_events`: keep only
|
|
13
|
+
* `type === "work_completed"` events that carry a truthy top-level `campaign`
|
|
14
|
+
* AND `sub_iterate_id`; the latest event per (campaign, sub_iterate_id) wins,
|
|
15
|
+
* ranked by `ts` epoch then file index (a missing/unparseable `ts` sorts
|
|
16
|
+
* oldest, so a later log line still wins). Corrupt / non-object / blank lines
|
|
17
|
+
* are skipped (tolerant — a torn 3 s-poll read must never throw).
|
|
18
|
+
*/
|
|
19
|
+
export declare function projectCampaignEvents(lines: Iterable<string>): CampaignEventsProjection;
|
|
20
|
+
/**
|
|
21
|
+
* File-loading wrapper: read `<projectRoot>/shipwright_events.jsonl` (the
|
|
22
|
+
* canonical per-tree log, `events_log.resolve_events_path`) and project it.
|
|
23
|
+
* Missing / unreadable log → empty projection (the board falls back to the
|
|
24
|
+
* dir-sourced campaigns, or shows nothing — never an error).
|
|
25
|
+
*/
|
|
26
|
+
export declare function readCampaignEvents(projectRoot: string): CampaignEventsProjection;
|
|
27
|
+
/**
|
|
28
|
+
* Merge the events projection into the dir-sourced campaigns:
|
|
29
|
+
* 1. OVERLAY each locally-present campaign — never-downgrade a step to
|
|
30
|
+
* `complete` when an event confirms it, prefer a non-empty event commit,
|
|
31
|
+
* then recompute `done`/`nextPending` (`total` is the skeleton, unchanged).
|
|
32
|
+
* 2. SYNTHESIZE a `derivedFromEvents` campaign for every event-only slug.
|
|
33
|
+
* Returns locals + synthesized, sorted by slug descending (newest-first, like
|
|
34
|
+
* `readCampaigns`). `merge_status(committed, "complete")` is always `"complete"`
|
|
35
|
+
* — including over `failed`/`escalated` (a re-run that emitted a fresh event) —
|
|
36
|
+
* so the overlay is a single status set.
|
|
37
|
+
*/
|
|
38
|
+
export declare function applyEventsProjection(campaigns: Campaign[], projection: CampaignEventsProjection): Campaign[];
|
|
39
|
+
//# sourceMappingURL=campaign-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"campaign-events.d.ts","sourceRoot":"","sources":["../../src/core/campaign-events.ts"],"names":[],"mappings":"AA8BA,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,qBAAqB,CAAC;AAKlE,MAAM,WAAW,kBAAkB;IACjC;;8EAE0E;IAC1E,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,iFAAiF;AACjF,MAAM,MAAM,wBAAwB,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAcpF;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GACtB,wBAAwB,CAwC1B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,wBAAwB,CAUhF;AAmDD;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,QAAQ,EAAE,EACrB,UAAU,EAAE,wBAAwB,GACnC,QAAQ,EAAE,CAwBZ"}
|