@svenroth-ai/shipwright 0.28.0 → 0.29.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/client/dist/apple-touch-icon.png +0 -0
- package/client/dist/assets/{EmbeddedTerminal-4xgNUBUu.js → EmbeddedTerminal-IkAS1bic.js} +30 -30
- package/client/dist/assets/{abnfDiagram-VRR7QNED-BdCNbaqc.js → abnfDiagram-VCTEODGH-CclAL-Ri.js} +1 -1
- package/client/dist/assets/arc-C8vUxwav.js +1 -0
- package/client/dist/assets/architectureDiagram-5GKGNRK7-DdrrZJx7.js +36 -0
- package/client/dist/assets/blockDiagram-I7D4REHJ-CMhbhsVq.js +129 -0
- package/client/dist/assets/c4Diagram-7LVT6UL2-OvlH6BiV.js +38 -0
- package/client/dist/assets/channel-BtkABUIE.js +1 -0
- package/client/dist/assets/{chunk-2Q5K7J3B-4N6AnmBJ.js → chunk-2Q5K7J3B-BxUk85j7.js} +1 -1
- package/client/dist/assets/{chunk-5VM5RSS4-Bwd7rtD3.js → chunk-5VM5RSS4-DoTSs3Kn.js} +1 -1
- package/client/dist/assets/{chunk-32BRIVSS-Cs67LiCy.js → chunk-F27PBJKO-DquVu1wX.js} +1 -1
- package/client/dist/assets/{chunk-EX3LRPZG-CQqGfptD.js → chunk-IMKFNOWR-8l4wPLQK.js} +5 -5
- package/client/dist/assets/{chunk-JWPE2WC7-ClvKd4PN.js → chunk-JWPE2WC7-CTAa0a4O.js} +1 -1
- package/client/dist/assets/chunk-POPQ4Y6H-BZ6zpqEF.js +1 -0
- package/client/dist/assets/{chunk-MOJQB5TN-Cwvj8GE1.js → chunk-SVP7TREG-Dx7pMiq4.js} +1 -1
- package/client/dist/assets/{chunk-V7JOEXUC-CYFfa4PY.js → chunk-TICWLB2K-BtDKT858.js} +1 -1
- package/client/dist/assets/{chunk-XXDRQBXY-BQAZ6Our.js → chunk-XXDRQBXY-BbrrrzuM.js} +1 -1
- package/client/dist/assets/classDiagram-ZZMXUADV-2gEcH3cX.js +1 -0
- package/client/dist/assets/classDiagram-v2-VYDZK3BY-2gEcH3cX.js +1 -0
- package/client/dist/assets/{cose-bilkent-JH36ORCC-C76Yia6h.js → cose-bilkent-JH36ORCC-Bhem6unn.js} +1 -1
- package/client/dist/assets/{cynefin-VYW2F7L2-pJe7rdTi.js → cynefin-OW5HDTMX-hukx0bAt.js} +3 -3
- package/client/dist/assets/{cynefinDiagram-TSTJHNR4-EeHQ7dYV.js → cynefinDiagram-5FMLGOSQ-CGogKYMK.js} +1 -1
- package/client/dist/assets/dagre-GXQ25YYZ-BiLo3XBj.js +4 -0
- package/client/dist/assets/diagram-S7CK7UJ4-DBfdjdN6.js +30 -0
- package/client/dist/assets/diagram-UQ7AKVKN-3CvmyZYO.js +41 -0
- package/client/dist/assets/{diagram-FQU43EPY-DW_-leqw.js → diagram-VSXAHHWV-COG9399I.js} +2 -2
- package/client/dist/assets/{diagram-G47NLZAW-C_hsLD4u.js → diagram-VX7I27RA-Dftpj84a.js} +1 -1
- package/client/dist/assets/{diagram-NH7WQ7WH-CbeQuO_f.js → diagram-Z3DM3KII-Dw9_CGLA.js} +1 -1
- package/client/dist/assets/{ebnfDiagram-CCIWWBDH-B8Z8WHF6.js → ebnfDiagram-PWID7BFC-CJirhPah.js} +1 -1
- package/client/dist/assets/erDiagram-RLTQ6QDP-B11aYoo6.js +99 -0
- package/client/dist/assets/flowDiagram-HODETNUW-CPC6X9E5.js +168 -0
- package/client/dist/assets/{ganttDiagram-NO4QXBWP-K3X0DYBa.js → ganttDiagram-EL5Y4UJY-DDSk2AAg.js} +4 -4
- package/client/dist/assets/{gitGraphDiagram-IHSO6WYX-B2SEx0xa.js → gitGraphDiagram-WWUBYQGX-D_2UGciq.js} +1 -1
- package/client/dist/assets/index-DDSwQXcp.js +924 -0
- package/client/dist/assets/index-DWrPE3aq.css +1 -0
- package/client/dist/assets/infoDiagram-27XIBGKW-BuUv5Wms.js +2 -0
- package/client/dist/assets/{ishikawaDiagram-FXEZZL3T-CrN7QJzt.js → ishikawaDiagram-5VMMS53U-DpnAnJ0q.js} +4 -4
- package/client/dist/assets/{journeyDiagram-5HDEW3XC-XHIsl7rM.js → journeyDiagram-3NMN7TZE-CFUsXz2q.js} +2 -2
- package/client/dist/assets/{kanban-definition-HUTT4EX6-A6HJqHw7.js → kanban-definition-UXKFOSKX-BAq4Kujj.js} +8 -8
- package/client/dist/assets/katex-C5jXJg4s.js +257 -0
- package/client/dist/assets/layout-CccpfEe3.js +1 -0
- package/client/dist/assets/{linear-D1vF9IQB.js → linear-BIeIr2tp.js} +1 -1
- package/client/dist/assets/mermaid.core-B-Ezy6Me.js +312 -0
- package/client/dist/assets/{mindmap-definition-LN4V7U3C-CxRkUj6Z.js → mindmap-definition-YA3MSWOX-CMPZ0Ggp.js} +2 -2
- package/client/dist/assets/{pegDiagram-2B236MQR-Bs9dp-8a.js → pegDiagram-XKGWAZYB-B0_2KQ6f.js} +1 -1
- package/client/dist/assets/{pieDiagram-ENE6RG2P-DBWILzB8.js → pieDiagram-E7YTZNPT-1-nOk5pZ.js} +3 -3
- package/client/dist/assets/{quadrantDiagram-ABIIQ3AL-DrCVJJx6.js → quadrantDiagram-AXDQQJYC-C_RdmOuq.js} +1 -1
- package/client/dist/assets/{railroadDiagram-RFXS5EU6-BdPW2dNf.js → railroadDiagram-O6MQD6OU-o73KM0oq.js} +1 -1
- package/client/dist/assets/{requirementDiagram-TGXJPOKE-Bj_g3tC5.js → requirementDiagram-BXWQKSXE-DnhCWJHv.js} +5 -5
- package/client/dist/assets/{sankeyDiagram-HTMAVEWB-BGL9NnsS.js → sankeyDiagram-P5KCCOFB-CVkYgfTV.js} +4 -4
- package/client/dist/assets/{sequenceDiagram-DBY2YBRQ-DEirxTZY.js → sequenceDiagram-WJ2MYXX4-BYLed29R.js} +1 -1
- package/client/dist/assets/{sizeCapture-X5ZJPWSS-BtLrvrea.js → sizeCapture-INFHLROL-CYb4HDaH.js} +1 -1
- package/client/dist/assets/stateDiagram-D77RDMKH-CNKFRye_.js +1 -0
- package/client/dist/assets/stateDiagram-v2-MP3YSRHH-NpMhMQ36.js +1 -0
- package/client/dist/assets/swimlanes-42K2YHIH-BhsYrplp.js +1 -0
- package/client/dist/assets/swimlanesDiagram-VR7AAH4N-B4frkWBG.js +8 -0
- package/client/dist/assets/{timeline-definition-FHXFAJF6-CnBKJtD_.js → timeline-definition-24CTP7MA-DiUXzB2p.js} +3 -3
- package/client/dist/assets/{vennDiagram-L72KCM5P-BYmiJYoh.js → vennDiagram-4TSXK5OY-aE4j6W86.js} +5 -5
- package/client/dist/assets/{wardleyDiagram-EHGQE667-DU7vW8q3.js → wardleyDiagram-VM6X3IG4-BxJXq0mU.js} +1 -1
- package/client/dist/assets/xychartDiagram-S5SC5T6Z-4vHeL9zc.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,92 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Subagent list for a session: `<session>/subagents/agent-<id>.jsonl` plus its
|
|
3
|
+
* `.meta.json` (agentType, description, toolUseId, spawnDepth, parentAgentId
|
|
4
|
+
* for depth 2, model). Joined on agentId.
|
|
5
|
+
*
|
|
6
|
+
* "Finished" comes from the `<task-notification>` the PARENT received — for a
|
|
7
|
+
* depth-2 agent the parent is the depth-1 agent, so notifications are pooled
|
|
8
|
+
* across the session file AND every agent file. The notification's own
|
|
9
|
+
* `<result>` is often only a pointer ("delivered as a message"), so `answer`
|
|
10
|
+
* is the last assistant text of the agent's own file. An agent with no
|
|
11
|
+
* notification and a stale mtime is `finished-stale` (killed session, crash).
|
|
12
|
+
*/
|
|
13
|
+
import { readSmallRegularFile } from "./small-file.js";
|
|
14
|
+
export const SUBAGENT_STALE_MS = 10 * 60 * 1000;
|
|
15
|
+
/** An agent blocked inside an unanswered tool call (long test run, permission prompt) gets far longer. */
|
|
16
|
+
export const SUBAGENT_PENDING_STALE_MS = 60 * 60 * 1000;
|
|
17
|
+
const RESUME_SLACK_MS = 2000;
|
|
18
|
+
const s = (v) => (typeof v === "string" && v ? v : null);
|
|
19
|
+
async function readMeta(p) {
|
|
20
|
+
try {
|
|
21
|
+
// A symlinked meta file is never followed; meta files are tiny, refuse anything else.
|
|
22
|
+
const text = await readSmallRegularFile(p, 64 * 1024);
|
|
23
|
+
if (text === null)
|
|
24
|
+
return {};
|
|
25
|
+
const o = JSON.parse(text);
|
|
26
|
+
return o && typeof o === "object" ? o : {};
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export async function buildSubagents(files, subFacts, parent, now) {
|
|
33
|
+
const notifs = new Map(parent.notifications);
|
|
34
|
+
const toolUses = new Map(parent.agentToolUses);
|
|
35
|
+
// Deterministic precedence: the sorted file order, never scan-completion order.
|
|
36
|
+
const ordered = files.map((f) => subFacts.get(f.agentId)).filter((x) => !!x);
|
|
37
|
+
for (const f of ordered) {
|
|
38
|
+
for (const [k, v] of f.notifications)
|
|
39
|
+
notifs.set(k, v);
|
|
40
|
+
for (const [k, v] of f.agentToolUses)
|
|
41
|
+
toolUses.set(k, v);
|
|
42
|
+
}
|
|
43
|
+
const results = new Map(parent.toolResults);
|
|
44
|
+
for (const f of ordered)
|
|
45
|
+
for (const [k, v] of f.toolResults)
|
|
46
|
+
results.set(k, v);
|
|
47
|
+
const metas = await Promise.all(files.map((f) => readMeta(f.metaPath)));
|
|
48
|
+
const out = [];
|
|
49
|
+
for (const [idx, file] of files.entries()) {
|
|
50
|
+
const meta = metas[idx];
|
|
51
|
+
const facts = subFacts.get(file.agentId);
|
|
52
|
+
const n = notifs.get(file.agentId) ?? null;
|
|
53
|
+
const toolUseId = s(meta.toolUseId) ?? n?.toolUseId ?? null;
|
|
54
|
+
const tu = toolUseId ? toolUses.get(toolUseId) : undefined;
|
|
55
|
+
const startedAt = facts?.firstTs ?? null;
|
|
56
|
+
const lastTs = facts?.lastTs ?? null;
|
|
57
|
+
const tr = toolUseId && !tu?.background ? results.get(toolUseId) : undefined;
|
|
58
|
+
const doneAt = Date.parse(n?.at ?? tr?.at ?? "");
|
|
59
|
+
// A resumed agent keeps writing after its earlier notification: it is running again,
|
|
60
|
+
// but only while its file is still being written. A quiet resumed agent has the same
|
|
61
|
+
// staleness budget as any other (otherwise a finished agent that wrote once after its
|
|
62
|
+
// notification would show as running forever).
|
|
63
|
+
const staleMs = facts && facts.pendingUse.size > 0 ? SUBAGENT_PENDING_STALE_MS : SUBAGENT_STALE_MS;
|
|
64
|
+
const quiet = now - file.mtimeMs > staleMs;
|
|
65
|
+
const resumedAfterNotice = !!(n || tr) && !!lastTs && Number.isFinite(doneAt) && Date.parse(lastTs) > doneAt + RESUME_SLACK_MS;
|
|
66
|
+
const resumed = resumedAfterNotice && !quiet;
|
|
67
|
+
const state = resumed ? "running" : resumedAfterNotice ? "finished-stale" : n || tr ? "finished" : quiet ? "finished-stale" : "running";
|
|
68
|
+
const status = resumed ? null : n?.status ?? (tr ? (tr.isError ? "failed" : (tr.status ?? "completed")) : null);
|
|
69
|
+
const wall = startedAt && lastTs && Date.parse(lastTs) >= Date.parse(startedAt) ? Date.parse(lastTs) - Date.parse(startedAt) : null;
|
|
70
|
+
out.push({
|
|
71
|
+
agentId: file.agentId,
|
|
72
|
+
agentType: s(meta.agentType),
|
|
73
|
+
description: s(meta.description) ?? tu?.description ?? null,
|
|
74
|
+
toolUseId,
|
|
75
|
+
spawnDepth: typeof meta.spawnDepth === "number" ? meta.spawnDepth : null,
|
|
76
|
+
parentAgentId: s(meta.parentAgentId),
|
|
77
|
+
model: s(meta.model) ?? facts?.model ?? null,
|
|
78
|
+
prompt: tu?.prompt ?? null,
|
|
79
|
+
answer: facts?.lastAssistantText ?? null,
|
|
80
|
+
startedAt,
|
|
81
|
+
endedAt: state === "running" ? null : lastTs,
|
|
82
|
+
durationMs: state === "running" ? null : (n?.durationMs ?? tr?.durationMs ?? wall),
|
|
83
|
+
state,
|
|
84
|
+
status,
|
|
85
|
+
tokens: resumed ? null : (n?.tokens ?? tr?.tokens ?? null),
|
|
86
|
+
toolUses: resumed ? null : (n?.toolUses ?? tr?.toolUses ?? null),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
out.sort((a, b) => (a.startedAt ?? "").localeCompare(b.startedAt ?? ""));
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=subagents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subagents.js","sourceRoot":"","sources":["../../../src/core/session-info/subagents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export declare const SESSION = "11111111-2222-4333-8444-555555555555";
|
|
2
|
+
export declare const WIN_CWD = "C:\\proj\\repo";
|
|
3
|
+
export declare const ts: (n: number) => string;
|
|
4
|
+
export declare const jl: (...objs: unknown[]) => string;
|
|
5
|
+
export declare const assistant: (n: number, opts?: {
|
|
6
|
+
usage?: [number, number, number];
|
|
7
|
+
model?: string;
|
|
8
|
+
blocks?: unknown[];
|
|
9
|
+
cwd?: string;
|
|
10
|
+
sidechain?: boolean;
|
|
11
|
+
}) => {
|
|
12
|
+
type: string;
|
|
13
|
+
isSidechain: boolean;
|
|
14
|
+
timestamp: string;
|
|
15
|
+
cwd: string;
|
|
16
|
+
message: {
|
|
17
|
+
role: string;
|
|
18
|
+
model: string;
|
|
19
|
+
usage: {
|
|
20
|
+
input_tokens: number;
|
|
21
|
+
cache_read_input_tokens: number;
|
|
22
|
+
cache_creation_input_tokens: number;
|
|
23
|
+
output_tokens: number;
|
|
24
|
+
} | undefined;
|
|
25
|
+
content: unknown[];
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export declare const toolUse: (name: string, input: Record<string, unknown>, id?: string) => {
|
|
29
|
+
type: string;
|
|
30
|
+
id: string;
|
|
31
|
+
name: string;
|
|
32
|
+
input: Record<string, unknown>;
|
|
33
|
+
};
|
|
34
|
+
export declare const notification: (agentId: string, toolUseId: string, status: string, durationMs?: number) => string;
|
|
35
|
+
export declare const userNotif: (n: number, text: string) => {
|
|
36
|
+
type: string;
|
|
37
|
+
timestamp: string;
|
|
38
|
+
message: {
|
|
39
|
+
role: string;
|
|
40
|
+
content: string;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
export interface Layout {
|
|
44
|
+
projectsDir: string;
|
|
45
|
+
sessionPath: string;
|
|
46
|
+
subDir: string;
|
|
47
|
+
}
|
|
48
|
+
export declare function makeLayout(): Layout;
|
|
49
|
+
export declare function writeAgent(l: Layout, agentId: string, meta: Record<string, unknown>, lines: unknown[]): string;
|
|
50
|
+
//# sourceMappingURL=test-fixtures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-fixtures.d.ts","sourceRoot":"","sources":["../../../src/core/session-info/test-fixtures.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,yCAAyC,CAAC;AAC9D,eAAO,MAAM,OAAO,mBAAmB,CAAC;AAExC,eAAO,MAAM,EAAE,GAAI,GAAG,MAAM,WAA4D,CAAC;AACzF,eAAO,MAAM,EAAE,GAAI,GAAG,MAAM,OAAO,EAAE,WAAyD,CAAC;AAE/F,eAAO,MAAM,SAAS,GACpB,GAAG,MAAM,EACT,OAAM;IAAE,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO;;;;;;;;;;;;;;;;CActH,CAAC;AAEH,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAqC;;;;;CAKzG,CAAC;AAEH,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,EAAE,WAAW,MAAM,EAAE,QAAQ,MAAM,EAAE,mBAAiB,WACsO,CAAC;AAEzU,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,MAAM,MAAM;;;;;;;CAAmF,CAAC;AAErI,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,IAAI,MAAM,CAKnC;AAED,wBAAgB,UAAU,CACxB,CAAC,EAAE,MAAM,EACT,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,OAAO,EAAE,GACf,MAAM,CAKR"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/* Fixture builders for the session-info tests — synthetic JSONL in Claude's real shapes. */
|
|
2
|
+
import { mkdirSync, mkdtempSync, writeFileSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
export const SESSION = "11111111-2222-4333-8444-555555555555";
|
|
6
|
+
export const WIN_CWD = "C:\\proj\\repo";
|
|
7
|
+
export const ts = (n) => new Date(Date.UTC(2026, 9, 30, 10, 0, n)).toISOString();
|
|
8
|
+
export const jl = (...objs) => objs.map((o) => JSON.stringify(o)).join("\n") + "\n";
|
|
9
|
+
export const assistant = (n, opts = {}) => ({
|
|
10
|
+
type: "assistant",
|
|
11
|
+
isSidechain: opts.sidechain ?? false,
|
|
12
|
+
timestamp: ts(n),
|
|
13
|
+
cwd: opts.cwd ?? WIN_CWD,
|
|
14
|
+
message: {
|
|
15
|
+
role: "assistant",
|
|
16
|
+
model: opts.model ?? "claude-opus-4",
|
|
17
|
+
usage: opts.usage
|
|
18
|
+
? { input_tokens: opts.usage[0], cache_read_input_tokens: opts.usage[1], cache_creation_input_tokens: opts.usage[2], output_tokens: 9 }
|
|
19
|
+
: undefined,
|
|
20
|
+
content: opts.blocks ?? [{ type: "text", text: `reply ${n}` }],
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
export const toolUse = (name, input, id = `toolu_${name}_${Math.random()}`) => ({
|
|
24
|
+
type: "tool_use",
|
|
25
|
+
id,
|
|
26
|
+
name,
|
|
27
|
+
input,
|
|
28
|
+
});
|
|
29
|
+
export const notification = (agentId, toolUseId, status, durationMs = 5000) => `<task-notification>\n<task-id>${agentId}</task-id>\n<tool-use-id>${toolUseId}</tool-use-id>\n<status>${status}</status>\n<summary>x</summary>\n<result>delivered as a message</result>\n<usage><subagent_tokens>1234</subagent_tokens><tool_uses>7</tool_uses><duration_ms>${durationMs}</duration_ms></usage>\n</task-notification>`;
|
|
30
|
+
export const userNotif = (n, text) => ({ type: "user", timestamp: ts(n), message: { role: "user", content: text } });
|
|
31
|
+
export function makeLayout() {
|
|
32
|
+
const projectsDir = mkdtempSync(path.join(tmpdir(), "sessinfo-"));
|
|
33
|
+
const enc = path.join(projectsDir, "C--proj-repo");
|
|
34
|
+
mkdirSync(path.join(enc, SESSION, "subagents"), { recursive: true });
|
|
35
|
+
return { projectsDir, sessionPath: path.join(enc, `${SESSION}.jsonl`), subDir: path.join(enc, SESSION, "subagents") };
|
|
36
|
+
}
|
|
37
|
+
export function writeAgent(l, agentId, meta, lines) {
|
|
38
|
+
const p = path.join(l.subDir, `agent-${agentId}.jsonl`);
|
|
39
|
+
writeFileSync(p, jl(...lines));
|
|
40
|
+
writeFileSync(path.join(l.subDir, `agent-${agentId}.meta.json`), JSON.stringify(meta));
|
|
41
|
+
return p;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=test-fixtures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-fixtures.js","sourceRoot":"","sources":["../../../src/core/session-info/test-fixtures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export interface SessionContextInfo {
|
|
2
|
+
/** input + cache_read + cache_creation of the newest non-synthetic assistant message; null when none seen. */
|
|
3
|
+
tokens: number | null;
|
|
4
|
+
model: string | null;
|
|
5
|
+
/** Timestamp of the message the numbers came from. */
|
|
6
|
+
at: string | null;
|
|
7
|
+
/** A compaction happened AFTER that message, so `tokens` is stale. */
|
|
8
|
+
compactedSince: boolean;
|
|
9
|
+
/** The compactor's own post-compaction estimate; only set while `compactedSince`, null when it recorded none. */
|
|
10
|
+
tokensAfterCompaction: number | null;
|
|
11
|
+
}
|
|
12
|
+
export interface SessionCompactionInfo {
|
|
13
|
+
/** Compactions seen inside the scanned window. */
|
|
14
|
+
count: number;
|
|
15
|
+
last: {
|
|
16
|
+
at: string | null;
|
|
17
|
+
preTokens: number | null;
|
|
18
|
+
postTokens: number | null;
|
|
19
|
+
} | null;
|
|
20
|
+
}
|
|
21
|
+
export interface SessionOutputFile {
|
|
22
|
+
/** Absolute, normalised against the cwd of the entry that wrote it. */
|
|
23
|
+
path: string;
|
|
24
|
+
tool: "Write" | "Edit" | "NotebookEdit" | "MultiEdit";
|
|
25
|
+
firstAt: string | null;
|
|
26
|
+
lastAt: string | null;
|
|
27
|
+
/** Agent id when a subagent produced it; null for the session itself. */
|
|
28
|
+
agentId: string | null;
|
|
29
|
+
}
|
|
30
|
+
export interface SessionRemoteControl {
|
|
31
|
+
/** A LIVE process of this session currently has a bridge session. */
|
|
32
|
+
active: boolean;
|
|
33
|
+
/** A bridge-session record exists in the JSONL — it was enabled at least once. */
|
|
34
|
+
onceEnabled: boolean;
|
|
35
|
+
pid: number | null;
|
|
36
|
+
}
|
|
37
|
+
export type SubagentState = "running" | "finished" | "finished-stale";
|
|
38
|
+
export interface SessionSubagent {
|
|
39
|
+
agentId: string;
|
|
40
|
+
agentType: string | null;
|
|
41
|
+
description: string | null;
|
|
42
|
+
toolUseId: string | null;
|
|
43
|
+
spawnDepth: number | null;
|
|
44
|
+
/** Set for depth-2 agents (a reviewer spawned by a sub-iterate). */
|
|
45
|
+
parentAgentId: string | null;
|
|
46
|
+
model: string | null;
|
|
47
|
+
prompt: string | null;
|
|
48
|
+
/** Last assistant text of the agent's own file (the notification's result is often just a pointer). */
|
|
49
|
+
answer: string | null;
|
|
50
|
+
startedAt: string | null;
|
|
51
|
+
endedAt: string | null;
|
|
52
|
+
durationMs: number | null;
|
|
53
|
+
state: SubagentState;
|
|
54
|
+
/** completed | failed | killed | stopped, from the parent's task-notification; null without one. */
|
|
55
|
+
status: string | null;
|
|
56
|
+
tokens: number | null;
|
|
57
|
+
toolUses: number | null;
|
|
58
|
+
}
|
|
59
|
+
export interface SessionInfoScan {
|
|
60
|
+
/** True when the session file was larger than the scan window; older history is not reflected. */
|
|
61
|
+
truncated: boolean;
|
|
62
|
+
scannedBytes: number;
|
|
63
|
+
sizeBytes: number;
|
|
64
|
+
/** Outputs / subagents beyond the caps (MAX_OUTPUTS, MAX_SUBAGENTS) that were not returned. */
|
|
65
|
+
outputsTruncated: number;
|
|
66
|
+
subagentsTruncated: number;
|
|
67
|
+
}
|
|
68
|
+
export interface SessionInfo {
|
|
69
|
+
sessionUuid: string;
|
|
70
|
+
context: SessionContextInfo;
|
|
71
|
+
compaction: SessionCompactionInfo;
|
|
72
|
+
outputs: SessionOutputFile[];
|
|
73
|
+
remoteControl: SessionRemoteControl;
|
|
74
|
+
subagents: SessionSubagent[];
|
|
75
|
+
scan: SessionInfoScan;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/session-info/types.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,kBAAkB;IACjC,8GAA8G;IAC9G,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,sDAAsD;IACtD,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,sEAAsE;IACtE,cAAc,EAAE,OAAO,CAAC;IACxB,iHAAiH;IACjH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;CACzF;AAED,MAAM,WAAW,iBAAiB;IAChC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,WAAW,CAAC;IACtD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,yEAAyE;IACzE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAC;IAChB,kFAAkF;IAClF,WAAW,EAAE,OAAO,CAAC;IACrB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,gBAAgB,CAAC;AAEtE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,oEAAoE;IACpE,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uGAAuG;IACvG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,aAAa,CAAC;IACrB,oGAAoG;IACpG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,kGAAkG;IAClG,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,+FAA+F;IAC/F,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,UAAU,EAAE,qBAAqB,CAAC;IAClC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,aAAa,EAAE,oBAAoB,CAAC;IACpC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,IAAI,EAAE,eAAe,CAAC;CACvB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Wire shapes of GET /api/external/tasks/:id/session-info (campaign
|
|
3
|
+
* mission-desktop-style, M2). READ-ONLY view derived from Claude's own files
|
|
4
|
+
* (CLAUDE.md DO-NOT #1) — nothing here is ever written back.
|
|
5
|
+
*
|
|
6
|
+
* Outputs are ATTEMPTED-then-not-rejected writes: a tool_use whose result is_error is retracted.
|
|
7
|
+
* Runtime: Claude only (Codex tasks have no such JSONL and answer status "missing").
|
|
8
|
+
*
|
|
9
|
+
* Deliberately absent: a context PERCENTAGE and a context WINDOW SIZE. The
|
|
10
|
+
* window depends on the model/plan and is not recorded in the JSONL; inventing
|
|
11
|
+
* one would be a guess dressed as a fact. Consumers show the raw token count.
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/session-info/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type StackProfileDeps } from "./stack-profiles.js";
|
|
2
|
+
export type StackProfileScope = "project" | "user";
|
|
3
|
+
export type CreateOutcome = {
|
|
4
|
+
status: "created";
|
|
5
|
+
name: string;
|
|
6
|
+
path: string;
|
|
7
|
+
} | {
|
|
8
|
+
status: "invalid-request";
|
|
9
|
+
reason: string;
|
|
10
|
+
} | {
|
|
11
|
+
status: "exists";
|
|
12
|
+
reason: string;
|
|
13
|
+
} | {
|
|
14
|
+
status: "failed";
|
|
15
|
+
reason: string;
|
|
16
|
+
};
|
|
17
|
+
export interface CreateStackProfileInput {
|
|
18
|
+
from: string;
|
|
19
|
+
name: string;
|
|
20
|
+
scope: StackProfileScope;
|
|
21
|
+
/** Required for scope "project" (destination). For scope "user" it only widens the
|
|
22
|
+
* collision check + validation to that project's own profiles. */
|
|
23
|
+
projectRoot?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface CreateStackProfileDeps extends StackProfileDeps {
|
|
26
|
+
userProfilesDir?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function userProfilesDir(deps?: Pick<CreateStackProfileDeps, "userProfilesDir" | "homeDir">): string;
|
|
29
|
+
export declare function validateNewProfileName(name: unknown): string | null;
|
|
30
|
+
export declare function createStackProfileFromBundled(input: CreateStackProfileInput, deps?: CreateStackProfileDeps): Promise<CreateOutcome>;
|
|
31
|
+
//# sourceMappingURL=stack-profiles-create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-profiles-create.d.ts","sourceRoot":"","sources":["../../src/core/stack-profiles-create.ts"],"names":[],"mappings":"AAoBA,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAM7B,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnD,MAAM,MAAM,aAAa,GACrB;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,iBAAiB,CAAC;IACzB;uEACmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAWD,wBAAgB,eAAe,CAAC,IAAI,GAAE,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,GAAG,SAAS,CAAM,GAAG,MAAM,CAM9G;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CASnE;AAED,wBAAsB,6BAA6B,CACjD,KAAK,EAAE,uBAAuB,EAC9B,IAAI,GAAE,sBAA2B,GAChC,OAAO,CAAC,aAAa,CAAC,CAUxB"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* stack-profiles-create.ts — "create a custom profile from a bundled one".
|
|
3
|
+
*
|
|
4
|
+
* The ONLY write surface of the stack-profile feature, and deliberately tiny:
|
|
5
|
+
* it copies a bundled profile's JSON under a NEW name into the project's
|
|
6
|
+
* `.shipwright/profiles/` or the user's `~/.shipwright/profiles/`
|
|
7
|
+
* (`SHIPWRIGHT_USER_PROFILES_DIR` overrides, same as the resolver). Rules:
|
|
8
|
+
* - the name is validated against the resolver's own NAME_RE and must be
|
|
9
|
+
* unused in EVERY source — shadowing a bundled profile is the resolver's
|
|
10
|
+
* "same-name shadow" regression case, so the UI never creates one;
|
|
11
|
+
* - `wx` open — an existing file is never overwritten (race-safe, no
|
|
12
|
+
* check-then-write window);
|
|
13
|
+
* - the result is validated through the resolver; a copy it rejects is
|
|
14
|
+
* removed again, so a failed create leaves nothing behind.
|
|
15
|
+
*/
|
|
16
|
+
import { promises as fsp } from "node:fs";
|
|
17
|
+
import os from "node:os";
|
|
18
|
+
import path from "node:path";
|
|
19
|
+
import { MAX_PROFILE_NAME_LENGTH, isProfileNameShape, listStackProfiles, validateStackProfile, } from "./stack-profiles.js";
|
|
20
|
+
/** Names the resolver reserves as sentinels, never real profiles. */
|
|
21
|
+
const RESERVED = new Set(["generic", "detecting", "custom"]);
|
|
22
|
+
const WINDOWS_DEVICE = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/;
|
|
23
|
+
function samePath(a, b) {
|
|
24
|
+
if (typeof a !== "string")
|
|
25
|
+
return false;
|
|
26
|
+
const norm = (x) => (process.platform === "win32" ? path.resolve(x).toLowerCase() : path.resolve(x));
|
|
27
|
+
return norm(a) === norm(b);
|
|
28
|
+
}
|
|
29
|
+
/** Names being created right now - two concurrent creates of one name never both run. */
|
|
30
|
+
const inFlight = new Set();
|
|
31
|
+
export function userProfilesDir(deps = {}) {
|
|
32
|
+
return (deps.userProfilesDir ??
|
|
33
|
+
(process.env.SHIPWRIGHT_USER_PROFILES_DIR?.trim() || undefined) ??
|
|
34
|
+
path.join(deps.homeDir ?? os.homedir(), ".shipwright", "profiles"));
|
|
35
|
+
}
|
|
36
|
+
export function validateNewProfileName(name) {
|
|
37
|
+
if (typeof name === "string" && name.length > MAX_PROFILE_NAME_LENGTH) {
|
|
38
|
+
return `Keep the name under ${MAX_PROFILE_NAME_LENGTH + 1} characters.`;
|
|
39
|
+
}
|
|
40
|
+
if (!isProfileNameShape(name)) {
|
|
41
|
+
return "Use lowercase letters, digits and dashes only (it must start with a letter or digit).";
|
|
42
|
+
}
|
|
43
|
+
if (RESERVED.has(name) || WINDOWS_DEVICE.test(name))
|
|
44
|
+
return `“${name}” is reserved — pick another name.`;
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
export async function createStackProfileFromBundled(input, deps = {}) {
|
|
48
|
+
if (typeof input.name === "string" && inFlight.has(input.name)) {
|
|
49
|
+
return { status: "exists", reason: `“${input.name}” is already being created.` };
|
|
50
|
+
}
|
|
51
|
+
inFlight.add(input.name);
|
|
52
|
+
try {
|
|
53
|
+
return await createUnlocked(input, deps);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
inFlight.delete(input.name);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function createUnlocked(input, deps) {
|
|
60
|
+
const nameProblem = validateNewProfileName(input.name);
|
|
61
|
+
if (nameProblem)
|
|
62
|
+
return { status: "invalid-request", reason: nameProblem };
|
|
63
|
+
if (input.scope === "project" && !input.projectRoot) {
|
|
64
|
+
return { status: "invalid-request", reason: "A project profile needs a project." };
|
|
65
|
+
}
|
|
66
|
+
const listed = await listStackProfiles({ projectRoot: input.projectRoot }, deps);
|
|
67
|
+
if (listed.status !== "ok") {
|
|
68
|
+
return { status: "failed", reason: listed.status === "failed" ? listed.reason : "The profile resolver isn't available." };
|
|
69
|
+
}
|
|
70
|
+
const source = listed.report.profiles.find((p) => p.name === input.from && p.source === "bundled");
|
|
71
|
+
if (!source || !source.valid) {
|
|
72
|
+
return { status: "invalid-request", reason: `“${input.from}” isn't a usable built-in profile.` };
|
|
73
|
+
}
|
|
74
|
+
if (listed.report.profiles.some((p) => p.name === input.name)) {
|
|
75
|
+
return { status: "exists", reason: `A profile called “${input.name}” already exists.` };
|
|
76
|
+
}
|
|
77
|
+
let content;
|
|
78
|
+
try {
|
|
79
|
+
const data = JSON.parse(await fsp.readFile(source.path, "utf-8"));
|
|
80
|
+
content = `${JSON.stringify({ ...data, name: input.name }, null, 2)}\n`;
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
return { status: "failed", reason: `Couldn't read the built-in profile: ${String(err)}` };
|
|
84
|
+
}
|
|
85
|
+
const dir = input.scope === "project"
|
|
86
|
+
? path.join(input.projectRoot, ".shipwright", "profiles")
|
|
87
|
+
: userProfilesDir(deps);
|
|
88
|
+
const target = path.join(dir, `${input.name}.json`);
|
|
89
|
+
try {
|
|
90
|
+
await fsp.mkdir(dir, { recursive: true });
|
|
91
|
+
// DO-NOT #10: a symlinked .shipwright / profiles dir must not redirect the write.
|
|
92
|
+
if (input.scope === "project") {
|
|
93
|
+
const rel = path.relative(await fsp.realpath(input.projectRoot), await fsp.realpath(dir));
|
|
94
|
+
if (rel.startsWith("..") || path.isAbsolute(rel)) {
|
|
95
|
+
return { status: "failed", reason: "The project's profiles folder points outside the project, so nothing was written." };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
await fsp.writeFile(target, content, { encoding: "utf-8", flag: "wx" });
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
if (err.code === "EEXIST") {
|
|
102
|
+
return { status: "exists", reason: `A profile called “${input.name}” already exists.` };
|
|
103
|
+
}
|
|
104
|
+
return { status: "failed", reason: `Couldn't write the profile: ${String(err)}` };
|
|
105
|
+
}
|
|
106
|
+
const checked = await validateStackProfile({ name: input.name, projectRoot: input.projectRoot }, deps);
|
|
107
|
+
// A copy stays ONLY on the resolver's explicit "valid" for THIS very file. Any
|
|
108
|
+
// other outcome (invalid, unreachable, timeout, newer contract, or the resolver
|
|
109
|
+
// resolving the name to a different file) removes the file this request created
|
|
110
|
+
// (wx guarantees it is ours) and says exactly why.
|
|
111
|
+
const sameFile = checked.status === "ok" && checked.report.valid && "path" in checked.report && samePath(checked.report.path, target);
|
|
112
|
+
if (!sameFile) {
|
|
113
|
+
const why = checked.status !== "ok"
|
|
114
|
+
? "the resolver couldn't be reached to check it"
|
|
115
|
+
: !checked.report.valid
|
|
116
|
+
? "error" in checked.report ? checked.report.error : "the resolver rejected it"
|
|
117
|
+
: "the resolver resolved that name to a different profile";
|
|
118
|
+
try {
|
|
119
|
+
await fsp.rm(target, { force: true });
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return { status: "failed", reason: `The new profile didn't validate (${why}) and couldn't be removed — delete ${target} by hand.` };
|
|
123
|
+
}
|
|
124
|
+
return { status: "failed", reason: `The new profile didn't validate (${why}), so it was removed again.` };
|
|
125
|
+
}
|
|
126
|
+
return { status: "created", name: input.name, path: target };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=stack-profiles-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-profiles-create.js","sourceRoot":"","sources":["../../src/core/stack-profiles-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type CliChildSpawnFn } from "./cli-child-spawn.js";
|
|
2
|
+
import { type RunFn } from "./readiness-probe.js";
|
|
3
|
+
import { type StackProfileListReport, type StackProfileValidateReport } from "../types/stack-profile-contract.js";
|
|
4
|
+
export declare const STACK_PROFILE_CLI_TIMEOUT_MS = 20000;
|
|
5
|
+
/** Mirror of the resolver's NAME_RE + a filename-safe length cap. A name that
|
|
6
|
+
* fails this never reaches argv (a leading `-` would parse as an option). */
|
|
7
|
+
export declare const PROFILE_NAME_RE: RegExp;
|
|
8
|
+
export declare const MAX_PROFILE_NAME_LENGTH = 64;
|
|
9
|
+
export declare function isProfileNameShape(name: unknown): name is string;
|
|
10
|
+
export type StackProfileOutcome<T> = {
|
|
11
|
+
status: "ok";
|
|
12
|
+
report: T;
|
|
13
|
+
} | {
|
|
14
|
+
status: "unsupported-contract";
|
|
15
|
+
version: string;
|
|
16
|
+
} | {
|
|
17
|
+
status: "engine-unavailable";
|
|
18
|
+
reason: string;
|
|
19
|
+
repairCommand: string;
|
|
20
|
+
} | {
|
|
21
|
+
status: "failed";
|
|
22
|
+
reason: string;
|
|
23
|
+
};
|
|
24
|
+
export interface StackProfileDeps {
|
|
25
|
+
run?: RunFn;
|
|
26
|
+
spawn?: CliChildSpawnFn;
|
|
27
|
+
existsFn?: (p: string) => boolean;
|
|
28
|
+
homeDir?: string;
|
|
29
|
+
baseEnv?: NodeJS.ProcessEnv;
|
|
30
|
+
scriptOverride?: string;
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
}
|
|
33
|
+
/** The cache-owned resolver CLI (`SHIPWRIGHT_RESOLVE_PROFILE_SCRIPT` overrides
|
|
34
|
+
* the location — isolated E2E stacks run with an ephemeral HOME). */
|
|
35
|
+
export declare function resolveProfileScript(deps?: Pick<StackProfileDeps, "existsFn" | "homeDir" | "scriptOverride">): string | null;
|
|
36
|
+
export declare function listStackProfiles(input: {
|
|
37
|
+
projectRoot?: string;
|
|
38
|
+
}, deps?: StackProfileDeps): Promise<StackProfileOutcome<StackProfileListReport>>;
|
|
39
|
+
/** Validate one profile by NAME (resolved through the normal lookup order). A
|
|
40
|
+
* profile the resolver rejects is `{valid:false}` data, not a transport failure. */
|
|
41
|
+
export declare function validateStackProfile(input: {
|
|
42
|
+
name: string;
|
|
43
|
+
projectRoot?: string;
|
|
44
|
+
}, deps?: StackProfileDeps): Promise<StackProfileOutcome<StackProfileValidateReport | {
|
|
45
|
+
valid: false;
|
|
46
|
+
name: string;
|
|
47
|
+
error: string;
|
|
48
|
+
}>>;
|
|
49
|
+
//# sourceMappingURL=stack-profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-profiles.d.ts","sourceRoot":"","sources":["../../src/core/stack-profiles.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAAiD,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAEjG,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAChC,MAAM,oCAAoC,CAAC;AAE5C,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAEnD;8EAC8E;AAC9E,eAAO,MAAM,eAAe,QAAyB,CAAC;AACtD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAEhE;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAC7B;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GAC3B;IAAE,MAAM,EAAE,sBAAsB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,MAAM,EAAE,oBAAoB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACvE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;sEACsE;AACtE,wBAAgB,oBAAoB,CAClC,IAAI,GAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAM,GAC3E,MAAM,GAAG,IAAI,CAOf;AAoED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC/B,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,CAAC,CAkBtD;AAED;qFACqF;AACrF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,IAAI,GAAE,gBAAqB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,0BAA0B,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAwB1G"}
|