@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,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iterate G (ADR-095), amended Iterate I (ADR-097), restored Iterate J
|
|
3
|
+
* (ADR-098) — pure helper that builds the env map handed to the spawned
|
|
4
|
+
* pty. Factored out of `createNodePtySpawnFn` so it can be unit-tested
|
|
5
|
+
* without the native node-pty binary.
|
|
6
|
+
*
|
|
7
|
+
* Layered as: baseProcessEnv → TERM/COLORTERM color overrides (default
|
|
8
|
+
* truecolor for VS-Code parity, FR-01.44; the legacy ADR-067 16-color
|
|
9
|
+
* brand clamp only under SHIPWRIGHT_TERMINAL_LEGACY_BRAND_COLORS=1) →
|
|
10
|
+
* CLAUDE_CODE_NO_FLICKER toggle
|
|
11
|
+
* (ADR-095/ADR-097/ADR-098) → caller-supplied opts.env (last-write-wins
|
|
12
|
+
* for most keys; the default-on CLAUDE_CODE_NO_FLICKER is protected
|
|
13
|
+
* from accidental caller silent-revert — see opt-out-wins symmetry
|
|
14
|
+
* below) → SHIPWRIGHT_WEBUI=1 spawn marker (W1, authoritative post-merge)
|
|
15
|
+
* → strip of parent/child Claude-session identity markers (the
|
|
16
|
+
* empty-Transcripts fix, 2026-06-13).
|
|
17
|
+
*
|
|
18
|
+
* CLAUDE_CODE_NO_FLICKER (ADR-098):
|
|
19
|
+
* - Default ON: the key is written as `"1"` into the env map.
|
|
20
|
+
* Claude Code renders into the alt-screen buffer (vim/htop-style),
|
|
21
|
+
* bypassing per-frame ANSI cursor moves entirely. Required because
|
|
22
|
+
* Claude Code 2.1.139 emits ZERO DECSET 2026 / Synchronized Output
|
|
23
|
+
* sequences in its main-buffer rendering (empirical: 265 711-byte
|
|
24
|
+
* live scrollback, 0 `\x1b[?2026h` / 0 `\x1b[?2026l`, 21 690 raw
|
|
25
|
+
* CUP sequences). xterm 6.0's native sync-output honour has
|
|
26
|
+
* nothing to batch because the producer never opts in.
|
|
27
|
+
* Claude Code Issue #37283 remains open. Docs:
|
|
28
|
+
* https://code.claude.com/docs/en/fullscreen.
|
|
29
|
+
* - Opt-OUT via SHIPWRIGHT_TERMINAL_NO_FLICKER=0: the key is deleted
|
|
30
|
+
* from the env map so the child shell sees whatever (if anything)
|
|
31
|
+
* the upstream env set. Useful for users who explicitly want
|
|
32
|
+
* Claude in the main buffer (Cmd+F scrollback search, mouse
|
|
33
|
+
* capture, etc.) and are willing to accept the visible flicker
|
|
34
|
+
* around streaming output.
|
|
35
|
+
*
|
|
36
|
+
* Reversion from ADR-097's opt-in default: ADR-097 hypothesised that
|
|
37
|
+
* xterm 6's DECSET 2026 honour would batch Claude TUI's main-buffer
|
|
38
|
+
* frames flicker-free. UAT post-Iterate-I falsified the hypothesis;
|
|
39
|
+
* ADR-098 documents the empirical scrollback investigation. The
|
|
40
|
+
* default-on stance from ADR-095 is restored verbatim. The
|
|
41
|
+
* "opt-out wins over caller-env override" semantic (ADR-095, external
|
|
42
|
+
* code review openai medium, 2026-05-13) is preserved as the
|
|
43
|
+
* symmetric default-on regression fence.
|
|
44
|
+
*/
|
|
45
|
+
export declare function buildSpawnEnv(baseProcessEnv: Record<string, string | undefined>, callerEnv?: Record<string, string | undefined>): Record<string, string | undefined>;
|
|
46
|
+
//# sourceMappingURL=spawn-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-env.d.ts","sourceRoot":"","sources":["../../src/terminal/spawn-env.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,aAAa,CAC3B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAClD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC7C,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CA+JpC"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* spawn-env.ts — the pure env-map factory for the embedded-terminal pty.
|
|
3
|
+
*
|
|
4
|
+
* Extracted verbatim from `terminal/routes.ts` (which sits at its ADR-103
|
|
5
|
+
* bloat-exception ceiling) so the empty-Transcripts fix — stripping the
|
|
6
|
+
* parent/child Claude-session markers — could land without ratcheting that
|
|
7
|
+
* file. `buildSpawnEnv` is the SOLE place the pty spawn env is built
|
|
8
|
+
* (`createNodePtySpawnFn` in routes.ts is its only runtime caller); the
|
|
9
|
+
* unit test lives in `pty-env-flicker.test.ts`.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Iterate G (ADR-095), amended Iterate I (ADR-097), restored Iterate J
|
|
13
|
+
* (ADR-098) — pure helper that builds the env map handed to the spawned
|
|
14
|
+
* pty. Factored out of `createNodePtySpawnFn` so it can be unit-tested
|
|
15
|
+
* without the native node-pty binary.
|
|
16
|
+
*
|
|
17
|
+
* Layered as: baseProcessEnv → TERM/COLORTERM color overrides (default
|
|
18
|
+
* truecolor for VS-Code parity, FR-01.44; the legacy ADR-067 16-color
|
|
19
|
+
* brand clamp only under SHIPWRIGHT_TERMINAL_LEGACY_BRAND_COLORS=1) →
|
|
20
|
+
* CLAUDE_CODE_NO_FLICKER toggle
|
|
21
|
+
* (ADR-095/ADR-097/ADR-098) → caller-supplied opts.env (last-write-wins
|
|
22
|
+
* for most keys; the default-on CLAUDE_CODE_NO_FLICKER is protected
|
|
23
|
+
* from accidental caller silent-revert — see opt-out-wins symmetry
|
|
24
|
+
* below) → SHIPWRIGHT_WEBUI=1 spawn marker (W1, authoritative post-merge)
|
|
25
|
+
* → strip of parent/child Claude-session identity markers (the
|
|
26
|
+
* empty-Transcripts fix, 2026-06-13).
|
|
27
|
+
*
|
|
28
|
+
* CLAUDE_CODE_NO_FLICKER (ADR-098):
|
|
29
|
+
* - Default ON: the key is written as `"1"` into the env map.
|
|
30
|
+
* Claude Code renders into the alt-screen buffer (vim/htop-style),
|
|
31
|
+
* bypassing per-frame ANSI cursor moves entirely. Required because
|
|
32
|
+
* Claude Code 2.1.139 emits ZERO DECSET 2026 / Synchronized Output
|
|
33
|
+
* sequences in its main-buffer rendering (empirical: 265 711-byte
|
|
34
|
+
* live scrollback, 0 `\x1b[?2026h` / 0 `\x1b[?2026l`, 21 690 raw
|
|
35
|
+
* CUP sequences). xterm 6.0's native sync-output honour has
|
|
36
|
+
* nothing to batch because the producer never opts in.
|
|
37
|
+
* Claude Code Issue #37283 remains open. Docs:
|
|
38
|
+
* https://code.claude.com/docs/en/fullscreen.
|
|
39
|
+
* - Opt-OUT via SHIPWRIGHT_TERMINAL_NO_FLICKER=0: the key is deleted
|
|
40
|
+
* from the env map so the child shell sees whatever (if anything)
|
|
41
|
+
* the upstream env set. Useful for users who explicitly want
|
|
42
|
+
* Claude in the main buffer (Cmd+F scrollback search, mouse
|
|
43
|
+
* capture, etc.) and are willing to accept the visible flicker
|
|
44
|
+
* around streaming output.
|
|
45
|
+
*
|
|
46
|
+
* Reversion from ADR-097's opt-in default: ADR-097 hypothesised that
|
|
47
|
+
* xterm 6's DECSET 2026 honour would batch Claude TUI's main-buffer
|
|
48
|
+
* frames flicker-free. UAT post-Iterate-I falsified the hypothesis;
|
|
49
|
+
* ADR-098 documents the empirical scrollback investigation. The
|
|
50
|
+
* default-on stance from ADR-095 is restored verbatim. The
|
|
51
|
+
* "opt-out wins over caller-env override" semantic (ADR-095, external
|
|
52
|
+
* code review openai medium, 2026-05-13) is preserved as the
|
|
53
|
+
* symmetric default-on regression fence.
|
|
54
|
+
*/
|
|
55
|
+
export function buildSpawnEnv(baseProcessEnv, callerEnv) {
|
|
56
|
+
// ┌─ SUPERSEDED (iterate-2026-07-06-terminal-theme-modes / FR-01.44) ─┐
|
|
57
|
+
// │ The ADR-067 brand-fit rationale below is retained for history │
|
|
58
|
+
// │ (Chesterton's Fence) but is NO LONGER the default — see the │
|
|
59
|
+
// │ truecolor override further down. It applies ONLY when │
|
|
60
|
+
// │ SHIPWRIGHT_TERMINAL_LEGACY_BRAND_COLORS=1 restores the clamp. │
|
|
61
|
+
// └───────────────────────────────────────────────────────────────────┘
|
|
62
|
+
// ADR-067 brand fit on Windows: chalk's `supports-color` package
|
|
63
|
+
// has a hardcoded Windows branch that returns level 3 (truecolor)
|
|
64
|
+
// for Windows 10 build ≥14931 — REGARDLESS of TERM, COLORTERM, or
|
|
65
|
+
// FORCE_COLOR=1. Claude Code uses chalk under ink, so its
|
|
66
|
+
// "auto mode on" banner emits RGB \x1b[38;2;...m escapes that
|
|
67
|
+
// bypass our 16-slot xterm theme and render the original neon
|
|
68
|
+
// yellow on beige.
|
|
69
|
+
//
|
|
70
|
+
// The single escape hatch in supports-color:
|
|
71
|
+
//
|
|
72
|
+
// if (env.TERM === 'dumb') { return min; } // min = FORCE_COLOR || 0
|
|
73
|
+
//
|
|
74
|
+
// So `TERM=dumb` + `FORCE_COLOR=1` returns level 1 (16-color),
|
|
75
|
+
// which falls into our brand theme. Trade-off: ncurses-based tools
|
|
76
|
+
// (vim, less, htop) also see TERM=dumb and disable their colors;
|
|
77
|
+
// power users can override per-shell via `$env:TERM = "xterm"`
|
|
78
|
+
// before invoking those tools. For Claude Code as the primary
|
|
79
|
+
// workload of this pane, brand consistency wins over vim color.
|
|
80
|
+
//
|
|
81
|
+
// Iterate K UAT 2026-05-14: empirically tested `TERM=xterm-256color`
|
|
82
|
+
// (siteboon-parity) hoping it would unlock Claude/Ink sync-output
|
|
83
|
+
// emission. Falsified: byte-stream histogram of pre/post scrollback
|
|
84
|
+
// for the same task showed 0 DECSET 2026 sequences in BOTH eras.
|
|
85
|
+
// TERM=dumb does NOT block Claude's sync-output. It DOES, however,
|
|
86
|
+
// suppress PowerShell 7's xterm window manipulation + cursor-shape
|
|
87
|
+
// + ED2 sequences emitted on each PSReadLine prompt redraw — which
|
|
88
|
+
// added visible new flicker / minor smearing on Strg+C return to
|
|
89
|
+
// shell. Keeping TERM=dumb. Real flicker fix is xterm.js side:
|
|
90
|
+
// scrollOnEraseInDisplay (see EmbeddedTerminal.tsx) — see xtermjs
|
|
91
|
+
// issue #5620 + maintainer @jerch's diagnosis.
|
|
92
|
+
// iterate-2026-07-06-terminal-theme-modes (FR-01.44) — SUPERSEDES the
|
|
93
|
+
// ADR-067 brand-fit clamp above. The clamp existed to force Claude's
|
|
94
|
+
// colors into a 16-slot BRAND palette on a beige terminal. That goal is
|
|
95
|
+
// abandoned: the pane is now a FAITHFUL terminal like VS Code's, so
|
|
96
|
+
// Claude (and vim/htop/less) render their own truecolor themes and the
|
|
97
|
+
// xterm bg tracks Claude's light/dark theme (client-side, terminal-
|
|
98
|
+
// theme.ts). Dropping TERM=dumb also re-enables Claude's OSC 11
|
|
99
|
+
// background query, which xterm.js answers from its theme.background —
|
|
100
|
+
// so Claude's `auto` theme detects our light/dark bg directly.
|
|
101
|
+
//
|
|
102
|
+
// Default = xterm-256color + COLORTERM=truecolor (VS Code sets exactly
|
|
103
|
+
// TERM=xterm-256color for its integrated terminal). FORCE_COLOR is NOT
|
|
104
|
+
// set: the pty is a real TTY so chalk/ink detect truecolor natively, and
|
|
105
|
+
// a FORCE_COLOR cap is what pinned Claude to 16-color before.
|
|
106
|
+
//
|
|
107
|
+
// Reversible: SHIPWRIGHT_TERMINAL_LEGACY_BRAND_COLORS=1 restores the old
|
|
108
|
+
// TERM=dumb / COLORTERM="" / FORCE_COLOR=1 clamp verbatim (instant revert
|
|
109
|
+
// if the truecolor path regresses, e.g. re-surfaced PowerShell PSReadLine
|
|
110
|
+
// prompt flicker that TERM=dumb used to suppress — user-UAT verified per
|
|
111
|
+
// the ADR-098 precedent for this visual class). CLAUDE_CODE_NO_FLICKER
|
|
112
|
+
// (the real streaming-flicker fix, ADR-095/098) is INDEPENDENT of TERM
|
|
113
|
+
// and stays default-on below.
|
|
114
|
+
const legacyBrandColors = baseProcessEnv.SHIPWRIGHT_TERMINAL_LEGACY_BRAND_COLORS === "1";
|
|
115
|
+
const env = legacyBrandColors
|
|
116
|
+
? {
|
|
117
|
+
...baseProcessEnv,
|
|
118
|
+
TERM: "dumb",
|
|
119
|
+
COLORTERM: "",
|
|
120
|
+
FORCE_COLOR: "1",
|
|
121
|
+
}
|
|
122
|
+
: {
|
|
123
|
+
...baseProcessEnv,
|
|
124
|
+
TERM: "xterm-256color",
|
|
125
|
+
COLORTERM: "truecolor",
|
|
126
|
+
};
|
|
127
|
+
if (!legacyBrandColors) {
|
|
128
|
+
// Strip any FORCE_COLOR inherited from the webui server's OWN env — a
|
|
129
|
+
// stale `FORCE_COLOR=1` (chalk level 1) would pin Claude back to
|
|
130
|
+
// 16-color and defeat the truecolor path. Deleted (not set to
|
|
131
|
+
// undefined) so it can't survive a downstream spread. chalk/ink then
|
|
132
|
+
// detect truecolor from the real TTY + COLORTERM.
|
|
133
|
+
delete env.FORCE_COLOR;
|
|
134
|
+
}
|
|
135
|
+
// Iterate G (ADR-095), restored Iterate J (ADR-098) after the
|
|
136
|
+
// Iterate I (ADR-097) opt-in attempt was empirically falsified.
|
|
137
|
+
// Claude TUI flicker workaround: default ON — Claude Code 2.1.139
|
|
138
|
+
// emits zero DECSET 2026 sequences in its main-buffer rendering, so
|
|
139
|
+
// xterm 6.0's native Synchronized-Output honour cannot batch frames
|
|
140
|
+
// the producer never wraps. Opt-OUT via SHIPWRIGHT_TERMINAL_NO_FLICKER=0.
|
|
141
|
+
const optedOut = baseProcessEnv.SHIPWRIGHT_TERMINAL_NO_FLICKER === "0";
|
|
142
|
+
if (optedOut) {
|
|
143
|
+
// Explicit-off path: ensure the key is absent so the child shell
|
|
144
|
+
// sees whatever (if anything) the upstream env set. We delete
|
|
145
|
+
// rather than set to undefined because undefined keys can survive
|
|
146
|
+
// some spread operations in TypeScript erasure paths.
|
|
147
|
+
delete env.CLAUDE_CODE_NO_FLICKER;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
env.CLAUDE_CODE_NO_FLICKER = "1";
|
|
151
|
+
}
|
|
152
|
+
// Caller-supplied env wins for ALL keys EXCEPT CLAUDE_CODE_NO_FLICKER
|
|
153
|
+
// when the user has explicitly opted OUT via SHIPWRIGHT_TERMINAL_NO_FLICKER=0.
|
|
154
|
+
// External code review (openai medium, 2026-05-13) — allowing the
|
|
155
|
+
// caller to silently re-inject the key would break the documented
|
|
156
|
+
// opt-out contract. The opt-out wins; the rest of the caller env
|
|
157
|
+
// still flows through. Symmetric to ADR-097's opt-in-wins fence,
|
|
158
|
+
// now restored to the ADR-095 default-on stance per ADR-098.
|
|
159
|
+
if (callerEnv) {
|
|
160
|
+
for (const [k, v] of Object.entries(callerEnv)) {
|
|
161
|
+
if (optedOut && k === "CLAUDE_CODE_NO_FLICKER")
|
|
162
|
+
continue;
|
|
163
|
+
env[k] = v;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// WebUI-spawn marker (W1, iterate-2026-07-09; design:
|
|
167
|
+
// Spec/pipeline-as-campaign-convergence.md §8). Every embedded-terminal pty
|
|
168
|
+
// is spawned BY the WebUI, so /shipwright-run can branch on this to show the
|
|
169
|
+
// board-handoff banner instead of the plain-terminal paste card. Set AFTER
|
|
170
|
+
// the callerEnv merge and unconditionally: a caller can neither override nor
|
|
171
|
+
// unset it — it is an identity fact about the spawn source, not a tunable.
|
|
172
|
+
// buildSpawnEnv is the SOLE pty-env chokepoint (ADR-067 shell-only
|
|
173
|
+
// whitelist), so this is the single place the marker belongs.
|
|
174
|
+
env.SHIPWRIGHT_WEBUI = "1";
|
|
175
|
+
// Strip parent/child Claude-session identity markers so the embedded
|
|
176
|
+
// claude ALWAYS launches as a fresh TOP-LEVEL session. When the webui
|
|
177
|
+
// server is started from inside a Claude Code session (e.g. claude-vscode),
|
|
178
|
+
// its process.env carries these markers and the `{ ...baseProcessEnv }`
|
|
179
|
+
// spread forwards them into every pty. Claude Code 2.1.x, on seeing
|
|
180
|
+
// CLAUDE_CODE_CHILD_SESSION=1, runs as a CHILD session and SUPPRESSES the
|
|
181
|
+
// flat ~/.claude/projects/<cwd>/<uuid>.jsonl transcript the Transcripts tab
|
|
182
|
+
// reads → empty transcript for every embedded session (root-caused
|
|
183
|
+
// 2026-06-13; pty A/B/C isolation proved CHILD_SESSION=1 alone is the
|
|
184
|
+
// trigger). Allowlist of identity markers ONLY — auth/config CLAUDE_* vars
|
|
185
|
+
// pass through; the embedded claude sets its own on boot. Stripped AFTER
|
|
186
|
+
// the callerEnv merge so neither base nor caller can leak them back.
|
|
187
|
+
for (const k of PARENT_SESSION_ENV_KEYS)
|
|
188
|
+
delete env[k];
|
|
189
|
+
// Strip the webui's OWN operational network vars so a PORT-honouring dev
|
|
190
|
+
// server started INSIDE the embedded terminal doesn't collide with the
|
|
191
|
+
// webui itself (F17, deep-audit 2026-07-10). The production launchers
|
|
192
|
+
// stamp PORT explicitly — start-server-production.sh runs
|
|
193
|
+
// `PORT="$PORT" nohup node ...` (default 3847), install-windows.ps1's
|
|
194
|
+
// autostart runs `cmd /c set PORT=3847 && node ...` — so process.env.PORT
|
|
195
|
+
// is 3847 on a deployed server and the `{ ...baseProcessEnv }` spread
|
|
196
|
+
// forwarded it into every pty. A nested `npm run dev` (another webui, a
|
|
197
|
+
// Vite app, any PORT-honouring server) then bound 3847 and clashed.
|
|
198
|
+
// VITE_PORT + HONO_HOST are the sibling network vars with the same leak.
|
|
199
|
+
// Deleted AFTER the callerEnv merge (mirroring the parent-session strip
|
|
200
|
+
// above) so neither the server's own env NOR a caller can leak them; the
|
|
201
|
+
// child shell gets a clean network slate and the user's dev server picks
|
|
202
|
+
// its own default port. Deliberately NARROW: only the three network-bind
|
|
203
|
+
// vars. Audit of config.ts's SHIPWRIGHT_* consumers (the spec's "audit
|
|
204
|
+
// config.ts consumers" instruction): NO_FLICKER / _LEGACY_BRAND_COLORS are
|
|
205
|
+
// consumed by THIS helper; SHIPWRIGHT_WEBUI is set on purpose above; the
|
|
206
|
+
// rest (MAX_CONCURRENT / STATIC_DIR / CLAUDE_PASTES_KEEP_LAST / TERMINAL_WS_
|
|
207
|
+
// BUFFER_BYTES / _IDLE_TIMEOUT_MS / PTY_SHELL_OVERRIDE / _SCROLLBACK_* /
|
|
208
|
+
// _SWEEP_* / _HEADLESS_MIRROR) are internal knobs that bind NO port/host, so
|
|
209
|
+
// none causes the F17 collision and none is stripped. A blanket SHIPWRIGHT_*
|
|
210
|
+
// sweep would be scope creep that breaks those contracts (Chesterton's
|
|
211
|
+
// Fence). HOST is intentionally NOT stripped: no webui launcher stamps it
|
|
212
|
+
// (start-server-production.sh / install-windows.ps1 / dev-restart.js stamp
|
|
213
|
+
// PORT/VITE_PORT only) and it sits outside the finding's footprint.
|
|
214
|
+
for (const k of WEBUI_OPERATIONAL_ENV_KEYS)
|
|
215
|
+
delete env[k];
|
|
216
|
+
return env;
|
|
217
|
+
}
|
|
218
|
+
/** Claude-session identity markers stripped by {@link buildSpawnEnv}. */
|
|
219
|
+
const PARENT_SESSION_ENV_KEYS = [
|
|
220
|
+
"CLAUDE_CODE_CHILD_SESSION",
|
|
221
|
+
"CLAUDE_CODE_SESSION_ID",
|
|
222
|
+
"CLAUDE_CODE_ENTRYPOINT",
|
|
223
|
+
"CLAUDECODE",
|
|
224
|
+
];
|
|
225
|
+
/**
|
|
226
|
+
* The webui's own operational network vars, stripped by {@link buildSpawnEnv}
|
|
227
|
+
* so a PORT-honouring dev server started in the embedded terminal cannot
|
|
228
|
+
* inherit the webui's PORT (3847 on a deployed server) and collide with it
|
|
229
|
+
* (F17). Narrow by design — see the strip-site comment above.
|
|
230
|
+
*/
|
|
231
|
+
const WEBUI_OPERATIONAL_ENV_KEYS = ["PORT", "VITE_PORT", "HONO_HOST"];
|
|
232
|
+
//# sourceMappingURL=spawn-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-env.js","sourceRoot":"","sources":["../../src/terminal/spawn-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-104 (iterate-20260515-terminal-smear-reset) — derive the
|
|
3
|
+
* `terminalReset` flag carried by the WS `ready` envelope.
|
|
4
|
+
*
|
|
5
|
+
* `true` exactly when this WS attach FRESHLY created the pty
|
|
6
|
+
* (`ptyExistedBefore === false` — `ptyManager.get` returned undefined
|
|
7
|
+
* immediately before `spawn`) AND the task already had a Claude session
|
|
8
|
+
* (`firstJsonlObservedAt` set). That is the "the previous embedded
|
|
9
|
+
* terminal was lost — a server restart / crash killed the pty
|
|
10
|
+
* mid-session" signal that drives the EmbeddedTerminal reset banner.
|
|
11
|
+
*
|
|
12
|
+
* `false` on first-ever launch (no prior JSONL) and on re-attach to a
|
|
13
|
+
* still-live pty (navigate-away-and-back never kills the pty, so
|
|
14
|
+
* `spawn()` returns the existing handle).
|
|
15
|
+
*
|
|
16
|
+
* Known false-negative band (code review, ADR-104): `firstJsonlObservedAt`
|
|
17
|
+
* is read from the in-memory store, which reflects the last value
|
|
18
|
+
* persisted to `sdk-sessions.json`. It is RESTORED from disk at server
|
|
19
|
+
* boot, so after a normal restart it is available for any task whose
|
|
20
|
+
* transcript poll ever persisted it. The narrow miss: a task whose JSONL
|
|
21
|
+
* first appeared, was observed by a poll, but crashed before the
|
|
22
|
+
* follow-up `store.persist()` flushed — the field is `undefined` on
|
|
23
|
+
* reload and the banner does not show. This degrades to the pre-ADR-104
|
|
24
|
+
* behaviour (no banner) — never a false positive, never a regression —
|
|
25
|
+
* so the precise (cheap, no-false-positive) `firstJsonlObservedAt`
|
|
26
|
+
* signal is kept over a live JSONL-path stat. A live stat would also
|
|
27
|
+
* have to encode the `~/.claude/projects/<cwd>` path and could fire on
|
|
28
|
+
* a pty that ran a bare shell with no Claude session.
|
|
29
|
+
*/
|
|
30
|
+
export declare function deriveTerminalReset(ptyExistedBefore: boolean, firstJsonlObservedAt: string | null | undefined): boolean;
|
|
31
|
+
//# sourceMappingURL=terminal-reset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-reset.d.ts","sourceRoot":"","sources":["../../src/terminal/terminal-reset.ts"],"names":[],"mappings":"AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,mBAAmB,CACjC,gBAAgB,EAAE,OAAO,EACzB,oBAAoB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9C,OAAO,CAET"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* terminal-reset.ts — pure helper for the `terminalReset` field carried
|
|
3
|
+
* by the WS `ready` envelope (ADR-104).
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `terminal/routes.ts` in iterate-2026-05-27-ws-upgrade-
|
|
6
|
+
* handler-split (ADR-103 retirement candidate #1). The helper is shared
|
|
7
|
+
* by `routes.ts` and `ws-upgrade-handler.ts`; living in its own neutral
|
|
8
|
+
* module avoids a circular dependency between them (external plan
|
|
9
|
+
* review MED #3 — openrouter/openai, 2026-05-27).
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* ADR-104 (iterate-20260515-terminal-smear-reset) — derive the
|
|
13
|
+
* `terminalReset` flag carried by the WS `ready` envelope.
|
|
14
|
+
*
|
|
15
|
+
* `true` exactly when this WS attach FRESHLY created the pty
|
|
16
|
+
* (`ptyExistedBefore === false` — `ptyManager.get` returned undefined
|
|
17
|
+
* immediately before `spawn`) AND the task already had a Claude session
|
|
18
|
+
* (`firstJsonlObservedAt` set). That is the "the previous embedded
|
|
19
|
+
* terminal was lost — a server restart / crash killed the pty
|
|
20
|
+
* mid-session" signal that drives the EmbeddedTerminal reset banner.
|
|
21
|
+
*
|
|
22
|
+
* `false` on first-ever launch (no prior JSONL) and on re-attach to a
|
|
23
|
+
* still-live pty (navigate-away-and-back never kills the pty, so
|
|
24
|
+
* `spawn()` returns the existing handle).
|
|
25
|
+
*
|
|
26
|
+
* Known false-negative band (code review, ADR-104): `firstJsonlObservedAt`
|
|
27
|
+
* is read from the in-memory store, which reflects the last value
|
|
28
|
+
* persisted to `sdk-sessions.json`. It is RESTORED from disk at server
|
|
29
|
+
* boot, so after a normal restart it is available for any task whose
|
|
30
|
+
* transcript poll ever persisted it. The narrow miss: a task whose JSONL
|
|
31
|
+
* first appeared, was observed by a poll, but crashed before the
|
|
32
|
+
* follow-up `store.persist()` flushed — the field is `undefined` on
|
|
33
|
+
* reload and the banner does not show. This degrades to the pre-ADR-104
|
|
34
|
+
* behaviour (no banner) — never a false positive, never a regression —
|
|
35
|
+
* so the precise (cheap, no-false-positive) `firstJsonlObservedAt`
|
|
36
|
+
* signal is kept over a live JSONL-path stat. A live stat would also
|
|
37
|
+
* have to encode the `~/.claude/projects/<cwd>` path and could fire on
|
|
38
|
+
* a pty that ran a bare shell with no Claude session.
|
|
39
|
+
*/
|
|
40
|
+
export function deriveTerminalReset(ptyExistedBefore, firstJsonlObservedAt) {
|
|
41
|
+
return !ptyExistedBefore && Boolean(firstJsonlObservedAt);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=terminal-reset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-reset.js","sourceRoot":"","sources":["../../src/terminal/terminal-reset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,mBAAmB,CACjC,gBAAyB,EACzB,oBAA+C;IAE/C,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/** Default heartbeat interval; a dead peer is reaped within ~2-3 intervals. */
|
|
2
|
+
export declare const DEFAULT_HEARTBEAT_MS = 15000;
|
|
3
|
+
/** Floor — guards against a pathological tiny interval pinning the loop. */
|
|
4
|
+
export declare const MIN_HEARTBEAT_MS = 1000;
|
|
5
|
+
/**
|
|
6
|
+
* Ceiling — a larger interval would silently make the reaper effectively
|
|
7
|
+
* inert and restore the exact bug this iterate fixes, so a misconfigured
|
|
8
|
+
* env value is clamped down rather than trusted (internal review #3).
|
|
9
|
+
*/
|
|
10
|
+
export declare const MAX_HEARTBEAT_MS = 300000;
|
|
11
|
+
/**
|
|
12
|
+
* Consecutive missed pongs tolerated before a socket is reaped. `2` means
|
|
13
|
+
* the connection survives ONE transient miss — important on OS-sleep
|
|
14
|
+
* resume, where the server's interval and the peer wake on slightly
|
|
15
|
+
* different ticks (internal review #2). A truly dead socket is still
|
|
16
|
+
* reaped within ~2-3 intervals.
|
|
17
|
+
*/
|
|
18
|
+
export declare const DEFAULT_MAX_MISSED_PONGS = 2;
|
|
19
|
+
/**
|
|
20
|
+
* The slice of a `ws` (ws@8) socket we depend on, surfaced via
|
|
21
|
+
* `WSContext.raw` (@hono/node-ws). Kept structural so tests can supply a
|
|
22
|
+
* fake and so a future adapter that does not expose these methods degrades
|
|
23
|
+
* to a no-op rather than throwing.
|
|
24
|
+
*/
|
|
25
|
+
export interface RawSocketLike {
|
|
26
|
+
readyState: number;
|
|
27
|
+
ping(): void;
|
|
28
|
+
terminate(): void;
|
|
29
|
+
on(event: "pong", listener: () => void): void;
|
|
30
|
+
off?(event: "pong", listener: () => void): void;
|
|
31
|
+
}
|
|
32
|
+
export interface HeartbeatMonitor {
|
|
33
|
+
/** Record a pong from the peer — the connection is alive. */
|
|
34
|
+
notePong(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Decide this interval's action and advance state: `terminate` once the
|
|
37
|
+
* tolerance of consecutive missed pongs is exhausted, otherwise `ping`.
|
|
38
|
+
*/
|
|
39
|
+
tick(): "ping" | "terminate";
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Pure liveness state machine. No timers, no sockets — fully unit-testable.
|
|
43
|
+
* Tracks pings sent since the last pong; a pong resets it. Reaps once that
|
|
44
|
+
* count reaches `maxMissedPongs`, so a single transient miss is tolerated
|
|
45
|
+
* at the default (see {@link DEFAULT_MAX_MISSED_PONGS}).
|
|
46
|
+
*/
|
|
47
|
+
export declare function createHeartbeatMonitor(maxMissedPongs?: number): HeartbeatMonitor;
|
|
48
|
+
/**
|
|
49
|
+
* Resolve the heartbeat interval from the environment. Invalid, absent, or
|
|
50
|
+
* non-positive values fall back to {@link DEFAULT_HEARTBEAT_MS}; valid
|
|
51
|
+
* values are clamped up to {@link MIN_HEARTBEAT_MS}.
|
|
52
|
+
*/
|
|
53
|
+
export declare function resolveHeartbeatMs(env: Record<string, string | undefined>): number;
|
|
54
|
+
export interface StartWsHeartbeatOpts {
|
|
55
|
+
/** Override the resolved interval (tests). */
|
|
56
|
+
intervalMs?: number;
|
|
57
|
+
/** Consecutive missed pongs tolerated before reap (tests / tuning). */
|
|
58
|
+
maxMissedPongs?: number;
|
|
59
|
+
/** Env source for interval resolution (defaults to `process.env`). */
|
|
60
|
+
env?: Record<string, string | undefined>;
|
|
61
|
+
/** Scheduler seams for deterministic tests. */
|
|
62
|
+
setIntervalFn?: (handler: () => void, ms: number) => ReturnType<typeof setInterval>;
|
|
63
|
+
clearIntervalFn?: (timer: ReturnType<typeof setInterval>) => void;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Attach a self-cleaning liveness heartbeat to a WS connection. Returns a
|
|
67
|
+
* `stop()` for explicit teardown; the loop ALSO self-cleans on the first
|
|
68
|
+
* tick after `raw.readyState` leaves OPEN, so callers need not wire
|
|
69
|
+
* `onClose`/`onError`.
|
|
70
|
+
*
|
|
71
|
+
* No-ops (returns a no-op `stop`) when the connection does not expose a
|
|
72
|
+
* pingable raw socket — degrading to the pre-existing close-driven release
|
|
73
|
+
* with no regression for tests/mocks or alternate adapters.
|
|
74
|
+
*/
|
|
75
|
+
export declare function startWsHeartbeat(ws: {
|
|
76
|
+
raw?: unknown;
|
|
77
|
+
}, opts?: StartWsHeartbeatOpts): () => void;
|
|
78
|
+
//# sourceMappingURL=ws-heartbeat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-heartbeat.d.ts","sourceRoot":"","sources":["../../src/terminal/ws-heartbeat.ts"],"names":[],"mappings":"AAiCA,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AACtC;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,SAAU,CAAC;AACxC;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAI1C;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,IAAI,IAAI,CAAC;IACb,SAAS,IAAI,IAAI,CAAC;IAClB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC9C,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,gBAAgB;IAC/B,6DAA6D;IAC7D,QAAQ,IAAI,IAAI,CAAC;IACjB;;;OAGG;IACH,IAAI,IAAI,MAAM,GAAG,WAAW,CAAC;CAC9B;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,cAAc,GAAE,MAAiC,GAChD,gBAAgB,CAYlB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,MAAM,CAMR;AAED,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,+CAA+C;IAC/C,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,MAAM,IAAI,EACnB,EAAE,EAAE,MAAM,KACP,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,KAAK,IAAI,CAAC;CACnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,EACrB,IAAI,CAAC,EAAE,oBAAoB,GAC1B,MAAM,IAAI,CAsEZ"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ws-heartbeat.ts — embedded-terminal WebSocket liveness keepalive
|
|
3
|
+
* (iterate-2026-05-31-terminal-readonly-keepalive).
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS
|
|
6
|
+
* ---------------
|
|
7
|
+
* The terminal writer slot (`pty-manager.ts`) is released ONLY when the
|
|
8
|
+
* server observes a WS `close`/`error` event (`detachAndCount` in
|
|
9
|
+
* `ws-upgrade-handler.ts`). A connection that dies UNCLEANLY — OS sleep,
|
|
10
|
+
* browser/tab crash, or a Tailscale half-open TCP (the prod server binds
|
|
11
|
+
* the Tailscale IP) — never fires that event, so the writer slot stays
|
|
12
|
+
* pinned to a dead conn. Every new tab then attaches as `reader` and shows
|
|
13
|
+
* the false "Read-only — another tab is the active writer" banner. The
|
|
14
|
+
* backpressure watchdog cannot help: it evicts on `bufferedAmount`
|
|
15
|
+
* saturation, and an idle dead socket buffers ~0 bytes (in prod it is inert
|
|
16
|
+
* anyway — the manager's `conn` is a synthetic token with no
|
|
17
|
+
* `bufferedAmount`).
|
|
18
|
+
*
|
|
19
|
+
* This module adds a per-connection WS ping/pong heartbeat. On a missed
|
|
20
|
+
* pong the dead socket is `terminate()`d; the existing
|
|
21
|
+
* `onClose → detach → reader-promotion → onPromoteToWriter("writer-promoted")`
|
|
22
|
+
* chain then frees the slot and promotes the surviving tab to writer —
|
|
23
|
+
* clearing read-only WITHOUT a manual reload. The browser answers WS pings
|
|
24
|
+
* automatically (RFC 6455 control frame), so there is no client change.
|
|
25
|
+
*
|
|
26
|
+
* COHESION (ADR-101/103): `pty-manager.ts` / `ws-upgrade-handler.ts` /
|
|
27
|
+
* `terminal/routes.ts` are at-ceiling deep-module exceptions. The
|
|
28
|
+
* liveness mechanics live HERE as a dedicated neutral module (the
|
|
29
|
+
* ADR-103-sanctioned shape, cf. `terminal-reset.ts`) so the WS body only
|
|
30
|
+
* gains a one-line wire. The pure monitor + env resolver are timer- and
|
|
31
|
+
* socket-free for deterministic unit testing.
|
|
32
|
+
*/
|
|
33
|
+
/** Default heartbeat interval; a dead peer is reaped within ~2-3 intervals. */
|
|
34
|
+
export const DEFAULT_HEARTBEAT_MS = 15_000;
|
|
35
|
+
/** Floor — guards against a pathological tiny interval pinning the loop. */
|
|
36
|
+
export const MIN_HEARTBEAT_MS = 1_000;
|
|
37
|
+
/**
|
|
38
|
+
* Ceiling — a larger interval would silently make the reaper effectively
|
|
39
|
+
* inert and restore the exact bug this iterate fixes, so a misconfigured
|
|
40
|
+
* env value is clamped down rather than trusted (internal review #3).
|
|
41
|
+
*/
|
|
42
|
+
export const MAX_HEARTBEAT_MS = 300_000;
|
|
43
|
+
/**
|
|
44
|
+
* Consecutive missed pongs tolerated before a socket is reaped. `2` means
|
|
45
|
+
* the connection survives ONE transient miss — important on OS-sleep
|
|
46
|
+
* resume, where the server's interval and the peer wake on slightly
|
|
47
|
+
* different ticks (internal review #2). A truly dead socket is still
|
|
48
|
+
* reaped within ~2-3 intervals.
|
|
49
|
+
*/
|
|
50
|
+
export const DEFAULT_MAX_MISSED_PONGS = 2;
|
|
51
|
+
/** RFC 6455 OPEN readyState (ws@8 numeric constant). */
|
|
52
|
+
const WS_OPEN = 1;
|
|
53
|
+
/**
|
|
54
|
+
* Pure liveness state machine. No timers, no sockets — fully unit-testable.
|
|
55
|
+
* Tracks pings sent since the last pong; a pong resets it. Reaps once that
|
|
56
|
+
* count reaches `maxMissedPongs`, so a single transient miss is tolerated
|
|
57
|
+
* at the default (see {@link DEFAULT_MAX_MISSED_PONGS}).
|
|
58
|
+
*/
|
|
59
|
+
export function createHeartbeatMonitor(maxMissedPongs = DEFAULT_MAX_MISSED_PONGS) {
|
|
60
|
+
let pingsSincePong = 0;
|
|
61
|
+
return {
|
|
62
|
+
notePong() {
|
|
63
|
+
pingsSincePong = 0;
|
|
64
|
+
},
|
|
65
|
+
tick() {
|
|
66
|
+
if (pingsSincePong >= maxMissedPongs)
|
|
67
|
+
return "terminate";
|
|
68
|
+
pingsSincePong += 1;
|
|
69
|
+
return "ping";
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolve the heartbeat interval from the environment. Invalid, absent, or
|
|
75
|
+
* non-positive values fall back to {@link DEFAULT_HEARTBEAT_MS}; valid
|
|
76
|
+
* values are clamped up to {@link MIN_HEARTBEAT_MS}.
|
|
77
|
+
*/
|
|
78
|
+
export function resolveHeartbeatMs(env) {
|
|
79
|
+
const raw = env.SHIPWRIGHT_TERMINAL_WS_HEARTBEAT_MS;
|
|
80
|
+
if (raw === undefined)
|
|
81
|
+
return DEFAULT_HEARTBEAT_MS;
|
|
82
|
+
const parsed = Number.parseInt(raw, 10);
|
|
83
|
+
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
84
|
+
return DEFAULT_HEARTBEAT_MS;
|
|
85
|
+
return Math.min(Math.max(parsed, MIN_HEARTBEAT_MS), MAX_HEARTBEAT_MS);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Attach a self-cleaning liveness heartbeat to a WS connection. Returns a
|
|
89
|
+
* `stop()` for explicit teardown; the loop ALSO self-cleans on the first
|
|
90
|
+
* tick after `raw.readyState` leaves OPEN, so callers need not wire
|
|
91
|
+
* `onClose`/`onError`.
|
|
92
|
+
*
|
|
93
|
+
* No-ops (returns a no-op `stop`) when the connection does not expose a
|
|
94
|
+
* pingable raw socket — degrading to the pre-existing close-driven release
|
|
95
|
+
* with no regression for tests/mocks or alternate adapters.
|
|
96
|
+
*/
|
|
97
|
+
export function startWsHeartbeat(ws, opts) {
|
|
98
|
+
const candidate = ws?.raw;
|
|
99
|
+
if (!candidate ||
|
|
100
|
+
typeof candidate.ping !== "function" ||
|
|
101
|
+
typeof candidate.terminate !== "function" ||
|
|
102
|
+
typeof candidate.on !== "function") {
|
|
103
|
+
return () => undefined;
|
|
104
|
+
}
|
|
105
|
+
const raw = candidate;
|
|
106
|
+
const monitor = createHeartbeatMonitor(opts?.maxMissedPongs);
|
|
107
|
+
const onPong = () => monitor.notePong();
|
|
108
|
+
raw.on("pong", onPong);
|
|
109
|
+
const intervalMs = opts?.intervalMs ?? resolveHeartbeatMs(opts?.env ?? process.env);
|
|
110
|
+
const setI = opts?.setIntervalFn ?? setInterval;
|
|
111
|
+
const clearI = opts?.clearIntervalFn ?? clearInterval;
|
|
112
|
+
let timer = null;
|
|
113
|
+
let stopped = false;
|
|
114
|
+
const stop = () => {
|
|
115
|
+
if (stopped)
|
|
116
|
+
return;
|
|
117
|
+
stopped = true;
|
|
118
|
+
if (timer !== null) {
|
|
119
|
+
clearI(timer);
|
|
120
|
+
timer = null;
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
raw.off?.("pong", onPong);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
/* ignore */
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
timer = setI(() => {
|
|
130
|
+
if (raw.readyState !== WS_OPEN) {
|
|
131
|
+
// Socket already closing/closed — the onClose path (if any) owns the
|
|
132
|
+
// detach; we just release our own timer + listener.
|
|
133
|
+
stop();
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const action = monitor.tick();
|
|
137
|
+
if (action === "terminate") {
|
|
138
|
+
// Half-open / unresponsive: force the close so the existing
|
|
139
|
+
// detach → reader-promotion chain runs, then stop ourselves so
|
|
140
|
+
// terminate() fires EXACTLY ONCE — even if it throws or the
|
|
141
|
+
// readyState flip is not synchronous (external review: openai
|
|
142
|
+
// medium, 2026-05-31). Without the explicit stop() the interval
|
|
143
|
+
// would re-`terminate()` every tick.
|
|
144
|
+
try {
|
|
145
|
+
raw.terminate();
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
/* ignore — we stop the loop regardless */
|
|
149
|
+
}
|
|
150
|
+
stop();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
raw.ping();
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
/* socket mid-close — next tick's readyState guard self-cleans */
|
|
158
|
+
}
|
|
159
|
+
}, intervalMs);
|
|
160
|
+
// Never keep the event loop alive solely for the heartbeat.
|
|
161
|
+
timer.unref?.();
|
|
162
|
+
return stop;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=ws-heartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws-heartbeat.js","sourceRoot":"","sources":["../../src/terminal/ws-heartbeat.ts"],"names":[],"mappings":"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"}
|