@svenroth-ai/shipwright 0.28.0 → 0.29.1
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/client/dist/apple-touch-icon.png +0 -0
- package/client/dist/assets/{EmbeddedTerminal-4xgNUBUu.js → EmbeddedTerminal-BXosRYLy.js} +30 -30
- package/client/dist/assets/{abnfDiagram-VRR7QNED-BdCNbaqc.js → abnfDiagram-VCTEODGH-BGxuVEiU.js} +1 -1
- package/client/dist/assets/arc-o82bcJs8.js +1 -0
- package/client/dist/assets/architectureDiagram-5GKGNRK7-CaeUIM7e.js +36 -0
- package/client/dist/assets/blockDiagram-I7D4REHJ-DtWpTjgT.js +129 -0
- package/client/dist/assets/c4Diagram-7LVT6UL2-sJULbaUv.js +38 -0
- package/client/dist/assets/channel-CLBQbfQb.js +1 -0
- package/client/dist/assets/{chunk-2Q5K7J3B-4N6AnmBJ.js → chunk-2Q5K7J3B-CPeH4xHb.js} +1 -1
- package/client/dist/assets/{chunk-5VM5RSS4-Bwd7rtD3.js → chunk-5VM5RSS4-DxiKB3qZ.js} +1 -1
- package/client/dist/assets/{chunk-32BRIVSS-Cs67LiCy.js → chunk-F27PBJKO-B8V1zhCX.js} +1 -1
- package/client/dist/assets/{chunk-EX3LRPZG-CQqGfptD.js → chunk-IMKFNOWR-BtXet829.js} +5 -5
- package/client/dist/assets/{chunk-JWPE2WC7-ClvKd4PN.js → chunk-JWPE2WC7-BaQYKssR.js} +1 -1
- package/client/dist/assets/chunk-POPQ4Y6H-I1x_vfH3.js +1 -0
- package/client/dist/assets/{chunk-MOJQB5TN-Cwvj8GE1.js → chunk-SVP7TREG-Bvt8jrSp.js} +1 -1
- package/client/dist/assets/{chunk-V7JOEXUC-CYFfa4PY.js → chunk-TICWLB2K--9ywNq1F.js} +1 -1
- package/client/dist/assets/{chunk-XXDRQBXY-BQAZ6Our.js → chunk-XXDRQBXY-DrIyrBs1.js} +1 -1
- package/client/dist/assets/classDiagram-ZZMXUADV-D8z-o3xu.js +1 -0
- package/client/dist/assets/classDiagram-v2-VYDZK3BY-D8z-o3xu.js +1 -0
- package/client/dist/assets/{cose-bilkent-JH36ORCC-C76Yia6h.js → cose-bilkent-JH36ORCC-DISm8_p0.js} +1 -1
- package/client/dist/assets/{cynefin-VYW2F7L2-pJe7rdTi.js → cynefin-OW5HDTMX-wyDjqucU.js} +3 -3
- package/client/dist/assets/{cynefinDiagram-TSTJHNR4-EeHQ7dYV.js → cynefinDiagram-5FMLGOSQ-CN-IKDQ6.js} +1 -1
- package/client/dist/assets/dagre-GXQ25YYZ-QY0m5eSL.js +4 -0
- package/client/dist/assets/diagram-S7CK7UJ4-DhjaAe2g.js +30 -0
- package/client/dist/assets/diagram-UQ7AKVKN-D-3R3axg.js +41 -0
- package/client/dist/assets/{diagram-FQU43EPY-DW_-leqw.js → diagram-VSXAHHWV-BxXEtjRu.js} +2 -2
- package/client/dist/assets/{diagram-G47NLZAW-C_hsLD4u.js → diagram-VX7I27RA-DkbXkJpd.js} +1 -1
- package/client/dist/assets/{diagram-NH7WQ7WH-CbeQuO_f.js → diagram-Z3DM3KII-DQGRD9gQ.js} +1 -1
- package/client/dist/assets/{ebnfDiagram-CCIWWBDH-B8Z8WHF6.js → ebnfDiagram-PWID7BFC-C_XxskCm.js} +1 -1
- package/client/dist/assets/erDiagram-RLTQ6QDP-BhBsYQ7c.js +99 -0
- package/client/dist/assets/flowDiagram-HODETNUW-D7fXEPrM.js +168 -0
- package/client/dist/assets/{ganttDiagram-NO4QXBWP-K3X0DYBa.js → ganttDiagram-EL5Y4UJY-Bwf8EtWr.js} +4 -4
- package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-B2SEx0xa.js → gitGraphDiagram-WWUBYQGX-C3_ixsOl.js} +1 -1
- package/client/dist/assets/index-DWrPE3aq.css +1 -0
- package/client/dist/assets/index-DwRlIUrK.js +924 -0
- package/client/dist/assets/infoDiagram-27XIBGKW-BpcHmgOL.js +2 -0
- package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-CrN7QJzt.js → ishikawaDiagram-5VMMS53U-DzSGmhT5.js} +4 -4
- package/client/dist/assets/{journeyDiagram-5HDEW3XC-XHIsl7rM.js → journeyDiagram-3NMN7TZE-CT1CrVQO.js} +2 -2
- package/client/dist/assets/{kanban-definition-HUTT4EX6-A6HJqHw7.js → kanban-definition-UXKFOSKX-N1CNMAOm.js} +8 -8
- package/client/dist/assets/katex-C5jXJg4s.js +257 -0
- package/client/dist/assets/layout-CR8gdfo4.js +1 -0
- package/client/dist/assets/{linear-D1vF9IQB.js → linear-CfLRjQgX.js} +1 -1
- package/client/dist/assets/mermaid.core-Bnqt31Q7.js +312 -0
- package/client/dist/assets/{mindmap-definition-LN4V7U3C-CxRkUj6Z.js → mindmap-definition-YA3MSWOX-Brc-v1M4.js} +2 -2
- package/client/dist/assets/{pegDiagram-2B236MQR-Bs9dp-8a.js → pegDiagram-XKGWAZYB-D8jUV01U.js} +1 -1
- package/client/dist/assets/{pieDiagram-ENE6RG2P-DBWILzB8.js → pieDiagram-E7YTZNPT-BiSkIsrz.js} +3 -3
- package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-DrCVJJx6.js → quadrantDiagram-AXDQQJYC-CJetqQxd.js} +1 -1
- package/client/dist/assets/{railroadDiagram-RFXS5EU6-BdPW2dNf.js → railroadDiagram-O6MQD6OU-DTTtZpGO.js} +1 -1
- package/client/dist/assets/{requirementDiagram-TGXJPOKE-Bj_g3tC5.js → requirementDiagram-BXWQKSXE-meFCoLtR.js} +5 -5
- package/client/dist/assets/{sankeyDiagram-HTMAVEWB-BGL9NnsS.js → sankeyDiagram-P5KCCOFB-BR9eN4Do.js} +4 -4
- package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-DEirxTZY.js → sequenceDiagram-WJ2MYXX4-BdVzFsCC.js} +1 -1
- package/client/dist/assets/{sizeCapture-X5ZJPWSS-BtLrvrea.js → sizeCapture-INFHLROL-CZoZ7r-1.js} +1 -1
- package/client/dist/assets/stateDiagram-D77RDMKH-Cmc-iYtm.js +1 -0
- package/client/dist/assets/stateDiagram-v2-MP3YSRHH-Cj-hQ4qB.js +1 -0
- package/client/dist/assets/swimlanes-42K2YHIH-DN4MssUX.js +1 -0
- package/client/dist/assets/swimlanesDiagram-VR7AAH4N-DFxrYFKF.js +8 -0
- package/client/dist/assets/{timeline-definition-FHXFAJF6-CnBKJtD_.js → timeline-definition-24CTP7MA-pxxqlxwt.js} +3 -3
- package/client/dist/assets/{vennDiagram-L72KCM5P-BYmiJYoh.js → vennDiagram-4TSXK5OY-DiItNcze.js} +5 -5
- package/client/dist/assets/{wardleyDiagram-EHGQE667-DU7vW8q3.js → wardleyDiagram-VM6X3IG4-Dfvub75z.js} +1 -1
- package/client/dist/assets/xychartDiagram-S5SC5T6Z-Bx83X515.js +7 -0
- package/client/dist/favicon-16.png +0 -0
- package/client/dist/favicon-32.png +0 -0
- package/client/dist/icon-192.png +0 -0
- package/client/dist/icon-512.png +0 -0
- package/client/dist/icon-maskable-512.png +0 -0
- package/client/dist/index.html +11 -2
- package/client/dist/manifest.json +13 -0
- package/package.json +2 -2
- package/server/dist/config.d.ts.map +1 -1
- package/server/dist/config.js +7 -2
- package/server/dist/config.js.map +1 -1
- package/server/dist/core/adopt-scan-findings.d.ts +12 -0
- package/server/dist/core/adopt-scan-findings.d.ts.map +1 -0
- package/server/dist/core/adopt-scan-findings.js +96 -0
- package/server/dist/core/adopt-scan-findings.js.map +1 -0
- package/server/dist/core/adopt-scan.d.ts +49 -0
- package/server/dist/core/adopt-scan.d.ts.map +1 -0
- package/server/dist/core/adopt-scan.js +201 -0
- package/server/dist/core/adopt-scan.js.map +1 -0
- package/server/dist/core/custom-profile-command-policy.d.ts +6 -0
- package/server/dist/core/custom-profile-command-policy.d.ts.map +1 -0
- package/server/dist/core/custom-profile-command-policy.js +110 -0
- package/server/dist/core/custom-profile-command-policy.js.map +1 -0
- package/server/dist/core/custom-profile-loader.d.ts +34 -0
- package/server/dist/core/custom-profile-loader.d.ts.map +1 -0
- package/server/dist/core/custom-profile-loader.js +225 -0
- package/server/dist/core/custom-profile-loader.js.map +1 -0
- package/server/dist/core/preview-child-lifecycle.d.ts +7 -2
- package/server/dist/core/preview-child-lifecycle.d.ts.map +1 -1
- package/server/dist/core/preview-child-lifecycle.js +17 -5
- package/server/dist/core/preview-child-lifecycle.js.map +1 -1
- package/server/dist/core/preview-session-manager.d.ts +1 -0
- package/server/dist/core/preview-session-manager.d.ts.map +1 -1
- package/server/dist/core/preview-session-manager.js +2 -2
- package/server/dist/core/preview-session-manager.js.map +1 -1
- package/server/dist/core/project-actions-loader.d.ts +13 -0
- package/server/dist/core/project-actions-loader.d.ts.map +1 -1
- package/server/dist/core/project-actions-loader.js +28 -6
- package/server/dist/core/project-actions-loader.js.map +1 -1
- package/server/dist/core/project-data-dir.d.ts +41 -0
- package/server/dist/core/project-data-dir.d.ts.map +1 -0
- package/server/dist/core/project-data-dir.js +64 -0
- package/server/dist/core/project-data-dir.js.map +1 -0
- package/server/dist/core/project-data-migrate.d.ts +14 -0
- package/server/dist/core/project-data-migrate.d.ts.map +1 -0
- package/server/dist/core/project-data-migrate.js +94 -0
- package/server/dist/core/project-data-migrate.js.map +1 -0
- package/server/dist/core/project-manager.d.ts.map +1 -1
- package/server/dist/core/project-manager.js +9 -10
- package/server/dist/core/project-manager.js.map +1 -1
- package/server/dist/core/session-file/access.d.ts +26 -0
- package/server/dist/core/session-file/access.d.ts.map +1 -0
- package/server/dist/core/session-file/access.js +143 -0
- package/server/dist/core/session-file/access.js.map +1 -0
- package/server/dist/core/session-file/asset-access.d.ts +15 -0
- package/server/dist/core/session-file/asset-access.d.ts.map +1 -0
- package/server/dist/core/session-file/asset-access.js +141 -0
- package/server/dist/core/session-file/asset-access.js.map +1 -0
- package/server/dist/core/session-file/evidence.d.ts +25 -0
- package/server/dist/core/session-file/evidence.d.ts.map +1 -0
- package/server/dist/core/session-file/evidence.js +201 -0
- package/server/dist/core/session-file/evidence.js.map +1 -0
- package/server/dist/core/session-file/probe.d.ts +16 -0
- package/server/dist/core/session-file/probe.d.ts.map +1 -0
- package/server/dist/core/session-file/probe.js +63 -0
- package/server/dist/core/session-file/probe.js.map +1 -0
- package/server/dist/core/session-file/safe-read.d.ts +33 -0
- package/server/dist/core/session-file/safe-read.d.ts.map +1 -0
- package/server/dist/core/session-file/safe-read.js +103 -0
- package/server/dist/core/session-file/safe-read.js.map +1 -0
- package/server/dist/core/session-file/sensitive.d.ts +5 -0
- package/server/dist/core/session-file/sensitive.d.ts.map +1 -0
- package/server/dist/core/session-file/sensitive.js +52 -0
- package/server/dist/core/session-file/sensitive.js.map +1 -0
- package/server/dist/core/session-info/collect.d.ts +70 -0
- package/server/dist/core/session-info/collect.d.ts.map +1 -0
- package/server/dist/core/session-info/collect.js +248 -0
- package/server/dist/core/session-info/collect.js.map +1 -0
- package/server/dist/core/session-info/line-scan.d.ts +20 -0
- package/server/dist/core/session-info/line-scan.d.ts.map +1 -0
- package/server/dist/core/session-info/line-scan.js +109 -0
- package/server/dist/core/session-info/line-scan.js.map +1 -0
- package/server/dist/core/session-info/remote-control.d.ts +9 -0
- package/server/dist/core/session-info/remote-control.d.ts.map +1 -0
- package/server/dist/core/session-info/remote-control.js +64 -0
- package/server/dist/core/session-info/remote-control.js.map +1 -0
- package/server/dist/core/session-info/session-info.d.ts +18 -0
- package/server/dist/core/session-info/session-info.d.ts.map +1 -0
- package/server/dist/core/session-info/session-info.js +170 -0
- package/server/dist/core/session-info/session-info.js.map +1 -0
- package/server/dist/core/session-info/small-file.d.ts +2 -0
- package/server/dist/core/session-info/small-file.d.ts.map +1 -0
- package/server/dist/core/session-info/small-file.js +42 -0
- package/server/dist/core/session-info/small-file.js.map +1 -0
- package/server/dist/core/session-info/subagent-transcript.d.ts +12 -0
- package/server/dist/core/session-info/subagent-transcript.d.ts.map +1 -0
- package/server/dist/core/session-info/subagent-transcript.js +78 -0
- package/server/dist/core/session-info/subagent-transcript.js.map +1 -0
- package/server/dist/core/session-info/subagents.d.ts +14 -0
- package/server/dist/core/session-info/subagents.d.ts.map +1 -0
- package/server/dist/core/session-info/subagents.js +92 -0
- package/server/dist/core/session-info/subagents.js.map +1 -0
- package/server/dist/core/session-info/test-fixtures.d.ts +50 -0
- package/server/dist/core/session-info/test-fixtures.d.ts.map +1 -0
- package/server/dist/core/session-info/test-fixtures.js +43 -0
- package/server/dist/core/session-info/test-fixtures.js.map +1 -0
- package/server/dist/core/session-info/types.d.ts +77 -0
- package/server/dist/core/session-info/types.d.ts.map +1 -0
- package/server/dist/core/session-info/types.js +14 -0
- package/server/dist/core/session-info/types.js.map +1 -0
- package/server/dist/core/stack-profiles-create.d.ts +31 -0
- package/server/dist/core/stack-profiles-create.d.ts.map +1 -0
- package/server/dist/core/stack-profiles-create.js +128 -0
- package/server/dist/core/stack-profiles-create.js.map +1 -0
- package/server/dist/core/stack-profiles.d.ts +49 -0
- package/server/dist/core/stack-profiles.d.ts.map +1 -0
- package/server/dist/core/stack-profiles.js +142 -0
- package/server/dist/core/stack-profiles.js.map +1 -0
- package/server/dist/external/_shared/helpers.d.ts +2 -0
- package/server/dist/external/_shared/helpers.d.ts.map +1 -1
- package/server/dist/external/_shared/helpers.js.map +1 -1
- package/server/dist/external/actions/get.d.ts +3 -1
- package/server/dist/external/actions/get.d.ts.map +1 -1
- package/server/dist/external/actions/get.js +15 -4
- package/server/dist/external/actions/get.js.map +1 -1
- package/server/dist/external/actions/routes.d.ts +3 -1
- package/server/dist/external/actions/routes.d.ts.map +1 -1
- package/server/dist/external/actions/routes.js.map +1 -1
- package/server/dist/external/actions/stub.d.ts.map +1 -1
- package/server/dist/external/actions/stub.js +15 -4
- package/server/dist/external/actions/stub.js.map +1 -1
- package/server/dist/external/actions/upload-delete.d.ts.map +1 -1
- package/server/dist/external/actions/upload-delete.js +30 -20
- package/server/dist/external/actions/upload-delete.js.map +1 -1
- package/server/dist/external/actions/upload.d.ts.map +1 -1
- package/server/dist/external/actions/upload.js +5 -4
- package/server/dist/external/actions/upload.js.map +1 -1
- package/server/dist/external/create-external-routes-args.d.ts +3 -1
- package/server/dist/external/create-external-routes-args.d.ts.map +1 -1
- package/server/dist/external/inbox/_phase-gate.d.ts +9 -0
- package/server/dist/external/inbox/_phase-gate.d.ts.map +1 -0
- package/server/dist/external/inbox/_phase-gate.js +87 -0
- package/server/dist/external/inbox/_phase-gate.js.map +1 -0
- package/server/dist/external/inbox/_types.d.ts +7 -0
- package/server/dist/external/inbox/_types.d.ts.map +1 -1
- package/server/dist/external/inbox/routes.d.ts.map +1 -1
- package/server/dist/external/inbox/routes.js +2 -0
- package/server/dist/external/inbox/routes.js.map +1 -1
- package/server/dist/external/launch/action-substitution-branch.js +2 -2
- package/server/dist/external/launch/action-substitution-branch.js.map +1 -1
- package/server/dist/external/mission-context/facts.js +2 -2
- package/server/dist/external/mission-context/facts.js.map +1 -1
- package/server/dist/external/preview/routes.d.ts +3 -1
- package/server/dist/external/preview/routes.d.ts.map +1 -1
- package/server/dist/external/preview/routes.js +8 -1
- package/server/dist/external/preview/routes.js.map +1 -1
- package/server/dist/external/routes.d.ts.map +1 -1
- package/server/dist/external/routes.js +2 -2
- package/server/dist/external/routes.js.map +1 -1
- package/server/dist/external/session-file/probe-route.d.ts +4 -0
- package/server/dist/external/session-file/probe-route.d.ts.map +1 -0
- package/server/dist/external/session-file/probe-route.js +66 -0
- package/server/dist/external/session-file/probe-route.js.map +1 -0
- package/server/dist/external/session-file/routes.d.ts +12 -0
- package/server/dist/external/session-file/routes.d.ts.map +1 -0
- package/server/dist/external/session-file/routes.js +90 -0
- package/server/dist/external/session-file/routes.js.map +1 -0
- package/server/dist/external/session-file/session-file.fixture.d.ts +45 -0
- package/server/dist/external/session-file/session-file.fixture.d.ts.map +1 -0
- package/server/dist/external/session-file/session-file.fixture.js +41 -0
- package/server/dist/external/session-file/session-file.fixture.js.map +1 -0
- package/server/dist/external/session-info/routes.d.ts +15 -0
- package/server/dist/external/session-info/routes.d.ts.map +1 -0
- package/server/dist/external/session-info/routes.js +57 -0
- package/server/dist/external/session-info/routes.js.map +1 -0
- package/server/dist/external/tasks/_phase-helpers.js +2 -2
- package/server/dist/external/tasks/_phase-helpers.js.map +1 -1
- package/server/dist/external/tasks/create.js +2 -2
- package/server/dist/external/tasks/create.js.map +1 -1
- package/server/dist/external-routes-wiring.d.ts.map +1 -1
- package/server/dist/external-routes-wiring.js +10 -1
- package/server/dist/external-routes-wiring.js.map +1 -1
- package/server/dist/index.d.ts.map +1 -1
- package/server/dist/index.js +6 -8
- package/server/dist/index.js.map +1 -1
- package/server/dist/routes/adopt-scan.d.ts +4 -0
- package/server/dist/routes/adopt-scan.d.ts.map +1 -0
- package/server/dist/routes/adopt-scan.js +27 -0
- package/server/dist/routes/adopt-scan.js.map +1 -0
- package/server/dist/routes/profiles.d.ts +7 -0
- package/server/dist/routes/profiles.d.ts.map +1 -1
- package/server/dist/routes/profiles.js +13 -0
- package/server/dist/routes/profiles.js.map +1 -1
- package/server/dist/routes/projects.d.ts.map +1 -1
- package/server/dist/routes/projects.js +58 -16
- package/server/dist/routes/projects.js.map +1 -1
- package/server/dist/routes/stack-profiles.d.ts +10 -0
- package/server/dist/routes/stack-profiles.d.ts.map +1 -0
- package/server/dist/routes/stack-profiles.js +65 -0
- package/server/dist/routes/stack-profiles.js.map +1 -0
- package/server/dist/terminal/data-target.d.ts +17 -0
- package/server/dist/terminal/data-target.d.ts.map +1 -0
- package/server/dist/terminal/data-target.js +56 -0
- package/server/dist/terminal/data-target.js.map +1 -0
- package/server/dist/terminal/image-paste.d.ts +2 -0
- package/server/dist/terminal/image-paste.d.ts.map +1 -1
- package/server/dist/terminal/image-paste.js +11 -12
- package/server/dist/terminal/image-paste.js.map +1 -1
- package/server/dist/terminal/routes.d.ts +5 -0
- package/server/dist/terminal/routes.d.ts.map +1 -1
- package/server/dist/terminal/routes.js +11 -13
- package/server/dist/terminal/routes.js.map +1 -1
- package/server/dist/types/project.d.ts +9 -0
- package/server/dist/types/project.d.ts.map +1 -1
- package/server/dist/types/stack-profile-contract.d.ts +33 -0
- package/server/dist/types/stack-profile-contract.d.ts.map +1 -0
- package/server/dist/types/stack-profile-contract.js +11 -0
- package/server/dist/types/stack-profile-contract.js.map +1 -0
- package/server/package.json +3 -3
- package/client/dist/assets/arc-DoZTTE1N.js +0 -1
- package/client/dist/assets/architectureDiagram-ZJ3FMSHR-DFTG4KtO.js +0 -36
- package/client/dist/assets/blockDiagram-677ZJIJ3-C34UBjOB.js +0 -132
- package/client/dist/assets/c4Diagram-LMCZKHZV-CbqAB1Ou.js +0 -10
- package/client/dist/assets/channel-DBcZw7Kn.js +0 -1
- package/client/dist/assets/chunk-RYQCIY6F-DrWMx37d.js +0 -1
- package/client/dist/assets/chunk-VR4S4FIN-B5eWtesm.js +0 -1
- package/client/dist/assets/classDiagram-OUVF2IWQ-C3Q1V9DU.js +0 -1
- package/client/dist/assets/classDiagram-v2-EOCWNBFH-C3Q1V9DU.js +0 -1
- package/client/dist/assets/dagre-VKFMJZFB-VXOY6IHR.js +0 -4
- package/client/dist/assets/diagram-OA4YK3LP-DRHY5d_c.js +0 -30
- package/client/dist/assets/diagram-WEI45ONY-B87OYR_S.js +0 -41
- package/client/dist/assets/erDiagram-Q63AITRT-DaD7oa9H.js +0 -85
- package/client/dist/assets/flowDiagram-23GEKE2U-GrMVpsea.js +0 -156
- package/client/dist/assets/graph-C9eacEi8.js +0 -1
- package/client/dist/assets/index-CIpLt0ie.js +0 -863
- package/client/dist/assets/index-DGtnTeFd.css +0 -1
- package/client/dist/assets/infoDiagram-FWYZ7A6U-Fi8fQ95G.js +0 -2
- package/client/dist/assets/katex-DkKDou_j.js +0 -257
- package/client/dist/assets/layout-DEXfKzaS.js +0 -1
- package/client/dist/assets/map-Czzmt4hB.js +0 -1
- package/client/dist/assets/mermaid.core-D6w9zlA0.js +0 -314
- package/client/dist/assets/stateDiagram-2N3HPSRC-D3GXIouX.js +0 -1
- package/client/dist/assets/stateDiagram-v2-6OUMAXLB-D3lXe_mJ.js +0 -1
- package/client/dist/assets/swimlanes-5IMT3BWC-PMRQzNhU.js +0 -2
- package/client/dist/assets/swimlanesDiagram-G3AALYLV-DMLbRFiO.js +0 -8
- package/client/dist/assets/xychartDiagram-FW5EYKEG-BEtPvBSU.js +0 -7
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* external/inbox/_phase-gate.ts — the `phase_gate` inbox kind
|
|
3
|
+
* (iterate-2026-10-29-inbox-guided-phase-questions).
|
|
4
|
+
*
|
|
5
|
+
* A guided-mode phase asks its questions as a menu in the embedded terminal.
|
|
6
|
+
* The live-terminal detector (`terminal_prompt`, `./_derive.ts`) is best-effort
|
|
7
|
+
* and reads only what the headless mirror currently shows, so someone watching
|
|
8
|
+
* ONLY the inbox could miss that a run waits for an answer. The orchestrator
|
|
9
|
+
* records the wait durably: `.shipwright/run_loop_state.json` flips to
|
|
10
|
+
* `paused_human_gate` with `currentPhaseTaskId` naming the paused phase task.
|
|
11
|
+
* This module reads that file (read-only observer, CLAUDE.md rule 12) and
|
|
12
|
+
* surfaces one entry for the task bound to that phase task.
|
|
13
|
+
*
|
|
14
|
+
* Precedence: the specific question wins. A task that already has an
|
|
15
|
+
* `ask_tool`, `terminal_prompt` or `text_question` entry shows THAT (it carries
|
|
16
|
+
* the real question text); `phase_gate` is the fallback that guarantees the
|
|
17
|
+
* wait is never invisible. A missing / torn loop-state yields no entry.
|
|
18
|
+
*
|
|
19
|
+
* Scope: the loop-state is read at `task.cwd`, which for a phase-task launch is
|
|
20
|
+
* the project root (the same directory the design gate reads at `project.path`).
|
|
21
|
+
* Anti-staleness: a phase task already in a TERMINAL run-config status cannot be
|
|
22
|
+
* at a live gate, even if a lagging loop-state still reads paused (mirrors
|
|
23
|
+
* `deriveDesignGate`). One entry per (project dir, phase task). Run this AFTER
|
|
24
|
+
* the question-producing appenders so the deferral sees their entries.
|
|
25
|
+
*/
|
|
26
|
+
import path from "node:path";
|
|
27
|
+
import { readRunConfig as defaultReadRunConfig, } from "../../core/run-config-reader.js";
|
|
28
|
+
import { PAUSED_HUMAN_GATE, readLoopState, } from "../../core/run-loop-state-reader.js";
|
|
29
|
+
import { TERMINAL_PHASE_TASK_STATUSES } from "../../types/run-config-v2.js";
|
|
30
|
+
export const PHASE_GATE_PROMPT_TEXT = "A phase of this run is paused at a decision gate and waits for your answer. " +
|
|
31
|
+
"Open the task and answer the menu in its terminal.";
|
|
32
|
+
const QUESTION_KINDS = new Set([
|
|
33
|
+
"ask_tool",
|
|
34
|
+
"terminal_prompt",
|
|
35
|
+
"text_question",
|
|
36
|
+
"lead_question",
|
|
37
|
+
]);
|
|
38
|
+
function dirKey(cwd) {
|
|
39
|
+
const resolved = path.resolve(cwd);
|
|
40
|
+
return process.platform === "win32" ? resolved.toLowerCase() : resolved;
|
|
41
|
+
}
|
|
42
|
+
export async function appendPhaseGates(entries, args) {
|
|
43
|
+
const { store } = args;
|
|
44
|
+
const readConfig = args.readRunConfig ?? defaultReadRunConfig;
|
|
45
|
+
const answered = new Set(entries.filter((e) => QUESTION_KINDS.has(e.kind)).map((e) => e.taskId));
|
|
46
|
+
const seen = new Set();
|
|
47
|
+
for (const task of store.list()) {
|
|
48
|
+
if (task.state === "done" || task.state === "launch_failed")
|
|
49
|
+
continue;
|
|
50
|
+
if (!task.phaseTaskId || !task.cwd)
|
|
51
|
+
continue;
|
|
52
|
+
if (answered.has(task.taskId))
|
|
53
|
+
continue;
|
|
54
|
+
const key = dirKey(task.cwd);
|
|
55
|
+
const loop = readLoopState(task.cwd);
|
|
56
|
+
if (!loop || loop.status !== PAUSED_HUMAN_GATE)
|
|
57
|
+
continue;
|
|
58
|
+
if (loop.currentPhaseTaskId !== task.phaseTaskId)
|
|
59
|
+
continue;
|
|
60
|
+
const dedupe = `${key}|${task.phaseTaskId}`;
|
|
61
|
+
if (seen.has(dedupe))
|
|
62
|
+
continue;
|
|
63
|
+
let terminal = false;
|
|
64
|
+
try {
|
|
65
|
+
const cfg = await readConfig(task.cwd);
|
|
66
|
+
if (cfg.status === "ok") {
|
|
67
|
+
const pt = cfg.config.phase_tasks.find((t) => t.phaseTaskId === task.phaseTaskId);
|
|
68
|
+
terminal = !!pt && TERMINAL_PHASE_TASK_STATUSES.includes(pt.status);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Best-effort guard: an unreadable run-config must not hide a real wait.
|
|
73
|
+
}
|
|
74
|
+
if (terminal)
|
|
75
|
+
continue;
|
|
76
|
+
seen.add(dedupe);
|
|
77
|
+
entries.push({
|
|
78
|
+
kind: "phase_gate",
|
|
79
|
+
taskId: task.taskId,
|
|
80
|
+
sessionUuid: task.sessionUuid,
|
|
81
|
+
taskTitle: task.title,
|
|
82
|
+
promptText: PHASE_GATE_PROMPT_TEXT,
|
|
83
|
+
bestEffort: true,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=_phase-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_phase-gate.js","sourceRoot":"","sources":["../../../src/external/inbox/_phase-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,13 @@ export type AggregatedEntry = {
|
|
|
23
23
|
taskTitle: string;
|
|
24
24
|
promptText: string;
|
|
25
25
|
bestEffort: true;
|
|
26
|
+
} | {
|
|
27
|
+
kind: "phase_gate";
|
|
28
|
+
taskId: string;
|
|
29
|
+
sessionUuid: string;
|
|
30
|
+
taskTitle: string;
|
|
31
|
+
promptText: string;
|
|
32
|
+
bestEffort: true;
|
|
26
33
|
} | {
|
|
27
34
|
kind: "lead_question";
|
|
28
35
|
taskId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_types.d.ts","sourceRoot":"","sources":["../../../src/external/inbox/_types.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE/E,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,sBAAsB,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;CAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"_types.d.ts","sourceRoot":"","sources":["../../../src/external/inbox/_types.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE/E,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,sBAAsB,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;CAClB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;CAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/external/inbox/routes.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/external/inbox/routes.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAWpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE;QACV,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7B,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;KAClD,CAAC;IACF;;;;OAIG;IACH,YAAY,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;CACnD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAuE7D"}
|
|
@@ -32,6 +32,7 @@ import { Hono } from "hono";
|
|
|
32
32
|
import { inboxDeriveCache } from "./_cache.js";
|
|
33
33
|
import { deriveInboxFromJsonl, appendTerminalPrompts } from "./_derive.js";
|
|
34
34
|
import { appendLeadQuestions, extractLeadQuestionBody, LEAD_QUESTION_DISMISS_PREFIX, } from "./_lead.js";
|
|
35
|
+
import { appendPhaseGates } from "./_phase-gate.js";
|
|
35
36
|
import { appendCodexWatcherNotices, appendCodexTerminalSignals } from "./_codex.js";
|
|
36
37
|
export function createInboxRouter(deps) {
|
|
37
38
|
const app = new Hono();
|
|
@@ -46,6 +47,7 @@ export function createInboxRouter(deps) {
|
|
|
46
47
|
if (codexWatcher)
|
|
47
48
|
appendCodexWatcherNotices(entries, { store, codexWatcher });
|
|
48
49
|
appendCodexTerminalSignals(entries, { store, ptyManager });
|
|
50
|
+
await appendPhaseGates(entries, { store });
|
|
49
51
|
if (storeDirty)
|
|
50
52
|
await store.persist();
|
|
51
53
|
return c.json({ items: entries });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/external/inbox/routes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/external/inbox/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* the substituted commands+taskUpdate, or an error envelope.
|
|
12
12
|
*/
|
|
13
13
|
import { substitutePlaceholders, UnknownPhaseError, UnknownActionError, InvalidTitleError, InvalidParameterError, InvalidPlaceholderError, } from "../../core/actions-substitute.js";
|
|
14
|
-
import {
|
|
14
|
+
import { loadActionsForProjectRecord } from "../../core/project-actions-loader.js";
|
|
15
15
|
import { resolveParameters } from "../../core/parameter-resolver.js";
|
|
16
16
|
import { claimExecutorLaunchOverrides } from "./claim-executor-permissions.js";
|
|
17
17
|
import { armActionTemplatePermissionPerimeter, templateDeclaresSessionIdAnchor, } from "./claim-executor-template-arming.js";
|
|
@@ -22,7 +22,7 @@ export function applyActionSubstitutionBranch(args) {
|
|
|
22
22
|
const project = getProjectById?.(task.projectId);
|
|
23
23
|
if (!project)
|
|
24
24
|
return null; // fall back to legacy
|
|
25
|
-
const loaded =
|
|
25
|
+
const loaded = loadActionsForProjectRecord(project);
|
|
26
26
|
const action = loaded.actions.actions.find((a) => a.id === parsed.actionId);
|
|
27
27
|
if (!action || !action.command_template) {
|
|
28
28
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-substitution-branch.js","sourceRoot":"","sources":["../../../src/external/launch/action-substitution-branch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"action-substitution-branch.js","sourceRoot":"","sources":["../../../src/external/launch/action-substitution-branch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,GAExB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAQrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC/E,OAAO,EACL,oCAAoC,EACpC,+BAA+B,GAChC,MAAM,qCAAqC,CAAC;AAE7C,MAAM,UAAU,6BAA6B,CAAC,IAmB7C;IACC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;IACtF,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,qBAAqB;QAAE,OAAO,IAAI,CAAC;IAE5D,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;IAEjD,MAAM,MAAM,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5E,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACxC,OAAO;YACL,KAAK,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;YAChE,MAAM,EAAE,GAAG;SACZ,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAExE,oEAAoE;IACpE,MAAM,aAAa,GAAG,iBAAiB,CAAC;QACtC,MAAM;QACN,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAC,CAAC;IACH,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC;QACtB,OAAO;YACL,KAAK,EAAE;gBACL,KAAK,EAAE,aAAa,CAAC,KAAK;gBAC1B,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjE,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrE;YACD,MAAM,EAAE,GAAG;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAwB;QAC/B,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE,EAAE;QACrD,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC,WAAW;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;YACzB,WAAW,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;YACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,UAAU,EAAE,aAAa,CAAC,QAAQ;SACnC;QACD,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,eAAe;QACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,qEAAqE;QACrE,iEAAiE;QACjE,wEAAwE;QACxE,YAAY,EAAE,MAAM,CAAC,aAAa;KACnC,CAAC;IACF,IAAI,QAA0B,CAAC;IAC/B,IAAI,CAAC;QACH,QAAQ,GAAG;YACT,UAAU,EAAE,sBAAsB,CAChC,MAAM,CAAC,gBAAgB,EACvB,GAAG,EACH,YAAY,CACb;YACD,GAAG,EAAE,sBAAsB,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE,KAAK,CAAC;YAChE,KAAK,EAAE,sBAAsB,CAAC,MAAM,CAAC,gBAAgB,EAAE,GAAG,EAAE,OAAO,CAAC;SACrE,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IACE,GAAG,YAAY,iBAAiB;YAChC,GAAG,YAAY,iBAAiB;YAChC,GAAG,YAAY,qBAAqB;YACpC,GAAG,YAAY,uBAAuB;YACtC,8DAA8D;YAC9D,mEAAmE;YACnE,sEAAsE;YACtE,wEAAwE;YACxE,qDAAqD;YACrD,GAAG,YAAY,kBAAkB,EACjC,CAAC;YACD,OAAO;gBACL,KAAK,EAAE;oBACL,KAAK,EAAE,6BAA6B;oBACpC,MAAM,EAAE,GAAG,CAAC,OAAO;iBACpB;gBACD,MAAM,EAAE,GAAG;aACZ,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,qEAAqE;QACrE,qEAAqE;QACrE,mEAAmE;QACnE,mEAAmE;QACnE,+DAA+D;QAC/D,gEAAgE;QAChE,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC9D,OAAO;gBACL,KAAK,EAAE;oBACL,KAAK,EAAE,+CAA+C;oBACtD,MAAM,EAAE,WAAW,MAAM,CAAC,EAAE,8HAA8H;iBAC3J;gBACD,MAAM,EAAE,GAAG;aACZ,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,oCAAoC,CAChD,QAAQ,EACR,IAAI,CAAC,WAAW,EAChB,4BAA4B,EAAE,CAC/B,CAAC;QACF,gEAAgE;QAChE,oEAAoE;QACpE,sEAAsE;QACtE,6CAA6C;QAC7C,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACd,OAAO;gBACL,KAAK,EAAE;oBACL,KAAK,EAAE,+CAA+C;oBACtD,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB;gBACD,MAAM,EAAE,GAAG;aACZ,CAAC;QACJ,CAAC;QACD,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC5B,CAAC;IAED,MAAM,UAAU,GAA0B;QACxC,KAAK,EAAE,yBAA8C;QACrD,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,QAAQ,EAAE,MAAM,CAAC,QAAQ;KAC1B,CAAC;IACF,IAAI,MAAM,CAAC,KAAK;QAAE,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAClD,IAAI,MAAM,CAAC,UAAU;QAAE,UAAU,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACjE,IAAI,MAAM,CAAC,WAAW;QAAE,UAAU,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACpE,IAAI,MAAM,CAAC,QAAQ;QAAE,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IAC3D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* cannot claim "this is a custom-actions project" or "this title is a campaign"
|
|
9
9
|
* and have the resolver believe it.
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
11
|
+
import { loadActionsForProjectRecord } from "../../core/project-actions-loader.js";
|
|
12
12
|
import { readCampaigns } from "../../core/campaign-store.js";
|
|
13
13
|
import { resolveCampaignsDir } from "../../core/campaign-paths.js";
|
|
14
14
|
import { buildPipelineFact, getCampaignFact } from "./facts-slice3.js";
|
|
@@ -53,7 +53,7 @@ export function runConfigPresence(result) {
|
|
|
53
53
|
export async function getScenarioFacts(project, task, deps) {
|
|
54
54
|
let actions = null;
|
|
55
55
|
try {
|
|
56
|
-
const loaded =
|
|
56
|
+
const loaded = loadActionsForProjectRecord(project);
|
|
57
57
|
actions = {
|
|
58
58
|
fromUser: loaded.fromUser,
|
|
59
59
|
hasDiagnostics: loaded.diagnostics.length > 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facts.js","sourceRoot":"","sources":["../../../src/external/mission-context/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"facts.js","sourceRoot":"","sources":["../../../src/external/mission-context/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOvE;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAgC;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA2B;IAC3D,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAClD,OAAO,YAAY,CAAC;AACtB,CAAC;AAiBD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAiC,EACjC,IAAkB,EAClB,IAAe;IAEf,IAAI,OAAO,GAA6B,IAAI,CAAC;IAC7C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;QACpD,OAAO,GAAG;YACR,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAC7C,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,IAAI,CAAC,CAAC,sDAAsD;IACxE,CAAC;IAED,8EAA8E;IAC9E,4EAA4E;IAC5E,mCAAmC;IACnC,EAAE;IACF,+EAA+E;IAC/E,4EAA4E;IAC5E,wEAAwE;IACxE,uEAAuE;IACvE,sEAAsE;IACtE,IAAI,SAA8B,CAAC;IACnC,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,SAAS,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IAC3D,CAAC;IACD,MAAM,eAAe,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,iBAAiB,GAAG,KAAK,CAAC;IAC9B,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,0EAA0E;YAC1E,MAAM,GAAG,GAAG,mBAAmB,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1F,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,iBAAiB,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CACnE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAC/B,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO;QACP,eAAe;QACf,YAAY;QACZ,iBAAiB;QACjB,QAAQ,EAAE,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC;QACpF,wEAAwE;QACxE,0EAA0E;QAC1E,2CAA2C;QAC3C,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;KAC5E,CAAC;AACJ,CAAC"}
|
|
@@ -4,7 +4,9 @@ import type { ExternalRouteProjectView } from "../_shared/helpers.js";
|
|
|
4
4
|
export interface PreviewRouterDeps {
|
|
5
5
|
getProjectById?: (id: string) => ExternalRouteProjectView | undefined;
|
|
6
6
|
previewManager?: PreviewSessionManager;
|
|
7
|
-
loadProfile: (profileName: string
|
|
7
|
+
loadProfile: (profileName: string, projectPath?: string, opts?: {
|
|
8
|
+
fresh?: boolean;
|
|
9
|
+
}) => Promise<PreviewProfile | null> | PreviewProfile | null;
|
|
8
10
|
}
|
|
9
11
|
export declare function createPreviewRouter(deps: PreviewRouterDeps): Hono;
|
|
10
12
|
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/external/preview/routes.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAIL,qBAAqB,EAGrB,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,wBAAwB,GAAG,SAAS,CAAC;IACtE,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/external/preview/routes.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAIL,qBAAqB,EAGrB,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,wBAAwB,GAAG,SAAS,CAAC;IACtE,cAAc,CAAC,EAAE,qBAAqB,CAAC;IACvC,WAAW,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KACjF,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC;CAC1D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CA8EjE"}
|
|
@@ -35,7 +35,14 @@ export function createPreviewRouter(deps) {
|
|
|
35
35
|
if (!project.profile) {
|
|
36
36
|
return c.json({ error: "preview_profile_invalid", detail: "project has no profile" }, 400);
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
// fresh: spawn re-resolves right before it runs (no stale cache, no TOCTOU).
|
|
39
|
+
let profile = null;
|
|
40
|
+
try {
|
|
41
|
+
profile = await loadProfile(project.profile, project.path, { fresh: true });
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
profile = null;
|
|
45
|
+
}
|
|
39
46
|
if (!profile) {
|
|
40
47
|
return c.json({ error: "preview_profile_invalid", detail: "profile not found" }, 400);
|
|
41
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/external/preview/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAE1B,uBAAuB,EACvB,mBAAmB,GAEpB,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/external/preview/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,0BAA0B,EAE1B,uBAAuB,EACvB,mBAAmB,GAEpB,MAAM,uCAAuC,CAAC;AAU/C,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAE7D,GAAG,CAAC,IAAI,CAAC,2CAA2C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,wBAAwB,EAAE,EACtE,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,6EAA6E;QAC7E,IAAI,OAAO,GAA0B,IAAI,CAAC;QAC1C,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,mBAAmB,EAAE,EACjE,GAAG,CACJ,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE;gBAC3D,GAAG,EAAE,OAAO,CAAC,IAAI;aAClB,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAChE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,0BAA0B,EAAE,CAAC;gBAC9C,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EACxD,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;gBACzC,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAChD,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;gBAC3C,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EACrD,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,YAAY,uBAAuB,EAAE,CAAC;gBAC3C,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,oBAAoB,GAAG,CAAC,IAAI,EAAE,EAAE,EACzE,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,IAAI,GAAG,YAAY,mBAAmB,EAAE,CAAC;gBACvC,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,EAClD,GAAG,CACJ,CAAC;YACJ,CAAC;YACD,6DAA6D;YAC7D,2CAA2C;YAC3C,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EACrE,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/external/routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/external/routes.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA2B5B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAQjF,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kCAAkC,GACnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAKjF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,wBAAwB,8EAmKlE"}
|
|
@@ -24,8 +24,6 @@
|
|
|
24
24
|
* Backed by:
|
|
25
25
|
* - core/launcher.ts (copy-command generation)
|
|
26
26
|
* - core/session-watcher.ts (filename-first discovery + byte-range read)
|
|
27
|
-
* - core/session-parser.ts (server-side parser for inbox)
|
|
28
|
-
* - core/inbox-derive.ts (pending tool_use extraction)
|
|
29
27
|
* - core/sdk-sessions-store.ts (persisted task metadata)
|
|
30
28
|
*/
|
|
31
29
|
import { Hono } from "hono";
|
|
@@ -46,6 +44,7 @@ import { createFileExistsRouter } from "./file/exists-routes.js";
|
|
|
46
44
|
import { createMediaRouter } from "./media/routes.js";
|
|
47
45
|
import { createInboxRouter } from "./inbox/routes.js";
|
|
48
46
|
import { createTranscriptRouter } from "./transcript/routes.js";
|
|
47
|
+
import { createSessionInfoRouter } from "./session-info/routes.js";
|
|
49
48
|
import { createTasksRouter } from "./tasks/routes.js";
|
|
50
49
|
import { createLaunchRouter } from "./launch/routes.js";
|
|
51
50
|
import { createPrStatusRouter } from "./pr-status/routes.js";
|
|
@@ -108,6 +107,7 @@ export function createExternalRoutes(args) {
|
|
|
108
107
|
}));
|
|
109
108
|
// CLAUDE.md rule 4 — STATELESS byte-offset; multi-tab works by construction.
|
|
110
109
|
app.route("/", createTranscriptRouter({ store, watcher, ptyManager }));
|
|
110
|
+
app.route("/", createSessionInfoRouter({ store, watcher, getProjectById }));
|
|
111
111
|
// Inbox shares the derive cache + negative cache via ./inbox/_cache.ts.
|
|
112
112
|
app.route("/", createInboxRouter({ store, watcher, ptyManager, codexWatcher }));
|
|
113
113
|
// CLAUDE.md rule 12 — run-config is a READ-ONLY observer; no mutation.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/external/routes.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/external/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-route.d.ts","sourceRoot":"","sources":["../../../src/external/session-file/probe-route.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAQjC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAczD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAmC/E"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* POST /api/external/tasks/:id/session-file/probe { paths: string[] } -> { results: [{ openable, reason? }] }
|
|
3
|
+
*
|
|
4
|
+
* "Is this path openable by the Viewer?" for chat chips, Outputs rows and terminal links, so a dead path is
|
|
5
|
+
* never presented as a link. Same access rules as GET /session-file (core/session-file/access.ts); no
|
|
6
|
+
* content, no listing. Bounded: at most MAX_PROBE_PATHS paths per call and PROBE_BURST calls per task per
|
|
7
|
+
* window (429 probe_rate_limited - callers fail OPEN, the Viewer then reports the real state).
|
|
8
|
+
*
|
|
9
|
+
* 400 invalid_body | too_many_paths 404 task_not_found 429 probe_rate_limited
|
|
10
|
+
*/
|
|
11
|
+
import { stat } from "node:fs/promises";
|
|
12
|
+
import { extname, isAbsolute } from "node:path";
|
|
13
|
+
import { MAX_PATH_CHARS } from "../../core/session-file/access.js";
|
|
14
|
+
import { findSessionEvidence } from "../../core/session-file/evidence.js";
|
|
15
|
+
import { MAX_PROBE_PATHS, probeOpenable } from "../../core/session-file/probe.js";
|
|
16
|
+
import { FILE_MAX_BYTES, MIME_BY_EXTENSION } from "../file/_helpers.js";
|
|
17
|
+
const PROBE_WINDOW_MS = 10_000;
|
|
18
|
+
const PROBE_BURST = 30;
|
|
19
|
+
async function existingDir(p) {
|
|
20
|
+
if (!p || !isAbsolute(p))
|
|
21
|
+
return null;
|
|
22
|
+
try {
|
|
23
|
+
return (await stat(p)).isDirectory() ? p : null;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export function registerProbeRoute(app, deps) {
|
|
30
|
+
const { store, watcher } = deps;
|
|
31
|
+
const calls = new Map();
|
|
32
|
+
app.post("/api/external/tasks/:id/session-file/probe", async (c) => {
|
|
33
|
+
const taskId = c.req.param("id");
|
|
34
|
+
const task = store.get(taskId);
|
|
35
|
+
if (!task)
|
|
36
|
+
return c.json({ error: "task_not_found" }, 404);
|
|
37
|
+
const now = Date.now();
|
|
38
|
+
const recent = (calls.get(taskId) ?? []).filter((t) => now - t < PROBE_WINDOW_MS);
|
|
39
|
+
if (recent.length >= PROBE_BURST)
|
|
40
|
+
return c.json({ error: "probe_rate_limited" }, 429);
|
|
41
|
+
calls.set(taskId, [...recent, now]);
|
|
42
|
+
if (calls.size > 500)
|
|
43
|
+
for (const [k, v] of calls)
|
|
44
|
+
if (v.every((t) => now - t >= PROBE_WINDOW_MS))
|
|
45
|
+
calls.delete(k);
|
|
46
|
+
const body = (await c.req.json().catch(() => null));
|
|
47
|
+
const paths = body?.paths;
|
|
48
|
+
if (!Array.isArray(paths) || paths.length === 0 || !paths.every((p) => typeof p === "string")) {
|
|
49
|
+
return c.json({ error: "invalid_body" }, 400);
|
|
50
|
+
}
|
|
51
|
+
if (paths.length > MAX_PROBE_PATHS)
|
|
52
|
+
return c.json({ error: "too_many_paths", max: MAX_PROBE_PATHS }, 400);
|
|
53
|
+
const projectDir = await existingDir(deps.getProjectById?.(task.projectId)?.path);
|
|
54
|
+
const roots = projectDir ? [projectDir] : [];
|
|
55
|
+
const results = await probeOpenable({
|
|
56
|
+
roots,
|
|
57
|
+
// An over-long entry is cut one char past the cap: the decision core rejects it as invalid_path.
|
|
58
|
+
paths: paths.map((p) => (p.length > MAX_PATH_CHARS ? p.slice(0, MAX_PATH_CHARS + 1) : p)),
|
|
59
|
+
findEvidence: async (candidates) => findSessionEvidence(task.sessionUuid, await watcher.findByUuid(task.sessionUuid), candidates, deps),
|
|
60
|
+
maxBytes: FILE_MAX_BYTES,
|
|
61
|
+
previewable: (abs) => MIME_BY_EXTENSION[extname(abs).toLowerCase().slice(1)] !== undefined,
|
|
62
|
+
});
|
|
63
|
+
return c.json({ results });
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=probe-route.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe-route.js","sourceRoot":"","sources":["../../../src/external/session-file/probe-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxE,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB,KAAK,UAAU,WAAW,CAAC,CAA4B;IACrD,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAS,EAAE,IAA2B;IACvE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE1C,GAAG,CAAC,IAAI,CAAC,4CAA4C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjE,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;QAE3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;QAClF,IAAI,MAAM,CAAC,MAAM,IAAI,WAAW;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;QACtF,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,IAAI,GAAG,GAAG;YAAE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK;gBAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,IAAI,eAAe,CAAC;oBAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAElH,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAA+B,CAAC;QAClF,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YAC9F,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;QAE1G,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;QAClF,MAAM,KAAK,GAAa,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC;YAClC,KAAK;YACL,iGAAiG;YACjG,KAAK,EAAG,KAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvG,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CACjC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC;YACrG,QAAQ,EAAE,cAAc;YACxB,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;SAC3F,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { type EvidenceDeps } from "../../core/session-file/evidence.js";
|
|
3
|
+
import type { SdkSessionsStore } from "../../core/sdk-sessions-store.js";
|
|
4
|
+
import type { SessionWatcher } from "../../core/session-watcher.js";
|
|
5
|
+
import type { ExternalRouteProjectView } from "../_shared/helpers.js";
|
|
6
|
+
export interface SessionFileRouterDeps extends EvidenceDeps {
|
|
7
|
+
store: SdkSessionsStore;
|
|
8
|
+
watcher: SessionWatcher;
|
|
9
|
+
getProjectById?: (id: string) => ExternalRouteProjectView | undefined;
|
|
10
|
+
}
|
|
11
|
+
export declare function createSessionFileRouter(deps: SessionFileRouterDeps): Hono;
|
|
12
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/external/session-file/routes.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAE7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAItE,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,cAAc,CAAC;IACxB,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,wBAAwB,GAAG,SAAS,CAAC;CACvE;AAaD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAuDzE"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* external/session-file/routes.ts — GET /api/external/tasks/:id/session-file?path=<abs|rel>.
|
|
3
|
+
*
|
|
4
|
+
* Read-only file bytes for the Smart Viewer, scoped to ONE task:
|
|
5
|
+
* - inside the project root: same posture as /projects/:id/file
|
|
6
|
+
* - outside it: only when THIS session evidences the path (Output write, chat
|
|
7
|
+
* mention, tool call) — core/session-file/access.ts. Never a directory listing.
|
|
8
|
+
* - `assetOf=<evidenced html>`: an image / stylesheet / font in that page's own
|
|
9
|
+
* folder tree — core/session-file/asset-access.ts.
|
|
10
|
+
* Same MIME allowlist, 5 MB cap, nosniff + sandbox CSP as the project file route;
|
|
11
|
+
* text types with NUL bytes answer 415 like any other binary.
|
|
12
|
+
*
|
|
13
|
+
* 400 invalid_path | path_required | path_traversal | not_a_file | project_path_unavailable
|
|
14
|
+
* 403 path_not_evidenced | sensitive_location | asset_type_not_allowed | asset_outside_page_folder | asset_owner_invalid 404 task_not_found | not_found
|
|
15
|
+
* 413 file_too_large 415 binary_not_previewable 500 file_read_failed
|
|
16
|
+
*/
|
|
17
|
+
import { Hono } from "hono";
|
|
18
|
+
import { stat } from "node:fs/promises";
|
|
19
|
+
import { basename, extname, isAbsolute } from "node:path";
|
|
20
|
+
import { decideSessionFileAccess } from "../../core/session-file/access.js";
|
|
21
|
+
import { ASSET_MIME_BY_EXTENSION, decideAssetAccess } from "../../core/session-file/asset-access.js";
|
|
22
|
+
import { findSessionEvidence } from "../../core/session-file/evidence.js";
|
|
23
|
+
import { readRegularFileCapped } from "../../core/session-file/safe-read.js";
|
|
24
|
+
import { registerProbeRoute } from "./probe-route.js";
|
|
25
|
+
import { FILE_MAX_BYTES, MIME_BY_EXTENSION, fileFingerprint, sanitizeContentDispositionFilename } from "../file/_helpers.js";
|
|
26
|
+
async function existingDir(p) {
|
|
27
|
+
if (!p || !isAbsolute(p))
|
|
28
|
+
return null;
|
|
29
|
+
try {
|
|
30
|
+
return (await stat(p)).isDirectory() ? p : null;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const hasNul = (b) => b.subarray(0, 8192).includes(0);
|
|
37
|
+
export function createSessionFileRouter(deps) {
|
|
38
|
+
const app = new Hono();
|
|
39
|
+
const { store, watcher } = deps;
|
|
40
|
+
app.get("/api/external/tasks/:id/session-file", async (c) => {
|
|
41
|
+
const task = store.get(c.req.param("id"));
|
|
42
|
+
if (!task)
|
|
43
|
+
return c.json({ error: "task_not_found" }, 404);
|
|
44
|
+
// Only the registered project root is trusted outright. The task cwd is client-supplied at task
|
|
45
|
+
// creation (it may be a home dir or a drive root), so it is NEVER a root: a task without a
|
|
46
|
+
// resolvable project gets session-evidenced absolute paths only.
|
|
47
|
+
const projectDir = await existingDir(deps.getProjectById?.(task.projectId)?.path);
|
|
48
|
+
const roots = projectDir ? [projectDir] : [];
|
|
49
|
+
// `assetOf` = the evidenced outside HTML page that wants this image / stylesheet / font (asset-access.ts).
|
|
50
|
+
const assetOf = c.req.query("assetOf");
|
|
51
|
+
const accessArgs = {
|
|
52
|
+
roots,
|
|
53
|
+
requested: c.req.query("path") ?? "",
|
|
54
|
+
findEvidence: async (candidates) => findSessionEvidence(task.sessionUuid, await watcher.findByUuid(task.sessionUuid), candidates, deps),
|
|
55
|
+
};
|
|
56
|
+
const decision = assetOf ? await decideAssetAccess({ ...accessArgs, owner: assetOf, memoKey: task.taskId }) : await decideSessionFileAccess(accessArgs);
|
|
57
|
+
if (!decision.ok) {
|
|
58
|
+
return c.json({ error: decision.error, ...(decision.detail ? { detail: decision.detail } : {}) }, decision.status);
|
|
59
|
+
}
|
|
60
|
+
const ext = extname(decision.absolute).toLowerCase().slice(1);
|
|
61
|
+
const mime = assetOf ? ASSET_MIME_BY_EXTENSION[ext] : MIME_BY_EXTENSION[ext];
|
|
62
|
+
if (!mime) {
|
|
63
|
+
return c.json({ error: "binary_not_previewable", mime: "application/octet-stream", extension: ext || null }, 415);
|
|
64
|
+
}
|
|
65
|
+
const read = await readRegularFileCapped(decision.absolute, FILE_MAX_BYTES);
|
|
66
|
+
if (read.kind === "not_found")
|
|
67
|
+
return c.json({ error: "not_found" }, 404);
|
|
68
|
+
if (read.kind === "not_a_file")
|
|
69
|
+
return c.json({ error: "not_a_file" }, 400);
|
|
70
|
+
if (read.kind === "too_large")
|
|
71
|
+
return c.json({ error: "file_too_large", maxBytes: FILE_MAX_BYTES, size: read.size }, 413);
|
|
72
|
+
if (read.kind === "error")
|
|
73
|
+
return c.json({ error: "file_read_failed", detail: read.detail }, 500);
|
|
74
|
+
if (mime.startsWith("text/") && hasNul(read.bytes)) {
|
|
75
|
+
return c.json({ error: "binary_not_previewable", mime: "application/octet-stream", extension: ext || null }, 415);
|
|
76
|
+
}
|
|
77
|
+
c.header("Content-Type", mime);
|
|
78
|
+
c.header("X-Content-Type-Options", "nosniff");
|
|
79
|
+
c.header("ETag", `"${fileFingerprint(read.bytes)}"`);
|
|
80
|
+
c.header("Content-Disposition", `inline; filename="${sanitizeContentDispositionFilename(basename(decision.absolute))}"`);
|
|
81
|
+
c.header("Content-Length", String(read.bytes.length));
|
|
82
|
+
c.header("Cache-Control", "private, max-age=0, must-revalidate");
|
|
83
|
+
c.header("Content-Security-Policy", "default-src 'none'; style-src 'unsafe-inline'; sandbox");
|
|
84
|
+
c.header("X-Session-File-Scope", decision.scope);
|
|
85
|
+
return c.body(new Uint8Array(read.bytes));
|
|
86
|
+
});
|
|
87
|
+
registerProbeRoute(app, deps);
|
|
88
|
+
return app;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/external/session-file/routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type Layout } from "../../core/session-info/test-fixtures.js";
|
|
2
|
+
export declare const BS = "\\";
|
|
3
|
+
/** Per-test fixture dirs, reassigned by installFixtures()'s hooks. */
|
|
4
|
+
export declare const fx: {
|
|
5
|
+
l: Layout;
|
|
6
|
+
proj: string;
|
|
7
|
+
out: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function installFixtures(): void;
|
|
10
|
+
export declare const user: (n: number, content: unknown) => {
|
|
11
|
+
type: string;
|
|
12
|
+
timestamp: string;
|
|
13
|
+
message: {
|
|
14
|
+
role: string;
|
|
15
|
+
content: unknown;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export declare const say: (n: number, text: string) => {
|
|
19
|
+
type: string;
|
|
20
|
+
isSidechain: boolean;
|
|
21
|
+
timestamp: string;
|
|
22
|
+
cwd: string;
|
|
23
|
+
message: {
|
|
24
|
+
role: string;
|
|
25
|
+
model: string;
|
|
26
|
+
usage: {
|
|
27
|
+
input_tokens: number;
|
|
28
|
+
cache_read_input_tokens: number;
|
|
29
|
+
cache_creation_input_tokens: number;
|
|
30
|
+
output_tokens: number;
|
|
31
|
+
} | undefined;
|
|
32
|
+
content: unknown[];
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
export declare const session: (...recs: unknown[]) => void;
|
|
36
|
+
export declare function app(withTask?: boolean, task?: {
|
|
37
|
+
projectId: string;
|
|
38
|
+
cwd: string;
|
|
39
|
+
}): import("hono").Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">;
|
|
40
|
+
export declare const get: (p: string, a?: import("hono").Hono<import("hono/types").BlankEnv, import("hono/types").BlankSchema, "/">) => Response | Promise<Response>;
|
|
41
|
+
export declare const j: (r: Response) => Promise<{
|
|
42
|
+
error?: string;
|
|
43
|
+
detail?: string;
|
|
44
|
+
}>;
|
|
45
|
+
//# sourceMappingURL=session-file.fixture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-file.fixture.d.ts","sourceRoot":"","sources":["../../../src/external/session-file/session-file.fixture.ts"],"names":[],"mappings":"AAOA,OAAO,EAA0C,KAAK,MAAM,EAAE,MAAM,0CAA0C,CAAC;AAE/G,eAAO,MAAM,EAAE,OAAS,CAAC;AACzB,sEAAsE;AACtE,eAAO,MAAM,EAAE;OAAgC,MAAM;;;CAAqB,CAAC;AAE3E,wBAAgB,eAAe,IAAI,IAAI,CAYtC;AAED,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,EAAE,SAAS,OAAO;;;;;;;CAA6E,CAAC;AAC9H,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,EAAE,MAAM,MAAM;;;;;;;;;;;;;;;;CAAuD,CAAC;AACnG,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,OAAO,EAAE,SAAiD,CAAC;AAE5F,wBAAgB,GAAG,CAAC,QAAQ,UAAO,EAAE,IAAI,GAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAqC,6FAU/G;AACD,eAAO,MAAM,GAAG,GAAI,GAAG,MAAM,EAAE,6FAAS,iCAAmF,CAAC;AAC5H,eAAO,MAAM,CAAC,GAAU,GAAG,QAAQ;YAAmC,MAAM;aAAW,MAAM;EAAE,CAAC"}
|