@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,518 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ws-upgrade-handler.ts — embedded-terminal WebSocket upgrade body.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `terminal/routes.ts` in iterate-2026-05-27-ws-upgrade-
|
|
5
|
+
* handler-split (ADR-103 retirement candidate #1). Owns the post-upgrade
|
|
6
|
+
* lifecycle for the WS attach contract:
|
|
7
|
+
*
|
|
8
|
+
* - replay-only branch for done/launch_failed tasks
|
|
9
|
+
* - live branch with:
|
|
10
|
+
* * atomic ptyManager.attach() returning {role, hadPriorWriter}
|
|
11
|
+
* * new-plain `awaiting_external_start → active` flip (AC-4)
|
|
12
|
+
* * subscribeForConnection (onData, onBackpressure, onPromoteToWriter)
|
|
13
|
+
* * sync `ready` envelope (auto-launch handshake timing — Spec 76)
|
|
14
|
+
* * async replay IIFE: pauseForConn → live-mirror-first / disk-fallback
|
|
15
|
+
* resolveReplaySnapshot → flushLiveBuffer → resumeForConn
|
|
16
|
+
* - per-message writer-role gating via getRole (non-mutating)
|
|
17
|
+
* - snapshot-on-detach via atomic detachAndCount (ADR-092)
|
|
18
|
+
*
|
|
19
|
+
* --- PROTECTED DEEP MODULE (see ADR-103 §Retirement Plan) -----------------
|
|
20
|
+
*
|
|
21
|
+
* ADR-103's deep-module argument names this file as the cohesive unit
|
|
22
|
+
* worth protecting: three shared locks (writer-slot, pause-refcount,
|
|
23
|
+
* attach-count), one onData broadcast, one backpressure budget. The
|
|
24
|
+
* argument applies to the WS body AS A WHOLE — splitting it further
|
|
25
|
+
* across more files is the exact failure mode ADR-101 calls out
|
|
26
|
+
* ("moving complexity outward"). Do NOT add unrelated terminal helpers
|
|
27
|
+
* (HTTP-only logic, spawn-env factory, image-paste utilities, …) to
|
|
28
|
+
* this module. If a helper genuinely belongs to the WS body alone,
|
|
29
|
+
* keep it private here; otherwise route it through `routes.ts` or a
|
|
30
|
+
* dedicated neutral module like `terminal-reset.ts`.
|
|
31
|
+
*/
|
|
32
|
+
import { buildReplaySnapshotEnvelope, tryReadSnapshot as tryReadSnapshotShared, } from "./replay-snapshot.js";
|
|
33
|
+
import { deriveTerminalReset } from "./terminal-reset.js";
|
|
34
|
+
import { startWsHeartbeat } from "./ws-heartbeat.js";
|
|
35
|
+
import { createResyncGate } from "./resync-gate.js";
|
|
36
|
+
export function isWSInbound(v) {
|
|
37
|
+
if (!v || typeof v !== "object")
|
|
38
|
+
return false;
|
|
39
|
+
const o = v;
|
|
40
|
+
if (o.type === "data" && typeof o.payload === "string")
|
|
41
|
+
return true;
|
|
42
|
+
if (o.type === "resize" && typeof o.cols === "number" && typeof o.rows === "number") {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
if (o.type === "redraw")
|
|
46
|
+
return true;
|
|
47
|
+
if (o.type === "resync")
|
|
48
|
+
return true;
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Private helpers (formerly factory-closure helpers inside routes.ts).
|
|
53
|
+
// Moved here as one cohesive unit per external plan review HIGH #2 so
|
|
54
|
+
// import order + initialization stay coupled to the WS body.
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
const tryReadSnapshot = (snapshotStore, taskId, expectedTerminalVersion) => tryReadSnapshotShared(snapshotStore, taskId, expectedTerminalVersion);
|
|
57
|
+
// ADR-092 — replay resolution: LIVE mirror wins over disk snapshot.
|
|
58
|
+
const resolveReplaySnapshot = async (ctx) => {
|
|
59
|
+
const live = await ctx.ptyManager.serializeMirrorIfLive(ctx.taskId);
|
|
60
|
+
if (live)
|
|
61
|
+
return live;
|
|
62
|
+
return tryReadSnapshot(ctx.snapshotStore, ctx.taskId, ctx.expectedTerminalVersion);
|
|
63
|
+
};
|
|
64
|
+
// ADR-089 — single-envelope replay emit. Backpressure stays trivial
|
|
65
|
+
// because the entire snapshot is one WS frame.
|
|
66
|
+
const sendReplaySnapshot = (ws, rec) => {
|
|
67
|
+
try {
|
|
68
|
+
ws.send(JSON.stringify(buildReplaySnapshotEnvelope(rec)));
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// buildWsHandlers — entry point for the WS body.
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
/**
|
|
79
|
+
* Build the Hono WS handler object (`onOpen`, `onMessage`, `onClose`,
|
|
80
|
+
* `onError`) for the embedded-terminal WS upgrade.
|
|
81
|
+
*
|
|
82
|
+
* Precondition: `ctx` is a `ValidatedWsUpgradeContext` — all
|
|
83
|
+
* reject-the-upgrade validations passed in `routes.ts`. Failures
|
|
84
|
+
* raised inside the returned handlers degrade to WS disconnects, NOT
|
|
85
|
+
* HTTP upgrade rejections (see type doc).
|
|
86
|
+
*
|
|
87
|
+
* Dispatches between two branches:
|
|
88
|
+
* - **replay-only** (`task.state === "done" || task.state === "launch_failed"`):
|
|
89
|
+
* no pty is spawned. The WS sends a `ready` envelope, emits the
|
|
90
|
+
* stored cell-state snapshot if available, then closes cleanly.
|
|
91
|
+
* - **live** (anything else): the WS owns a live shell. The full
|
|
92
|
+
* ADR-068-A1 / ADR-087 / ADR-092 lifecycle applies.
|
|
93
|
+
*/
|
|
94
|
+
export function buildWsHandlers(ctx) {
|
|
95
|
+
const isReplayOnly = ctx.task.state === "done" || ctx.task.state === "launch_failed";
|
|
96
|
+
if (isReplayOnly) {
|
|
97
|
+
return buildReplayOnlyHandlers(ctx);
|
|
98
|
+
}
|
|
99
|
+
return buildLiveHandlers(ctx);
|
|
100
|
+
}
|
|
101
|
+
// ---------------------------------------------------------------------------
|
|
102
|
+
// Replay-only branch (done / launch_failed tasks).
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
function buildReplayOnlyHandlers(ctx) {
|
|
105
|
+
const { taskId, trustedCwd, scrollbackStore, retentionDays, scrollbackDirHint } = ctx;
|
|
106
|
+
return {
|
|
107
|
+
onOpen(_evt, ws) {
|
|
108
|
+
void (async () => {
|
|
109
|
+
let scrollbackBytes = 0;
|
|
110
|
+
if (scrollbackStore && !scrollbackStore.disabled) {
|
|
111
|
+
try {
|
|
112
|
+
scrollbackBytes = await scrollbackStore.bytes(taskId);
|
|
113
|
+
}
|
|
114
|
+
catch { /* fall through with 0 */ }
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
ws.send(JSON.stringify({
|
|
118
|
+
type: "ready",
|
|
119
|
+
role: "reader",
|
|
120
|
+
shellKind: null,
|
|
121
|
+
cwd: trustedCwd,
|
|
122
|
+
replayOnly: true,
|
|
123
|
+
// ADR-104 — replay-only tasks (done / launch_failed)
|
|
124
|
+
// never carry a reset banner: no pty is spawned and
|
|
125
|
+
// Resume is not applicable in a terminal state.
|
|
126
|
+
terminalReset: false,
|
|
127
|
+
// fix-resume-guard-survives-reload — replay-only
|
|
128
|
+
// tasks spawn no pty; there is nothing to reuse.
|
|
129
|
+
ptyReused: false,
|
|
130
|
+
scrollbackBytes,
|
|
131
|
+
retentionDays,
|
|
132
|
+
scrollbackDir: scrollbackDirHint,
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
catch { /* ignore */ }
|
|
136
|
+
// Iterate C (ADR-087) — snapshot is the sole replay path.
|
|
137
|
+
// When `tryReadSnapshot` returns null (missing snapshot,
|
|
138
|
+
// version mismatch, or headlessMirrorEnabled=false), the
|
|
139
|
+
// client receives no replay history — by design, per the
|
|
140
|
+
// plan-of-record trade-off. The legacy chunked-replay
|
|
141
|
+
// emission has been retired.
|
|
142
|
+
const snap = await tryReadSnapshot(ctx.snapshotStore, taskId, ctx.expectedTerminalVersion);
|
|
143
|
+
if (snap) {
|
|
144
|
+
sendReplaySnapshot(ws, snap);
|
|
145
|
+
}
|
|
146
|
+
// Close cleanly — no live shell to keep open.
|
|
147
|
+
try {
|
|
148
|
+
ws.close?.(1000);
|
|
149
|
+
}
|
|
150
|
+
catch { /* ignore */ }
|
|
151
|
+
})();
|
|
152
|
+
},
|
|
153
|
+
// No onMessage / onClose / onError needed — there is no
|
|
154
|
+
// pty to detach from. The runtime tolerates omitted handlers.
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
// Live branch (pty-backed tasks).
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
function buildLiveHandlers(ctx) {
|
|
161
|
+
const { taskId, task, trustedCwd, store, scrollbackStore, retentionDays, scrollbackDirHint } = ctx;
|
|
162
|
+
// ADR-104 — capture pty-existence on the synchronous line
|
|
163
|
+
// IMMEDIATELY before spawn(). Race-free: there is no `await`
|
|
164
|
+
// between this probe and spawn(), and Node is single-threaded,
|
|
165
|
+
// so no concurrent WS attach can create the pty in between.
|
|
166
|
+
const ptyExistedBeforeAttach = ctx.ptyManager.get(taskId) !== undefined;
|
|
167
|
+
// D02/F02 — with NO live pty, resolve the disk snapshot BEFORE spawn()
|
|
168
|
+
// (its fresh empty mirror would else shadow it). Live pty → resolve in the
|
|
169
|
+
// IIFE (ADR-092 live-first / Guard 2a; spawn idempotent keeps the mirror).
|
|
170
|
+
const preSpawnReplay = ptyExistedBeforeAttach ? null : resolveReplaySnapshot(ctx);
|
|
171
|
+
// Ensure-or-create the pty against the realpath-validated cwd.
|
|
172
|
+
// ptyManager.spawn(): `shell` is a whitelisted binary NAME (ADR-067 allowlist +
|
|
173
|
+
// loopback Origin gate), not child_process({shell:true}). Semgrep false positive.
|
|
174
|
+
// nosemgrep: javascript.lang.security.audit.spawn-shell-true.spawn-shell-true
|
|
175
|
+
const meta = ctx.ptyManager.spawn(taskId, {
|
|
176
|
+
cwd: trustedCwd,
|
|
177
|
+
shell: ctx.resolveShell(),
|
|
178
|
+
});
|
|
179
|
+
// ADR-104 — true when this attach freshly re-created the pty
|
|
180
|
+
// after a prior Claude session was lost (server restart / crash).
|
|
181
|
+
const terminalReset = deriveTerminalReset(ptyExistedBeforeAttach, task.firstJsonlObservedAt);
|
|
182
|
+
// Per-connection identity is the WSContext (re-used in attach/detach).
|
|
183
|
+
// We build it inline to keep references stable across handlers.
|
|
184
|
+
const connToken = { taskId, t: Date.now() };
|
|
185
|
+
/*
|
|
186
|
+
* Replay gate. While a snapshot write is in flight, live pty output is BUFFERED
|
|
187
|
+
* instead of sent, then flushed once the snapshot has been emitted.
|
|
188
|
+
*
|
|
189
|
+
* Hoisted to the handler scope (it was local to `onOpen`) so the mid-session
|
|
190
|
+
* `resync` path reuses this EXACT sequence rather than a second, subtly different
|
|
191
|
+
* one. That matters: output produced while the snapshot serializes would
|
|
192
|
+
* otherwise be sent BEFORE the snapshot and then wiped by the client's
|
|
193
|
+
* `term.reset()` — the repair would itself lose the bytes it exists to restore.
|
|
194
|
+
*/
|
|
195
|
+
const liveBuffer = [];
|
|
196
|
+
let replayDone = false;
|
|
197
|
+
/*
|
|
198
|
+
* True while SOME snapshot-emit sequence owns the gate. Initialised `true`
|
|
199
|
+
* because the attach replay is guaranteed to run and can only start after
|
|
200
|
+
* `onOpen` — a `resync` arriving in between would otherwise find the gate free
|
|
201
|
+
* and interleave with it.
|
|
202
|
+
*
|
|
203
|
+
* `resyncGate` alone is not enough: it serializes resync against resync, not
|
|
204
|
+
* against the ATTACH replay, and both share `liveBuffer`/`replayDone`. Whichever
|
|
205
|
+
* finished first would set `replayDone = true`, so live output would stream
|
|
206
|
+
* straight to the client while the other's snapshot was still resolving — and
|
|
207
|
+
* the client's `term.reset()` would then erase it. That is precisely the
|
|
208
|
+
* ordering invariant this iterate exists to protect (external review, HIGH).
|
|
209
|
+
*
|
|
210
|
+
* A resync that arrives during the attach replay is DROPPED rather than queued,
|
|
211
|
+
* and that is correct rather than merely convenient: the attach is already
|
|
212
|
+
* emitting a full grid, which is exactly what the resync would have asked for.
|
|
213
|
+
* If a drop lands after that snapshot was serialized, the episode-END notice
|
|
214
|
+
* arrives once the gate is free and the client asks again.
|
|
215
|
+
*/
|
|
216
|
+
let replayBusy = true;
|
|
217
|
+
const sendData = (ws, data) => {
|
|
218
|
+
try {
|
|
219
|
+
ws.send(JSON.stringify({ type: "data", payload: data }));
|
|
220
|
+
}
|
|
221
|
+
catch { /* socket may be mid-close */ }
|
|
222
|
+
};
|
|
223
|
+
const flushLiveBuffer = (ws) => {
|
|
224
|
+
for (const data of liveBuffer)
|
|
225
|
+
sendData(ws, data);
|
|
226
|
+
liveBuffer.length = 0;
|
|
227
|
+
};
|
|
228
|
+
const resyncGate = createResyncGate();
|
|
229
|
+
/**
|
|
230
|
+
* Serve a client-requested full-grid resync. Mirrors the attach sequence
|
|
231
|
+
* deliberately — hold the gate, pause this conn, resolve live-mirror-first
|
|
232
|
+
* (ADR-092), emit ONE `replay_snapshot`, flush buffered output, resume — because
|
|
233
|
+
* that ordering is exactly what stops the repair from dropping bytes. Throttled
|
|
234
|
+
* by `resyncGate`; a denied request is dropped, and the episode-END backpressure
|
|
235
|
+
* notice guarantees the client gets another chance after the last drop.
|
|
236
|
+
*/
|
|
237
|
+
const performResync = async (ws) => {
|
|
238
|
+
// Never interleave with the attach replay (or another resync) — see replayBusy.
|
|
239
|
+
if (replayBusy)
|
|
240
|
+
return;
|
|
241
|
+
if (!resyncGate.tryAcquire())
|
|
242
|
+
return;
|
|
243
|
+
replayBusy = true;
|
|
244
|
+
replayDone = false;
|
|
245
|
+
try {
|
|
246
|
+
ctx.ptyManager.pauseForConn(taskId, connToken);
|
|
247
|
+
const snap = await resolveReplaySnapshot(ctx);
|
|
248
|
+
if (snap)
|
|
249
|
+
sendReplaySnapshot(ws, snap);
|
|
250
|
+
}
|
|
251
|
+
catch (err) {
|
|
252
|
+
// eslint-disable-next-line no-console
|
|
253
|
+
console.warn(`[terminal] resync failed for ${taskId}: ${err.message}`);
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
flushLiveBuffer(ws);
|
|
257
|
+
replayDone = true;
|
|
258
|
+
replayBusy = false;
|
|
259
|
+
ctx.ptyManager.resumeForConn(taskId, connToken);
|
|
260
|
+
resyncGate.release();
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
return {
|
|
264
|
+
onOpen(_evt, ws) {
|
|
265
|
+
startWsHeartbeat(ws); // reap a dead socket → free a pinned writer slot (read-only false-blocker, iterate-2026-05-31)
|
|
266
|
+
// `hadPriorWriter` = atomic snapshot in attach() (iterate
|
|
267
|
+
// 2026-05-27-fix-pty-reused-prewarm-race); feeds ready.ptyReused
|
|
268
|
+
// so the guard arms only on real reload/multi-tab, not prewarm.
|
|
269
|
+
// `ptyExistedBeforeAttach` still drives ADR-104 terminalReset.
|
|
270
|
+
const { role, hadPriorWriter } = ctx.ptyManager.attach(taskId, connToken);
|
|
271
|
+
// Iterate v0.8.5 AC-4 — new-plain (`/api/external/launch`
|
|
272
|
+
// with actionId === "new-plain") tasks never write a JSONL
|
|
273
|
+
// until the user types their first message inside Claude
|
|
274
|
+
// (per known_issues.md "Awaiting-launch state — expected
|
|
275
|
+
// latency band"). The transcript-poll-driven state machine
|
|
276
|
+
// can therefore never flip these tasks out of
|
|
277
|
+
// `awaiting_external_start`, even though Claude is plainly
|
|
278
|
+
// reachable in the embedded terminal — confusing UX.
|
|
279
|
+
//
|
|
280
|
+
// Pty-up is the operator's mental model of "active" for
|
|
281
|
+
// new-plain. When the WS upgrade succeeds and the task is
|
|
282
|
+
// in `awaiting_external_start` AND was launched as
|
|
283
|
+
// new-plain, flip it to `active` immediately. The
|
|
284
|
+
// transcript-poll path remains authoritative for all other
|
|
285
|
+
// actionIds (slash-command launches; resume; fork) — they
|
|
286
|
+
// write JSONL at first prompt and the existing
|
|
287
|
+
// !firstJsonlObservedAt branch handles them.
|
|
288
|
+
if (task.state === "awaiting_external_start" &&
|
|
289
|
+
task.actionId === "new-plain") {
|
|
290
|
+
store.patch(taskId, { state: "active" });
|
|
291
|
+
// Don't set firstJsonlObservedAt — pty-up is not the
|
|
292
|
+
// same evidence as JSONL-on-disk; the existing
|
|
293
|
+
// transcript-poll transition will set the timestamp
|
|
294
|
+
// correctly when the user actually types something.
|
|
295
|
+
void store.persist();
|
|
296
|
+
}
|
|
297
|
+
// ADR-068-A1 replay flow (post-ADR-087 / Iterate C):
|
|
298
|
+
// 1. Subscribe with a liveBuffer so we don't miss live output
|
|
299
|
+
// while the snapshot read + send happens.
|
|
300
|
+
// 2. Pause pty (avoids OOM on slow xterm-render under
|
|
301
|
+
// backgrounded-tab conditions — Decision #15).
|
|
302
|
+
// 3. Send `ready` envelope.
|
|
303
|
+
// 4. Emit a single `replay_snapshot` envelope when a usable
|
|
304
|
+
// snapshot exists; otherwise emit no replay history
|
|
305
|
+
// (blank terminal with live shell — the chunked
|
|
306
|
+
// replay_start/chunk/separator/end fallback was retired).
|
|
307
|
+
// 5. Flush liveBuffer + flip replayDone.
|
|
308
|
+
// 6. Resume pty.
|
|
309
|
+
// The replay gate (liveBuffer / replayDone / flushLiveBuffer) lives in the
|
|
310
|
+
// handler scope so `resync` reuses it — see its declaration above.
|
|
311
|
+
ctx.ptyManager.subscribeForConnection(taskId, connToken, {
|
|
312
|
+
onData: (data) => {
|
|
313
|
+
if (replayDone)
|
|
314
|
+
sendData(ws, data);
|
|
315
|
+
else
|
|
316
|
+
liveBuffer.push(data);
|
|
317
|
+
},
|
|
318
|
+
// Forward the WHOLE notice. Destructuring `droppedBytes` here silently
|
|
319
|
+
// stripped every cumulative field (`droppedChunks`, `totalDroppedBytes`,
|
|
320
|
+
// `episode`, `episodeEnded`) so AC-2's countability never crossed the
|
|
321
|
+
// boundary — the client's tolerant parsing then masked it as zeroes.
|
|
322
|
+
// Guard: `ws-backpressure-envelope.test.ts`.
|
|
323
|
+
onBackpressure: (info) => {
|
|
324
|
+
try {
|
|
325
|
+
ws.send(JSON.stringify({ type: "backpressure", ...info }));
|
|
326
|
+
}
|
|
327
|
+
catch { /* ignore */ }
|
|
328
|
+
},
|
|
329
|
+
// Fired when the previous writer detaches and we get
|
|
330
|
+
// promoted (closes the StrictMode double-mount race).
|
|
331
|
+
onPromoteToWriter: () => {
|
|
332
|
+
try {
|
|
333
|
+
ws.send(JSON.stringify({ type: "writer-promoted" }));
|
|
334
|
+
}
|
|
335
|
+
catch { /* ignore */ }
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
// Iterate v0.8.2 AC-8/AC-9: ready envelope stays SYNC to
|
|
339
|
+
// preserve the auto-launch handshake timing (Spec 76
|
|
340
|
+
// regressed when ready was moved into the async IIFE).
|
|
341
|
+
// scrollbackBytes is initialised to 0 here; the precise
|
|
342
|
+
// value is computed inside the IIFE and emitted via a
|
|
343
|
+
// follow-up `scrollback-meta` envelope so the disclosure
|
|
344
|
+
// footer can update once the bytes() probe resolves.
|
|
345
|
+
try {
|
|
346
|
+
ws.send(JSON.stringify({
|
|
347
|
+
type: "ready",
|
|
348
|
+
role,
|
|
349
|
+
shellKind: meta.shellKind,
|
|
350
|
+
cwd: meta.cwd,
|
|
351
|
+
replayOnly: false,
|
|
352
|
+
// ADR-104 — drives the EmbeddedTerminal reset banner.
|
|
353
|
+
terminalReset,
|
|
354
|
+
// `true` iff a writer attached BEFORE this WS upgrade
|
|
355
|
+
// (iterate-2026-05-27-fix-pty-reused-prewarm-race —
|
|
356
|
+
// refined from `ptyExistedBeforeAttach`; prewarm-only
|
|
357
|
+
// ptys now correctly emit `false`).
|
|
358
|
+
ptyReused: hadPriorWriter,
|
|
359
|
+
scrollbackBytes: 0,
|
|
360
|
+
retentionDays,
|
|
361
|
+
scrollbackDir: scrollbackDirHint,
|
|
362
|
+
}));
|
|
363
|
+
// External code-review F8: also emit an explicit
|
|
364
|
+
// `second-attach` envelope so reader-role consumers can
|
|
365
|
+
// surface a UX banner before the first input attempt.
|
|
366
|
+
if (role === "reader") {
|
|
367
|
+
ws.send(JSON.stringify({ type: "second-attach" }));
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
catch { /* ignore */ }
|
|
371
|
+
// Iterate C (ADR-087) — snapshot is the sole replay path.
|
|
372
|
+
// ADR-086's "skip replay for new-plain" branch is gone:
|
|
373
|
+
// cell-state snapshots have no byte-stream corruption, and
|
|
374
|
+
// there is no chunked path to skip. ADR-068-A1's per-conn
|
|
375
|
+
// pause stake (pauseForConn / resumeForConn) is preserved
|
|
376
|
+
// so multi-tab attach still serializes the replay write
|
|
377
|
+
// cleanly with live pty output.
|
|
378
|
+
void (async () => {
|
|
379
|
+
try {
|
|
380
|
+
ctx.ptyManager.pauseForConn(taskId, connToken);
|
|
381
|
+
let scrollbackBytes = 0;
|
|
382
|
+
if (scrollbackStore && !scrollbackStore.disabled) {
|
|
383
|
+
try {
|
|
384
|
+
scrollbackBytes = await scrollbackStore.bytes(taskId);
|
|
385
|
+
}
|
|
386
|
+
catch { /* fall through with 0 */ }
|
|
387
|
+
}
|
|
388
|
+
// Privacy disclosure footer still receives the byte
|
|
389
|
+
// count — even though no chunked replay is emitted,
|
|
390
|
+
// the on-disk file may exist and the user has a
|
|
391
|
+
// "Clear history" button surfaced from this number.
|
|
392
|
+
try {
|
|
393
|
+
ws.send(JSON.stringify({
|
|
394
|
+
type: "scrollback-meta",
|
|
395
|
+
scrollbackBytes,
|
|
396
|
+
}));
|
|
397
|
+
}
|
|
398
|
+
catch { /* ignore */ }
|
|
399
|
+
// ADR-092 live-first / disk-fallback (resolveReplaySnapshot).
|
|
400
|
+
// D02/F02 — a no-live-pty attach was already resolved BEFORE spawn
|
|
401
|
+
// (preSpawnReplay) so the fresh empty mirror cannot shadow the disk
|
|
402
|
+
// snapshot; a live pty resolves here exactly as before.
|
|
403
|
+
const snap = await (preSpawnReplay ?? resolveReplaySnapshot(ctx));
|
|
404
|
+
if (snap) {
|
|
405
|
+
sendReplaySnapshot(ws, snap);
|
|
406
|
+
}
|
|
407
|
+
flushLiveBuffer(ws);
|
|
408
|
+
replayDone = true;
|
|
409
|
+
}
|
|
410
|
+
catch (err) {
|
|
411
|
+
// eslint-disable-next-line no-console
|
|
412
|
+
console.warn(`[terminal] replay failed for ${taskId}: ${err.message}`);
|
|
413
|
+
flushLiveBuffer(ws);
|
|
414
|
+
replayDone = true;
|
|
415
|
+
}
|
|
416
|
+
finally {
|
|
417
|
+
// Release the shared replay gate only now — a `resync` that arrived
|
|
418
|
+
// mid-attach must not have interleaved with this sequence.
|
|
419
|
+
replayBusy = false;
|
|
420
|
+
ctx.ptyManager.resumeForConn(taskId, connToken);
|
|
421
|
+
}
|
|
422
|
+
})();
|
|
423
|
+
},
|
|
424
|
+
onMessage(evt, ws) {
|
|
425
|
+
const raw = typeof evt.data === "string" ? evt.data : "";
|
|
426
|
+
let parsed;
|
|
427
|
+
try {
|
|
428
|
+
parsed = JSON.parse(raw);
|
|
429
|
+
}
|
|
430
|
+
catch {
|
|
431
|
+
return;
|
|
432
|
+
}
|
|
433
|
+
// App-level liveness ping (iterate-2026-06-18). Answered BEFORE the
|
|
434
|
+
// role gate so READERS stay alive too. The client uses the pong to
|
|
435
|
+
// detect a silently half/full-open socket (OS sleep / Tailscale
|
|
436
|
+
// partition) that never fires a `close` event, then reconnects.
|
|
437
|
+
// Distinct from the server's own protocol-level ping/pong heartbeat
|
|
438
|
+
// (ws-heartbeat.ts) — that frees the server slot; this wakes the client.
|
|
439
|
+
if (parsed &&
|
|
440
|
+
typeof parsed === "object" &&
|
|
441
|
+
parsed.type === "ping") {
|
|
442
|
+
try {
|
|
443
|
+
ws.send(JSON.stringify({ type: "pong" }));
|
|
444
|
+
}
|
|
445
|
+
catch {
|
|
446
|
+
/* ignore */
|
|
447
|
+
}
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
// Answered BEFORE the writer gate, like `ping`: it never WRITES to the pty, and
|
|
451
|
+
// gating it on the writer slot would leave every READER permanently smeared by a
|
|
452
|
+
// drop. It does briefly PAUSE the shared pty while serializing — hence the throttle.
|
|
453
|
+
if (parsed &&
|
|
454
|
+
typeof parsed === "object" &&
|
|
455
|
+
parsed.type === "resync") {
|
|
456
|
+
void performResync(ws);
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
if (!isWSInbound(parsed))
|
|
460
|
+
return;
|
|
461
|
+
// External code-review F6: use the non-mutating getRole()
|
|
462
|
+
// here so re-evaluating the writer gate on every inbound
|
|
463
|
+
// message can NOT silently flip the original writer to
|
|
464
|
+
// reader. attach() is idempotent for same-conn since the
|
|
465
|
+
// F6 fix, but getRole() is the cheaper + safer entrypoint.
|
|
466
|
+
const actualRole = ctx.ptyManager.getRole(taskId, connToken);
|
|
467
|
+
if (actualRole !== "writer") {
|
|
468
|
+
try {
|
|
469
|
+
ws.send(JSON.stringify({ type: "read_only" }));
|
|
470
|
+
}
|
|
471
|
+
catch { /* ignore */ }
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
if (parsed.type === "data") {
|
|
475
|
+
ctx.ptyManager.write(taskId, parsed.payload);
|
|
476
|
+
}
|
|
477
|
+
else if (parsed.type === "redraw") {
|
|
478
|
+
// Writer-gated by the role check above — a reader must never poke the
|
|
479
|
+
// pty. See WSMessageRedraw for why this cannot be a no-op `resize`.
|
|
480
|
+
ctx.ptyManager.forceRedraw(taskId);
|
|
481
|
+
}
|
|
482
|
+
else if (parsed.type === "resize") {
|
|
483
|
+
ctx.ptyManager.resize(taskId, parsed.cols, parsed.rows);
|
|
484
|
+
}
|
|
485
|
+
},
|
|
486
|
+
onClose() {
|
|
487
|
+
// ADR-092 (Iterate E) — snapshot-on-detach resilience.
|
|
488
|
+
// `detachAndCount` performs the detach + post-state read
|
|
489
|
+
// as a single atomic observation (external code review
|
|
490
|
+
// OpenAI HIGH #1 — split-step "check count → detach →
|
|
491
|
+
// check count" was vulnerable to a concurrent attach
|
|
492
|
+
// landing between the two reads). Only when the
|
|
493
|
+
// post-detach count is 0 do we flush the mirror to disk
|
|
494
|
+
// so a future re-attach (or server restart) finds a
|
|
495
|
+
// usable snapshot via `tryReadSnapshot`. The pty stays
|
|
496
|
+
// alive; only persistence fires here. Fire-and-forget
|
|
497
|
+
// — never block the WS close handshake.
|
|
498
|
+
const { remainingAttachCount } = ctx.ptyManager.detachAndCount(taskId, connToken);
|
|
499
|
+
if (remainingAttachCount === 0) {
|
|
500
|
+
// flushMirrorSnapshot wraps its async body in try/catch
|
|
501
|
+
// internally — no rejection escapes (per Gemini LOW #3
|
|
502
|
+
// / OpenAI MED #4: ensures no unhandled rejection noise
|
|
503
|
+
// from this fire-and-forget call). SnapshotStore.write
|
|
504
|
+
// is per-task PQueue-serialized (snapshot-store.ts —
|
|
505
|
+
// Iterate B MEDIUM-1) so overlapping calls cannot
|
|
506
|
+
// corrupt the file.
|
|
507
|
+
void ctx.ptyManager.flushMirrorSnapshot(taskId);
|
|
508
|
+
}
|
|
509
|
+
},
|
|
510
|
+
onError() {
|
|
511
|
+
const { remainingAttachCount } = ctx.ptyManager.detachAndCount(taskId, connToken);
|
|
512
|
+
if (remainingAttachCount === 0) {
|
|
513
|
+
void ctx.ptyManager.flushMirrorSnapshot(taskId);
|
|
514
|
+
}
|
|
515
|
+
},
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
//# sourceMappingURL=ws-upgrade-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-upgrade-handler.js","sourceRoot":"","sources":["../../src/terminal/ws-upgrade-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Allowlist regex for `cli_flag` and `cli_flag_map` values. Validated at
|
|
3
|
+
* load time in `validateActionsSchema`. The `@` form is reserved for the
|
|
4
|
+
* positional `@<file>` shipwright-build argument (value_separator: "none").
|
|
5
|
+
*
|
|
6
|
+
* Matches: --foo, --foo-bar, -x, @
|
|
7
|
+
* Rejects: --foo=bar, "; rm -rf /", flags with whitespace, empty string.
|
|
8
|
+
*/
|
|
9
|
+
export declare const CLI_FLAG_PATTERN: RegExp;
|
|
10
|
+
/**
|
|
11
|
+
* Allowlist regex for ParamSchema.name (used as object key in POST body).
|
|
12
|
+
*/
|
|
13
|
+
export declare const PARAM_NAME_PATTERN: RegExp;
|
|
14
|
+
export type ParamType = "boolean" | "enum" | "string";
|
|
15
|
+
export type ValueSeparator = "space" | "equals" | "none";
|
|
16
|
+
export interface ParamSchema {
|
|
17
|
+
/** Internal key — kebab-case, matches PARAM_NAME_PATTERN. Eindeutig pro Schema-Block. */
|
|
18
|
+
name: string;
|
|
19
|
+
/** UI label shown in the modal. */
|
|
20
|
+
label: string;
|
|
21
|
+
/** Param type controls UI render and resolution rules. */
|
|
22
|
+
type: ParamType;
|
|
23
|
+
/**
|
|
24
|
+
* Single CLI flag emitted when the value is truthy. Mutually exclusive
|
|
25
|
+
* with `cli_flag_map`. Must match CLI_FLAG_PATTERN.
|
|
26
|
+
*/
|
|
27
|
+
cli_flag?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Per-enum-value flag map. Used when different enum values map to
|
|
30
|
+
* different flags (e.g. deploy.target: prod -> "--prod"). Map values
|
|
31
|
+
* must match CLI_FLAG_PATTERN; missing keys mean "skip emission" for
|
|
32
|
+
* that enum value (no empty strings allowed).
|
|
33
|
+
*/
|
|
34
|
+
cli_flag_map?: Record<string, string>;
|
|
35
|
+
/** Allowed enum values (required when type === "enum"). */
|
|
36
|
+
enum?: string[];
|
|
37
|
+
/**
|
|
38
|
+
* Default value. Server applies this during resolution when the POST
|
|
39
|
+
* body is missing the key OR sends an empty/whitespace value.
|
|
40
|
+
* Validated against type/pattern/enum at load time.
|
|
41
|
+
*/
|
|
42
|
+
default?: string | boolean;
|
|
43
|
+
/** UI placeholder for string inputs. */
|
|
44
|
+
placeholder?: string;
|
|
45
|
+
/** Optional helper text rendered under the field. */
|
|
46
|
+
helpText?: string;
|
|
47
|
+
/** How the value is joined to the flag. Default: "space". */
|
|
48
|
+
value_separator?: ValueSeparator;
|
|
49
|
+
/**
|
|
50
|
+
* Regex string used to validate string values. Compiled defensively
|
|
51
|
+
* with try/catch in the loader; malformed patterns reject at load time.
|
|
52
|
+
*/
|
|
53
|
+
pattern?: string;
|
|
54
|
+
/**
|
|
55
|
+
* When true: client disables Copy until the value is set; server
|
|
56
|
+
* returns 400 if missing/empty.
|
|
57
|
+
*/
|
|
58
|
+
required?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Sensitive value (token/password). UI renders password input; preview
|
|
61
|
+
* shows fixed-length mask; server logs redact the value.
|
|
62
|
+
*/
|
|
63
|
+
sensitive?: boolean;
|
|
64
|
+
}
|
|
65
|
+
export interface ResolvedParam {
|
|
66
|
+
/** Guaranteed non-empty after resolution. Comes from cli_flag or cli_flag_map[value]. */
|
|
67
|
+
cli_flag: string;
|
|
68
|
+
/** Present for string/enum values; absent for boolean flags. */
|
|
69
|
+
value?: string;
|
|
70
|
+
/** How to join cli_flag and value when rendering. */
|
|
71
|
+
separator: ValueSeparator;
|
|
72
|
+
/** Marker forwarded to logging layers; substituter ignores. */
|
|
73
|
+
sensitive?: boolean;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=action-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-schema.d.ts","sourceRoot":"","sources":["../../src/types/action-schema.ts"],"names":[],"mappings":"AAmBA;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,QAA6B,CAAC;AAE3D;;GAEG;AACH,eAAO,MAAM,kBAAkB,QAAsB,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,WAAW;IAC1B,yFAAyF;IACzF,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,IAAI,EAAE,SAAS,CAAC;IAChB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,eAAe,CAAC,EAAE,cAAc,CAAC;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,yFAAyF;IACzF,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,SAAS,EAAE,cAAc,CAAC;IAC1B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Action parameter schema (canonical definition).
|
|
3
|
+
*
|
|
4
|
+
* iterate/launch-cli-parameters § 1 — Schema-Modul Layout.
|
|
5
|
+
*
|
|
6
|
+
* Server is the canonical source for ParamSchema/ResolvedParam. The
|
|
7
|
+
* client maintains a structural-subset RenderableParamSchema in
|
|
8
|
+
* client/src/types/action-schema.ts; a sync test prevents drift
|
|
9
|
+
* (client/src/test/action-schema-sync.test.ts).
|
|
10
|
+
*
|
|
11
|
+
* Cross-bundle imports (server -> client) are intentionally avoided:
|
|
12
|
+
* webui has no monorepo root + no path aliasing between workspaces.
|
|
13
|
+
*
|
|
14
|
+
* Security boundary:
|
|
15
|
+
* The cli_flag allowlist regex is the actual injection guard for
|
|
16
|
+
* user-overridable .shipwright-webui/actions.json. Per-shell escaping in
|
|
17
|
+
* actions-substitute.ts is the second layer for user-supplied VALUES.
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Allowlist regex for `cli_flag` and `cli_flag_map` values. Validated at
|
|
21
|
+
* load time in `validateActionsSchema`. The `@` form is reserved for the
|
|
22
|
+
* positional `@<file>` shipwright-build argument (value_separator: "none").
|
|
23
|
+
*
|
|
24
|
+
* Matches: --foo, --foo-bar, -x, @
|
|
25
|
+
* Rejects: --foo=bar, "; rm -rf /", flags with whitespace, empty string.
|
|
26
|
+
*/
|
|
27
|
+
export const CLI_FLAG_PATTERN = /^(--?[a-z][a-z0-9-]*|@)$/;
|
|
28
|
+
/**
|
|
29
|
+
* Allowlist regex for ParamSchema.name (used as object key in POST body).
|
|
30
|
+
*/
|
|
31
|
+
export const PARAM_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
32
|
+
//# sourceMappingURL=action-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-schema.js","sourceRoot":"","sources":["../../src/types/action-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC"}
|