@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,226 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Session JSONL discovery + stateless byte-range reader.
|
|
3
|
+
*
|
|
4
|
+
* Variant-a narrow: NO chokidar, NO recursive watchers. Discovery is
|
|
5
|
+
* filename-first per PoC finding 1 — claude writes each session at
|
|
6
|
+
* `~/.claude/projects/<encoded-cwd>/<uuid>.jsonl`, and the filename is
|
|
7
|
+
* the authoritative primitive (first-line sessionId verification is a
|
|
8
|
+
* sanity check only; fork-session files begin with `file-history-snapshot`
|
|
9
|
+
* lines that carry no sessionId).
|
|
10
|
+
*
|
|
11
|
+
* The transcript endpoint reads byte-ranges stateless: the client supplies
|
|
12
|
+
* `fromByte` + `expectFingerprint`; the server returns the delta. No
|
|
13
|
+
* server-side offset cache → multi-tab works by construction.
|
|
14
|
+
*
|
|
15
|
+
* The disk primitives — the torn-read retry envelope (50 → 1600 ms × 6 over
|
|
16
|
+
* EBUSY / EPERM / EACCES / ENOENT, insurance against AV scanners / OneDrive /
|
|
17
|
+
* Defender), the POSITIONAL tail read (`readChunk` reads only `[fromByte, EOF)`,
|
|
18
|
+
* never the whole file) and the newline scan — live in `session-jsonl-io.ts`,
|
|
19
|
+
* which also carries the append/truncate concurrency contract they honour.
|
|
20
|
+
*/
|
|
21
|
+
import { readdir, stat } from "node:fs/promises";
|
|
22
|
+
import { homedir } from "node:os";
|
|
23
|
+
import path from "node:path";
|
|
24
|
+
import { ENOENT_FATAL, lastIndexOfByte, readTailFromDisk, readWithRetry, } from "./session-jsonl-io.js";
|
|
25
|
+
import { awaitingLaunchProbe } from "./session-watcher-debug.js";
|
|
26
|
+
export const PROJECTS_DIR = path.join(homedir(), ".claude", "projects");
|
|
27
|
+
const DEFAULT_DEPS = {
|
|
28
|
+
readdir: (p) => readdir(p),
|
|
29
|
+
stat: (p) => stat(p).then((s) => ({
|
|
30
|
+
mtimeMs: s.mtimeMs,
|
|
31
|
+
size: s.size,
|
|
32
|
+
isDirectory: () => s.isDirectory(),
|
|
33
|
+
})),
|
|
34
|
+
readTail: (p, fromByte) => readTailFromDisk(p, fromByte),
|
|
35
|
+
projectsDir: PROJECTS_DIR,
|
|
36
|
+
};
|
|
37
|
+
export class SessionWatcher {
|
|
38
|
+
deps;
|
|
39
|
+
constructor(deps = {}) {
|
|
40
|
+
this.deps = { ...DEFAULT_DEPS, ...deps };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the on-disk JSONL for a given pre-bound session UUID.
|
|
44
|
+
* Returns null if no file matches yet (common during
|
|
45
|
+
* `awaiting_external_start` before the user pastes). The env-gated
|
|
46
|
+
* awaiting-launch diagnostic lives in `session-watcher-debug.ts`.
|
|
47
|
+
*/
|
|
48
|
+
async findByUuid(sessionUuid) {
|
|
49
|
+
const probe = awaitingLaunchProbe();
|
|
50
|
+
const wanted = `${sessionUuid.toLowerCase()}.jsonl`;
|
|
51
|
+
let subs;
|
|
52
|
+
try {
|
|
53
|
+
// D06/F24 — retry transient fs errors, fast-fail ENOENT (absent dir).
|
|
54
|
+
subs = await readWithRetry(() => this.deps.readdir(this.deps.projectsDir), ENOENT_FATAL);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
probe?.readdirFailed(sessionUuid, this.deps.projectsDir);
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
for (const sub of subs) {
|
|
61
|
+
const subPath = path.join(this.deps.projectsDir, sub);
|
|
62
|
+
try {
|
|
63
|
+
const s = await readWithRetry(() => this.deps.stat(subPath), ENOENT_FATAL);
|
|
64
|
+
if (!s.isDirectory())
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
let files;
|
|
71
|
+
try {
|
|
72
|
+
files = await readWithRetry(() => this.deps.readdir(subPath), ENOENT_FATAL);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
for (const f of files) {
|
|
78
|
+
if (f.toLowerCase() !== wanted)
|
|
79
|
+
continue;
|
|
80
|
+
const fp = path.join(subPath, f);
|
|
81
|
+
try {
|
|
82
|
+
// D06/F24 core fix — retry the matched file's stat (pre-fix a transient EBUSY here read as an authoritative "JSONL missing").
|
|
83
|
+
const fs = await readWithRetry(() => this.deps.stat(fp), ENOENT_FATAL);
|
|
84
|
+
probe?.hit(sessionUuid, sub, fs.size);
|
|
85
|
+
return { path: fp, encodedCwd: sub, mtimeMs: fs.mtimeMs, sizeBytes: fs.size };
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
probe?.miss(sessionUuid, subs);
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Batch variant of {@link findByUuid} — resolves many session UUIDs in
|
|
97
|
+
* a SINGLE `~/.claude/projects` walk. `GET /api/external/tasks` uses
|
|
98
|
+
* this so the board delivers a LIVE JSONL mtime for every task in one
|
|
99
|
+
* scan (ADR-102 — the Resume-CTA gate must not be fed the stale
|
|
100
|
+
* persisted `lastJsonlSeenMtimeMs`, which only the transcript endpoint
|
|
101
|
+
* of the currently-open detail page refreshes).
|
|
102
|
+
*
|
|
103
|
+
* Returns a Map keyed by LOWERCASE uuid. UUIDs with no matching file
|
|
104
|
+
* on disk are simply absent from the result (same as `findByUuid`
|
|
105
|
+
* returning null). An empty input set short-circuits with no walk.
|
|
106
|
+
*/
|
|
107
|
+
async findManyByUuid(uuids) {
|
|
108
|
+
const out = new Map();
|
|
109
|
+
// `<uuid>.jsonl` (lowercase) -> uuid (lowercase)
|
|
110
|
+
const wanted = new Map();
|
|
111
|
+
for (const u of uuids) {
|
|
112
|
+
const lc = u.toLowerCase();
|
|
113
|
+
wanted.set(`${lc}.jsonl`, lc);
|
|
114
|
+
}
|
|
115
|
+
if (wanted.size === 0)
|
|
116
|
+
return out;
|
|
117
|
+
let subs;
|
|
118
|
+
try {
|
|
119
|
+
subs = await this.deps.readdir(this.deps.projectsDir);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
for (const sub of subs) {
|
|
125
|
+
if (out.size === wanted.size)
|
|
126
|
+
break; // all resolved — stop the walk early
|
|
127
|
+
const subPath = path.join(this.deps.projectsDir, sub);
|
|
128
|
+
try {
|
|
129
|
+
const s = await this.deps.stat(subPath);
|
|
130
|
+
if (!s.isDirectory())
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
let files;
|
|
137
|
+
try {
|
|
138
|
+
files = await this.deps.readdir(subPath);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
for (const f of files) {
|
|
144
|
+
const uuid = wanted.get(f.toLowerCase());
|
|
145
|
+
if (!uuid || out.has(uuid))
|
|
146
|
+
continue;
|
|
147
|
+
const fp = path.join(subPath, f);
|
|
148
|
+
try {
|
|
149
|
+
const fst = await this.deps.stat(fp);
|
|
150
|
+
out.set(uuid, {
|
|
151
|
+
path: fp,
|
|
152
|
+
encodedCwd: sub,
|
|
153
|
+
mtimeMs: fst.mtimeMs,
|
|
154
|
+
sizeBytes: fst.size,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
/* unreadable — leave absent, mirrors findByUuid's null path */
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Read a byte-range from the JSONL with torn-read retry + UTF-8 safe
|
|
166
|
+
* chunk trimming. Always returns content ending on `\n` so the client
|
|
167
|
+
* never sees a partial line (and `\n` is safe to split on even in the
|
|
168
|
+
* middle of a multi-byte UTF-8 sequence).
|
|
169
|
+
*
|
|
170
|
+
* Returns the `JsonlLocation` it read from on success, so a caller needing
|
|
171
|
+
* the file's mtime/size does not walk `~/.claude/projects` a second time for
|
|
172
|
+
* an answer this call already had (iterate-2026-07-22-…-single-walk).
|
|
173
|
+
*/
|
|
174
|
+
async readChunk(args) {
|
|
175
|
+
const loc = args.location ?? (await this.findByUuid(args.sessionUuid));
|
|
176
|
+
if (!loc)
|
|
177
|
+
return { status: "missing" };
|
|
178
|
+
const fingerprint = computeFingerprint(loc);
|
|
179
|
+
if (args.expectFingerprint && args.expectFingerprint !== fingerprint) {
|
|
180
|
+
const [, prevSizeStr] = args.expectFingerprint.split(":");
|
|
181
|
+
const prevSize = Number.parseInt(prevSizeStr ?? "0", 10);
|
|
182
|
+
if (loc.sizeBytes < args.fromByte || loc.sizeBytes < prevSize) {
|
|
183
|
+
return { status: "rotated", currentFingerprint: fingerprint };
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Positional: only `[fromByte, EOF)` leaves the disk. `liveSize` is the end
|
|
187
|
+
// THAT read observed, so a file truncated between discovery and the read
|
|
188
|
+
// clamps `from` exactly as the old whole-file reader implicitly did.
|
|
189
|
+
// No `fatalCodes` here, deliberately: unlike discovery, a transient ENOENT
|
|
190
|
+
// on the read is an AV scanner / sync client yanking a file we just saw,
|
|
191
|
+
// and must be retried rather than reported as an authoritative miss.
|
|
192
|
+
// NOTE `chunk.toByte` may exceed `chunk.size`: `size` comes from the
|
|
193
|
+
// discovery stat while the read runs through the EOF its OWN handle saw.
|
|
194
|
+
// Pre-existing, and load-bearing since a client cursor arrived — a
|
|
195
|
+
// `fromByte` past `prevSize` is exactly what the rotation check's
|
|
196
|
+
// `sizeBytes < fromByte` disjunct absorbs (internal review, LOW-5).
|
|
197
|
+
const { bytes, size: liveSize } = await readWithRetry(() => this.deps.readTail(loc.path, args.fromByte));
|
|
198
|
+
const from = Math.min(Math.max(args.fromByte, 0), liveSize);
|
|
199
|
+
let slice = bytes;
|
|
200
|
+
let endExclusive = from + slice.length;
|
|
201
|
+
const lastNl = lastIndexOfByte(slice, 0x0a);
|
|
202
|
+
if (lastNl === -1) {
|
|
203
|
+
slice = Buffer.alloc(0);
|
|
204
|
+
endExclusive = from;
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
slice = slice.subarray(0, lastNl + 1);
|
|
208
|
+
endExclusive = from + lastNl + 1;
|
|
209
|
+
}
|
|
210
|
+
return {
|
|
211
|
+
status: "ok",
|
|
212
|
+
location: loc,
|
|
213
|
+
chunk: {
|
|
214
|
+
fingerprint,
|
|
215
|
+
size: loc.sizeBytes,
|
|
216
|
+
fromByte: from,
|
|
217
|
+
toByte: endExclusive,
|
|
218
|
+
content: slice.toString("utf-8"),
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
export function computeFingerprint(loc) {
|
|
224
|
+
return `${Math.trunc(loc.mtimeMs)}:${loc.sizeBytes}`;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=session-watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-watcher.js","sourceRoot":"","sources":["../../src/core/session-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-quote.d.ts","sourceRoot":"","sources":["../../src/core/shell-quote.ts"],"names":[],"mappings":"AAYA,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrC;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBtC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxC;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Shell-specific argument escaping for the three launch shells (PowerShell,
|
|
2
|
+
// cmd.exe, POSIX).
|
|
3
|
+
//
|
|
4
|
+
// Extracted from launcher.ts (iterate-2026-06-27-codeql-hardening) to keep that
|
|
5
|
+
// file under the 300-LOC limit and make the quoters independently testable.
|
|
6
|
+
// `core/actions-substitute.ts` calls them per target shell before substituting
|
|
7
|
+
// user-derived placeholders into command templates; the shell-escape discipline
|
|
8
|
+
// is the security boundary for command-template substitution (plan.md § 2.2).
|
|
9
|
+
// launcher.ts re-exports these, so existing `from "./launcher.js"` importers
|
|
10
|
+
// keep working. Do not move this logic behind a different abstraction without
|
|
11
|
+
// updating `actions-substitute.ts`.
|
|
12
|
+
export function qPs(v) {
|
|
13
|
+
// PS single-quoted: embedded `'` → `''`.
|
|
14
|
+
return `'${v.replace(/'/g, "''")}'`;
|
|
15
|
+
}
|
|
16
|
+
export function qCmd(v) {
|
|
17
|
+
// cmd.exe double-quoted argument, escaped per CommandLineToArgvW (the prior
|
|
18
|
+
// `"${v.replace(/"/g,'\\"')}"` left backslashes unescaped — CodeQL
|
|
19
|
+
// js/incomplete-sanitization #4): N `\` before an embedded `"` → 2N+1 `\`+`"`;
|
|
20
|
+
// N `\` before the CLOSING quote → 2N `\` (a trailing `\` can't escape it);
|
|
21
|
+
// `\` not before a quote stays literal (`C:\foo` must not become `C:\\foo`).
|
|
22
|
+
// Argv layer only; cmd.exe metachar handling is out of scope on this
|
|
23
|
+
// loopback tool (inputs aren't cross-user-trust; `qPs` is the default shell).
|
|
24
|
+
let out = '"';
|
|
25
|
+
let pendingBackslashes = 0;
|
|
26
|
+
for (const ch of v) {
|
|
27
|
+
if (ch === "\\") {
|
|
28
|
+
pendingBackslashes += 1;
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
if (ch === '"') {
|
|
32
|
+
out += "\\".repeat(pendingBackslashes * 2 + 1) + '"';
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
out += "\\".repeat(pendingBackslashes) + ch;
|
|
36
|
+
}
|
|
37
|
+
pendingBackslashes = 0;
|
|
38
|
+
}
|
|
39
|
+
out += "\\".repeat(pendingBackslashes * 2) + '"';
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
export function qPosix(v) {
|
|
43
|
+
// POSIX single-quoted: `'` → `'\''`.
|
|
44
|
+
return `'${v.replace(/'/g, "'\\''")}'`;
|
|
45
|
+
}
|
|
46
|
+
export function toPosixPath(p) {
|
|
47
|
+
return p.replace(/\\/g, "/");
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=shell-quote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell-quote.js","sourceRoot":"","sources":["../../src/core/shell-quote.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,mBAAmB;AACnB,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,oCAAoC;AAEpC,MAAM,UAAU,GAAG,CAAC,CAAS;IAC3B,yCAAyC;IACzC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,4EAA4E;IAC5E,mEAAmE;IACnE,+EAA+E;IAC/E,4EAA4E;IAC5E,6EAA6E;IAC7E,qEAAqE;IACrE,8EAA8E;IAC9E,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,kBAAkB,IAAI,CAAC,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YACf,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC;QACD,kBAAkB,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,CAAS;IAC9B,qCAAqC;IACrC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ExternalTask } from "./sdk-sessions-store.js";
|
|
2
|
+
/**
|
|
3
|
+
* Fields frozen once a task has started. Keep this literal byte-identical
|
|
4
|
+
* to the client mirror — the parity test extracts and compares it.
|
|
5
|
+
*/
|
|
6
|
+
export declare const FROZEN_WHEN_STARTED: readonly ["description", "phase", "priority", "complexityHint", "autonomy"];
|
|
7
|
+
export type FrozenField = (typeof FROZEN_WHEN_STARTED)[number];
|
|
8
|
+
/**
|
|
9
|
+
* A task is "never started" while it sits in the Backlog and has never
|
|
10
|
+
* been launched. A `draft` task that ran and was moved back to the
|
|
11
|
+
* Backlog keeps its `launchedAt` (set by /launch) and its
|
|
12
|
+
* `firstJsonlObservedAt` — it counts as STARTED, so its launch-shaping
|
|
13
|
+
* fields stay frozen.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isNeverStarted(task: Pick<ExternalTask, "state" | "launchedAt" | "firstJsonlObservedAt">): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* True when `field` may be edited given the task's lifecycle position.
|
|
18
|
+
* Never-started → everything editable. Started → only the non-frozen
|
|
19
|
+
* fields (title / projectId / domain / tags / blockedBy).
|
|
20
|
+
*/
|
|
21
|
+
export declare function isFieldEditable(field: string, task: Pick<ExternalTask, "state" | "launchedAt" | "firstJsonlObservedAt">): boolean;
|
|
22
|
+
//# sourceMappingURL=task-editability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-editability.d.ts","sourceRoot":"","sources":["../../src/core/task-editability.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,mBAAmB,6EAMtB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,YAAY,GAAG,sBAAsB,CAAC,GACxE,OAAO,CAMT;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,YAAY,GAAG,sBAAsB,CAAC,GACxE,OAAO,CAGT"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fields frozen once a task has started. Keep this literal byte-identical
|
|
3
|
+
* to the client mirror — the parity test extracts and compares it.
|
|
4
|
+
*/
|
|
5
|
+
export const FROZEN_WHEN_STARTED = [
|
|
6
|
+
"description",
|
|
7
|
+
"phase",
|
|
8
|
+
"priority",
|
|
9
|
+
"complexityHint",
|
|
10
|
+
"autonomy",
|
|
11
|
+
];
|
|
12
|
+
/**
|
|
13
|
+
* A task is "never started" while it sits in the Backlog and has never
|
|
14
|
+
* been launched. A `draft` task that ran and was moved back to the
|
|
15
|
+
* Backlog keeps its `launchedAt` (set by /launch) and its
|
|
16
|
+
* `firstJsonlObservedAt` — it counts as STARTED, so its launch-shaping
|
|
17
|
+
* fields stay frozen.
|
|
18
|
+
*/
|
|
19
|
+
export function isNeverStarted(task) {
|
|
20
|
+
return (task.state === "draft" &&
|
|
21
|
+
!task.launchedAt &&
|
|
22
|
+
!task.firstJsonlObservedAt);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* True when `field` may be edited given the task's lifecycle position.
|
|
26
|
+
* Never-started → everything editable. Started → only the non-frozen
|
|
27
|
+
* fields (title / projectId / domain / tags / blockedBy).
|
|
28
|
+
*/
|
|
29
|
+
export function isFieldEditable(field, task) {
|
|
30
|
+
if (isNeverStarted(task))
|
|
31
|
+
return true;
|
|
32
|
+
return !FROZEN_WHEN_STARTED.includes(field);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=task-editability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-editability.js","sourceRoot":"","sources":["../../src/core/task-editability.ts"],"names":[],"mappings":"AAwBA;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,aAAa;IACb,OAAO;IACP,UAAU;IACV,gBAAgB;IAChB,UAAU;CACF,CAAC;AAIX;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAyE;IAEzE,OAAO,CACL,IAAI,CAAC,KAAK,KAAK,OAAO;QACtB,CAAC,IAAI,CAAC,UAAU;QAChB,CAAC,IAAI,CAAC,oBAAoB,CAC3B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAa,EACb,IAAyE;IAEzE,IAAI,cAAc,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,CAAE,mBAAyC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract the waiting-picker block from decoded terminal viewport text.
|
|
3
|
+
* Returns the trimmed block (capped at `MAX_QUESTION_TEXT_LEN`) when a
|
|
4
|
+
* live `AskUserQuestion` picker is the bottom-most content, else `null`.
|
|
5
|
+
*/
|
|
6
|
+
export declare function extractTerminalPrompt(visibleText: string): string | null;
|
|
7
|
+
//# sourceMappingURL=terminal-prompt-detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-prompt-detect.d.ts","sourceRoot":"","sources":["../../src/core/terminal-prompt-detect.ts"],"names":[],"mappings":"AA8DA;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA6DxE"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* terminal-prompt-detect.ts — iterate-2026-05-18-inbox-terminal-prompts
|
|
3
|
+
*
|
|
4
|
+
* Pure detector for a *waiting* `AskUserQuestion` picker in the visible
|
|
5
|
+
* text of an embedded-terminal session.
|
|
6
|
+
*
|
|
7
|
+
* Why this exists: Claude Code journals a tool-call turn only after the
|
|
8
|
+
* tool returns. For `AskUserQuestion` "returns" = "the user answered", so
|
|
9
|
+
* the tool_use + tool_result land in the JSONL together, after the
|
|
10
|
+
* answer. A *waiting* picker is therefore never visible in the JSONL —
|
|
11
|
+
* neither `deriveInbox` (path A) nor `detectAwaitingUserQuestion` (path B)
|
|
12
|
+
* can see it. The only data source that reflects a live picker is the
|
|
13
|
+
* terminal output itself (the per-task `@xterm/headless` mirror).
|
|
14
|
+
*
|
|
15
|
+
* `extractTerminalPrompt` takes the decoded visible-viewport text (from
|
|
16
|
+
* `HeadlessMirror.getVisibleText()` via `PtyManager.peekTerminalText()`)
|
|
17
|
+
* and returns the picker block, or `null`.
|
|
18
|
+
*
|
|
19
|
+
* Hardening folded in from the iterate plan's external review:
|
|
20
|
+
* - gemini-2 (zombie prompt): the footer MUST be the bottom-most
|
|
21
|
+
* non-blank content. Once Claude exits and the shell prints a fresh
|
|
22
|
+
* prompt below the (lingering) footer, the picker is stale → null.
|
|
23
|
+
* - openai-10 (security): the captured block is bounded above by a
|
|
24
|
+
* horizontal rule, a 2-blank-line gap, or a hard line cap, then
|
|
25
|
+
* length-capped — so arbitrary scrollback above the picker cannot
|
|
26
|
+
* leak into the inbox response.
|
|
27
|
+
* - openai-5: footer matching is separator-agnostic + case-insensitive.
|
|
28
|
+
*/
|
|
29
|
+
import { MAX_QUESTION_TEXT_LEN } from "./inbox-derive.js";
|
|
30
|
+
/** "Enter to select" cue — half of the strong footer signature. */
|
|
31
|
+
const FOOTER_SELECT = /enter to select/i;
|
|
32
|
+
/** "Esc to cancel" cue — the other half. Both required. */
|
|
33
|
+
const FOOTER_CANCEL = /esc to cancel/i;
|
|
34
|
+
/** Any footer-ish cue — used to recognise the (possibly wrapped) footer
|
|
35
|
+
* line(s) at the bottom of the viewport. */
|
|
36
|
+
const FOOTER_CUE = /tab\/arrow|to navigate|to cancel|to select/i;
|
|
37
|
+
/** Hard cap on collected block lines — a real picker is well under this;
|
|
38
|
+
* the cap bounds a pathological viewport. */
|
|
39
|
+
const MAX_BLOCK_LINES = 24;
|
|
40
|
+
/** Box-drawing (U+2500–U+257F) + ascii rule characters. */
|
|
41
|
+
const RULE_CHAR = /[─-╿\-_=]/u;
|
|
42
|
+
function isBlank(line) {
|
|
43
|
+
return line.trim().length === 0;
|
|
44
|
+
}
|
|
45
|
+
/** A horizontal-rule line — Claude Code renders one above the picker.
|
|
46
|
+
* Used as the block's top boundary so preamble text never leaks in. */
|
|
47
|
+
function isRuleLine(line) {
|
|
48
|
+
const t = line.trim();
|
|
49
|
+
if (t.length < 3)
|
|
50
|
+
return false;
|
|
51
|
+
let ruleCount = 0;
|
|
52
|
+
for (const ch of t) {
|
|
53
|
+
if (RULE_CHAR.test(ch))
|
|
54
|
+
ruleCount++;
|
|
55
|
+
}
|
|
56
|
+
return ruleCount / t.length >= 0.8;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Extract the waiting-picker block from decoded terminal viewport text.
|
|
60
|
+
* Returns the trimmed block (capped at `MAX_QUESTION_TEXT_LEN`) when a
|
|
61
|
+
* live `AskUserQuestion` picker is the bottom-most content, else `null`.
|
|
62
|
+
*/
|
|
63
|
+
export function extractTerminalPrompt(visibleText) {
|
|
64
|
+
if (!visibleText)
|
|
65
|
+
return null;
|
|
66
|
+
const lines = visibleText.split("\n");
|
|
67
|
+
// The footer MUST be the bottom-most non-blank line. A picker whose
|
|
68
|
+
// footer is no longer at the bottom (shell prompt printed below it,
|
|
69
|
+
// Claude exited) is stale — do not surface it (gemini-2).
|
|
70
|
+
let lastNonBlank = -1;
|
|
71
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
72
|
+
if (!isBlank(lines[i])) {
|
|
73
|
+
lastNonBlank = i;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (lastNonBlank === -1)
|
|
78
|
+
return null;
|
|
79
|
+
if (!FOOTER_CUE.test(lines[lastNonBlank]))
|
|
80
|
+
return null;
|
|
81
|
+
// Footer region = the contiguous footer-ish run ending at lastNonBlank
|
|
82
|
+
// (covers a footer wrapped across 2 lines on a narrow terminal). It
|
|
83
|
+
// must carry BOTH the "Enter to select" and "Esc to cancel" cues — a
|
|
84
|
+
// strong, separator-agnostic signature (openai-5).
|
|
85
|
+
let footerTop = lastNonBlank;
|
|
86
|
+
while (footerTop > 0 &&
|
|
87
|
+
!isBlank(lines[footerTop - 1]) &&
|
|
88
|
+
FOOTER_CUE.test(lines[footerTop - 1])) {
|
|
89
|
+
footerTop--;
|
|
90
|
+
}
|
|
91
|
+
const footerRegion = lines.slice(footerTop, lastNonBlank + 1).join(" ");
|
|
92
|
+
if (!FOOTER_SELECT.test(footerRegion) || !FOOTER_CANCEL.test(footerRegion)) {
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
// Collect the picker block upward from the footer. Bounded by a
|
|
96
|
+
// horizontal-rule line, a 2-blank-line gap, or the hard line cap so
|
|
97
|
+
// unrelated scrollback above the picker cannot leak in (openai-10).
|
|
98
|
+
const block = [];
|
|
99
|
+
let blankRun = 0;
|
|
100
|
+
for (let i = lastNonBlank; i >= 0 && block.length < MAX_BLOCK_LINES; i--) {
|
|
101
|
+
const line = lines[i];
|
|
102
|
+
if (isRuleLine(line))
|
|
103
|
+
break;
|
|
104
|
+
if (isBlank(line)) {
|
|
105
|
+
blankRun++;
|
|
106
|
+
if (blankRun >= 2)
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
blankRun = 0;
|
|
111
|
+
}
|
|
112
|
+
block.push(line);
|
|
113
|
+
}
|
|
114
|
+
block.reverse();
|
|
115
|
+
while (block.length > 0 && isBlank(block[0]))
|
|
116
|
+
block.shift();
|
|
117
|
+
while (block.length > 0 && isBlank(block[block.length - 1]))
|
|
118
|
+
block.pop();
|
|
119
|
+
if (block.length === 0)
|
|
120
|
+
return null;
|
|
121
|
+
const text = block.join("\n");
|
|
122
|
+
// Keep the head (question + options sit at the top of a picker block);
|
|
123
|
+
// a pathological over-long block loses only its trailing lines.
|
|
124
|
+
return text.length > MAX_QUESTION_TEXT_LEN
|
|
125
|
+
? text.slice(0, MAX_QUESTION_TEXT_LEN)
|
|
126
|
+
: text;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=terminal-prompt-detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal-prompt-detect.js","sourceRoot":"","sources":["../../src/core/terminal-prompt-detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface TestsLike {
|
|
2
|
+
passed: number | null;
|
|
3
|
+
total: number | null;
|
|
4
|
+
skipped?: number | null;
|
|
5
|
+
}
|
|
6
|
+
export type GateState = "pass" | "fail" | "unknown";
|
|
7
|
+
/**
|
|
8
|
+
* This run's landing instant — the second reversal. Mirrors D4's own
|
|
9
|
+
* `CONVENTION_EPOCH_MS` pattern exactly (compared as an instant via
|
|
10
|
+
* `Date.parse`, not lexically — this log carries a mix of `Z` and `+02:00`
|
|
11
|
+
* suffixes, which do not sort the same way as strings).
|
|
12
|
+
*/
|
|
13
|
+
export declare const REVERSAL_EPOCH_MS: number;
|
|
14
|
+
/**
|
|
15
|
+
* `pass` / `fail` / `unknown` for one run's recorded tests. `unknown` when
|
|
16
|
+
* `total`/`passed` is absent, non-integer, negative, or `total <= 0` — the
|
|
17
|
+
* honest "nothing citable" signal, never a guess. A missing/unparseable/
|
|
18
|
+
* offset-less `ts` defaults to the OLD (pre-epoch) rule — the stricter,
|
|
19
|
+
* already-battle-tested one — so an ambiguous timestamp degrades toward
|
|
20
|
+
* caution, never a false `pass`.
|
|
21
|
+
*/
|
|
22
|
+
export declare function deriveTestsGate(tests: TestsLike | null, ts: string | null): GateState;
|
|
23
|
+
//# sourceMappingURL=tests-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests-gate.d.ts","sourceRoot":"","sources":["../../src/core/tests-gate.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAqC,CAAC;AAqBpE;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAqBrF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* tests-gate.ts — the ONE place a `work_completed` run's recorded test counts
|
|
3
|
+
* turn into a pass/fail/unknown verdict (iterate-2026-08-08-tests-total-skip-contract).
|
|
4
|
+
*
|
|
5
|
+
* Two repos disagree about what `tests.total` means: this project's D4
|
|
6
|
+
* ratchet (`event-test-counts-executed.test.ts`) historically required
|
|
7
|
+
* `total` = tests that EXECUTED (passed + failed), `skipped` tracked apart;
|
|
8
|
+
* the monorepo that actually WRITES these events (`record_event.py` /
|
|
9
|
+
* `tests_block.py`, P2.05, already shipped) uses the opposite: `total` =
|
|
10
|
+
* tests COLLECTED (passed + failed + skipped). Decision: this project adopts
|
|
11
|
+
* the monorepo's convention going forward (see the iterate spec's
|
|
12
|
+
* `## Decision` section) — it is the sole writer for every Shipwright-managed
|
|
13
|
+
* project, not just this one.
|
|
14
|
+
*
|
|
15
|
+
* REVERSAL_EPOCH_MS is a SECOND cutover, layered on the ratchet's existing
|
|
16
|
+
* first one (`CONVENTION_EPOCH_MS`, 2026-07-21): events dated before it keep
|
|
17
|
+
* being read under the OLD rule (`passed === total`, `skipped` ignored for
|
|
18
|
+
* the verdict); events at/after it use the NEW rule (`passed + skipped ===
|
|
19
|
+
* total`). Both branches are PERMANENT — old events are immutable and must
|
|
20
|
+
* keep reading correctly forever, this is not a migration shim to delete
|
|
21
|
+
* later.
|
|
22
|
+
*
|
|
23
|
+
* WHY AN EPOCH, NOT A PERMANENT "EITHER CONVENTION" CHECK. A pure
|
|
24
|
+
* `passed === total || passed + skipped === total` cannot distinguish an
|
|
25
|
+
* OLD-convention run that has a genuine failure whose count happens to equal
|
|
26
|
+
* its `skipped` value (`passed:99, total:100, skipped:1` meant "1 real
|
|
27
|
+
* failure, 1 separately-tracked skip" under the old rule) from a NEW
|
|
28
|
+
* -convention genuinely green run with the identical numbers (100 collected,
|
|
29
|
+
* 0 failures). Caught by external plan review (openai, both the plan pass
|
|
30
|
+
* and the architecture pass) — verified: this project's own Iron Law means a
|
|
31
|
+
* real failure was never actually finalized under the old rule, so the
|
|
32
|
+
* collision has never occurred in this log, but the ratchet's job is to hold
|
|
33
|
+
* even for an event this project did not itself write, so the ambiguity is a
|
|
34
|
+
* real soundness gap, not a cosmetic one. The epoch removes it structurally:
|
|
35
|
+
* an event is judged by exactly ONE rule, never both.
|
|
36
|
+
*/
|
|
37
|
+
/**
|
|
38
|
+
* This run's landing instant — the second reversal. Mirrors D4's own
|
|
39
|
+
* `CONVENTION_EPOCH_MS` pattern exactly (compared as an instant via
|
|
40
|
+
* `Date.parse`, not lexically — this log carries a mix of `Z` and `+02:00`
|
|
41
|
+
* suffixes, which do not sort the same way as strings).
|
|
42
|
+
*/
|
|
43
|
+
export const REVERSAL_EPOCH_MS = Date.parse("2026-08-08T00:00:00Z");
|
|
44
|
+
/** A non-negative integer, else `null` — rejects a negative/float/NaN value
|
|
45
|
+
* rather than letting it participate in the arithmetic (a negative
|
|
46
|
+
* `skipped` could otherwise forge a `pass` out of a real shortfall). */
|
|
47
|
+
function normalizedCount(v) {
|
|
48
|
+
return Number.isInteger(v) && v >= 0 ? v : null;
|
|
49
|
+
}
|
|
50
|
+
/** An explicit UTC/offset suffix (`Z` or `±HH:MM`/`±HHMM`) — bare
|
|
51
|
+
* `Date.parse` treats an offset-LESS date-time string as host-LOCAL time
|
|
52
|
+
* (ECMA-262 Date Time String Format), which would make the epoch verdict
|
|
53
|
+
* depend on the machine running the check rather than the event itself
|
|
54
|
+
* (doubt review, LOW-MEDIUM: `"2026-08-08T01:00:00"` parses `pass` in UTC
|
|
55
|
+
* and `fail` in Europe/Zurich for the same event). This log's real `ts`
|
|
56
|
+
* values always carry one; an offset-less string is treated the same as an
|
|
57
|
+
* unparseable one, below. */
|
|
58
|
+
function hasExplicitOffset(ts) {
|
|
59
|
+
return /(?:[Zz]|[+-]\d{2}:?\d{2})$/.test(ts);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* `pass` / `fail` / `unknown` for one run's recorded tests. `unknown` when
|
|
63
|
+
* `total`/`passed` is absent, non-integer, negative, or `total <= 0` — the
|
|
64
|
+
* honest "nothing citable" signal, never a guess. A missing/unparseable/
|
|
65
|
+
* offset-less `ts` defaults to the OLD (pre-epoch) rule — the stricter,
|
|
66
|
+
* already-battle-tested one — so an ambiguous timestamp degrades toward
|
|
67
|
+
* caution, never a false `pass`.
|
|
68
|
+
*/
|
|
69
|
+
export function deriveTestsGate(tests, ts) {
|
|
70
|
+
if (tests == null)
|
|
71
|
+
return "unknown";
|
|
72
|
+
const passed = normalizedCount(tests.passed);
|
|
73
|
+
const total = normalizedCount(tests.total);
|
|
74
|
+
if (passed == null || total == null || total <= 0)
|
|
75
|
+
return "unknown";
|
|
76
|
+
const tsMs = ts && hasExplicitOffset(ts) ? Date.parse(ts) : NaN;
|
|
77
|
+
const isPostReversal = Number.isFinite(tsMs) && tsMs >= REVERSAL_EPOCH_MS;
|
|
78
|
+
if (isPostReversal) {
|
|
79
|
+
const skip = normalizedCount(tests.skipped) ?? 0;
|
|
80
|
+
// `executed = total - skip`. A run where EVERY collected test was
|
|
81
|
+
// skipped (`executed <= 0`) satisfies `passed + skip === total`
|
|
82
|
+
// vacuously (0 + total === total) without a single test having run — the
|
|
83
|
+
// same "nothing citable" gap `total <= 0` above exists to catch, reopened
|
|
84
|
+
// one level down by the reversal (code review, MEDIUM: a false ALL CLEAR
|
|
85
|
+
// is the one thing this predicate must never produce).
|
|
86
|
+
if (total - skip <= 0)
|
|
87
|
+
return "unknown";
|
|
88
|
+
return passed + skip === total ? "pass" : "fail";
|
|
89
|
+
}
|
|
90
|
+
return passed === total ? "pass" : "fail";
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=tests-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tests-gate.js","sourceRoot":"","sources":["../../src/core/tests-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAUH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAEpE;;yEAEyE;AACzE,SAAS,eAAe,CAAC,CAAU;IACjC,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAK,CAAY,IAAI,CAAC,CAAC,CAAC,CAAE,CAAY,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED;;;;;;;8BAO8B;AAC9B,SAAS,iBAAiB,CAAC,EAAU;IACnC,OAAO,4BAA4B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,KAAuB,EAAE,EAAiB;IACxE,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IACpC,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAEpE,MAAM,IAAI,GAAG,EAAE,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAChE,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,iBAAiB,CAAC;IAE1E,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjD,kEAAkE;QAClE,gEAAgE;QAChE,yEAAyE;QACzE,0EAA0E;QAC1E,yEAAyE;QACzE,uDAAuD;QACvD,IAAI,KAAK,GAAG,IAAI,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;QACxC,OAAO,MAAM,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACnD,CAAC;IACD,OAAO,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5C,CAAC"}
|