@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,774 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Shipwright Command Center — server entry.
|
|
3
|
+
*
|
|
4
|
+
* Plan D'' variant-a architecture (external-launch):
|
|
5
|
+
* - Webui owns no Claude subprocess, no SSE chat stream, no NDJSON parser.
|
|
6
|
+
* - User launches Claude Code in their own terminal via a pre-bound
|
|
7
|
+
* --session-id UUID (copy-command generator at core/launcher.ts).
|
|
8
|
+
* - Webui observes the JSONL at ~/.claude/projects/<encoded-cwd>/<uuid>.jsonl
|
|
9
|
+
* via SessionWatcher + polling (core/session-watcher.ts).
|
|
10
|
+
* - Task metadata persisted at <registryDir>/sdk-sessions.json
|
|
11
|
+
* (core/sdk-sessions-store.ts).
|
|
12
|
+
*
|
|
13
|
+
* This file used to be 800+ LOC of chat/adapter/heartbeat wiring.
|
|
14
|
+
* Sub-iterate 3 of Plan D'' trims it to ~100 LOC.
|
|
15
|
+
*/
|
|
16
|
+
import { Hono } from "hono";
|
|
17
|
+
import { cors } from "hono/cors";
|
|
18
|
+
import { serveStatic } from "@hono/node-server/serve-static";
|
|
19
|
+
import { serve } from "@hono/node-server";
|
|
20
|
+
import fs from "fs";
|
|
21
|
+
import { readFile, writeFile } from "fs/promises";
|
|
22
|
+
import { execSync } from "node:child_process";
|
|
23
|
+
import * as lockfile from "proper-lockfile";
|
|
24
|
+
import { getConfig } from "./config.js";
|
|
25
|
+
import { formatBindError } from "./lib/bind-errors.js";
|
|
26
|
+
import { resolveHonoHost } from "./lib/resolveHonoHost.js";
|
|
27
|
+
import { resolveTrustedOrigins } from "./lib/resolveTrustedOrigins.js";
|
|
28
|
+
import { errorHandler } from "./middleware/error-handler.js";
|
|
29
|
+
import { requestLogger } from "./middleware/logger.js";
|
|
30
|
+
import { ProjectManager } from "./core/project-manager.js";
|
|
31
|
+
import { SdkSessionsStore } from "./core/sdk-sessions-store.js";
|
|
32
|
+
import { SessionWatcher } from "./core/session-watcher.js";
|
|
33
|
+
import { probeClaudeVersion } from "./core/cli-compat.js";
|
|
34
|
+
import { resolveClaudeBin, selfHealClaudePath } from "./core/claude-bin-resolver.js";
|
|
35
|
+
import { PreviewSessionManager } from "./core/preview-session-manager.js";
|
|
36
|
+
import { loadProfile as loadProfileReal, getProfilesDir, } from "./core/profile-loader.js";
|
|
37
|
+
import { evaluatePreviewCoherence } from "./core/preview-coherence.js";
|
|
38
|
+
import { createProjectRoutes } from "./routes/projects.js";
|
|
39
|
+
import { cascadeDeleteProjectTasks } from "./core/cascade-delete-project-tasks.js";
|
|
40
|
+
import { createSettingsRoutes } from "./routes/settings.js";
|
|
41
|
+
import { createProfilesRoutes } from "./routes/profiles.js";
|
|
42
|
+
import { createExternalRoutes } from "./external/routes.js";
|
|
43
|
+
import { createDiagnosticsRoutes } from "./routes/diagnostics.js";
|
|
44
|
+
import { createReadinessRoutes } from "./routes/readiness.js";
|
|
45
|
+
import { createGradeRoutes } from "./routes/grade.js";
|
|
46
|
+
import { createTerminalAppearanceRoutes } from "./routes/terminal-appearance.js";
|
|
47
|
+
import { createTriageRoutes } from "./routes/triage.js";
|
|
48
|
+
import { createCampaignsRoutes } from "./routes/campaigns.js";
|
|
49
|
+
import { resolveCampaignsDir } from "./core/campaign-paths.js";
|
|
50
|
+
import { readCampaigns } from "./core/campaign-store.js";
|
|
51
|
+
import { createTriageLock } from "./core/triage-lock.js";
|
|
52
|
+
import { PtyManager } from "./terminal/pty-manager.js";
|
|
53
|
+
import { createTerminalRoutes, createNodePtySpawnFn, } from "./terminal/routes.js";
|
|
54
|
+
import { ScrollbackStore } from "./terminal/scrollback-store.js";
|
|
55
|
+
import { SnapshotStore } from "./terminal/snapshot-store.js";
|
|
56
|
+
import { runBootWipe } from "./terminal/boot-wipe.js";
|
|
57
|
+
import { sweepOrphanSnapshotTmp } from "./terminal/snapshot-tmp-sweep.js";
|
|
58
|
+
import { probeHeadlessDeps } from "./terminal/headless-probe.js";
|
|
59
|
+
import { createNodeWebSocket } from "@hono/node-ws";
|
|
60
|
+
const config = getConfig();
|
|
61
|
+
const startTime = Date.now();
|
|
62
|
+
const honoHost = resolveHonoHost(process.env); // resolved once — org-router gate (FR-04.38) + serve() below
|
|
63
|
+
export const app = new Hono();
|
|
64
|
+
// Iterate v0.8.4 — CORS origin gate now defers to
|
|
65
|
+
// `resolveTrustedOrigins(process.env)` so it widens consistently with
|
|
66
|
+
// `HONO_HOST` / `WEBUI_TRUSTED_ORIGINS`. Same policy as the WS upgrade
|
|
67
|
+
// gate in `terminal/routes.ts`. Default (no env vars set) is
|
|
68
|
+
// loopback-only — and stricter than the prior `origin.includes("localhost")`
|
|
69
|
+
// substring check, which would have matched
|
|
70
|
+
// `http://evil-localhost-attack.com`.
|
|
71
|
+
//
|
|
72
|
+
// ADR-083 — pass tailscaleExec so SHIPWRIGHT_NETWORK_PROFILE=tailscale
|
|
73
|
+
// drives the policy too (loopback + tailscale-IP + *.ts.net allowed).
|
|
74
|
+
const tailscaleExecForOrigin = (cmd, opts) => String(execSync(cmd, opts));
|
|
75
|
+
const corsOriginPolicy = resolveTrustedOrigins(process.env, tailscaleExecForOrigin);
|
|
76
|
+
app.use("*", cors({
|
|
77
|
+
origin: (origin) => {
|
|
78
|
+
if (origin && corsOriginPolicy.isAllowed(origin))
|
|
79
|
+
return origin;
|
|
80
|
+
return null;
|
|
81
|
+
},
|
|
82
|
+
}));
|
|
83
|
+
app.use("*", requestLogger);
|
|
84
|
+
app.onError(errorHandler);
|
|
85
|
+
app.get("/api/health", (c) => c.json({
|
|
86
|
+
status: "ok",
|
|
87
|
+
version: "0.1.0",
|
|
88
|
+
uptime: Math.floor((Date.now() - startTime) / 1000),
|
|
89
|
+
}));
|
|
90
|
+
const isMainModule = typeof process !== "undefined" &&
|
|
91
|
+
process.argv[1] &&
|
|
92
|
+
(process.argv[1].endsWith("index.ts") || process.argv[1].endsWith("index.js"));
|
|
93
|
+
if (isMainModule) {
|
|
94
|
+
void (async () => {
|
|
95
|
+
try {
|
|
96
|
+
const FATAL_ERROR_CODES = new Set(["EADDRINUSE", "EACCES", "EADDRNOTAVAIL"]);
|
|
97
|
+
process.on("uncaughtException", (err) => {
|
|
98
|
+
const code = err.code;
|
|
99
|
+
if (code && FATAL_ERROR_CODES.has(code)) {
|
|
100
|
+
console.error(JSON.stringify({
|
|
101
|
+
level: "fatal",
|
|
102
|
+
message: `Fatal startup error (${code}) — exiting so tsx watch can retry`,
|
|
103
|
+
error: String(err),
|
|
104
|
+
code,
|
|
105
|
+
}));
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
console.error(JSON.stringify({
|
|
109
|
+
level: "error",
|
|
110
|
+
message: "Uncaught exception (server stays alive)",
|
|
111
|
+
error: String(err),
|
|
112
|
+
stack: err.stack,
|
|
113
|
+
}));
|
|
114
|
+
});
|
|
115
|
+
process.on("unhandledRejection", (reason) => {
|
|
116
|
+
console.error(JSON.stringify({
|
|
117
|
+
level: "error",
|
|
118
|
+
message: "Unhandled rejection (server stays alive)",
|
|
119
|
+
error: String(reason),
|
|
120
|
+
}));
|
|
121
|
+
});
|
|
122
|
+
// Shared cross-process lock + file-exists guard.
|
|
123
|
+
const lockPath = async (p) => lockfile.lock(p, { retries: 3 });
|
|
124
|
+
const ensureFileExists = (p) => {
|
|
125
|
+
if (!fs.existsSync(p))
|
|
126
|
+
fs.writeFileSync(p, "");
|
|
127
|
+
};
|
|
128
|
+
// ProjectManager — still used by /api/projects + wizard.
|
|
129
|
+
// getTaskProjectIds (section 02) is late-bound below, after the
|
|
130
|
+
// sessionsStore is constructed.
|
|
131
|
+
const projectManagerDeps = {
|
|
132
|
+
readFile: (p, e) => readFile(p, e),
|
|
133
|
+
writeFile: (p, d) => writeFile(p, d),
|
|
134
|
+
existsSync: (p) => fs.existsSync(p),
|
|
135
|
+
mkdirSync: (p, o) => fs.mkdirSync(p, o),
|
|
136
|
+
readdirSync: ((p, o) => fs.readdirSync(p, o)),
|
|
137
|
+
lock: lockPath,
|
|
138
|
+
ensureFile: ensureFileExists,
|
|
139
|
+
// F07 (D08) — atomic tmp+rename persist + corrupt-file quarantine.
|
|
140
|
+
rename: (from, to) => fs.promises.rename(from, to),
|
|
141
|
+
};
|
|
142
|
+
const projectManager = new ProjectManager(`${config.registryDir}/projects.json`, projectManagerDeps);
|
|
143
|
+
await projectManager.load();
|
|
144
|
+
// External-launch store + watcher.
|
|
145
|
+
//
|
|
146
|
+
// Section 02 (iterate 3, ADR-037/038) — two cross-wirings:
|
|
147
|
+
// 1. projectManager.getTaskProjectIds reads from sessionsStore so
|
|
148
|
+
// the Unassigned pseudo-project surfaces iff any task needs it.
|
|
149
|
+
// 2. sdkSessionsStore.getKnownProjectIds reads from projectManager
|
|
150
|
+
// so stale projectIds on-disk (deleted projects, O26) resolve
|
|
151
|
+
// to UNASSIGNED in memory on load.
|
|
152
|
+
//
|
|
153
|
+
// The wiring order matters — projectManager loads first (sync
|
|
154
|
+
// projects.json read) and the sessionsStore reads from it during
|
|
155
|
+
// its own load(). The sessionsStore is created fresh above so we
|
|
156
|
+
// pass a reference-equality callback that stays valid after both
|
|
157
|
+
// stores finish loading.
|
|
158
|
+
const sdkSessionsPath = `${config.registryDir}/sdk-sessions.json`;
|
|
159
|
+
const sdkSessionsDeps = {
|
|
160
|
+
readFile: (p, e) => readFile(p, e),
|
|
161
|
+
writeFile: (p, d) => writeFile(p, d),
|
|
162
|
+
existsSync: (p) => fs.existsSync(p),
|
|
163
|
+
mkdirSync: (p, o) => fs.mkdirSync(p, o),
|
|
164
|
+
lock: lockPath,
|
|
165
|
+
ensureFile: ensureFileExists,
|
|
166
|
+
// F08 — atomic tmp+rename for the merge-under-lock persist path.
|
|
167
|
+
rename: (from, to) => fs.promises.rename(from, to),
|
|
168
|
+
getKnownProjectIds: () => new Set(projectManager.getAll().filter((p) => !p.synthesized).map((p) => p.id)),
|
|
169
|
+
};
|
|
170
|
+
const sdkSessionsStore = new SdkSessionsStore(sdkSessionsPath, sdkSessionsDeps);
|
|
171
|
+
await sdkSessionsStore.load();
|
|
172
|
+
// Late-bind getTaskProjectIds — projectManager.deps is public (mutable), so append here.
|
|
173
|
+
projectManager.deps.getTaskProjectIds =
|
|
174
|
+
() => new Set(sdkSessionsStore.list().map((t) => t.projectId));
|
|
175
|
+
// Boot-time diagnostic (spec step 7). Logs once if any session
|
|
176
|
+
// carries projectId="unassigned" while the on-disk file is still
|
|
177
|
+
// schemaVersion: 1 — confirms the write-on-touch migration is
|
|
178
|
+
// deferred as designed (ADR-038) rather than silently broken.
|
|
179
|
+
try {
|
|
180
|
+
if (fs.existsSync(sdkSessionsPath)) {
|
|
181
|
+
const raw = fs.readFileSync(sdkSessionsPath, "utf-8");
|
|
182
|
+
if (raw.trim()) {
|
|
183
|
+
const parsed = JSON.parse(raw);
|
|
184
|
+
const hasUnassignedInMemory = sdkSessionsStore
|
|
185
|
+
.list()
|
|
186
|
+
.some((t) => t.projectId === "unassigned");
|
|
187
|
+
if (parsed.schemaVersion === 1 && hasUnassignedInMemory) {
|
|
188
|
+
console.log(JSON.stringify({
|
|
189
|
+
level: "info",
|
|
190
|
+
message: "sdk-sessions.json is still schemaVersion 1; v1→v2 migration will land on next task mutation (ADR-038)",
|
|
191
|
+
}));
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// Non-fatal — the diagnostic is purely informational.
|
|
198
|
+
}
|
|
199
|
+
const sessionWatcher = new SessionWatcher();
|
|
200
|
+
// Claude CLI version probe (refreshed on demand; post-upgrade clients
|
|
201
|
+
// see the new number without a server restart).
|
|
202
|
+
let claudeVersion = probeClaudeVersion();
|
|
203
|
+
// iterate-2026-05-08 v0.8.8 AC-3 — boot-time PATH self-heal. When
|
|
204
|
+
// the AC-2 fallback resolved a binary that's NOT on the server's
|
|
205
|
+
// process.env.PATH (typical: claude installed into ~/.local/bin/
|
|
206
|
+
// but server started from a shell whose PATH didn't include that
|
|
207
|
+
// dir), prepend the parent dir so subsequent child-process spawns
|
|
208
|
+
// (node-pty pwsh / preview-session-manager) inherit the augmented
|
|
209
|
+
// PATH. Idempotent — no-op when parent dir is already on PATH.
|
|
210
|
+
const resolvedBin = resolveClaudeBin();
|
|
211
|
+
selfHealClaudePath({
|
|
212
|
+
bin: resolvedBin,
|
|
213
|
+
env: process.env,
|
|
214
|
+
platform: process.platform,
|
|
215
|
+
});
|
|
216
|
+
const versionInfo = () => {
|
|
217
|
+
if (!claudeVersion.raw)
|
|
218
|
+
claudeVersion = probeClaudeVersion();
|
|
219
|
+
return claudeVersion;
|
|
220
|
+
};
|
|
221
|
+
// Mount routes.
|
|
222
|
+
const settingsPath = `${config.registryDir}/settings.json`;
|
|
223
|
+
const settingsDeps = {
|
|
224
|
+
readFile: (p, e) => readFile(p, e),
|
|
225
|
+
writeFile: (p, d) => writeFile(p, d),
|
|
226
|
+
existsSync: (p) => fs.existsSync(p),
|
|
227
|
+
mkdirSync: (p, o) => fs.mkdirSync(p, o),
|
|
228
|
+
lock: lockPath,
|
|
229
|
+
ensureFile: ensureFileExists,
|
|
230
|
+
};
|
|
231
|
+
const projectFsDeps = {
|
|
232
|
+
existsSync: (p) => fs.existsSync(p),
|
|
233
|
+
mkdirSync: (p, o) => fs.mkdirSync(p, o),
|
|
234
|
+
writeFileSync: (p, d) => fs.writeFileSync(p, d),
|
|
235
|
+
renameSync: (from, to) => fs.renameSync(from, to),
|
|
236
|
+
};
|
|
237
|
+
// createProjectRoutes is registered below — its DELETE cascade needs the
|
|
238
|
+
// scrollback + snapshot stores constructed further down.
|
|
239
|
+
app.route("/", createSettingsRoutes(settingsPath, settingsDeps));
|
|
240
|
+
app.route("/", createProfilesRoutes());
|
|
241
|
+
// Section 03 (iterate 3) — preview-session manager. Single instance
|
|
242
|
+
// per server process so the dedup map lives across requests. Its
|
|
243
|
+
// killAll() runs on shutdown so user-spawned dev servers don't
|
|
244
|
+
// linger past a webui restart.
|
|
245
|
+
const previewManager = new PreviewSessionManager();
|
|
246
|
+
// Iterate 5 (ADR-068-A1) — disk-backed terminal scrollback. Single
|
|
247
|
+
// ScrollbackStore instance shared between PtyManager (append on
|
|
248
|
+
// pty.onData + closeStream on kill) and the WS replay flow in
|
|
249
|
+
// terminal/routes.ts. Boot-time init() creates the dir + caches
|
|
250
|
+
// the realpath; sweep runs on boot AND on a 24h interval.
|
|
251
|
+
const scrollbackStore = new ScrollbackStore(config.terminalScrollbackDir, {
|
|
252
|
+
maxBytesPerTask: config.terminalScrollbackMaxBytes,
|
|
253
|
+
});
|
|
254
|
+
try {
|
|
255
|
+
await scrollbackStore.init();
|
|
256
|
+
}
|
|
257
|
+
catch (err) {
|
|
258
|
+
console.warn(JSON.stringify({
|
|
259
|
+
level: "warn",
|
|
260
|
+
message: "scrollback store init failed; persistence disabled this session",
|
|
261
|
+
error: String(err).slice(0, 200),
|
|
262
|
+
}));
|
|
263
|
+
}
|
|
264
|
+
// Iterate C (ADR-087) — one-shot wipe of legacy `*.log*` files.
|
|
265
|
+
// The chunked-replay path is retired in this iterate; the on-disk
|
|
266
|
+
// scrollback files have no replay consumer. Wipe them once,
|
|
267
|
+
// mark the directory, never wipe again. Idempotency marker
|
|
268
|
+
// protects against repeat-runs. Best-effort; boot continues on
|
|
269
|
+
// failure. Snapshot files (`.snapshot`) are PRESERVED.
|
|
270
|
+
try {
|
|
271
|
+
const wipeResult = await runBootWipe({
|
|
272
|
+
dir: config.terminalScrollbackDir,
|
|
273
|
+
});
|
|
274
|
+
if (wipeResult.deleted > 0 || wipeResult.errors > 0) {
|
|
275
|
+
console.log(JSON.stringify({
|
|
276
|
+
level: "info",
|
|
277
|
+
message: "iterate-C scrollback wipe",
|
|
278
|
+
deleted: wipeResult.deleted,
|
|
279
|
+
errors: wipeResult.errors,
|
|
280
|
+
markerWritten: wipeResult.markerWritten,
|
|
281
|
+
}));
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
console.warn(JSON.stringify({
|
|
286
|
+
level: "warn",
|
|
287
|
+
message: "iterate-C scrollback wipe threw; continuing boot",
|
|
288
|
+
error: String(err).slice(0, 200),
|
|
289
|
+
}));
|
|
290
|
+
}
|
|
291
|
+
// Iterate C (ADR-087, MEDIUM-B2 fix) — pre-probe @xterm/headless +
|
|
292
|
+
// @xterm/addon-serialize via dynamic import. On failure, downgrade
|
|
293
|
+
// headlessMirrorEnabled=false so the server boots cleanly without
|
|
294
|
+
// snapshots (rather than crashing on the static ESM import at
|
|
295
|
+
// load time). Trade-off documented in ADR-087: without snapshots
|
|
296
|
+
// the client sees a blank terminal with a live shell.
|
|
297
|
+
const headlessProbe = await probeHeadlessDeps();
|
|
298
|
+
if (!headlessProbe.ok) {
|
|
299
|
+
console.warn(JSON.stringify({
|
|
300
|
+
level: "warn",
|
|
301
|
+
message: "headless-mirror dependencies missing; mirror disabled this session (ADR-087 MEDIUM-B2 graceful fallback)",
|
|
302
|
+
reason: headlessProbe.reason,
|
|
303
|
+
}));
|
|
304
|
+
}
|
|
305
|
+
const headlessMirrorEnabledEffective = config.terminalHeadlessMirror && headlessProbe.ok;
|
|
306
|
+
// Iterate-2026-05-11 (ADR-088) — server-side @xterm/headless mirror
|
|
307
|
+
// snapshots. SnapshotStore shares the scrollback directory but
|
|
308
|
+
// owns a separate `.snapshot` extension so the existing rotation
|
|
309
|
+
// / sweep machinery is undisturbed. Init is best-effort; failure
|
|
310
|
+
// logs and disables mirror.
|
|
311
|
+
const snapshotStore = new SnapshotStore(config.terminalScrollbackDir);
|
|
312
|
+
let snapshotStoreReady = false;
|
|
313
|
+
if (headlessMirrorEnabledEffective) {
|
|
314
|
+
try {
|
|
315
|
+
await snapshotStore.init();
|
|
316
|
+
snapshotStoreReady = true;
|
|
317
|
+
}
|
|
318
|
+
catch (err) {
|
|
319
|
+
console.warn(JSON.stringify({
|
|
320
|
+
level: "warn",
|
|
321
|
+
message: "snapshot store init failed; headless-mirror disabled this session",
|
|
322
|
+
error: String(err).slice(0, 200),
|
|
323
|
+
}));
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// /api/projects/* — here so the DELETE cascade reaches the stores above (iterate-2026-07-06).
|
|
327
|
+
app.route("/", createProjectRoutes(projectManager, projectFsDeps, (id) => cascadeDeleteProjectTasks(id, {
|
|
328
|
+
store: sdkSessionsStore,
|
|
329
|
+
// D01/F01 — tear down each doomed task's live pty before its clears.
|
|
330
|
+
ptyKillBestEffort: (t) => ptyManager.kill(t),
|
|
331
|
+
scrollbackClearBestEffort: (t) => scrollbackStore.clearBestEffort(t),
|
|
332
|
+
// D19/F26 — clearBestEffort → clear() now also sweeps `.snapshot.tmp-*`.
|
|
333
|
+
snapshotClearBestEffort: (t) => snapshotStore.clearBestEffort(t),
|
|
334
|
+
})));
|
|
335
|
+
// Iterate 4 (ADR-067) — embedded-terminal pty manager.
|
|
336
|
+
// PtyManager owns shell-pty lifecycle (Plan-D''-conform: shells only,
|
|
337
|
+
// never `claude`). Construction is async because the @lydell/node-pty
|
|
338
|
+
// backend is dynamically imported so unit tests don't pull in the
|
|
339
|
+
// native binary.
|
|
340
|
+
const ptyManager = new PtyManager({
|
|
341
|
+
spawn: await createNodePtySpawnFn(),
|
|
342
|
+
wsBufferBytes: config.terminalWsBufferBytes,
|
|
343
|
+
idleTimeoutMs: config.terminalIdleTimeoutMs,
|
|
344
|
+
scrollbackStore,
|
|
345
|
+
// ADR-088 — wire the headless mirror only when both the env
|
|
346
|
+
// flag is set AND the snapshot store initialised successfully.
|
|
347
|
+
// Either alone is a no-op (see PtyManager constructor; mirror
|
|
348
|
+
// requires both signals).
|
|
349
|
+
// Iterate C (ADR-087, MEDIUM-B2) — `headlessMirrorEnabledEffective`
|
|
350
|
+
// additionally captures the dynamic-import probe result so a
|
|
351
|
+
// missing `@xterm/headless` package downgrades cleanly here.
|
|
352
|
+
headlessMirrorEnabled: headlessMirrorEnabledEffective && snapshotStoreReady,
|
|
353
|
+
snapshotStore: snapshotStoreReady ? snapshotStore : undefined,
|
|
354
|
+
// ADR-092 (Iterate E) — pinned @xterm/headless version. Used by
|
|
355
|
+
// serializeMirrorIfLive() so the in-memory SnapshotRecord
|
|
356
|
+
// returned to the WS replay path carries the same
|
|
357
|
+
// terminalVersion the disk-side gate (tryReadSnapshot) expects.
|
|
358
|
+
// The probe is the primary source; fs-fallback for
|
|
359
|
+
// expectedTerminalVersion happens further below (kept as a
|
|
360
|
+
// defensive secondary path for the disk-read gate).
|
|
361
|
+
expectedTerminalVersion: headlessProbe.terminalVersion ?? undefined,
|
|
362
|
+
// AC-3b (iterate-2026-05-05) — enable the writer-stuck watchdog
|
|
363
|
+
// in production. Capability auto-detected against the live WS;
|
|
364
|
+
// logs warn + degrades to ws.close-driven release if missing.
|
|
365
|
+
watchdogEnabled: true,
|
|
366
|
+
});
|
|
367
|
+
if (headlessMirrorEnabledEffective && snapshotStoreReady) {
|
|
368
|
+
console.log(JSON.stringify({
|
|
369
|
+
level: "info",
|
|
370
|
+
message: "headless-mirror enabled (ADR-088/087); cell-state snapshots are the sole replay primitive",
|
|
371
|
+
dir: config.terminalScrollbackDir,
|
|
372
|
+
}));
|
|
373
|
+
}
|
|
374
|
+
// Boot-time TTL sweep — bounded, oldest-first, active-aware.
|
|
375
|
+
// AC-11 active definition: task in sdk-sessions.json with state ∈
|
|
376
|
+
// {active, idle, awaiting_external_start, jsonl_missing} OR live
|
|
377
|
+
// pty entry in pty-manager (catches stale-session-but-live-pty
|
|
378
|
+
// edge case — Phase-3 review fix HIGH).
|
|
379
|
+
const computeActiveTaskIds = () => {
|
|
380
|
+
const all = sdkSessionsStore.list();
|
|
381
|
+
const ids = new Set();
|
|
382
|
+
for (const t of all) {
|
|
383
|
+
if (t.state === "active" ||
|
|
384
|
+
t.state === "idle" ||
|
|
385
|
+
t.state === "awaiting_external_start" ||
|
|
386
|
+
t.state === "jsonl_missing") {
|
|
387
|
+
ids.add(t.taskId);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
for (const id of ptyManager.getLiveTaskIds()) {
|
|
391
|
+
ids.add(id);
|
|
392
|
+
}
|
|
393
|
+
return ids;
|
|
394
|
+
};
|
|
395
|
+
try {
|
|
396
|
+
const result = await scrollbackStore.sweepExpired(config.terminalScrollbackTtlDays, {
|
|
397
|
+
activeTaskIds: computeActiveTaskIds(),
|
|
398
|
+
maxFilesPerPass: config.terminalSweepMaxFilesPerPass,
|
|
399
|
+
});
|
|
400
|
+
if (result.deleted > 0 || result.errors > 0) {
|
|
401
|
+
console.log(JSON.stringify({
|
|
402
|
+
level: "info",
|
|
403
|
+
message: "scrollback boot sweep",
|
|
404
|
+
deleted: result.deleted,
|
|
405
|
+
remaining: result.remaining,
|
|
406
|
+
errors: result.errors,
|
|
407
|
+
}));
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
catch (err) {
|
|
411
|
+
console.warn(JSON.stringify({
|
|
412
|
+
level: "warn",
|
|
413
|
+
message: "scrollback boot sweep failed",
|
|
414
|
+
error: String(err).slice(0, 200),
|
|
415
|
+
}));
|
|
416
|
+
}
|
|
417
|
+
await sweepOrphanSnapshotTmp({ dir: config.terminalScrollbackDir }).catch(() => { });
|
|
418
|
+
// Daily periodic sweep. setInterval is unref'd so it doesn't keep the
|
|
419
|
+
// event loop alive past graceful shutdown.
|
|
420
|
+
const dailySweepTimer = setInterval(() => {
|
|
421
|
+
scrollbackStore
|
|
422
|
+
.sweepExpired(config.terminalScrollbackTtlDays, {
|
|
423
|
+
activeTaskIds: computeActiveTaskIds(),
|
|
424
|
+
maxFilesPerPass: config.terminalSweepMaxFilesPerPass,
|
|
425
|
+
})
|
|
426
|
+
.catch((err) => {
|
|
427
|
+
console.warn(JSON.stringify({
|
|
428
|
+
level: "warn",
|
|
429
|
+
message: "scrollback periodic sweep failed",
|
|
430
|
+
error: String(err).slice(0, 200),
|
|
431
|
+
}));
|
|
432
|
+
});
|
|
433
|
+
void sweepOrphanSnapshotTmp({ dir: config.terminalScrollbackDir }).catch(() => { });
|
|
434
|
+
}, 24 * 60 * 60 * 1000);
|
|
435
|
+
dailySweepTimer.unref();
|
|
436
|
+
// @hono/node-ws adapter — `upgradeWebSocket` is a Hono middleware
|
|
437
|
+
// factory, `injectWebSocket(server)` patches the underlying
|
|
438
|
+
// http.Server (returned by `serve(...)`) to handle WS upgrades.
|
|
439
|
+
const { upgradeWebSocket, injectWebSocket } = createNodeWebSocket({ app });
|
|
440
|
+
app.route("/", createExternalRoutes({
|
|
441
|
+
store: sdkSessionsStore,
|
|
442
|
+
watcher: sessionWatcher,
|
|
443
|
+
// Section 02 — PATCH/POST projectId validation. Excludes the
|
|
444
|
+
// synthesized Unassigned row (that sentinel is hard-coded valid
|
|
445
|
+
// inside validateProjectIdOrError).
|
|
446
|
+
getKnownProjectIds: () => new Set(projectManager.getAll().filter((p) => !p.synthesized).map((p) => p.id)),
|
|
447
|
+
// Section 03 — actions / preview / stub routes. Synthesized row
|
|
448
|
+
// has no filesystem path so it's skipped by getProjectById.
|
|
449
|
+
getProjectById: (id) => {
|
|
450
|
+
const p = projectManager.getById(id);
|
|
451
|
+
if (!p || p.synthesized)
|
|
452
|
+
return undefined;
|
|
453
|
+
return {
|
|
454
|
+
id: p.id,
|
|
455
|
+
name: p.name,
|
|
456
|
+
path: p.path,
|
|
457
|
+
profile: p.profile,
|
|
458
|
+
synthesized: p.synthesized,
|
|
459
|
+
settings: p.settings ? { color: p.settings.color } : undefined,
|
|
460
|
+
};
|
|
461
|
+
},
|
|
462
|
+
previewManager,
|
|
463
|
+
loadProfile: (name) => loadProfileReal(name, getProfilesDir()),
|
|
464
|
+
// ADR-068-A1: cascade-clean scrollback on DELETE /tasks/:id.
|
|
465
|
+
scrollbackClearBestEffort: (taskId) => scrollbackStore.clearBestEffort(taskId),
|
|
466
|
+
// Iterate C (ADR-087, MEDIUM-B1): cascade-clean the cell-state
|
|
467
|
+
// snapshot on DELETE (secrets; privacy boundary). D19/F26: clear()
|
|
468
|
+
// also sweeps the task's orphaned `.snapshot.tmp-*` strays.
|
|
469
|
+
snapshotClearBestEffort: (taskId) => snapshotStore.clearBestEffort(taskId),
|
|
470
|
+
// iterate-2026-05-08 v0.8.7 AC-1: live-pty lookup so transcript
|
|
471
|
+
// poll can flip new-plain `active → idle` after pty-kill.
|
|
472
|
+
// iterate-2026-05-18-inbox-terminal-prompts: peekTerminalText so
|
|
473
|
+
// the inbox can detect a waiting AskUserQuestion picker from the
|
|
474
|
+
// live @xterm/headless mirror.
|
|
475
|
+
ptyManager: {
|
|
476
|
+
get: (taskId) => ptyManager.get(taskId),
|
|
477
|
+
kill: (taskId) => ptyManager.kill(taskId), // D01/F01 — teardown before clears
|
|
478
|
+
peekTerminalText: (taskId) => ptyManager.peekTerminalText(taskId),
|
|
479
|
+
},
|
|
480
|
+
honoHost, // FR-04.38 org-directory route family
|
|
481
|
+
leadsRoot: config.leadsRoot,
|
|
482
|
+
leadsRouteSecret: config.leadsRouteSecret,
|
|
483
|
+
}));
|
|
484
|
+
app.route("/", createDiagnosticsRoutes({ store: sdkSessionsStore, versionInfo }));
|
|
485
|
+
// FR-01.51 — First-Contact readiness gate ("one truth"): the Intent
|
|
486
|
+
// Wizard (A08) + First Contact (A14) both read this; it re-expresses the
|
|
487
|
+
// bootstrapper preflight set server-side (the browser can't spawn probes).
|
|
488
|
+
app.route("/", createReadinessRoutes({ versionInfo }));
|
|
489
|
+
// FR-01.53 — read-only Grade door route. Runs shipwright-grade's grade.py
|
|
490
|
+
// (shell:false, validated target) and renders the real ReportModel; no
|
|
491
|
+
// project registration, no writes (a bare grade is a pure observer).
|
|
492
|
+
app.route("/", createGradeRoutes());
|
|
493
|
+
// FR-01.44 — Claude-theme mirror; literal path, before terminal routes.
|
|
494
|
+
app.route("/", createTerminalAppearanceRoutes());
|
|
495
|
+
// FR-01.30 / ADR-101 — Triage Tab routes. Mounts after /api/external
|
|
496
|
+
// so it inherits the same CORS/Origin gate. The promote route uses
|
|
497
|
+
// the same `proper-lockfile` pattern as sdk-sessions.json.
|
|
498
|
+
app.route("/", createTriageRoutes({
|
|
499
|
+
store: sdkSessionsStore,
|
|
500
|
+
getAllProjects: () => projectManager
|
|
501
|
+
.getAll()
|
|
502
|
+
.filter((p) => !p.synthesized)
|
|
503
|
+
.map((p) => ({ id: p.id, path: p.path, synthesized: p.synthesized })),
|
|
504
|
+
getProjectById: (id) => {
|
|
505
|
+
const p = projectManager.getById(id);
|
|
506
|
+
if (!p || p.synthesized)
|
|
507
|
+
return undefined;
|
|
508
|
+
return { id: p.id, path: p.path, synthesized: p.synthesized };
|
|
509
|
+
},
|
|
510
|
+
// FR-01.33 — injected campaign-ref reader so the triage route can
|
|
511
|
+
// annotate items with the campaign that expands them WITHOUT
|
|
512
|
+
// importing any campaign module (preserves the
|
|
513
|
+
// campaigns-no-triage-coupling import boundary; the composition
|
|
514
|
+
// root owns the join). Best-effort: any read failure → [].
|
|
515
|
+
listCampaignRefs: (projectId) => {
|
|
516
|
+
const p = projectManager.getById(projectId);
|
|
517
|
+
if (!p || p.synthesized)
|
|
518
|
+
return [];
|
|
519
|
+
const pr = resolveCampaignsDir({
|
|
520
|
+
path: p.path,
|
|
521
|
+
synthesized: p.synthesized,
|
|
522
|
+
});
|
|
523
|
+
if (!pr.ok)
|
|
524
|
+
return [];
|
|
525
|
+
try {
|
|
526
|
+
return readCampaigns(pr.absolute, pr.projectRoot).map((cmp) => ({
|
|
527
|
+
expandsTriage: cmp.expandsTriage,
|
|
528
|
+
slug: cmp.slug,
|
|
529
|
+
status: cmp.status,
|
|
530
|
+
}));
|
|
531
|
+
}
|
|
532
|
+
catch {
|
|
533
|
+
return [];
|
|
534
|
+
}
|
|
535
|
+
},
|
|
536
|
+
}));
|
|
537
|
+
// FR-01.31 — Campaigns lane routes. GET is a read-only sibling of the
|
|
538
|
+
// triage route; mounts after /api/external so it inherits the same
|
|
539
|
+
// CORS/Origin gate. FR-01.33 adds POST /:slug/start — the ONE WebUI write
|
|
540
|
+
// to campaign state (draft → active), lock-protected via the same
|
|
541
|
+
// collision-safe `.weblock` `createTriageLock()` pattern. All other
|
|
542
|
+
// campaign-state writes still belong to campaign_init.py /
|
|
543
|
+
// campaign_progress.py.
|
|
544
|
+
app.route("/", createCampaignsRoutes({
|
|
545
|
+
getProjectById: (id) => {
|
|
546
|
+
const p = projectManager.getById(id);
|
|
547
|
+
if (!p || p.synthesized)
|
|
548
|
+
return undefined;
|
|
549
|
+
return { id: p.id, path: p.path, synthesized: p.synthesized };
|
|
550
|
+
},
|
|
551
|
+
lock: createTriageLock(),
|
|
552
|
+
}));
|
|
553
|
+
// Iterate 4 (ADR-067) + Iterate 5 (ADR-068-A1) — embedded terminal
|
|
554
|
+
// routes (REST + WS upgrade). scrollbackStore wires replay-on-attach
|
|
555
|
+
// + Stop/Clear semantics + disabled-mode propagation.
|
|
556
|
+
//
|
|
557
|
+
// ADR-084 (iterate v0.9.1) — pass the boot-time-resolved
|
|
558
|
+
// `corsOriginPolicy.isAllowed` as `allowedOrigins` so the WS
|
|
559
|
+
// upgrade gate uses the SAME policy as the HTTP CORS middleware.
|
|
560
|
+
// Without this wiring the gate falls back to `defaultAllowedOrigins`
|
|
561
|
+
// → `resolveTrustedOrigins(process.env)` WITHOUT exec → loopback
|
|
562
|
+
// only — which silently rejects every non-loopback Origin even
|
|
563
|
+
// when SHIPWRIGHT_NETWORK_PROFILE=tailscale was meant to widen the
|
|
564
|
+
// policy. Empirically reproduced via curl WS-upgrade probe with
|
|
565
|
+
// MagicDNS Origin (500 Internal Server Error) before this line
|
|
566
|
+
// was added; 101 Switching Protocols after.
|
|
567
|
+
// ADR-089 (Iterate B) — resolve the currently-pinned
|
|
568
|
+
// @xterm/headless version once at boot so the WS replay path can
|
|
569
|
+
// version-gate snapshot envelopes. The Iterate-C boot probe
|
|
570
|
+
// (`headlessProbe.terminalVersion`) is the primary source; we
|
|
571
|
+
// keep fs-fallback as a defensive secondary path in case the
|
|
572
|
+
// dynamic import worked but the package.json read returned null.
|
|
573
|
+
let expectedTerminalVersion = headlessProbe.terminalVersion ?? undefined;
|
|
574
|
+
if (!expectedTerminalVersion) {
|
|
575
|
+
try {
|
|
576
|
+
const { readFileSync } = await import("node:fs");
|
|
577
|
+
const { fileURLToPath } = await import("node:url");
|
|
578
|
+
const pathMod = await import("node:path");
|
|
579
|
+
const here = pathMod.dirname(fileURLToPath(import.meta.url));
|
|
580
|
+
for (const cand of [
|
|
581
|
+
pathMod.resolve(here, "../node_modules/@xterm/headless/package.json"),
|
|
582
|
+
pathMod.resolve(here, "../../node_modules/@xterm/headless/package.json"),
|
|
583
|
+
]) {
|
|
584
|
+
try {
|
|
585
|
+
const json = JSON.parse(readFileSync(cand, "utf8"));
|
|
586
|
+
if (json.version) {
|
|
587
|
+
expectedTerminalVersion = json.version;
|
|
588
|
+
break;
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
catch {
|
|
592
|
+
/* try next */
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
catch {
|
|
597
|
+
/* fall through with undefined */
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
createTerminalRoutes({
|
|
601
|
+
store: sdkSessionsStore,
|
|
602
|
+
ptyManager,
|
|
603
|
+
upgradeWebSocket,
|
|
604
|
+
pastesKeepLast: config.claudePastesKeepLast,
|
|
605
|
+
scrollbackStore,
|
|
606
|
+
// ADR-089 — wire the snapshot store + expected version so the WS
|
|
607
|
+
// replay branch uses the new envelope when a snapshot exists.
|
|
608
|
+
// The snapshot store is created above (ADR-088); we only pass it
|
|
609
|
+
// through here when the flag is effectively ON (config + probe).
|
|
610
|
+
snapshotStore: headlessMirrorEnabledEffective && snapshotStoreReady
|
|
611
|
+
? snapshotStore
|
|
612
|
+
: undefined,
|
|
613
|
+
expectedTerminalVersion,
|
|
614
|
+
// Iterate v0.8.2 AC-9 — retention + dir surfaced in `ready`.
|
|
615
|
+
retentionDays: config.terminalScrollbackTtlDays,
|
|
616
|
+
scrollbackDirHint: config.terminalScrollbackDir,
|
|
617
|
+
allowedOrigins: corsOriginPolicy.isAllowed,
|
|
618
|
+
})(app);
|
|
619
|
+
// Section 03 — boot-time profile coherence check (plan § 2.1 matrix).
|
|
620
|
+
// Warn (don't fail) when stack.frontend is declared but dev_server
|
|
621
|
+
// is not wired, or vice versa. Non-fatal — the API route resolves
|
|
622
|
+
// preview.enabled per request, but the log helps operators diagnose
|
|
623
|
+
// "why isn't Preview showing up?" without opening devtools. An
|
|
624
|
+
// intentionally-empty `stack.frontend: {}` (bundled
|
|
625
|
+
// python-plugin-monorepo) is backend-only by design and stays quiet
|
|
626
|
+
// (F32) — predicate + matrix live in core/preview-coherence.ts.
|
|
627
|
+
try {
|
|
628
|
+
const all = projectManager.getAll().filter((p) => !p.synthesized);
|
|
629
|
+
for (const proj of all) {
|
|
630
|
+
if (!proj.profile)
|
|
631
|
+
continue;
|
|
632
|
+
const prof = loadProfileReal(proj.profile, getProfilesDir());
|
|
633
|
+
if (!prof)
|
|
634
|
+
continue;
|
|
635
|
+
const warning = evaluatePreviewCoherence(proj.id, proj.profile, prof);
|
|
636
|
+
if (warning)
|
|
637
|
+
console.warn(JSON.stringify(warning));
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
catch (err) {
|
|
641
|
+
// Non-fatal — the diagnostic is purely informational.
|
|
642
|
+
console.warn(JSON.stringify({
|
|
643
|
+
level: "warn",
|
|
644
|
+
message: "boot-time profile coherence check threw",
|
|
645
|
+
error: String(err).slice(0, 200),
|
|
646
|
+
}));
|
|
647
|
+
}
|
|
648
|
+
// Phase-3 review fix (HIGH): shutdown is now async + awaits the
|
|
649
|
+
// scrollback drain BEFORE process.exit. The hard 3s timer remains
|
|
650
|
+
// as a safety fallback only.
|
|
651
|
+
const shutdown = async () => {
|
|
652
|
+
console.log("Shutting down…");
|
|
653
|
+
try {
|
|
654
|
+
previewManager.killAll();
|
|
655
|
+
}
|
|
656
|
+
catch {
|
|
657
|
+
// best-effort — ignore shutdown errors
|
|
658
|
+
}
|
|
659
|
+
try {
|
|
660
|
+
ptyManager.killAll();
|
|
661
|
+
}
|
|
662
|
+
catch {
|
|
663
|
+
// best-effort — ignore shutdown errors
|
|
664
|
+
}
|
|
665
|
+
// Hard ceiling fires only if scrollbackStore.shutdown hangs.
|
|
666
|
+
const hardCap = setTimeout(() => process.exit(0), 3000);
|
|
667
|
+
hardCap.unref();
|
|
668
|
+
try {
|
|
669
|
+
await scrollbackStore.shutdown(2000);
|
|
670
|
+
}
|
|
671
|
+
catch (err) {
|
|
672
|
+
console.warn(JSON.stringify({
|
|
673
|
+
level: "warn",
|
|
674
|
+
message: "scrollback shutdown threw",
|
|
675
|
+
error: String(err).slice(0, 200),
|
|
676
|
+
}));
|
|
677
|
+
}
|
|
678
|
+
clearTimeout(hardCap);
|
|
679
|
+
process.exit(0);
|
|
680
|
+
};
|
|
681
|
+
process.on("SIGTERM", () => void shutdown());
|
|
682
|
+
process.on("SIGINT", () => void shutdown());
|
|
683
|
+
process.on("exit", () => {
|
|
684
|
+
try {
|
|
685
|
+
previewManager.killAll();
|
|
686
|
+
}
|
|
687
|
+
catch {
|
|
688
|
+
// ignore
|
|
689
|
+
}
|
|
690
|
+
try {
|
|
691
|
+
ptyManager.killAll();
|
|
692
|
+
}
|
|
693
|
+
catch {
|
|
694
|
+
// ignore
|
|
695
|
+
}
|
|
696
|
+
});
|
|
697
|
+
// `@hono/node-server`'s `serve` returns the underlying Node
|
|
698
|
+
// `http.Server`. Attach an `error` listener so bind failures
|
|
699
|
+
// (EADDRINUSE from a parallel worktree, EACCES on a privileged
|
|
700
|
+
// port, etc.) produce a deterministic operator-facing line and
|
|
701
|
+
// a non-zero exit instead of a silent half-startup. No probe
|
|
702
|
+
// before bind — that would be TOCTOU-racy on Windows.
|
|
703
|
+
// Default = 127.0.0.1 (loopback). HONO_HOST=true binds dual-stack
|
|
704
|
+
// (`::`); HONO_HOST=<addr> binds that interface — resolveHonoHost.ts.
|
|
705
|
+
// ADR-08X exposure warning. Two paths (mirrors vite.config.ts):
|
|
706
|
+
// 1. SHIPWRIGHT_NETWORK_PROFILE=open — emits exact AC-3 wording.
|
|
707
|
+
// 2. Explicit HONO_HOST=true/0.0.0.0/:: with profile NOT set —
|
|
708
|
+
// legacy-escape-hatch warning (OpenAI iterate review #9).
|
|
709
|
+
const explicitProfileOpen = process.env.SHIPWRIGHT_NETWORK_PROFILE?.trim() === "open";
|
|
710
|
+
const explicitWildcardBind = honoHost === "0.0.0.0" || honoHost === "::" || honoHost === "true";
|
|
711
|
+
if (explicitProfileOpen) {
|
|
712
|
+
console.warn("[network-profile] WARNING: profile=open — server is exposed on " +
|
|
713
|
+
"every interface; use only on trusted networks");
|
|
714
|
+
}
|
|
715
|
+
else if (explicitWildcardBind) {
|
|
716
|
+
console.warn(`[network-profile] WARNING: Hono server is binding to all ` +
|
|
717
|
+
`interfaces (${honoHost}) via explicit HONO_HOST — exposed to ` +
|
|
718
|
+
`every reachable network. Use only on trusted networks ` +
|
|
719
|
+
`(home/office). Consider switching to ` +
|
|
720
|
+
`SHIPWRIGHT_NETWORK_PROFILE=tailscale in .env.local when on ` +
|
|
721
|
+
`untrusted Wi-Fi.`);
|
|
722
|
+
}
|
|
723
|
+
const server = serve({ fetch: app.fetch, port: config.port, hostname: honoHost }, (info) => {
|
|
724
|
+
const reachableLabel = honoHost === "127.0.0.1" || honoHost === "::1"
|
|
725
|
+
? "localhost"
|
|
726
|
+
: info.address || honoHost;
|
|
727
|
+
console.log(`Shipwright Command Center listening on http://${reachableLabel}:${info.port} (bind=${honoHost})`);
|
|
728
|
+
// Iterate v0.8.4 — surface the trusted-origin policy so a
|
|
729
|
+
// mute terminal over Tailscale immediately shows whether the
|
|
730
|
+
// gate is loopback-only (the bug we just fixed) or widened.
|
|
731
|
+
console.log(`Trusted-Origin policy: ${corsOriginPolicy.describe()}`);
|
|
732
|
+
});
|
|
733
|
+
server.on("error", (err) => {
|
|
734
|
+
const { message, exitCode } = formatBindError(err, config.port);
|
|
735
|
+
console.error(`FATAL: ${message}`);
|
|
736
|
+
process.exit(exitCode);
|
|
737
|
+
});
|
|
738
|
+
// Iterate 4 (ADR-067) — attach @hono/node-ws to the underlying
|
|
739
|
+
// http.Server so the /api/terminal/:taskId/ws upgrade fires.
|
|
740
|
+
// Must be called AFTER serve(...) since it patches that server.
|
|
741
|
+
injectWebSocket(server);
|
|
742
|
+
}
|
|
743
|
+
catch (err) {
|
|
744
|
+
console.error("FATAL: Server startup failed:", err);
|
|
745
|
+
process.exit(1);
|
|
746
|
+
}
|
|
747
|
+
})();
|
|
748
|
+
}
|
|
749
|
+
app.use("/*", serveStatic({ root: config.staticDir }));
|
|
750
|
+
// SPA fallback (iterate-2026-05-22-spa-fallback).
|
|
751
|
+
// Any GET that did not match a real handler or a static asset under
|
|
752
|
+
// `client/dist/` is served the SPA shell (`client/dist/index.html`) so
|
|
753
|
+
// react-router-dom can hydrate the requested route client-side. This
|
|
754
|
+
// fixes hard-reload of /triage, /inbox, /tasks/:id, /projects,
|
|
755
|
+
// /diagnostics, /settings — which previously hit `app.notFound` and
|
|
756
|
+
// returned `{"error":"Not found"}`.
|
|
757
|
+
//
|
|
758
|
+
// /api/* keeps its JSON-404 contract: the fallback `next()`s through
|
|
759
|
+
// to `app.notFound` so any unknown REST route still surfaces as a
|
|
760
|
+
// real 404 instead of an HTML body the client would fail to parse.
|
|
761
|
+
app.get("*", async (c, next) => {
|
|
762
|
+
if (c.req.path.startsWith("/api/")) {
|
|
763
|
+
return next();
|
|
764
|
+
}
|
|
765
|
+
try {
|
|
766
|
+
const html = await readFile(`${config.staticDir}/index.html`, "utf-8");
|
|
767
|
+
return c.html(html);
|
|
768
|
+
}
|
|
769
|
+
catch {
|
|
770
|
+
return next();
|
|
771
|
+
}
|
|
772
|
+
});
|
|
773
|
+
app.notFound((c) => c.json({ error: "Not found" }, 404));
|
|
774
|
+
//# sourceMappingURL=index.js.map
|