@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,125 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* triage-paths.ts — centralized resolver for `<project>/.shipwright/triage.jsonl`.
|
|
3
|
+
*
|
|
4
|
+
* Reuses the existing `pathGuard` semantics (realpath + path.relative) so
|
|
5
|
+
* symlinks pointing outside the project can't redirect reads/writes
|
|
6
|
+
* (mirrors the gitignore + tree route protection from ADR-044). Every
|
|
7
|
+
* triage endpoint MUST flow through this helper — read OR write.
|
|
8
|
+
*
|
|
9
|
+
* Returned absolute path is realpath-resolved when the file exists; for
|
|
10
|
+
* the "file doesn't exist yet" case (first triage write on a project)
|
|
11
|
+
* we resolve the parent .shipwright directory and append the static
|
|
12
|
+
* filename, which is safe because path resolution can't escape an
|
|
13
|
+
* already-validated parent.
|
|
14
|
+
*/
|
|
15
|
+
import path from "node:path";
|
|
16
|
+
import { existsSync, realpathSync, statSync } from "node:fs";
|
|
17
|
+
const SUBDIR = ".shipwright";
|
|
18
|
+
const FILENAME = "triage.jsonl";
|
|
19
|
+
/**
|
|
20
|
+
* Per-tree, GITIGNORED background-triage buffer (campaign
|
|
21
|
+
* 2026-06-08-triage-outbox-delivery / D1). Idle-main background producers
|
|
22
|
+
* append HERE instead of the tracked `triage.jsonl`; the webui reads the
|
|
23
|
+
* union (tracked ∪ outbox) so those findings stay visible in the live
|
|
24
|
+
* Inbox without waiting for the sweep+merge round-trip. Mirrors
|
|
25
|
+
* `shared/scripts/triage.py OUTBOX_FILE`.
|
|
26
|
+
*/
|
|
27
|
+
const OUTBOX_FILENAME = "triage.outbox.jsonl";
|
|
28
|
+
/**
|
|
29
|
+
* Derive the per-tree outbox path that sits alongside an already-resolved
|
|
30
|
+
* tracked `triage.jsonl` path. The outbox lives in the SAME `.shipwright`
|
|
31
|
+
* directory that `resolveTriagePath` already realpath-guarded, so it
|
|
32
|
+
* inherits that traversal protection — there is no new path-guard surface.
|
|
33
|
+
* Pass the `absolute` from a successful `resolveTriagePath` result.
|
|
34
|
+
*/
|
|
35
|
+
export function outboxPathFor(trackedAbsolute) {
|
|
36
|
+
return path.join(path.dirname(trackedAbsolute), OUTBOX_FILENAME);
|
|
37
|
+
}
|
|
38
|
+
export function resolveTriagePath(project) {
|
|
39
|
+
if (project.synthesized) {
|
|
40
|
+
return { ok: false, error: { reason: "synthesized_project" } };
|
|
41
|
+
}
|
|
42
|
+
if (!project.path || typeof project.path !== "string") {
|
|
43
|
+
return { ok: false, error: { reason: "missing_project_path" } };
|
|
44
|
+
}
|
|
45
|
+
// Resolve project.path to its realpath (if it exists). Fall through to
|
|
46
|
+
// the literal value if the directory doesn't exist (caller will 404
|
|
47
|
+
// separately).
|
|
48
|
+
let projectRoot;
|
|
49
|
+
try {
|
|
50
|
+
projectRoot = realpathSync(project.path);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
projectRoot = path.resolve(project.path);
|
|
54
|
+
}
|
|
55
|
+
// Refuse non-directory project roots — defense in depth against an
|
|
56
|
+
// operator who registered a file path by mistake.
|
|
57
|
+
try {
|
|
58
|
+
const st = statSync(projectRoot);
|
|
59
|
+
if (!st.isDirectory()) {
|
|
60
|
+
return { ok: false, error: { reason: "project_root_not_directory" } };
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Project root doesn't exist — let the route layer return 404.
|
|
65
|
+
// We still emit the candidate path so the route can decide.
|
|
66
|
+
const candidate = path.join(projectRoot, SUBDIR, FILENAME);
|
|
67
|
+
return { ok: true, absolute: candidate, existed: false };
|
|
68
|
+
}
|
|
69
|
+
const candidate = path.resolve(projectRoot, SUBDIR, FILENAME);
|
|
70
|
+
// realpath the candidate when it exists to defeat symlink redirect.
|
|
71
|
+
// When it doesn't exist yet, we realpath the parent directory and
|
|
72
|
+
// re-append the filename — the only way an attacker can escape from
|
|
73
|
+
// a non-existent file is via the parent .shipwright dir, which we
|
|
74
|
+
// guard separately.
|
|
75
|
+
if (existsSync(candidate)) {
|
|
76
|
+
let resolved;
|
|
77
|
+
try {
|
|
78
|
+
resolved = realpathSync(candidate);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
return { ok: false, error: { reason: "path_traversal" } };
|
|
82
|
+
}
|
|
83
|
+
if (!isWithin(projectRoot, resolved)) {
|
|
84
|
+
return { ok: false, error: { reason: "path_traversal" } };
|
|
85
|
+
}
|
|
86
|
+
return { ok: true, absolute: resolved, existed: true };
|
|
87
|
+
}
|
|
88
|
+
// File doesn't exist — verify the parent dir (if it exists) is within
|
|
89
|
+
// project root.
|
|
90
|
+
const parent = path.dirname(candidate);
|
|
91
|
+
if (existsSync(parent)) {
|
|
92
|
+
let resolvedParent;
|
|
93
|
+
try {
|
|
94
|
+
resolvedParent = realpathSync(parent);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return { ok: false, error: { reason: "path_traversal" } };
|
|
98
|
+
}
|
|
99
|
+
if (!isWithin(projectRoot, resolvedParent)) {
|
|
100
|
+
return { ok: false, error: { reason: "path_traversal" } };
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
ok: true,
|
|
104
|
+
absolute: path.join(resolvedParent, FILENAME),
|
|
105
|
+
existed: false,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
// Parent .shipwright doesn't exist either — caller decides whether to
|
|
109
|
+
// mkdir. Return the static candidate.
|
|
110
|
+
return { ok: true, absolute: candidate, existed: false };
|
|
111
|
+
}
|
|
112
|
+
function isWithin(projectRoot, candidate) {
|
|
113
|
+
const rel = path.relative(projectRoot, candidate);
|
|
114
|
+
if (!rel)
|
|
115
|
+
return true; // exact match — root itself
|
|
116
|
+
if (rel.startsWith(".."))
|
|
117
|
+
return false;
|
|
118
|
+
if (path.isAbsolute(rel))
|
|
119
|
+
return false;
|
|
120
|
+
// segment-wise check: rejects e.g. "..foo" only when the leading ".."
|
|
121
|
+
// is its own segment (path.relative doesn't produce that, but defense
|
|
122
|
+
// in depth).
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=triage-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage-paths.js","sourceRoot":"","sources":["../../src/core/triage-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type CorruptFragment } from "./jsonl-records.js";
|
|
2
|
+
/**
|
|
3
|
+
* Tolerant string→objects parser — splits a raw JSONL blob into plain objects,
|
|
4
|
+
* RECOVERING concatenated records and skipping blank lines. Boundary rules
|
|
5
|
+
* live in `jsonl-records.ts`.
|
|
6
|
+
*
|
|
7
|
+
* `onCorrupt` is the optional side channel for undecodable text. The array
|
|
8
|
+
* return type is load-bearing: it flows through `readRawLines` to five call
|
|
9
|
+
* sites, one (`appendIdsInFile`) on the WRITE hot path driving residence
|
|
10
|
+
* routing — a shape change here would alter WRITES, not just reads.
|
|
11
|
+
*
|
|
12
|
+
* Exported so the delivered-origin composer (`triage-origin.ts`) can parse a
|
|
13
|
+
* `git show origin/…:…` blob through the SAME contract as on-disk reads.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseRawLines(raw: string, onCorrupt?: (fragment: CorruptFragment) => void): Record<string, unknown>[];
|
|
16
|
+
/**
|
|
17
|
+
* Tolerant per-file reader — parses one JSONL file into plain objects.
|
|
18
|
+
* Returns [] when the file is missing/unreadable.
|
|
19
|
+
*/
|
|
20
|
+
export declare function readRawLines(p: string, onCorrupt?: (fragment: CorruptFragment) => void): Record<string, unknown>[];
|
|
21
|
+
/**
|
|
22
|
+
* Raw JSONL lines for the LOCAL union, kept SPLIT as `{ tracked, outbox }`
|
|
23
|
+
* (each in file order). `readAllItems` resolves the concatenation
|
|
24
|
+
* `[...tracked, ...outbox]`; the delivered-origin composer instead splices the
|
|
25
|
+
* origin source between them (`[...tracked, ...origin, ...outbox]`) so the
|
|
26
|
+
* outbox stays LAST — preserving the existing "freshest local intent wins an
|
|
27
|
+
* equal-ts tie" file-order contract.
|
|
28
|
+
*/
|
|
29
|
+
export declare function readLocalRawLinesSplit(trackedPath: string, onCorrupt?: (fragment: CorruptFragment, source: "tracked" | "outbox") => void): {
|
|
30
|
+
tracked: Record<string, unknown>[];
|
|
31
|
+
outbox: Record<string, unknown>[];
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=triage-raw.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage-raw.d.ts","sourceRoot":"","sources":["../../src/core/triage-raw.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,oBAAoB,CAAC;AAG7E;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,GAC9C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAI3B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,CAAC,EAAE,MAAM,EACT,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,GAC9C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAQ3B;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,GAAG,QAAQ,KAAK,IAAI,GAC5E;IACD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACnC,CAMA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* triage-raw.ts — raw JSONL line reading for the triage store. Split out of
|
|
3
|
+
* triage-store.ts (iterate-2026-08-05-triage-deferred-envelope) purely to
|
|
4
|
+
* keep that file under its bloat-baseline ceiling; no behavior changed by
|
|
5
|
+
* the move.
|
|
6
|
+
*
|
|
7
|
+
* Tolerance contract (matches Python `_iter_raw_lines_at`):
|
|
8
|
+
* - RECOVERS concatenated records — a line holding several records (an
|
|
9
|
+
* unterminated predecessor) yields ALL of them, not none.
|
|
10
|
+
* - undecodable text goes to the optional `onCorrupt` side channel — never
|
|
11
|
+
* thrown, never logged here (reporting belongs at the command boundary)
|
|
12
|
+
* - skips non-object lines + lines without an "event" key (header)
|
|
13
|
+
*/
|
|
14
|
+
import { readFileSync } from "node:fs";
|
|
15
|
+
import { parseJsonlRecords } from "./jsonl-records.js";
|
|
16
|
+
import { outboxPathFor } from "./triage-paths.js";
|
|
17
|
+
/**
|
|
18
|
+
* Tolerant string→objects parser — splits a raw JSONL blob into plain objects,
|
|
19
|
+
* RECOVERING concatenated records and skipping blank lines. Boundary rules
|
|
20
|
+
* live in `jsonl-records.ts`.
|
|
21
|
+
*
|
|
22
|
+
* `onCorrupt` is the optional side channel for undecodable text. The array
|
|
23
|
+
* return type is load-bearing: it flows through `readRawLines` to five call
|
|
24
|
+
* sites, one (`appendIdsInFile`) on the WRITE hot path driving residence
|
|
25
|
+
* routing — a shape change here would alter WRITES, not just reads.
|
|
26
|
+
*
|
|
27
|
+
* Exported so the delivered-origin composer (`triage-origin.ts`) can parse a
|
|
28
|
+
* `git show origin/…:…` blob through the SAME contract as on-disk reads.
|
|
29
|
+
*/
|
|
30
|
+
export function parseRawLines(raw, onCorrupt) {
|
|
31
|
+
const { records, corrupt } = parseJsonlRecords(raw);
|
|
32
|
+
if (onCorrupt)
|
|
33
|
+
for (const fragment of corrupt)
|
|
34
|
+
onCorrupt(fragment);
|
|
35
|
+
return records;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Tolerant per-file reader — parses one JSONL file into plain objects.
|
|
39
|
+
* Returns [] when the file is missing/unreadable.
|
|
40
|
+
*/
|
|
41
|
+
export function readRawLines(p, onCorrupt) {
|
|
42
|
+
let raw;
|
|
43
|
+
try {
|
|
44
|
+
raw = readFileSync(p, "utf-8");
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
return parseRawLines(raw, onCorrupt);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Raw JSONL lines for the LOCAL union, kept SPLIT as `{ tracked, outbox }`
|
|
53
|
+
* (each in file order). `readAllItems` resolves the concatenation
|
|
54
|
+
* `[...tracked, ...outbox]`; the delivered-origin composer instead splices the
|
|
55
|
+
* origin source between them (`[...tracked, ...origin, ...outbox]`) so the
|
|
56
|
+
* outbox stays LAST — preserving the existing "freshest local intent wins an
|
|
57
|
+
* equal-ts tie" file-order contract.
|
|
58
|
+
*/
|
|
59
|
+
export function readLocalRawLinesSplit(trackedPath, onCorrupt) {
|
|
60
|
+
const outboxPath = outboxPathFor(trackedPath);
|
|
61
|
+
return {
|
|
62
|
+
tracked: readRawLines(trackedPath, onCorrupt && ((f) => onCorrupt(f, "tracked"))),
|
|
63
|
+
outbox: readRawLines(outboxPath, onCorrupt && ((f) => onCorrupt(f, "outbox"))),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=triage-raw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage-raw.js","sourceRoot":"","sources":["../../src/core/triage-raw.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAwB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAW,EACX,SAA+C;IAE/C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,SAAS;QAAE,KAAK,MAAM,QAAQ,IAAI,OAAO;YAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,CAAS,EACT,SAA+C;IAE/C,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAmB,EACnB,SAA6E;IAK7E,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,OAAO;QACL,OAAO,EAAE,YAAY,CAAC,WAAW,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACjF,MAAM,EAAE,YAAY,CAAC,UAAU,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;KAC/E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { TriageItem } from "../types/triage.js";
|
|
2
|
+
export { parseRawLines, readLocalRawLinesSplit } from "./triage-raw.js";
|
|
3
|
+
/** Forced cache eviction for test support after a fixture mutation. */
|
|
4
|
+
export declare function invalidateCacheForPath(path: string): void;
|
|
5
|
+
/** Test-only — clear the entire cache. Exported so vitest setup can isolate runs. */
|
|
6
|
+
export declare function _clearCache_TEST_ONLY(): void;
|
|
7
|
+
/**
|
|
8
|
+
* Two-pass union resolution over already-parsed raw lines (tracked THEN
|
|
9
|
+
* outbox, file order). Byte-for-byte mirror of Python `read_all_items`'s
|
|
10
|
+
* resolution body — Pass 1 applies all `append` events, Pass 2 applies all
|
|
11
|
+
* `status` AND `amend` events together, ordered by (ts, file-order).
|
|
12
|
+
*
|
|
13
|
+
* Exported for the delivered-origin composer (`triage-compose.ts`): the same
|
|
14
|
+
* multi-source union already reconciles tracked ∪ outbox, so adding origin as
|
|
15
|
+
* a third raw-line source is a natural extension resolved by identical rules.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveUnion(rawLines: Record<string, unknown>[]): TriageItem[];
|
|
18
|
+
/**
|
|
19
|
+
* Read and resolve every triage item for a project, sourcing the UNION of
|
|
20
|
+
* the tracked store (`trackedPath`) and the per-tree outbox buffer alongside
|
|
21
|
+
* it. Returns [] when neither file exists (so consumers need no separate
|
|
22
|
+
* existence check).
|
|
23
|
+
*
|
|
24
|
+
* `trackedPath` is the absolute tracked `triage.jsonl` path (from
|
|
25
|
+
* `resolveTriagePath().absolute`); the outbox sibling is derived via
|
|
26
|
+
* `outboxPathFor`.
|
|
27
|
+
*/
|
|
28
|
+
export declare function readAllItems(trackedPath: string): TriageItem[];
|
|
29
|
+
/**
|
|
30
|
+
* Set of `append`-event ids in ONE file (residence probe for the
|
|
31
|
+
* residence-derived status write in the Python CLI). Mirrors Python
|
|
32
|
+
* `_append_ids_at`. Tolerant — skips corrupt lines.
|
|
33
|
+
*/
|
|
34
|
+
export declare function appendIdsInFile(jsonlPath: string): Set<string>;
|
|
35
|
+
/** Convenience: filter to active triage status. */
|
|
36
|
+
export declare function filterTriage(items: TriageItem[]): TriageItem[];
|
|
37
|
+
/**
|
|
38
|
+
* Find a single item by id (linear scan). Used by the route layer for
|
|
39
|
+
* existence + status checks.
|
|
40
|
+
*/
|
|
41
|
+
export declare function findItemById(items: TriageItem[], id: string): TriageItem | undefined;
|
|
42
|
+
//# sourceMappingURL=triage-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage-store.d.ts","sourceRoot":"","sources":["../../src/core/triage-store.ts"],"names":[],"mappings":"AA6DA,OAAO,KAAK,EAAE,UAAU,EAAgB,MAAM,oBAAoB,CAAC;AAMnE,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAyBxE,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,qFAAqF;AACrF,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAiBD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,UAAU,EAAE,CAoF9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,EAAE,CA2C9D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAQ9D;AAED,mDAAmD;AACnD,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAE9D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EAAE,EACnB,EAAE,EAAE,MAAM,GACT,UAAU,GAAG,SAAS,CAExB"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* triage-store.ts — TS port of `triage.read_all_items` from
|
|
3
|
+
* `shared/scripts/triage.py`. Pure read path; status flips go through
|
|
4
|
+
* the Python triage CLI. Raw JSONL line reading lives in `triage-raw.ts`.
|
|
5
|
+
*
|
|
6
|
+
* UNION read (campaign 2026-06-08-triage-outbox-delivery / D1): the
|
|
7
|
+
* resolved view sources the tracked `triage.jsonl` AND the per-tree,
|
|
8
|
+
* gitignored `triage.outbox.jsonl` buffer (idle-main background producers
|
|
9
|
+
* append there, never the tracked store). Reading the union keeps those
|
|
10
|
+
* findings visible in the live Inbox without waiting for the D2
|
|
11
|
+
* sweep+merge round-trip. Raw lines are concatenated tracked-THEN-outbox
|
|
12
|
+
* (file order); resolution is by id, so a line present in both (post-sweep,
|
|
13
|
+
* pre-GC) collapses to one item.
|
|
14
|
+
*
|
|
15
|
+
* Two-pass resolution (matches Python read_all_items):
|
|
16
|
+
* - Pass 1 applies ALL `append` events (base records, union of both files)
|
|
17
|
+
* - Pass 2 applies ALL `status` AND `amend` events TOGETHER, ordered by
|
|
18
|
+
* (ts, file-order): ts is primary so the chronologically-later event in
|
|
19
|
+
* EITHER file wins REGARDLESS OF EVENT TYPE; file order (tracked-before-
|
|
20
|
+
* outbox) is the stable tiebreaker for equal ts, preserving the
|
|
21
|
+
* single-file "later valid line wins by file order" contract. The
|
|
22
|
+
* append-first split stops an outbox append (status:triage) from
|
|
23
|
+
* clobbering a tracked status flip. Each event type keeps its own
|
|
24
|
+
* overlay semantics (status: whole-field replace; amend: only present
|
|
25
|
+
* fields, via `triage-amend.ts tryApplyAmend`) — interleaving them by
|
|
26
|
+
* time is what makes two amends ACCUMULATE (each is a merge) while a
|
|
27
|
+
* later status still fully supersedes an earlier one (iterate-2026-08-08-
|
|
28
|
+
* triage-amend-reader; byte-for-byte mirror of `triage.py`
|
|
29
|
+
* read_all_items` Pass 2, which loops one combined sorted list rather
|
|
30
|
+
* than two separate passes).
|
|
31
|
+
* - status overlay sets: status, ts, statusBy, statusReason, revisitAt
|
|
32
|
+
* - promotedTaskId only set when the status event carries a non-null value
|
|
33
|
+
* - amend overlay sets: title/detail/severity/kind (present fields only),
|
|
34
|
+
* suggestedPriority (on a severity amend), amendedBy, amendedAt — never
|
|
35
|
+
* `ts`, which stays "time of the last STATUS decision"
|
|
36
|
+
*
|
|
37
|
+
* Park-expiry overlay (monorepo P2.03, iterate-2026-08-05-triage-deferred-
|
|
38
|
+
* envelope): `applyDeferOverlay` (triage-defer.ts) runs exactly ONCE, right
|
|
39
|
+
* after the two-pass resolution, mirroring where Python's `read_all_items`
|
|
40
|
+
* applies `_defer.apply_revisit_expiry` — never re-applied to its own output
|
|
41
|
+
* (see triage-defer.ts's module header for why that matters).
|
|
42
|
+
*
|
|
43
|
+
* Cache (5 s soft TTL) keyed by the tracked path, keyed on BOTH the tracked
|
|
44
|
+
* AND outbox mtimes — a change to either file invalidates. Forced eviction
|
|
45
|
+
* from test support after a fixture mutation.
|
|
46
|
+
*
|
|
47
|
+
* The overlay result depends on wall-clock time, not just file bytes, so a
|
|
48
|
+
* cache hit alone cannot answer "is this still correct" — a park's due day
|
|
49
|
+
* can turn over WITHIN the 5 s TTL with neither file touched (doubt review,
|
|
50
|
+
* iterate-2026-08-05-triage-deferred-envelope). Each entry therefore also
|
|
51
|
+
* remembers `overlayDay` (the UTC calendar day `items` was computed for): a
|
|
52
|
+
* cache hit on the SAME day returns `items` unchanged (identical array
|
|
53
|
+
* reference — the pre-overlay `rawItems` are never re-mapped); a hit whose
|
|
54
|
+
* day has turned over re-applies `applyDeferOverlay` to the SAME `rawItems`
|
|
55
|
+
* (no re-read, no re-parse) and remembers the new day. This keeps the
|
|
56
|
+
* common case free (one .map() at most once per calendar day per path)
|
|
57
|
+
* while never serving a stale-by-more-than-nothing due-state.
|
|
58
|
+
*/
|
|
59
|
+
import { statSync } from "node:fs";
|
|
60
|
+
import { AMENDED_AT_FIELD, AMENDED_BY_FIELD, tryApplyAmend } from "./triage-amend.js";
|
|
61
|
+
import { applyDeferOverlay, utcToday } from "./triage-defer.js";
|
|
62
|
+
import { readRawLines } from "./triage-raw.js";
|
|
63
|
+
import { outboxPathFor } from "./triage-paths.js";
|
|
64
|
+
export { parseRawLines, readLocalRawLinesSplit } from "./triage-raw.js";
|
|
65
|
+
const STATUSES = new Set([
|
|
66
|
+
"triage",
|
|
67
|
+
"promoted",
|
|
68
|
+
"dismissed",
|
|
69
|
+
"snoozed",
|
|
70
|
+
]);
|
|
71
|
+
const CACHE_TTL_MS = 5_000;
|
|
72
|
+
const cache = new Map();
|
|
73
|
+
/** Forced cache eviction for test support after a fixture mutation. */
|
|
74
|
+
export function invalidateCacheForPath(path) {
|
|
75
|
+
cache.delete(path);
|
|
76
|
+
}
|
|
77
|
+
/** Test-only — clear the entire cache. Exported so vitest setup can isolate runs. */
|
|
78
|
+
export function _clearCache_TEST_ONLY() {
|
|
79
|
+
cache.clear();
|
|
80
|
+
}
|
|
81
|
+
/** mtime in ms, or null when the file is absent / unstat-able. */
|
|
82
|
+
function mtimeOrNull(p) {
|
|
83
|
+
try {
|
|
84
|
+
return statSync(p).mtimeMs;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/** ISO-8601-Z string sort key; non-string/missing ts sorts EARLIEST (""). */
|
|
91
|
+
function tsKey(raw) {
|
|
92
|
+
const ts = raw.ts;
|
|
93
|
+
return typeof ts === "string" ? ts : "";
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Two-pass union resolution over already-parsed raw lines (tracked THEN
|
|
97
|
+
* outbox, file order). Byte-for-byte mirror of Python `read_all_items`'s
|
|
98
|
+
* resolution body — Pass 1 applies all `append` events, Pass 2 applies all
|
|
99
|
+
* `status` AND `amend` events together, ordered by (ts, file-order).
|
|
100
|
+
*
|
|
101
|
+
* Exported for the delivered-origin composer (`triage-compose.ts`): the same
|
|
102
|
+
* multi-source union already reconciles tracked ∪ outbox, so adding origin as
|
|
103
|
+
* a third raw-line source is a natural extension resolved by identical rules.
|
|
104
|
+
*/
|
|
105
|
+
export function resolveUnion(rawLines) {
|
|
106
|
+
// Pass 1 — every append establishes a base record (union of both files).
|
|
107
|
+
// A duplicate append for the same id (post-sweep, pre-GC) collapses to one
|
|
108
|
+
// record; the later line's fields win (identical content → harmless).
|
|
109
|
+
const resolved = new Map();
|
|
110
|
+
for (const raw of rawLines) {
|
|
111
|
+
if (raw.event !== "append")
|
|
112
|
+
continue;
|
|
113
|
+
const id = raw.id;
|
|
114
|
+
if (typeof id !== "string")
|
|
115
|
+
continue;
|
|
116
|
+
const item = {};
|
|
117
|
+
for (const [k, v] of Object.entries(raw)) {
|
|
118
|
+
if (k === "event")
|
|
119
|
+
continue;
|
|
120
|
+
item[k] = v;
|
|
121
|
+
}
|
|
122
|
+
item.statusBy = null;
|
|
123
|
+
item.statusReason = null;
|
|
124
|
+
item.promotedTaskId = null;
|
|
125
|
+
// Revisit semantics belong only to a valid `snoozed` status event — a
|
|
126
|
+
// hand-edited append must not acquire park semantics (mirrors Python).
|
|
127
|
+
item.revisitAt = null;
|
|
128
|
+
item[AMENDED_BY_FIELD] = null;
|
|
129
|
+
item[AMENDED_AT_FIELD] = null;
|
|
130
|
+
resolved.set(id, item);
|
|
131
|
+
}
|
|
132
|
+
// Pass 2 — overlay status flips AND amends TOGETHER, ordered by
|
|
133
|
+
// (ts, file-order). ts is primary so a chronologically-later event in
|
|
134
|
+
// EITHER file wins regardless of type; the enumerate index is the stable
|
|
135
|
+
// tiebreaker for equal ts (tracked precedes outbox).
|
|
136
|
+
const statusAndAmendEvents = [];
|
|
137
|
+
rawLines.forEach((raw, idx) => {
|
|
138
|
+
if (raw.event === "status" || raw.event === "amend")
|
|
139
|
+
statusAndAmendEvents.push({ idx, raw });
|
|
140
|
+
});
|
|
141
|
+
statusAndAmendEvents.sort((a, b) => {
|
|
142
|
+
const ta = tsKey(a.raw);
|
|
143
|
+
const tb = tsKey(b.raw);
|
|
144
|
+
if (ta < tb)
|
|
145
|
+
return -1;
|
|
146
|
+
if (ta > tb)
|
|
147
|
+
return 1;
|
|
148
|
+
return a.idx - b.idx;
|
|
149
|
+
});
|
|
150
|
+
for (const { raw } of statusAndAmendEvents) {
|
|
151
|
+
const id = raw.id;
|
|
152
|
+
if (typeof id !== "string")
|
|
153
|
+
continue;
|
|
154
|
+
const item = resolved.get(id);
|
|
155
|
+
if (!item)
|
|
156
|
+
continue; // status/amend for unknown id (corrupt / out-of-order) — skip
|
|
157
|
+
if (raw.event === "amend") {
|
|
158
|
+
tryApplyAmend(item, raw);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
const newStatus = raw.newStatus;
|
|
162
|
+
if (typeof newStatus === "string" && STATUSES.has(newStatus)) {
|
|
163
|
+
item.status = newStatus;
|
|
164
|
+
}
|
|
165
|
+
// Per-field overlay is byte-identical to the pre-union single-pass port
|
|
166
|
+
// (AC5: existing single-file behavior unchanged). The ONLY new behavior
|
|
167
|
+
// is the union source + the (ts, file-order) ordering above — NOT the
|
|
168
|
+
// per-line overlay semantics. The typeof guards also keep the webui's
|
|
169
|
+
// stricter `TriageItem` type contract (ts: string; promotedTaskId:
|
|
170
|
+
// string | null) intact for malformed-but-tolerated status events, where
|
|
171
|
+
// Python's verbatim `raw.get(...)` would leak a non-string through.
|
|
172
|
+
const overlayTs = raw.ts;
|
|
173
|
+
if (typeof overlayTs === "string") {
|
|
174
|
+
item.ts = overlayTs;
|
|
175
|
+
}
|
|
176
|
+
item.statusBy = raw.by ?? null;
|
|
177
|
+
item.statusReason = raw.reason ?? null;
|
|
178
|
+
// A valid `snoozed` flip takes its supplied revisit date; any other flip
|
|
179
|
+
// (un-park/dismiss/promote) clears it, even if a hand-edited event
|
|
180
|
+
// illegally carries park semantics on a non-snoozed status.
|
|
181
|
+
const revisit = raw.revisitAt;
|
|
182
|
+
item.revisitAt =
|
|
183
|
+
newStatus === "snoozed" && typeof revisit === "string" ? revisit : null;
|
|
184
|
+
const promoted = raw.promotedTaskId;
|
|
185
|
+
// Only a non-null promotedTaskId overrides (null/absent keep the prior
|
|
186
|
+
// value); non-strings are coerced to preserve the string|null contract.
|
|
187
|
+
if (promoted !== undefined && promoted !== null) {
|
|
188
|
+
item.promotedTaskId =
|
|
189
|
+
typeof promoted === "string" ? promoted : String(promoted);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return Array.from(resolved.values());
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Read and resolve every triage item for a project, sourcing the UNION of
|
|
196
|
+
* the tracked store (`trackedPath`) and the per-tree outbox buffer alongside
|
|
197
|
+
* it. Returns [] when neither file exists (so consumers need no separate
|
|
198
|
+
* existence check).
|
|
199
|
+
*
|
|
200
|
+
* `trackedPath` is the absolute tracked `triage.jsonl` path (from
|
|
201
|
+
* `resolveTriagePath().absolute`); the outbox sibling is derived via
|
|
202
|
+
* `outboxPathFor`.
|
|
203
|
+
*/
|
|
204
|
+
export function readAllItems(trackedPath) {
|
|
205
|
+
const outboxPath = outboxPathFor(trackedPath);
|
|
206
|
+
const trackedMtimeMs = mtimeOrNull(trackedPath);
|
|
207
|
+
const outboxMtimeMs = mtimeOrNull(outboxPath);
|
|
208
|
+
// Neither file present — no triage store at all.
|
|
209
|
+
if (trackedMtimeMs === null && outboxMtimeMs === null)
|
|
210
|
+
return [];
|
|
211
|
+
const now = new Date();
|
|
212
|
+
const today = utcToday(now);
|
|
213
|
+
// Dual-mtime cache lookup (keyed by the tracked path).
|
|
214
|
+
const cached = cache.get(trackedPath);
|
|
215
|
+
if (cached &&
|
|
216
|
+
cached.trackedMtimeMs === trackedMtimeMs &&
|
|
217
|
+
cached.outboxMtimeMs === outboxMtimeMs &&
|
|
218
|
+
Date.now() - cached.filledAt < CACHE_TTL_MS) {
|
|
219
|
+
if (cached.overlayDay === today)
|
|
220
|
+
return cached.items;
|
|
221
|
+
// Same bytes, but the UTC day turned over since the cache filled — the
|
|
222
|
+
// overlay is a pure function of (rawItems, today), so re-apply it to
|
|
223
|
+
// the ALREADY-PARSED rawItems (no re-read, no re-parse) rather than
|
|
224
|
+
// serving a due-state that's stale by more than nothing.
|
|
225
|
+
cached.items = applyDeferOverlay(cached.rawItems, now);
|
|
226
|
+
cached.overlayDay = today;
|
|
227
|
+
return cached.items;
|
|
228
|
+
}
|
|
229
|
+
// Tolerant union read: tracked lines THEN outbox lines (file order).
|
|
230
|
+
const rawLines = [...readRawLines(trackedPath), ...readRawLines(outboxPath)];
|
|
231
|
+
const rawItems = resolveUnion(rawLines);
|
|
232
|
+
const items = applyDeferOverlay(rawItems, now);
|
|
233
|
+
cache.set(trackedPath, {
|
|
234
|
+
trackedMtimeMs,
|
|
235
|
+
outboxMtimeMs,
|
|
236
|
+
filledAt: Date.now(),
|
|
237
|
+
rawItems,
|
|
238
|
+
overlayDay: today,
|
|
239
|
+
items,
|
|
240
|
+
});
|
|
241
|
+
return items;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Set of `append`-event ids in ONE file (residence probe for the
|
|
245
|
+
* residence-derived status write in the Python CLI). Mirrors Python
|
|
246
|
+
* `_append_ids_at`. Tolerant — skips corrupt lines.
|
|
247
|
+
*/
|
|
248
|
+
export function appendIdsInFile(jsonlPath) {
|
|
249
|
+
const ids = new Set();
|
|
250
|
+
for (const raw of readRawLines(jsonlPath)) {
|
|
251
|
+
if (raw.event === "append" && typeof raw.id === "string") {
|
|
252
|
+
ids.add(raw.id);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return ids;
|
|
256
|
+
}
|
|
257
|
+
/** Convenience: filter to active triage status. */
|
|
258
|
+
export function filterTriage(items) {
|
|
259
|
+
return items.filter((it) => it.status === "triage");
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Find a single item by id (linear scan). Used by the route layer for
|
|
263
|
+
* existence + status checks.
|
|
264
|
+
*/
|
|
265
|
+
export function findItemById(items, id) {
|
|
266
|
+
return items.find((it) => it.id === id);
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=triage-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage-store.js","sourceRoot":"","sources":["../../src/core/triage-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { TriagePriority, TriageSeverity } from "../types/triage.js";
|
|
2
|
+
export interface PromoteBody {
|
|
3
|
+
triageId: string;
|
|
4
|
+
priority: TriagePriority;
|
|
5
|
+
domain: string;
|
|
6
|
+
complexityHint?: "small" | "medium" | "large";
|
|
7
|
+
tags: string[];
|
|
8
|
+
}
|
|
9
|
+
export interface DismissSnoozeBody {
|
|
10
|
+
triageId: string;
|
|
11
|
+
reason: string | null;
|
|
12
|
+
/** Present only on a `snoozed` flip — see `parseDismissSnoozeBody`. */
|
|
13
|
+
revisitAt?: string;
|
|
14
|
+
}
|
|
15
|
+
export type Validated<T> = {
|
|
16
|
+
ok: true;
|
|
17
|
+
value: T;
|
|
18
|
+
} | {
|
|
19
|
+
ok: false;
|
|
20
|
+
error: {
|
|
21
|
+
error: string;
|
|
22
|
+
field?: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export declare function isPlainObject(v: unknown): v is Record<string, unknown>;
|
|
26
|
+
export declare function containsControlChar(s: string): boolean;
|
|
27
|
+
export declare function parsePromoteBody(body: unknown): Validated<PromoteBody>;
|
|
28
|
+
/**
|
|
29
|
+
* `newStatus` decides whether `revisitAt` is even legal on this body — park
|
|
30
|
+
* semantics apply ONLY to a `snoozed` flip, mirroring the monorepo's
|
|
31
|
+
* `mark_status` validation (`revisit_at is park semantics and is accepted
|
|
32
|
+
* only on a snoozed flip`). A non-future date (today or past) is rejected
|
|
33
|
+
* too: it would resolve straight back to `status: "triage"` on the very
|
|
34
|
+
* next read, defeating the point of parking it (iterate-2026-08-05-triage-
|
|
35
|
+
* deferred-envelope plan review, AC7).
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseDismissSnoozeBody(body: unknown, newStatus: "dismissed" | "snoozed"): Validated<DismissSnoozeBody>;
|
|
38
|
+
export interface AmendBody {
|
|
39
|
+
triageId: string;
|
|
40
|
+
title?: string;
|
|
41
|
+
detail?: string;
|
|
42
|
+
severity?: TriageSeverity;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Validates a `POST /api/triage/:projectId/amend` body: a DELTA, never a
|
|
46
|
+
* rewrite — any subset of title/detail/severity, at least one present
|
|
47
|
+
* (contentless → 400 before any write, mirrors `check_amend_fields`'s
|
|
48
|
+
* writer-side precondition in `lib/triage_amend.py`). Field-level validity
|
|
49
|
+
* (non-blank title, string detail, known severity) reuses
|
|
50
|
+
* `triage-amend.ts`'s `validateAmendEvent` — the SAME check the reader
|
|
51
|
+
* applies to a stored line, so a body that would pass here is guaranteed to
|
|
52
|
+
* resolve on the very next read (no accepted-but-silently-ignored amend).
|
|
53
|
+
* `kind` is deliberately NOT accepted here — the Edit UI only offers
|
|
54
|
+
* title/detail/severity (filing-card decision); the wire format itself
|
|
55
|
+
* still supports a `kind` amend for parity with any future producer.
|
|
56
|
+
*/
|
|
57
|
+
export declare function parseAmendBody(body: unknown): Validated<AmendBody>;
|
|
58
|
+
//# sourceMappingURL=triage-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"triage-validation.d.ts","sourceRoot":"","sources":["../../src/core/triage-validation.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAqBzE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC9C,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uEAAuE;IACvE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IACnB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE5D,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAMtD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC,CA8DtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,WAAW,GAAG,SAAS,GACjC,SAAS,CAAC,iBAAiB,CAAC,CAmC9B;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,CAoClE"}
|