termdock 1.4.321 → 1.4.322
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/dist/client/assets/{App-VAvoVlm2.js → App-DEKo4SNL.js} +67 -67
- package/dist/client/assets/App-DEKo4SNL.js.br +0 -0
- package/dist/client/assets/App-DEKo4SNL.js.gz +0 -0
- package/dist/client/assets/{ArchitecturePanel-BIlIOGx7.js → ArchitecturePanel-VDM6hrwp.js} +2 -2
- package/dist/client/assets/ArchitecturePanel-VDM6hrwp.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-VDM6hrwp.js.gz +0 -0
- package/dist/client/assets/{ChangeWalkthroughPanel-BtXqyUzD.js → ChangeWalkthroughPanel-B64j3i8o.js} +1 -1
- package/dist/client/assets/ChangeWalkthroughPanel-B64j3i8o.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-B64j3i8o.js.gz +0 -0
- package/dist/client/assets/{CollaborationMainWorkspace-DUw3cqW-.js → CollaborationMainWorkspace-DG8TQNqo.js} +1 -1
- package/dist/client/assets/CollaborationMainWorkspace-DG8TQNqo.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-DG8TQNqo.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-msQsgVaI.js +2 -0
- package/dist/client/assets/{ComputerControlView-D81udDZO.js → ComputerControlView-Co-TTYas.js} +2 -2
- package/dist/client/assets/ComputerControlView-Co-TTYas.js.br +0 -0
- package/dist/client/assets/ComputerControlView-Co-TTYas.js.gz +0 -0
- package/dist/client/assets/{DagPlayground-B3hTlIFu.js → DagPlayground-kJczdJ6J.js} +1 -1
- package/dist/client/assets/DagPlayground-kJczdJ6J.js.br +0 -0
- package/dist/client/assets/DagPlayground-kJczdJ6J.js.gz +0 -0
- package/dist/client/assets/{DiffLab-C5sDPAZ5.js → DiffLab-BaaioC-q.js} +1 -1
- package/dist/client/assets/DiffLab-BaaioC-q.js.br +0 -0
- package/dist/client/assets/DiffLab-BaaioC-q.js.gz +0 -0
- package/dist/client/assets/{DiffReview-DQFgOJPF.js → DiffReview-Wfck3RIS.js} +1 -1
- package/dist/client/assets/DiffReview-Wfck3RIS.js.br +0 -0
- package/dist/client/assets/DiffReview-Wfck3RIS.js.gz +0 -0
- package/dist/client/assets/{DiffReviewLab-CZvBmujD.js → DiffReviewLab-Dblr3wgw.js} +1 -1
- package/dist/client/assets/DiffReviewLab-Dblr3wgw.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-Dblr3wgw.js.gz +0 -0
- package/dist/client/assets/{DiffViewer-DOvGC9bh.js → DiffViewer-C-utC5Ga.js} +1 -1
- package/dist/client/assets/DiffViewer-C-utC5Ga.js.br +0 -0
- package/dist/client/assets/DiffViewer-C-utC5Ga.js.gz +0 -0
- package/dist/client/assets/{ModelPreview-ClKH4BQ7.js → ModelPreview-BBLnHWVQ.js} +1 -1
- package/dist/client/assets/ModelPreview-BBLnHWVQ.js.br +0 -0
- package/dist/client/assets/ModelPreview-BBLnHWVQ.js.gz +0 -0
- package/dist/client/assets/{RightSidebar-BeegDfBO.js → RightSidebar-CUHSFkmZ.js} +3 -3
- package/dist/client/assets/RightSidebar-CUHSFkmZ.js.br +0 -0
- package/dist/client/assets/RightSidebar-CUHSFkmZ.js.gz +0 -0
- package/dist/client/assets/{abnfDiagram-VCTEODGH-CHUZIHQo.js → abnfDiagram-VCTEODGH-DDd99QpA.js} +1 -1
- package/dist/client/assets/abnfDiagram-VCTEODGH-DDd99QpA.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-DDd99QpA.js.gz +0 -0
- package/dist/client/assets/{app-Bj0N393t.js → app-CfqF7_nh.js} +3 -3
- package/dist/client/assets/app-CfqF7_nh.js.br +0 -0
- package/dist/client/assets/app-CfqF7_nh.js.gz +0 -0
- package/dist/client/assets/{arc-CIJEXYV7.js → arc-C3dck_E0.js} +1 -1
- package/dist/client/assets/arc-C3dck_E0.js.br +0 -0
- package/dist/client/assets/arc-C3dck_E0.js.gz +0 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-CcX1UBXG.js → architectureDiagram-5GKGNRK7-C3bCQc2w.js} +1 -1
- package/dist/client/assets/architectureDiagram-5GKGNRK7-C3bCQc2w.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-C3bCQc2w.js.gz +0 -0
- package/dist/client/assets/{blockDiagram-I7D4REHJ-gDLrIBDk.js → blockDiagram-I7D4REHJ-znMn6iCQ.js} +1 -1
- package/dist/client/assets/blockDiagram-I7D4REHJ-znMn6iCQ.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-znMn6iCQ.js.gz +0 -0
- package/dist/client/assets/{c4Diagram-7LVT6UL2-BQA7WLEL.js → c4Diagram-7LVT6UL2-C0sopIsj.js} +1 -1
- package/dist/client/assets/c4Diagram-7LVT6UL2-C0sopIsj.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-C0sopIsj.js.gz +0 -0
- package/dist/client/assets/channel-CMC8t83j.js +1 -0
- package/dist/client/assets/{chunk-2Q5K7J3B-CPCY618J.js → chunk-2Q5K7J3B-f7USyccJ.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-Cc3Czx6A.js → chunk-5VM5RSS4-Ck2xirDs.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-3scxqZTK.js → chunk-F27PBJKO-DaDCIj30.js} +1 -1
- package/dist/client/assets/chunk-F27PBJKO-DaDCIj30.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-DaDCIj30.js.gz +0 -0
- package/dist/client/assets/{chunk-IMKFNOWR-BOCOE1VY.js → chunk-IMKFNOWR-DEC_On5x.js} +1 -1
- package/dist/client/assets/chunk-IMKFNOWR-DEC_On5x.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-DEC_On5x.js.gz +0 -0
- package/dist/client/assets/{chunk-JWPE2WC7-DX2Onu68.js → chunk-JWPE2WC7-BrswC3n2.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-C4MN3QRd.js → chunk-POPQ4Y6H-ClMbDV47.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-DOKo3BNt.js → chunk-SVP7TREG-D7_1VwC5.js} +1 -1
- package/dist/client/assets/chunk-SVP7TREG-D7_1VwC5.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-D7_1VwC5.js.gz +0 -0
- package/dist/client/assets/{chunk-TICWLB2K-CPpFFmO9.js → chunk-TICWLB2K-D5jzVTZ8.js} +1 -1
- package/dist/client/assets/chunk-TICWLB2K-D5jzVTZ8.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-D5jzVTZ8.js.gz +0 -0
- package/dist/client/assets/{chunk-XXDRQBXY-Zp_XOFU2.js → chunk-XXDRQBXY-DOhaoLcX.js} +1 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-ElMHzA-E.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-ElMHzA-E.js +1 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-iYXdWZMG.js → cose-bilkent-JH36ORCC-DOsaKgiX.js} +1 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-DOsaKgiX.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-DOsaKgiX.js.gz +0 -0
- package/dist/client/assets/{cynefin-OW5HDTMX-CXRpxmcA.js → cynefin-OW5HDTMX-CMcLh_wh.js} +1 -1
- package/dist/client/assets/cynefin-OW5HDTMX-CMcLh_wh.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-CMcLh_wh.js.gz +0 -0
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-CH1TQhgO.js → cynefinDiagram-5FMLGOSQ-Dd8bfq9V.js} +1 -1
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Dd8bfq9V.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Dd8bfq9V.js.gz +0 -0
- package/dist/client/assets/{dagre-GXQ25YYZ-BdshuKJr.js → dagre-GXQ25YYZ-BlW7fAi0.js} +1 -1
- package/dist/client/assets/dagre-GXQ25YYZ-BlW7fAi0.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-BlW7fAi0.js.gz +0 -0
- package/dist/client/assets/{diagram-S7CK7UJ4-VbNBimIR.js → diagram-S7CK7UJ4-B0-tKahG.js} +1 -1
- package/dist/client/assets/diagram-S7CK7UJ4-B0-tKahG.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-B0-tKahG.js.gz +0 -0
- package/dist/client/assets/{diagram-UQ7AKVKN-D_NUFcq3.js → diagram-UQ7AKVKN-BQumj4Dw.js} +1 -1
- package/dist/client/assets/diagram-UQ7AKVKN-BQumj4Dw.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-BQumj4Dw.js.gz +0 -0
- package/dist/client/assets/{diagram-VSXAHHWV-CfYRQ4mq.js → diagram-VSXAHHWV-Zx_FLmPP.js} +1 -1
- package/dist/client/assets/diagram-VSXAHHWV-Zx_FLmPP.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-Zx_FLmPP.js.gz +0 -0
- package/dist/client/assets/{diagram-VX7I27RA-YHy6vMjY.js → diagram-VX7I27RA-CEZvatNH.js} +1 -1
- package/dist/client/assets/diagram-VX7I27RA-CEZvatNH.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-CEZvatNH.js.gz +0 -0
- package/dist/client/assets/{diagram-Z3DM3KII-DvHqYL0O.js → diagram-Z3DM3KII-CJ9IEQ8j.js} +1 -1
- package/dist/client/assets/diagram-Z3DM3KII-CJ9IEQ8j.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-CJ9IEQ8j.js.gz +0 -0
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-Bl9bDxAP.js → ebnfDiagram-PWID7BFC-sQQMv3ea.js} +1 -1
- package/dist/client/assets/ebnfDiagram-PWID7BFC-sQQMv3ea.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-sQQMv3ea.js.gz +0 -0
- package/dist/client/assets/{erDiagram-RLTQ6QDP-DauNoBZZ.js → erDiagram-RLTQ6QDP-D3rMpj7M.js} +1 -1
- package/dist/client/assets/erDiagram-RLTQ6QDP-D3rMpj7M.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-D3rMpj7M.js.gz +0 -0
- package/dist/client/assets/{flowDiagram-HODETNUW-D6eDWfJY.js → flowDiagram-HODETNUW-B6QZiE0-.js} +1 -1
- package/dist/client/assets/flowDiagram-HODETNUW-B6QZiE0-.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-B6QZiE0-.js.gz +0 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CWHSwTR6.js → ganttDiagram-EL5Y4UJY-Bw9bltcu.js} +1 -1
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-Bw9bltcu.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-Bw9bltcu.js.gz +0 -0
- package/dist/client/assets/{gestureArbiter-nU4jhK3S.js → gestureArbiter-Cczz34oI.js} +1 -1
- package/dist/client/assets/gestureArbiter-Cczz34oI.js.br +0 -0
- package/dist/client/assets/{gestureArbiter-nU4jhK3S.js.gz → gestureArbiter-Cczz34oI.js.gz} +0 -0
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-BHYt5-_X.js → gitGraphDiagram-WWUBYQGX-mdnkxjeD.js} +1 -1
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-mdnkxjeD.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-mdnkxjeD.js.gz +0 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-DPmlcUaZ.js → infoDiagram-27XIBGKW-DyrPP3Yf.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DAn65XKZ.js → ishikawaDiagram-5VMMS53U-CEPH_ePM.js} +1 -1
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-CEPH_ePM.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-CEPH_ePM.js.gz +0 -0
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-B2c5x9jb.js → journeyDiagram-3NMN7TZE-CQ0PjBy7.js} +1 -1
- package/dist/client/assets/journeyDiagram-3NMN7TZE-CQ0PjBy7.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-CQ0PjBy7.js.gz +0 -0
- package/dist/client/assets/{kanban-definition-UXKFOSKX-CMeEp_9r.js → kanban-definition-UXKFOSKX-BpQUXA60.js} +1 -1
- package/dist/client/assets/kanban-definition-UXKFOSKX-BpQUXA60.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-BpQUXA60.js.gz +0 -0
- package/dist/client/assets/{layout-Db99ysGT.js → layout-BdptC7rq.js} +1 -1
- package/dist/client/assets/layout-BdptC7rq.js.br +0 -0
- package/dist/client/assets/{layout-Db99ysGT.js.gz → layout-BdptC7rq.js.gz} +0 -0
- package/dist/client/assets/{linear-B6mREmTG.js → linear-C2cSRCxu.js} +1 -1
- package/dist/client/assets/linear-C2cSRCxu.js.br +0 -0
- package/dist/client/assets/linear-C2cSRCxu.js.gz +0 -0
- package/dist/client/assets/{mermaid.core-DndzUmju.js → mermaid.core-ClVMFyAU.js} +5 -5
- package/dist/client/assets/mermaid.core-ClVMFyAU.js.br +0 -0
- package/dist/client/assets/mermaid.core-ClVMFyAU.js.gz +0 -0
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-qYAlDvc4.js → mindmap-definition-YA3MSWOX-D0AFCmsY.js} +1 -1
- package/dist/client/assets/mindmap-definition-YA3MSWOX-D0AFCmsY.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-D0AFCmsY.js.gz +0 -0
- package/dist/client/assets/{passwordBootstrap-DaJXVcdB.js → passwordBootstrap-R2qlU2Pq.js} +1 -1
- package/dist/client/assets/passwordBootstrap-R2qlU2Pq.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-R2qlU2Pq.js.gz +0 -0
- package/dist/client/assets/{pegDiagram-XKGWAZYB-Dg5DCFIn.js → pegDiagram-XKGWAZYB-BGAh0bwg.js} +1 -1
- package/dist/client/assets/pegDiagram-XKGWAZYB-BGAh0bwg.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-BGAh0bwg.js.gz +0 -0
- package/dist/client/assets/{pieDiagram-E7YTZNPT-dje1AAFI.js → pieDiagram-E7YTZNPT-CDOZUF44.js} +1 -1
- package/dist/client/assets/pieDiagram-E7YTZNPT-CDOZUF44.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-CDOZUF44.js.gz +0 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-DLXI6hrS.js → quadrantDiagram-AXDQQJYC-D_Qn6NTU.js} +1 -1
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-D_Qn6NTU.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-D_Qn6NTU.js.gz +0 -0
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-DcY-P8Q_.js → railroadDiagram-O6MQD6OU-qUVGWhJN.js} +1 -1
- package/dist/client/assets/railroadDiagram-O6MQD6OU-qUVGWhJN.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-qUVGWhJN.js.gz +0 -0
- package/dist/client/assets/{rdpSession-JkZuPKb3.js → rdpSession-hgCM4i-j.js} +1 -1
- package/dist/client/assets/rdpSession-hgCM4i-j.js.br +0 -0
- package/dist/client/assets/rdpSession-hgCM4i-j.js.gz +0 -0
- package/dist/client/assets/{referenceLongPress-CR3uo3V0.js → referenceLongPress-BEMsP11a.js} +1 -1
- package/dist/client/assets/referenceLongPress-BEMsP11a.js.br +0 -0
- package/dist/client/assets/referenceLongPress-BEMsP11a.js.gz +0 -0
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-B-GLzS7h.js → requirementDiagram-BXWQKSXE-BBQMQuVZ.js} +1 -1
- package/dist/client/assets/requirementDiagram-BXWQKSXE-BBQMQuVZ.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-BBQMQuVZ.js.gz +0 -0
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CINtGjgu.js → sankeyDiagram-P5KCCOFB-CeEExsqW.js} +1 -1
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-CeEExsqW.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-CeEExsqW.js.gz +0 -0
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BRE-_raI.js → sequenceDiagram-WJ2MYXX4-7ZPO-X0a.js} +1 -1
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-7ZPO-X0a.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-7ZPO-X0a.js.gz +0 -0
- package/dist/client/assets/{sizeCapture-INFHLROL-v2bGYNk3.js → sizeCapture-INFHLROL-MBjz7Snm.js} +1 -1
- package/dist/client/assets/sizeCapture-INFHLROL-MBjz7Snm.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-MBjz7Snm.js.gz +0 -0
- package/dist/client/assets/{sparkles-Dx518Xui.js → sparkles-C9ShmGPf.js} +1 -1
- package/dist/client/assets/{stateDiagram-D77RDMKH-CIQ1zGkb.js → stateDiagram-D77RDMKH-DtLp89uP.js} +1 -1
- package/dist/client/assets/stateDiagram-D77RDMKH-DtLp89uP.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-DtLp89uP.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CIQb4Dp7.js +1 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-DEjGaJr6.js → swimlanes-42K2YHIH-Bc02S1q-.js} +1 -1
- package/dist/client/assets/swimlanes-42K2YHIH-Bc02S1q-.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-Bc02S1q-.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-RiKL7eXI.js +8 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-BPbZrudq.js → timeline-definition-24CTP7MA-BLLwbOm5.js} +1 -1
- package/dist/client/assets/timeline-definition-24CTP7MA-BLLwbOm5.js.br +0 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-BPbZrudq.js.gz → timeline-definition-24CTP7MA-BLLwbOm5.js.gz} +0 -0
- package/dist/client/assets/{triangle-alert-CVm2qdGE.js → triangle-alert-i_L8ws6U.js} +1 -1
- package/dist/client/assets/{vennDiagram-4TSXK5OY-CAsKNSfN.js → vennDiagram-4TSXK5OY-8FcrAdbk.js} +1 -1
- package/dist/client/assets/vennDiagram-4TSXK5OY-8FcrAdbk.js.br +0 -0
- package/dist/client/assets/{vennDiagram-4TSXK5OY-CAsKNSfN.js.gz → vennDiagram-4TSXK5OY-8FcrAdbk.js.gz} +0 -0
- package/dist/client/assets/{videoCompression-CCOgxfhm.js → videoCompression-RIaDabW4.js} +1 -1
- package/dist/client/assets/videoCompression-RIaDabW4.js.br +0 -0
- package/dist/client/assets/videoCompression-RIaDabW4.js.gz +0 -0
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-EeabO9yU.js → wardleyDiagram-VM6X3IG4-paL2wRrJ.js} +1 -1
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-paL2wRrJ.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-paL2wRrJ.js.gz +0 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-MSUoQl2z.js → xychartDiagram-S5SC5T6Z-BM5qJ4E7.js} +1 -1
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-BM5qJ4E7.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-BM5qJ4E7.js.gz +0 -0
- package/dist/client/index.html +1 -1
- package/dist/client/index.html.br +0 -0
- package/dist/client/index.html.gz +0 -0
- package/dist/client/sw.js +1 -1
- package/dist/client/sw.js.br +0 -0
- package/dist/client/sw.js.gz +0 -0
- package/dist/server/agent/collaborationCli.js +5 -1
- package/dist/server/agent/collaborationRoutes.js +2 -0
- package/dist/server/agent/collaborationTaskCli.js +1 -1
- package/dist/server/agent/collaborationTaskGuidance.js +2 -0
- package/dist/server/agent/collaborationTaskStore.js +18 -11
- package/dist/server/agent/collaborationTmuxDelivery.js +3 -2
- package/dist/server/agent/integrationCli.js +6 -0
- package/dist/server/agent/integrationServer.js +2 -0
- package/dist/server/agent/promptDelivery.js +2 -2
- package/dist/server/agent/sessionLaunchState.js +20 -0
- package/dist/server/agent/terminalInput.js +17 -0
- package/dist/server/routes/terminal.js +48 -37
- package/docs/integrations.md +49 -0
- package/package.json +1 -1
- package/runtime-manifest.json +3 -3
- package/dist/client/assets/App-VAvoVlm2.js.br +0 -0
- package/dist/client/assets/App-VAvoVlm2.js.gz +0 -0
- package/dist/client/assets/ArchitecturePanel-BIlIOGx7.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-BIlIOGx7.js.gz +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-BtXqyUzD.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-BtXqyUzD.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-DUw3cqW-.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-DUw3cqW-.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-C2sQQp6K.js +0 -2
- package/dist/client/assets/ComputerControlView-D81udDZO.js.br +0 -0
- package/dist/client/assets/ComputerControlView-D81udDZO.js.gz +0 -0
- package/dist/client/assets/DagPlayground-B3hTlIFu.js.br +0 -0
- package/dist/client/assets/DagPlayground-B3hTlIFu.js.gz +0 -0
- package/dist/client/assets/DiffLab-C5sDPAZ5.js.br +0 -0
- package/dist/client/assets/DiffLab-C5sDPAZ5.js.gz +0 -0
- package/dist/client/assets/DiffReview-DQFgOJPF.js.br +0 -0
- package/dist/client/assets/DiffReview-DQFgOJPF.js.gz +0 -0
- package/dist/client/assets/DiffReviewLab-CZvBmujD.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-CZvBmujD.js.gz +0 -0
- package/dist/client/assets/DiffViewer-DOvGC9bh.js.br +0 -0
- package/dist/client/assets/DiffViewer-DOvGC9bh.js.gz +0 -0
- package/dist/client/assets/ModelPreview-ClKH4BQ7.js.br +0 -0
- package/dist/client/assets/ModelPreview-ClKH4BQ7.js.gz +0 -0
- package/dist/client/assets/RightSidebar-BeegDfBO.js.br +0 -0
- package/dist/client/assets/RightSidebar-BeegDfBO.js.gz +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-CHUZIHQo.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-CHUZIHQo.js.gz +0 -0
- package/dist/client/assets/app-Bj0N393t.js.br +0 -0
- package/dist/client/assets/app-Bj0N393t.js.gz +0 -0
- package/dist/client/assets/arc-CIJEXYV7.js.br +0 -0
- package/dist/client/assets/arc-CIJEXYV7.js.gz +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CcX1UBXG.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CcX1UBXG.js.gz +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-gDLrIBDk.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-gDLrIBDk.js.gz +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-BQA7WLEL.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-BQA7WLEL.js.gz +0 -0
- package/dist/client/assets/channel-OHMJip5O.js +0 -1
- package/dist/client/assets/chunk-F27PBJKO-3scxqZTK.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-3scxqZTK.js.gz +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-BOCOE1VY.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-BOCOE1VY.js.gz +0 -0
- package/dist/client/assets/chunk-SVP7TREG-DOKo3BNt.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-DOKo3BNt.js.gz +0 -0
- package/dist/client/assets/chunk-TICWLB2K-CPpFFmO9.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-CPpFFmO9.js.gz +0 -0
- package/dist/client/assets/classDiagram-ZZMXUADV-DwA5mGyC.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-DwA5mGyC.js +0 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-iYXdWZMG.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-iYXdWZMG.js.gz +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-CXRpxmcA.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-CXRpxmcA.js.gz +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CH1TQhgO.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CH1TQhgO.js.gz +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-BdshuKJr.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-BdshuKJr.js.gz +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-VbNBimIR.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-VbNBimIR.js.gz +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-D_NUFcq3.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-D_NUFcq3.js.gz +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-CfYRQ4mq.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-CfYRQ4mq.js.gz +0 -0
- package/dist/client/assets/diagram-VX7I27RA-YHy6vMjY.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-YHy6vMjY.js.gz +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-DvHqYL0O.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-DvHqYL0O.js.gz +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-Bl9bDxAP.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-Bl9bDxAP.js.gz +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-DauNoBZZ.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-DauNoBZZ.js.gz +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-D6eDWfJY.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-D6eDWfJY.js.gz +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CWHSwTR6.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CWHSwTR6.js.gz +0 -0
- package/dist/client/assets/gestureArbiter-nU4jhK3S.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BHYt5-_X.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BHYt5-_X.js.gz +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-DAn65XKZ.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-DAn65XKZ.js.gz +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-B2c5x9jb.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-B2c5x9jb.js.gz +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-CMeEp_9r.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-CMeEp_9r.js.gz +0 -0
- package/dist/client/assets/layout-Db99ysGT.js.br +0 -0
- package/dist/client/assets/linear-B6mREmTG.js.br +0 -0
- package/dist/client/assets/linear-B6mREmTG.js.gz +0 -0
- package/dist/client/assets/mermaid.core-DndzUmju.js.br +0 -0
- package/dist/client/assets/mermaid.core-DndzUmju.js.gz +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-qYAlDvc4.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-qYAlDvc4.js.gz +0 -0
- package/dist/client/assets/passwordBootstrap-DaJXVcdB.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-DaJXVcdB.js.gz +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-Dg5DCFIn.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-Dg5DCFIn.js.gz +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-dje1AAFI.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-dje1AAFI.js.gz +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-DLXI6hrS.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-DLXI6hrS.js.gz +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-DcY-P8Q_.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-DcY-P8Q_.js.gz +0 -0
- package/dist/client/assets/rdpSession-JkZuPKb3.js.br +0 -0
- package/dist/client/assets/rdpSession-JkZuPKb3.js.gz +0 -0
- package/dist/client/assets/referenceLongPress-CR3uo3V0.js.br +0 -0
- package/dist/client/assets/referenceLongPress-CR3uo3V0.js.gz +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-B-GLzS7h.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-B-GLzS7h.js.gz +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-CINtGjgu.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-CINtGjgu.js.gz +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BRE-_raI.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BRE-_raI.js.gz +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-v2bGYNk3.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-v2bGYNk3.js.gz +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-CIQ1zGkb.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-CIQ1zGkb.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-DCGuhzdh.js +0 -1
- package/dist/client/assets/swimlanes-42K2YHIH-DEjGaJr6.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-DEjGaJr6.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-Bj14fTzZ.js +0 -8
- package/dist/client/assets/timeline-definition-24CTP7MA-BPbZrudq.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-CAsKNSfN.js.br +0 -0
- package/dist/client/assets/videoCompression-CCOgxfhm.js.br +0 -0
- package/dist/client/assets/videoCompression-CCOgxfhm.js.gz +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-EeabO9yU.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-EeabO9yU.js.gz +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-MSUoQl2z.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-MSUoQl2z.js.gz +0 -0
|
@@ -40,6 +40,7 @@ export function writeCollaborationTmuxPane(run, pane, prompt, stdin, assertCurre
|
|
|
40
40
|
progress?.('queue_wait');
|
|
41
41
|
return serializeTerminalInput(paneInputKey(pane), () => {
|
|
42
42
|
progress?.('queue_acquired');
|
|
43
|
+
assertCurrent?.('queue_acquired');
|
|
43
44
|
return writeTmuxPrompt(run, pane, prompt, stdin, assertCurrent, progress);
|
|
44
45
|
});
|
|
45
46
|
}
|
|
@@ -47,7 +48,7 @@ async function writeTmuxPrompt(run, pane, prompt,
|
|
|
47
48
|
/** Body travels on stdin so tmux cannot parse its semicolons/backslashes. */
|
|
48
49
|
stdin, assertCurrent, progress) {
|
|
49
50
|
await assertSamePane(run, pane);
|
|
50
|
-
assertCurrent?.();
|
|
51
|
+
assertCurrent?.('before_paste');
|
|
51
52
|
// A fixed pane target is independent of the current window, keyboard focus
|
|
52
53
|
// and browser presence. Delivery goes through a named tmux buffer rather
|
|
53
54
|
// than `send-keys -l`: while a pane is in copy-mode, literal bytes are
|
|
@@ -81,7 +82,7 @@ stdin, assertCurrent, progress) {
|
|
|
81
82
|
progress?.('paste_written');
|
|
82
83
|
await waitForPromptSubmit();
|
|
83
84
|
await assertSamePane(run, pane);
|
|
84
|
-
assertCurrent?.();
|
|
85
|
+
assertCurrent?.('before_submit');
|
|
85
86
|
progress?.('submit_attempted');
|
|
86
87
|
await run([
|
|
87
88
|
// The submit key rides outside the paste block: inside it, an editor
|
|
@@ -61,6 +61,12 @@ export const INTEGRATION_HELP = `td integration — local scoped integration adm
|
|
|
61
61
|
diagnostics <TD-session-id> (read stored launch/restore diagnostics; administrator only)
|
|
62
62
|
1.4.314 adds phase/timestamps, paste/submit write facts and target-change
|
|
63
63
|
evidence; no argv/environment/credentials or application readiness claim.
|
|
64
|
+
1.4.322 adds guard_captured/runtime_resolving/runtime_resolved stages and
|
|
65
|
+
target_change.check_phase/guard_captured_at/checked_at, launch IDs and route revisions.
|
|
66
|
+
Check actual server agent_launch_generation_consistency=true (minimum 1.4.322),
|
|
67
|
+
terminal_input_check_diagnostics=true; upgrading only the CLI does not fix a running service.
|
|
68
|
+
TERMINAL_INPUT_TARGET_CHANGED still rejects an actually replaced target.
|
|
69
|
+
create never auto-retries; retry-cold remains a separate, explicitly authorized operation.
|
|
64
70
|
Prior versions cannot reconstruct missing launch evidence retroactively.
|
|
65
71
|
create --file <policy.json> --credential-file <private-output.json>
|
|
66
72
|
update --file <policy.json> (same identity/group; preserves the credential)
|
|
@@ -246,6 +246,8 @@ export class IntegrationRuntime {
|
|
|
246
246
|
session_startup_input_clear: true, session_startup_input_clear_min_version: '1.4.310',
|
|
247
247
|
agent_launch_process_check: true, agent_launch_process_check_min_version: '1.4.312',
|
|
248
248
|
terminal_input_runtime_fence: true, terminal_input_runtime_fence_min_version: '1.4.313',
|
|
249
|
+
agent_launch_generation_consistency: true, agent_launch_generation_consistency_min_version: '1.4.322',
|
|
250
|
+
terminal_input_check_diagnostics: true,
|
|
249
251
|
session_launch_diagnostics: true, session_launch_diagnostics_min_version: '1.4.314',
|
|
250
252
|
session_cold_retry: true, session_cold_retry_min_version: '1.4.314',
|
|
251
253
|
session_rename: true, session_rename_min_version: '1.4.315',
|
|
@@ -22,12 +22,12 @@ export function writeBracketedPrompt(target, prompt, assertCurrent, progress) {
|
|
|
22
22
|
progress?.('queue_wait');
|
|
23
23
|
return serializeTerminalInput(target, async () => {
|
|
24
24
|
progress?.('queue_acquired');
|
|
25
|
-
assertCurrent?.();
|
|
25
|
+
assertCurrent?.('queue_acquired');
|
|
26
26
|
progress?.('paste_attempted');
|
|
27
27
|
target.write(buildBracketedPasteBytes(prompt));
|
|
28
28
|
progress?.('paste_written');
|
|
29
29
|
await waitForPromptSubmit();
|
|
30
|
-
assertCurrent?.();
|
|
30
|
+
assertCurrent?.('before_submit');
|
|
31
31
|
progress?.('submit_attempted');
|
|
32
32
|
target.write('\r');
|
|
33
33
|
progress?.('submit_written');
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TerminalInputTargetChangedError } from './terminalInput.js';
|
|
2
|
+
/** Display/identity metadata may have crossed an await with an old snapshot.
|
|
3
|
+
* Only the launch lifecycle can change these server-owned control fields. */
|
|
4
|
+
export function mergeSessionLaunchState(candidate, current, change) {
|
|
5
|
+
if (!change)
|
|
6
|
+
return current ? { ...candidate,
|
|
7
|
+
agentLaunchGeneration: current.agentLaunchGeneration ?? null,
|
|
8
|
+
agentLaunchCheck: current.agentLaunchCheck ?? null,
|
|
9
|
+
} : candidate;
|
|
10
|
+
if (!current || (current.agentLaunchGeneration ?? null) !== change.expectedGeneration
|
|
11
|
+
|| (current.agentLaunchCheck?.id ?? null) !== change.expectedCheckId) {
|
|
12
|
+
throw new TerminalInputTargetChangedError({
|
|
13
|
+
expected_backend_session_id: candidate.backendSessionId, current_backend_session_id: current?.backendSessionId ?? null,
|
|
14
|
+
expected_launch_id: change.expectedGeneration, current_launch_id: current?.agentLaunchGeneration ?? null,
|
|
15
|
+
backend_instance_matches: !!current && candidate.backendSessionId === current.backendSessionId,
|
|
16
|
+
check_phase: 'launch_state_commit', checked_at: Date.now(),
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return { ...candidate, agentLaunchGeneration: change.generation, agentLaunchCheck: change.check };
|
|
20
|
+
}
|
|
@@ -22,6 +22,23 @@ export class TerminalInputTargetChangedError extends Error {
|
|
|
22
22
|
this.evidence = evidence;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
|
+
/** Capture once, including for a launch's own command. Never adopt a newer
|
|
26
|
+
* generation simply because the physical backend has stayed the same. */
|
|
27
|
+
export function captureRuntimeInputGuard(current, expected = current()) {
|
|
28
|
+
const capturedAt = Date.now();
|
|
29
|
+
return (phase = 'guard_capture') => {
|
|
30
|
+
const actual = current();
|
|
31
|
+
const matches = actual.backendInstance === expected.backendInstance;
|
|
32
|
+
if (actual.backendSessionId !== expected.backendSessionId || !matches
|
|
33
|
+
|| actual.launchId !== expected.launchId || actual.routeRevision !== expected.routeRevision) {
|
|
34
|
+
throw new TerminalInputTargetChangedError({ expected_backend_session_id: expected.backendSessionId,
|
|
35
|
+
current_backend_session_id: actual.backendSessionId, expected_launch_id: expected.launchId,
|
|
36
|
+
current_launch_id: actual.launchId, backend_instance_matches: matches, check_phase: phase,
|
|
37
|
+
guard_captured_at: capturedAt, checked_at: Date.now(), expected_route_revision: expected.routeRevision,
|
|
38
|
+
current_route_revision: actual.routeRevision });
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
25
42
|
/** Clearing a one-time launch check does not change the runtime generation. */
|
|
26
43
|
export function captureTerminalInputGuard(current, expected = current()) {
|
|
27
44
|
return () => {
|
|
@@ -51,7 +51,8 @@ import { archiveTaskWorkspace, restoreTaskWorkspace, snapshotTaskWorkspace } fro
|
|
|
51
51
|
import { isTmuxRecoveryCandidate } from '../utils/tmuxRecoveryCandidate.js';
|
|
52
52
|
import { AutomationStore, normalizeAutomationSchedule } from '../agent/automationStore.js';
|
|
53
53
|
import { writeBracketedPrompt, canDeliverPromptToAgent } from '../agent/promptDelivery.js';
|
|
54
|
-
import { captureTerminalInputGuard,
|
|
54
|
+
import { captureTerminalInputGuard, captureRuntimeInputGuard, waitAndWriteTerminalInput } from '../agent/terminalInput.js';
|
|
55
|
+
import { mergeSessionLaunchState } from '../agent/sessionLaunchState.js';
|
|
55
56
|
import { agentLaunchBlockReason, normalizeAgentLaunchCheck } from '../agent/agentLaunchCheck.js';
|
|
56
57
|
import { prepareSupervisionEnable } from '../utils/enableSupervision.js';
|
|
57
58
|
import { buildServerHealthState, dismissServerHealth } from '../utils/serverHealth.js';
|
|
@@ -1082,8 +1083,9 @@ async function withInventoryOpenLock(key, task) {
|
|
|
1082
1083
|
inventoryOpenLocks.set(key, pending);
|
|
1083
1084
|
return pending;
|
|
1084
1085
|
}
|
|
1085
|
-
function upsertGlobalSessionRecord(record) {
|
|
1086
|
-
const
|
|
1086
|
+
function upsertGlobalSessionRecord(record, launchChange) {
|
|
1087
|
+
const current = globalSessionState.sessions.find(candidate => candidate.sessionId === record.sessionId);
|
|
1088
|
+
const normalized = normalizePersistedClientSession(mergeSessionLaunchState(record, current, launchChange));
|
|
1087
1089
|
if (!normalized) {
|
|
1088
1090
|
throw new Error('invalid session record');
|
|
1089
1091
|
}
|
|
@@ -1462,8 +1464,16 @@ async function beginAgentLaunchCheck(frontendSessionId, agentSlug, nativeSession
|
|
|
1462
1464
|
if (!record)
|
|
1463
1465
|
throw new Error('SESSION_REMOVED');
|
|
1464
1466
|
const id = randomUUID();
|
|
1465
|
-
upsertGlobalSessionRecord(
|
|
1466
|
-
|
|
1467
|
+
const updated = upsertGlobalSessionRecord(record, { expectedGeneration: record.agentLaunchGeneration ?? null,
|
|
1468
|
+
expectedCheckId: record.agentLaunchCheck?.id ?? null, generation: id,
|
|
1469
|
+
check: { id, agentSlug, nativeSessionId, deadline: Date.now() + 120_000 } });
|
|
1470
|
+
// Capture the guard before persistence yields. The launch command must use
|
|
1471
|
+
// this exact generation, even if another launch occurs during an await.
|
|
1472
|
+
const assertCurrent = terminalInputGuard(updated);
|
|
1473
|
+
assertCurrent('guard_capture');
|
|
1474
|
+
await persistGlobalStateNow(true);
|
|
1475
|
+
assertCurrent('launch_persisted');
|
|
1476
|
+
return assertCurrent;
|
|
1467
1477
|
}
|
|
1468
1478
|
async function observeAgentLaunchCheck(record, observed) {
|
|
1469
1479
|
const check = record.agentLaunchCheck;
|
|
@@ -1477,53 +1487,56 @@ async function observeAgentLaunchCheck(record, observed) {
|
|
|
1477
1487
|
return { state: 'offline', reason: 'SESSION_REMOVED' };
|
|
1478
1488
|
if (latest.agentLaunchCheck?.id !== check.id)
|
|
1479
1489
|
return { state: 'recovering', reason: 'AGENT_LAUNCH_CHANGED' };
|
|
1480
|
-
upsertGlobalSessionRecord(
|
|
1490
|
+
upsertGlobalSessionRecord(latest, { expectedGeneration: latest.agentLaunchGeneration ?? null,
|
|
1491
|
+
expectedCheckId: check.id, generation: latest.agentLaunchGeneration ?? null, check: null });
|
|
1481
1492
|
await persistGlobalStateNow();
|
|
1482
1493
|
return null;
|
|
1483
1494
|
}
|
|
1484
1495
|
function terminalInputGuard(record) {
|
|
1485
1496
|
const frontendSessionId = record.sessionId;
|
|
1486
1497
|
const backendSessionId = record.backendSessionId;
|
|
1487
|
-
const
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
return () => {
|
|
1498
|
+
const expected = { backendSessionId, launchId: record.agentLaunchGeneration ?? null,
|
|
1499
|
+
routeRevision: collaborationRouting.get(frontendSessionId)?.routeRevision ?? null,
|
|
1500
|
+
backendInstance: backendSessionId ? terminalSessions.get(backendSessionId) : undefined };
|
|
1501
|
+
return captureRuntimeInputGuard(() => {
|
|
1491
1502
|
const latest = globalSessionState.sessions.find(candidate => candidate.sessionId === frontendSessionId);
|
|
1492
1503
|
if (!latest)
|
|
1493
1504
|
throw new Error('SESSION_REMOVED');
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
expected_launch_id: launchId, current_launch_id: latest.agentLaunchGeneration ?? null, backend_instance_matches: instanceMatches });
|
|
1499
|
-
}
|
|
1500
|
-
};
|
|
1505
|
+
return { backendSessionId: latest.backendSessionId, launchId: latest.agentLaunchGeneration ?? null,
|
|
1506
|
+
routeRevision: collaborationRouting.get(frontendSessionId)?.routeRevision ?? null,
|
|
1507
|
+
backendInstance: latest.backendSessionId ? terminalSessions.get(latest.backendSessionId) : undefined };
|
|
1508
|
+
}, expected);
|
|
1501
1509
|
}
|
|
1502
1510
|
/** tmux input always uses the pane queue, including automation and launch commands. */
|
|
1503
1511
|
async function automaticTerminalInput(record, assertCurrent = terminalInputGuard(record), progress) {
|
|
1504
|
-
|
|
1512
|
+
progress?.('guard_captured');
|
|
1513
|
+
assertCurrent('runtime_resolve');
|
|
1514
|
+
progress?.('runtime_resolving');
|
|
1505
1515
|
if (record.mode === 'tmux') {
|
|
1506
1516
|
const binding = collaborationRouting.get(record.sessionId) ?? {
|
|
1507
1517
|
sessionId: record.sessionId, backendSessionId: record.backendSessionId, mode: record.mode,
|
|
1508
1518
|
tmuxSessionName: record.tmuxSessionName, agentSlug: null, nativeSessionId: null, pane: null,
|
|
1509
1519
|
};
|
|
1510
1520
|
const inspected = await inspectCollaborationTmux(binding, null, true);
|
|
1511
|
-
assertCurrent();
|
|
1521
|
+
assertCurrent('runtime_resolved');
|
|
1512
1522
|
if (inspected.state !== 'ready' || !inspected.pane)
|
|
1513
1523
|
throw new Error(inspected.reason ?? 'TMUX_PANE_UNAVAILABLE');
|
|
1514
1524
|
const pane = inspected.pane;
|
|
1525
|
+
progress?.('runtime_resolved');
|
|
1515
1526
|
return (prompt) => writeCollaborationTmuxPane(runTmux, pane, prompt, runTmuxStdin, assertCurrent, progress);
|
|
1516
1527
|
}
|
|
1517
1528
|
const backend = record.backendSessionId ? terminalSessions.get(record.backendSessionId) : null;
|
|
1518
1529
|
if (!backend)
|
|
1519
1530
|
throw new Error('SHELL_BACKEND_NOT_RUNNING');
|
|
1531
|
+
assertCurrent('runtime_resolved');
|
|
1532
|
+
progress?.('runtime_resolved');
|
|
1520
1533
|
return (prompt) => writeBracketedPrompt(backend.ptyProcess, prompt, assertCurrent, progress);
|
|
1521
1534
|
}
|
|
1522
|
-
async function writeAutomaticTerminalPrompt(frontendSessionId, prompt, progress) {
|
|
1535
|
+
async function writeAutomaticTerminalPrompt(frontendSessionId, prompt, progress, launchGuard) {
|
|
1523
1536
|
const record = globalSessionState.sessions.find(candidate => candidate.sessionId === frontendSessionId);
|
|
1524
1537
|
if (!record)
|
|
1525
1538
|
throw new Error('SESSION_REMOVED');
|
|
1526
|
-
const write = await automaticTerminalInput(record, terminalInputGuard(record), progress);
|
|
1539
|
+
const write = await automaticTerminalInput(record, launchGuard ?? terminalInputGuard(record), progress);
|
|
1527
1540
|
await write(prompt);
|
|
1528
1541
|
}
|
|
1529
1542
|
async function deliverAutomationPromptWhenReady(backendSessionId, prompt) {
|
|
@@ -1580,9 +1593,8 @@ async function runAgentAutomation(automation, req) {
|
|
|
1580
1593
|
throw new Error('自动任务会话创建失败');
|
|
1581
1594
|
if (automation.command) {
|
|
1582
1595
|
const agent = detectAgentFromCommand(automation.command, agentCustomCommands());
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
await writeAutomaticTerminalPrompt(frontendSessionId, automation.command);
|
|
1596
|
+
const launchGuard = agent ? await beginAgentLaunchCheck(frontendSessionId, agent.slug) : undefined;
|
|
1597
|
+
await writeAutomaticTerminalPrompt(frontendSessionId, automation.command, undefined, launchGuard);
|
|
1586
1598
|
}
|
|
1587
1599
|
if (automation.prompt) {
|
|
1588
1600
|
if (automation.command)
|
|
@@ -1970,7 +1982,7 @@ async function spawnCollaborationAgentSession(req, group, sourceSessionId, input
|
|
|
1970
1982
|
const backend = terminalSessions.get(opened.terminalSession.sessionId);
|
|
1971
1983
|
if (!backend)
|
|
1972
1984
|
throw new HttpStatusError(500, 'Agent Session 创建失败', 'COLLAB_AGENT_SESSION_FAILED');
|
|
1973
|
-
await beginAgentLaunchCheck(frontendSessionId, launcher.slug);
|
|
1985
|
+
const launchGuard = await beginAgentLaunchCheck(frontendSessionId, launcher.slug);
|
|
1974
1986
|
const latestGroup = collaborationStore.getGroup(group.id);
|
|
1975
1987
|
if (!latestGroup || latestGroup.deleted) {
|
|
1976
1988
|
const created = globalSessionState.sessions.find(record => record.sessionId === frontendSessionId);
|
|
@@ -1993,7 +2005,7 @@ async function spawnCollaborationAgentSession(req, group, sourceSessionId, input
|
|
|
1993
2005
|
collaborationStore.setRole({ groupId: group.id, sessionId: frontendSessionId, role: bootstrapRole, creationKey });
|
|
1994
2006
|
if (profile)
|
|
1995
2007
|
collaborationStore.setMemberLaunchProfile(group.id, frontendSessionId, profile);
|
|
1996
|
-
await writeAutomaticTerminalPrompt(frontendSessionId, buildCollaborationSpawnCommand({ slug: launcher.slug, command: profile?.command ?? launcher.command }));
|
|
2008
|
+
await writeAutomaticTerminalPrompt(frontendSessionId, buildCollaborationSpawnCommand({ slug: launcher.slug, command: profile?.command ?? launcher.command }), undefined, launchGuard);
|
|
1997
2009
|
const requestedTask = typeof input.task === 'string' ? input.task.trim().slice(0, 20_000) : '';
|
|
1998
2010
|
collaborationStore.send({
|
|
1999
2011
|
groupId: updatedGroup.id,
|
|
@@ -2423,8 +2435,8 @@ async function launchIntegrationTerminal(record, restoring, prepared, progress,
|
|
|
2423
2435
|
backend.agent = null;
|
|
2424
2436
|
backend.agentResumeRecovered = false;
|
|
2425
2437
|
progress?.('launch_intent');
|
|
2426
|
-
await beginAgentLaunchCheck(record.session_id, record.agent_slug, restoring ? record.agent_native_session_id : null);
|
|
2427
|
-
await writeAutomaticTerminalPrompt(record.session_id, integrationLaunchCommand(record, restoring), progress);
|
|
2438
|
+
const launchGuard = await beginAgentLaunchCheck(record.session_id, record.agent_slug, restoring ? record.agent_native_session_id : null);
|
|
2439
|
+
await writeAutomaticTerminalPrompt(record.session_id, integrationLaunchCommand(record, restoring), progress, launchGuard);
|
|
2428
2440
|
broadcastClientState();
|
|
2429
2441
|
});
|
|
2430
2442
|
}
|
|
@@ -2471,12 +2483,12 @@ export function prepareCollaborationTaskWorker(task, template, dependencies, ser
|
|
|
2471
2483
|
throw error;
|
|
2472
2484
|
}
|
|
2473
2485
|
if (!currentAgent && (!launch || launch.backendId !== opened.terminalSession.sessionId)) {
|
|
2474
|
-
await beginAgentLaunchCheck(record.sessionId, launcher.slug);
|
|
2486
|
+
const launchGuard = await beginAgentLaunchCheck(record.sessionId, launcher.slug);
|
|
2475
2487
|
// Persist before typing: a retry must never type the launcher into a newly booted Agent's prompt.
|
|
2476
2488
|
const temporary = `${launchFile}.${process.pid}.tmp`;
|
|
2477
2489
|
await fs.promises.writeFile(temporary, JSON.stringify({ sessionId: record.sessionId, backendId: opened.terminalSession.sessionId }), { mode: 0o600 });
|
|
2478
2490
|
await fs.promises.rename(temporary, launchFile);
|
|
2479
|
-
await writeAutomaticTerminalPrompt(opened.session.sessionId, buildCollaborationSpawnCommand({ slug: launcher.slug, command: inheritedProfile?.command ?? launcher.command }));
|
|
2491
|
+
await writeAutomaticTerminalPrompt(opened.session.sessionId, buildCollaborationSpawnCommand({ slug: launcher.slug, command: inheritedProfile?.command ?? launcher.command }), undefined, launchGuard);
|
|
2480
2492
|
}
|
|
2481
2493
|
const group = collaborationStore.getGroup(task.groupId);
|
|
2482
2494
|
if (!group || group.deleted)
|
|
@@ -6144,8 +6156,8 @@ router.post('/tmux/recovery/restore-all', async (_req, res) => {
|
|
|
6144
6156
|
const previous = collaborationRouting.get(frontendSessionId);
|
|
6145
6157
|
if (previous)
|
|
6146
6158
|
collaborationRouting.bind({ ...previous, pane: null });
|
|
6147
|
-
await beginAgentLaunchCheck(frontendSessionId, agent.slug, target.nativeSessionId);
|
|
6148
|
-
await writeAutomaticTerminalPrompt(frontendSessionId, command);
|
|
6159
|
+
const launchGuard = await beginAgentLaunchCheck(frontendSessionId, agent.slug, target.nativeSessionId);
|
|
6160
|
+
await writeAutomaticTerminalPrompt(frontendSessionId, command, undefined, launchGuard);
|
|
6149
6161
|
}));
|
|
6150
6162
|
outcomes.push({ sessionId: frontendSessionId, restored: true });
|
|
6151
6163
|
}
|
|
@@ -7098,8 +7110,8 @@ router.post('/operations/execution-archives/:sessionId/restore', executionArchiv
|
|
|
7098
7110
|
broadcastClientState();
|
|
7099
7111
|
throw error;
|
|
7100
7112
|
}
|
|
7101
|
-
await beginAgentLaunchCheck(record.sessionId, target.slug, target.nativeSessionId);
|
|
7102
|
-
await writeAutomaticTerminalPrompt(opened.session.sessionId, command);
|
|
7113
|
+
const launchGuard = await beginAgentLaunchCheck(record.sessionId, target.slug, target.nativeSessionId);
|
|
7114
|
+
await writeAutomaticTerminalPrompt(opened.session.sessionId, command, undefined, launchGuard);
|
|
7103
7115
|
restoreArchivedMembership(entry, record.sessionId);
|
|
7104
7116
|
await persistGlobalStateNow();
|
|
7105
7117
|
broadcastClientState();
|
|
@@ -8343,10 +8355,9 @@ router.post('/:sessionId/agent-resume', async (req, res) => {
|
|
|
8343
8355
|
try {
|
|
8344
8356
|
const frontend = globalSessionState.sessions.find(candidate => candidate.backendSessionId === sessionId);
|
|
8345
8357
|
const launch = async () => {
|
|
8358
|
+
const launchGuard = frontend ? await beginAgentLaunchCheck(frontend.sessionId, target.slug, target.nativeSessionId) : undefined;
|
|
8346
8359
|
if (frontend)
|
|
8347
|
-
await
|
|
8348
|
-
if (frontend)
|
|
8349
|
-
await writeAutomaticTerminalPrompt(frontend.sessionId, target.command);
|
|
8360
|
+
await writeAutomaticTerminalPrompt(frontend.sessionId, target.command, undefined, launchGuard);
|
|
8350
8361
|
else
|
|
8351
8362
|
await writeBracketedPrompt(session.ptyProcess, target.command, captureTerminalInputGuard(() => terminalSessions.get(sessionId), session));
|
|
8352
8363
|
};
|
package/docs/integrations.md
CHANGED
|
@@ -1242,3 +1242,52 @@ message/thread/幂等键或历史,不自动补 Enter、不用屏幕文字识
|
|
|
1242
1242
|
投递、不同/缺失/弱原生证据、多匹配/归属/未知旧写入拒绝、绑定持久化和失败、
|
|
1243
1243
|
只读路由权限/CLI、网页暂停提示及加密传输边界。Mac 实际现场的当前原生身份尚未独立确认,原消息尚待拥有者确认及接入方实际服务
|
|
1244
1244
|
升级/回读后继续投递;不以维护机回归冒充该现场已恢复。
|
|
1245
|
+
|
|
1246
|
+
|
|
1247
|
+
## 1.4.322:启动代次一致性与输入检查诊断
|
|
1248
|
+
|
|
1249
|
+
最低实际服务 **1.4.322**,配套 CLI 也升级至 1.4.322。`capabilities` 回读:
|
|
1250
|
+
`agent_launch_generation_consistency=true`、
|
|
1251
|
+
`agent_launch_generation_consistency_min_version=1.4.322`、
|
|
1252
|
+
`terminal_input_check_diagnostics=true`。普通协作协议仍为 2,integration protocol 仍为 1;
|
|
1253
|
+
不新增权限。只更新 CLI 不会改变正在运行的旧服务。
|
|
1254
|
+
|
|
1255
|
+
启动代次是 TD 服务生成的 `agentLaunchGeneration`,与原生 Agent UUID、
|
|
1256
|
+
IntegrationSession 的数值 `generation` 分别记录。同一 backend 在启动准备时从 null
|
|
1257
|
+
变为新的启动 UUID 是正常动作。名称、cwd、原生身份元数据等整记录更新过去可能
|
|
1258
|
+
携带 await 之前的旧启动字段写回;本版将启动字段交由专门的比较后更新路径管理,
|
|
1259
|
+
普通元数据更新继承当前启动代次与一次性检查,不能覆盖或复活旧值。
|
|
1260
|
+
|
|
1261
|
+
启动操作在写入本次代次后、持久化之前捕获自己的输入检查令牌,并在持久化返回、
|
|
1262
|
+
承载解析、获取输入队列及粘贴/提交前持续使用它。冷启动、精确恢复、显式 cold retry
|
|
1263
|
+
和普通启动共用这条保护;不会为了继续输入而采纳后来出现的启动代次。启动状态
|
|
1264
|
+
落盘失败时不输入。真实 backend 对象/ID、绑定版本、tmux pane 或启动代次变化仍拒绝,
|
|
1265
|
+
保留 `TERMINAL_INPUT_TARGET_CHANGED` / `TMUX_PANE_CHANGED` 等错误。
|
|
1266
|
+
|
|
1267
|
+
管理员沿现有入口读取已保存的诊断:
|
|
1268
|
+
|
|
1269
|
+
```sh
|
|
1270
|
+
td integration diagnostics <TD-session-id>
|
|
1271
|
+
```
|
|
1272
|
+
|
|
1273
|
+
`launch_diagnostics.steps` 追加可选阶段 `guard_captured / runtime_resolving / runtime_resolved`;
|
|
1274
|
+
既有 `queue_wait / queue_acquired / paste_* / submit_*` 保留。拒绝时
|
|
1275
|
+
`target_change` 可含 `check_phase / guard_captured_at / checked_at`,以及
|
|
1276
|
+
`expected_launch_id / current_launch_id`、backend ID/实例比较、绑定版本比较。
|
|
1277
|
+
`check_phase` 包含 `launch_state_commit / guard_capture / launch_persisted / runtime_resolve /
|
|
1278
|
+
runtime_resolved / queue_acquired / before_paste / before_submit`。时间是 TD 检查时间,
|
|
1279
|
+
不是内核首字节写入时间;不包含正文、argv、环境或凭据。旧记录不补造缺失的证据。
|
|
1280
|
+
|
|
1281
|
+
这次修复不增加自动重试:原 create 同键只回读原操作。失败现场保留,先用
|
|
1282
|
+
`session get` 核对当前事实;明确授权后才按现有 `session retry-cold` 契约显式操作,
|
|
1283
|
+
必须满足无原生 UUID、无 TD 消息历史或待投递、精确原 shell、配置指纹与代次等条件。
|
|
1284
|
+
已有原生 UUID 的会话继续精确 restore,不能以 cold retry 替代。消息正文不因升级重发。
|
|
1285
|
+
|
|
1286
|
+
升级由现场唯一维护者协调:保留现有 HTTPS/鉴权参数,仅替换并重启 TD 服务;
|
|
1287
|
+
核对在跑 tmux/Agent 完整身份没有变化,再回读实际服务版本和以上能力。
|
|
1288
|
+
本版不要求重启、重建或重试业务 Agent,不更改 launch profile、sandbox 或业务调度。
|
|
1289
|
+
终端动作仍是粘贴一次、50ms 后发送一次回车;TD 仍不保证应用提交、消费或执行完成。
|
|
1290
|
+
|
|
1291
|
+
确定性交错回归覆盖延迟改名/元数据回写、清除检查、持久化等待、输入队列等待、
|
|
1292
|
+
真实第二次启动、backend 替换及重新绑定;发生真实换代时,旧输入及旧的延迟回车
|
|
1293
|
+
仍被拒绝。测试证明 TD 一致性与终端写入边界,不代替私有 Agent 的实机消费验收。
|
package/package.json
CHANGED
package/runtime-manifest.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
3
|
"packageName": "termdock",
|
|
4
|
-
"version": "1.4.
|
|
4
|
+
"version": "1.4.322",
|
|
5
5
|
"runtimeProtocolVersion": 1,
|
|
6
6
|
"minimumDesktopVersion": "1.4.46",
|
|
7
7
|
"nodeMajor": 22,
|
|
8
8
|
"dependencyHash": "sha256-oaGYi/P5ob8sd6VnNBOwshKozjhdV+hYiCmLAsn5x00=",
|
|
9
|
-
"serverBundleHash": "sha256-
|
|
10
|
-
"clientBundleHash": "sha256-
|
|
9
|
+
"serverBundleHash": "sha256-T9JZp3X9tfMUYciSrnZbiUIXuc+IHqHJuGp6Wf5bHs8=",
|
|
10
|
+
"clientBundleHash": "sha256-4wVT4/UzD+TMRQjVw307g0c0x0cJm6NknoDeybiIQfA=",
|
|
11
11
|
"entrypoint": "dist/server/cli.js",
|
|
12
12
|
"clientEntrypoint": "dist/client/index.html"
|
|
13
13
|
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{by as r}from"./app-Bj0N393t.js";import{b as m}from"./dnd-BCFAPC0L.js";import{b as n}from"./RightSidebar-BeegDfBO.js";import"./react-XDCjal2T.js";import"./terminal-C7X98Amf.js";import"./App-VAvoVlm2.js";import"./gestureArbiter-nU4jhK3S.js";import"./triangle-alert-CVm2qdGE.js";import"./referenceLongPress-CR3uo3V0.js";import"./DiffReview-DQFgOJPF.js";import"./sparkles-Dx518Xui.js";import"./DiffViewer-DOvGC9bh.js";import"./ChangeWalkthroughPanel-BtXqyUzD.js";function g({content:o}){const e=m.useMemo(()=>n(o.split(`
|
|
2
|
-
`),null,null),[o]);return r.jsx("div",{className:"min-w-0 space-y-3 break-words text-sm leading-6 text-foreground [&_h1]:text-lg [&_h2]:text-base [&_h3]:text-sm [&_pre]:max-w-full [&_table]:text-xs",children:e.map((t,i)=>r.jsx("div",{className:"min-w-0",children:typeof t.content=="function"?t.content(null):t.content},i))})}export{g as default};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as a,C as n}from"./mermaid.core-DndzUmju.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,a as s,c as t,C as e}from"./chunk-TICWLB2K-CPpFFmO9.js";import{d as i}from"./mermaid.core-DndzUmju.js";import"./chunk-5VM5RSS4-Cc3Czx6A.js";import"./chunk-XXDRQBXY-Zp_XOFU2.js";import"./chunk-POPQ4Y6H-C4MN3QRd.js";import"./chunk-F27PBJKO-3scxqZTK.js";import"./purify.es-4eNOHKSq.js";import"./app-Bj0N393t.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-C7X98Amf.js";var g={parser:t,get db(){return new e},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{g as diagram};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{s as a,a as s,c as t,C as e}from"./chunk-TICWLB2K-CPpFFmO9.js";import{d as i}from"./mermaid.core-DndzUmju.js";import"./chunk-5VM5RSS4-Cc3Czx6A.js";import"./chunk-XXDRQBXY-Zp_XOFU2.js";import"./chunk-POPQ4Y6H-C4MN3QRd.js";import"./chunk-F27PBJKO-3scxqZTK.js";import"./purify.es-4eNOHKSq.js";import"./app-Bj0N393t.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-C7X98Amf.js";var g={parser:t,get db(){return new e},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{g as diagram};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|