termdock 1.4.230 → 1.4.232
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/.desktop-dist/main.js +9 -0
- package/dist/client/assets/App-Di12Ej1O.js +155 -0
- package/dist/client/assets/App-Di12Ej1O.js.br +0 -0
- package/dist/client/assets/App-Di12Ej1O.js.gz +0 -0
- package/dist/client/assets/{ChangeWalkthroughPanel-BoJ_fimI.js → ChangeWalkthroughPanel-pOBFJTxi.js} +1 -1
- package/dist/client/assets/ChangeWalkthroughPanel-pOBFJTxi.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-pOBFJTxi.js.gz +0 -0
- package/dist/client/assets/{DagPlayground-Ds7ArhFS.js → DagPlayground-DWaLn2pa.js} +1 -1
- package/dist/client/assets/DagPlayground-DWaLn2pa.js.br +0 -0
- package/dist/client/assets/DagPlayground-DWaLn2pa.js.gz +0 -0
- package/dist/client/assets/{DiffLab-Bbse8Ju0.js → DiffLab-DMvlScEP.js} +1 -1
- package/dist/client/assets/DiffLab-DMvlScEP.js.br +0 -0
- package/dist/client/assets/DiffLab-DMvlScEP.js.gz +0 -0
- package/dist/client/assets/{DiffReview-83Xj6PCu.js → DiffReview-D1M9kVJy.js} +1 -1
- package/dist/client/assets/DiffReview-D1M9kVJy.js.br +0 -0
- package/dist/client/assets/DiffReview-D1M9kVJy.js.gz +0 -0
- package/dist/client/assets/{DiffReviewLab-DFn8TDlG.js → DiffReviewLab-BVkhfOhb.js} +1 -1
- package/dist/client/assets/DiffReviewLab-BVkhfOhb.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-BVkhfOhb.js.gz +0 -0
- package/dist/client/assets/{DiffViewer-DbOviqxz.js → DiffViewer-DN5Akyco.js} +7 -7
- package/dist/client/assets/DiffViewer-DN5Akyco.js.br +0 -0
- package/dist/client/assets/DiffViewer-DN5Akyco.js.gz +0 -0
- package/dist/client/assets/{ModelPreview-DTbtvbXf.js → ModelPreview-D5Vl9PdY.js} +1 -1
- package/dist/client/assets/ModelPreview-D5Vl9PdY.js.br +0 -0
- package/dist/client/assets/ModelPreview-D5Vl9PdY.js.gz +0 -0
- package/dist/client/assets/{RightSidebar-CkBjWyP3.js → RightSidebar-CNICBrOL.js} +22 -22
- package/dist/client/assets/RightSidebar-CNICBrOL.js.br +0 -0
- package/dist/client/assets/RightSidebar-CNICBrOL.js.gz +0 -0
- package/dist/client/assets/{abnfDiagram-VCTEODGH-DNI-fpHF.js → abnfDiagram-VCTEODGH-Coq8shqQ.js} +1 -1
- package/dist/client/assets/abnfDiagram-VCTEODGH-Coq8shqQ.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-Coq8shqQ.js.gz +0 -0
- package/dist/client/assets/app-BNPa5Xzm.js +35 -0
- package/dist/client/assets/app-BNPa5Xzm.js.br +0 -0
- package/dist/client/assets/app-BNPa5Xzm.js.gz +0 -0
- package/dist/client/assets/{arc-BTzsKyvV.js → arc-D9F88oM8.js} +1 -1
- package/dist/client/assets/arc-D9F88oM8.js.br +0 -0
- package/dist/client/assets/arc-D9F88oM8.js.gz +0 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-zSPsJaBw.js → architectureDiagram-5GKGNRK7-Ci04e9H2.js} +1 -1
- package/dist/client/assets/architectureDiagram-5GKGNRK7-Ci04e9H2.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-Ci04e9H2.js.gz +0 -0
- package/dist/client/assets/{blockDiagram-I7D4REHJ-DrKjCBZz.js → blockDiagram-I7D4REHJ-B0V-2mCO.js} +1 -1
- package/dist/client/assets/blockDiagram-I7D4REHJ-B0V-2mCO.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-B0V-2mCO.js.gz +0 -0
- package/dist/client/assets/{c4Diagram-7LVT6UL2-TcGgIvXV.js → c4Diagram-7LVT6UL2-CgHFeNkR.js} +1 -1
- package/dist/client/assets/c4Diagram-7LVT6UL2-CgHFeNkR.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-CgHFeNkR.js.gz +0 -0
- package/dist/client/assets/channel-Cf-_AhxJ.js +1 -0
- package/dist/client/assets/{chunk-2Q5K7J3B-BtkT5EO8.js → chunk-2Q5K7J3B-C1R3c0d8.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-Plu2bVNV.js → chunk-5VM5RSS4-USD4Kst0.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-D7sV_zVS.js → chunk-F27PBJKO-D-1deMoU.js} +1 -1
- package/dist/client/assets/chunk-F27PBJKO-D-1deMoU.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-D-1deMoU.js.gz +0 -0
- package/dist/client/assets/{chunk-IMKFNOWR-8EiaBwNr.js → chunk-IMKFNOWR-DyunJ4J2.js} +1 -1
- package/dist/client/assets/chunk-IMKFNOWR-DyunJ4J2.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-DyunJ4J2.js.gz +0 -0
- package/dist/client/assets/{chunk-JWPE2WC7-MSPgHaTm.js → chunk-JWPE2WC7-ClM1w-Bz.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-D0-gOtAK.js → chunk-POPQ4Y6H-Dmz_lI83.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-BNSQ1QfI.js → chunk-SVP7TREG-JSkpe0Ru.js} +1 -1
- package/dist/client/assets/chunk-SVP7TREG-JSkpe0Ru.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-JSkpe0Ru.js.gz +0 -0
- package/dist/client/assets/{chunk-TICWLB2K-DDkkYDMp.js → chunk-TICWLB2K-DNRVmHct.js} +1 -1
- package/dist/client/assets/chunk-TICWLB2K-DNRVmHct.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DNRVmHct.js.gz +0 -0
- package/dist/client/assets/{chunk-XXDRQBXY-DPtyGiHW.js → chunk-XXDRQBXY-C_nQBcA8.js} +1 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-CCnYK6Cj.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-CCnYK6Cj.js +1 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-D1SSHh8-.js → cose-bilkent-JH36ORCC-D2_1Vg5L.js} +1 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-D2_1Vg5L.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-D2_1Vg5L.js.gz +0 -0
- package/dist/client/assets/{cynefin-OW5HDTMX-BwyEKhRj.js → cynefin-OW5HDTMX-C_zLtwow.js} +1 -1
- package/dist/client/assets/cynefin-OW5HDTMX-C_zLtwow.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-C_zLtwow.js.gz +0 -0
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-C-37gprr.js → cynefinDiagram-5FMLGOSQ-B0Wvfl0v.js} +1 -1
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-B0Wvfl0v.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-B0Wvfl0v.js.gz +0 -0
- package/dist/client/assets/{dagre-GXQ25YYZ-D-CrfEPO.js → dagre-GXQ25YYZ-D4dD95T3.js} +1 -1
- package/dist/client/assets/dagre-GXQ25YYZ-D4dD95T3.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-D4dD95T3.js.gz +0 -0
- package/dist/client/assets/{diagram-S7CK7UJ4-CWcwLpnZ.js → diagram-S7CK7UJ4-2nnj1lep.js} +1 -1
- package/dist/client/assets/diagram-S7CK7UJ4-2nnj1lep.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-2nnj1lep.js.gz +0 -0
- package/dist/client/assets/{diagram-UQ7AKVKN-DYBHXnFg.js → diagram-UQ7AKVKN-C9N4zQ8r.js} +1 -1
- package/dist/client/assets/diagram-UQ7AKVKN-C9N4zQ8r.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-C9N4zQ8r.js.gz +0 -0
- package/dist/client/assets/{diagram-VSXAHHWV-ChHGrhQk.js → diagram-VSXAHHWV-Cv7_lYe4.js} +1 -1
- package/dist/client/assets/diagram-VSXAHHWV-Cv7_lYe4.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-Cv7_lYe4.js.gz +0 -0
- package/dist/client/assets/{diagram-VX7I27RA-BLRGz0tZ.js → diagram-VX7I27RA-BcgskUTT.js} +1 -1
- package/dist/client/assets/diagram-VX7I27RA-BcgskUTT.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-BcgskUTT.js.gz +0 -0
- package/dist/client/assets/{diagram-Z3DM3KII-1y-77z0j.js → diagram-Z3DM3KII-v37kk7HI.js} +1 -1
- package/dist/client/assets/diagram-Z3DM3KII-v37kk7HI.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-v37kk7HI.js.gz +0 -0
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-CkWYT96W.js → ebnfDiagram-PWID7BFC-CWRegGRp.js} +1 -1
- package/dist/client/assets/ebnfDiagram-PWID7BFC-CWRegGRp.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-CWRegGRp.js.gz +0 -0
- package/dist/client/assets/{erDiagram-RLTQ6QDP-5UOgSbxO.js → erDiagram-RLTQ6QDP-C-a8Ptae.js} +1 -1
- package/dist/client/assets/erDiagram-RLTQ6QDP-C-a8Ptae.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-C-a8Ptae.js.gz +0 -0
- package/dist/client/assets/{flowDiagram-HODETNUW-B34ih9F5.js → flowDiagram-HODETNUW-CZQBLCvO.js} +1 -1
- package/dist/client/assets/flowDiagram-HODETNUW-CZQBLCvO.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-CZQBLCvO.js.gz +0 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-Df8xOtuv.js → ganttDiagram-EL5Y4UJY-CDJSVMvA.js} +1 -1
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CDJSVMvA.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CDJSVMvA.js.gz +0 -0
- package/dist/client/assets/{gestureArbiter-BMlW6Vkl.js → gestureArbiter-3yU_eQSh.js} +1 -1
- package/dist/client/assets/gestureArbiter-3yU_eQSh.js.br +0 -0
- package/dist/client/assets/gestureArbiter-3yU_eQSh.js.gz +0 -0
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-DCQxgM1e.js → gitGraphDiagram-WWUBYQGX-BpKnzvx5.js} +1 -1
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BpKnzvx5.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BpKnzvx5.js.gz +0 -0
- package/dist/client/assets/{index-ovIMtffC.css → index-BzglvLj5.css} +1 -1
- package/dist/client/assets/{index-ovIMtffC.css.br → index-BzglvLj5.css.br} +0 -0
- package/dist/client/assets/{index-ovIMtffC.css.gz → index-BzglvLj5.css.gz} +0 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-BReB6pyw.js → infoDiagram-27XIBGKW-CvIbo5Yc.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-Dxm41GIR.js → ishikawaDiagram-5VMMS53U-iTcusz9p.js} +1 -1
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-iTcusz9p.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-iTcusz9p.js.gz +0 -0
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-6EeNJsvk.js → journeyDiagram-3NMN7TZE-AnHrPTVQ.js} +1 -1
- package/dist/client/assets/journeyDiagram-3NMN7TZE-AnHrPTVQ.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-AnHrPTVQ.js.gz +0 -0
- package/dist/client/assets/{kanban-definition-UXKFOSKX-Cqy7b348.js → kanban-definition-UXKFOSKX-BSGQKNkn.js} +1 -1
- package/dist/client/assets/kanban-definition-UXKFOSKX-BSGQKNkn.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-BSGQKNkn.js.gz +0 -0
- package/dist/client/assets/{layout-2zQZggOo.js → layout-DWfvuKxK.js} +1 -1
- package/dist/client/assets/layout-DWfvuKxK.js.br +0 -0
- package/dist/client/assets/layout-DWfvuKxK.js.gz +0 -0
- package/dist/client/assets/{linear-B_n7SwkQ.js → linear-YGUC9oFd.js} +1 -1
- package/dist/client/assets/linear-YGUC9oFd.js.br +0 -0
- package/dist/client/assets/linear-YGUC9oFd.js.gz +0 -0
- package/dist/client/assets/{mermaid.core-BbAe0O0I.js → mermaid.core-C2ofdbDu.js} +5 -5
- package/dist/client/assets/mermaid.core-C2ofdbDu.js.br +0 -0
- package/dist/client/assets/mermaid.core-C2ofdbDu.js.gz +0 -0
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-9cQsoIK-.js → mindmap-definition-YA3MSWOX-DhpmPHTj.js} +1 -1
- package/dist/client/assets/mindmap-definition-YA3MSWOX-DhpmPHTj.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-DhpmPHTj.js.gz +0 -0
- package/dist/client/assets/{passwordBootstrap-D20oiv4Y.js → passwordBootstrap-VsBMR4A9.js} +2 -2
- package/dist/client/assets/passwordBootstrap-VsBMR4A9.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-VsBMR4A9.js.gz +0 -0
- package/dist/client/assets/{pegDiagram-XKGWAZYB-DAJtEqBo.js → pegDiagram-XKGWAZYB-BRFYfMc1.js} +1 -1
- package/dist/client/assets/pegDiagram-XKGWAZYB-BRFYfMc1.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-BRFYfMc1.js.gz +0 -0
- package/dist/client/assets/{pieDiagram-E7YTZNPT-BfTrVCVw.js → pieDiagram-E7YTZNPT-B3r-kmkG.js} +1 -1
- package/dist/client/assets/pieDiagram-E7YTZNPT-B3r-kmkG.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-B3r-kmkG.js.gz +0 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-O0-rsLC6.js → quadrantDiagram-AXDQQJYC-DR1I_zXC.js} +1 -1
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-DR1I_zXC.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-DR1I_zXC.js.gz +0 -0
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-BmnxmIkC.js → railroadDiagram-O6MQD6OU-Bvfl-CvM.js} +1 -1
- package/dist/client/assets/railroadDiagram-O6MQD6OU-Bvfl-CvM.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-Bvfl-CvM.js.gz +0 -0
- package/dist/client/assets/{referenceLongPress-CCa3ab0P.js → referenceLongPress-X-OUHgyO.js} +1 -1
- package/dist/client/assets/referenceLongPress-X-OUHgyO.js.br +0 -0
- package/dist/client/assets/referenceLongPress-X-OUHgyO.js.gz +0 -0
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-DDkFvkBr.js → requirementDiagram-BXWQKSXE-C77Ip0mm.js} +1 -1
- package/dist/client/assets/requirementDiagram-BXWQKSXE-C77Ip0mm.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-C77Ip0mm.js.gz +0 -0
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-D9FHbxr4.js → sankeyDiagram-P5KCCOFB-C1irBgQp.js} +1 -1
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-C1irBgQp.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-C1irBgQp.js.gz +0 -0
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-CNiMBOrr.js → sequenceDiagram-WJ2MYXX4-ziivSu_M.js} +1 -1
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-ziivSu_M.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-ziivSu_M.js.gz +0 -0
- package/dist/client/assets/{sizeCapture-INFHLROL-aQkXiDbr.js → sizeCapture-INFHLROL-Bd6W2W84.js} +1 -1
- package/dist/client/assets/sizeCapture-INFHLROL-Bd6W2W84.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-Bd6W2W84.js.gz +0 -0
- package/dist/client/assets/{sparkles-DOMB8YK5.js → sparkles-CnZrFoGY.js} +1 -1
- package/dist/client/assets/{stateDiagram-D77RDMKH-Cy-ouYt1.js → stateDiagram-D77RDMKH-Dbp0hGDY.js} +1 -1
- package/dist/client/assets/stateDiagram-D77RDMKH-Dbp0hGDY.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-Dbp0hGDY.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-DC2wSMDB.js +1 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-CzalwHK_.js → swimlanes-42K2YHIH-C2Dr-53Y.js} +1 -1
- package/dist/client/assets/swimlanes-42K2YHIH-C2Dr-53Y.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-C2Dr-53Y.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-HYd7_s0l.js +8 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-6mx1eXdq.js → timeline-definition-24CTP7MA-D-bKj_yT.js} +1 -1
- package/dist/client/assets/timeline-definition-24CTP7MA-D-bKj_yT.js.br +0 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-6mx1eXdq.js.gz → timeline-definition-24CTP7MA-D-bKj_yT.js.gz} +0 -0
- package/dist/client/assets/{triangle-alert-Ddcj0Ymu.js → triangle-alert-D1EDVJ4z.js} +1 -1
- package/dist/client/assets/{vennDiagram-4TSXK5OY-lYrJr0Ul.js → vennDiagram-4TSXK5OY-Dxo8DU3z.js} +1 -1
- package/dist/client/assets/vennDiagram-4TSXK5OY-Dxo8DU3z.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-Dxo8DU3z.js.gz +0 -0
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-n0hxf-l2.js → wardleyDiagram-VM6X3IG4-BZMkLNpR.js} +1 -1
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-BZMkLNpR.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-BZMkLNpR.js.gz +0 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-CEAOqXIs.js → xychartDiagram-S5SC5T6Z-CbxLQ8Sa.js} +1 -1
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-CbxLQ8Sa.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-CbxLQ8Sa.js.gz +0 -0
- package/dist/client/index.html +2 -2
- 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 +113 -33
- package/dist/server/agent/collaborationPeerTransport.js +441 -0
- package/dist/server/agent/collaborationPrompt.js +10 -4
- package/dist/server/agent/collaborationRoutes.js +75 -15
- package/dist/server/agent/collaborationStore.js +108 -23
- package/dist/server/agent/collaborationText.js +5 -0
- package/dist/server/agent/collaborationTmuxDelivery.js +9 -6
- package/dist/server/entry.js +42 -2
- package/dist/server/federation/runtime.js +7 -2
- package/dist/server/routes/terminal.js +48 -20
- package/package.json +1 -1
- package/runtime-manifest.json +3 -3
- package/dist/client/assets/App-C2R-hBtg.js +0 -155
- package/dist/client/assets/App-C2R-hBtg.js.br +0 -0
- package/dist/client/assets/App-C2R-hBtg.js.gz +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-BoJ_fimI.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-BoJ_fimI.js.gz +0 -0
- package/dist/client/assets/DagPlayground-Ds7ArhFS.js.br +0 -0
- package/dist/client/assets/DagPlayground-Ds7ArhFS.js.gz +0 -0
- package/dist/client/assets/DiffLab-Bbse8Ju0.js.br +0 -0
- package/dist/client/assets/DiffLab-Bbse8Ju0.js.gz +0 -0
- package/dist/client/assets/DiffReview-83Xj6PCu.js.br +0 -0
- package/dist/client/assets/DiffReview-83Xj6PCu.js.gz +0 -0
- package/dist/client/assets/DiffReviewLab-DFn8TDlG.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-DFn8TDlG.js.gz +0 -0
- package/dist/client/assets/DiffViewer-DbOviqxz.js.br +0 -0
- package/dist/client/assets/DiffViewer-DbOviqxz.js.gz +0 -0
- package/dist/client/assets/ModelPreview-DTbtvbXf.js.br +0 -0
- package/dist/client/assets/ModelPreview-DTbtvbXf.js.gz +0 -0
- package/dist/client/assets/RightSidebar-CkBjWyP3.js.br +0 -0
- package/dist/client/assets/RightSidebar-CkBjWyP3.js.gz +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-DNI-fpHF.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-DNI-fpHF.js.gz +0 -0
- package/dist/client/assets/app-pwlY5amH.js +0 -35
- package/dist/client/assets/app-pwlY5amH.js.br +0 -0
- package/dist/client/assets/app-pwlY5amH.js.gz +0 -0
- package/dist/client/assets/arc-BTzsKyvV.js.br +0 -0
- package/dist/client/assets/arc-BTzsKyvV.js.gz +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-zSPsJaBw.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-zSPsJaBw.js.gz +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-DrKjCBZz.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-DrKjCBZz.js.gz +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-TcGgIvXV.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-TcGgIvXV.js.gz +0 -0
- package/dist/client/assets/channel-DXA5J9pS.js +0 -1
- package/dist/client/assets/chunk-F27PBJKO-D7sV_zVS.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-D7sV_zVS.js.gz +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-8EiaBwNr.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-8EiaBwNr.js.gz +0 -0
- package/dist/client/assets/chunk-SVP7TREG-BNSQ1QfI.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-BNSQ1QfI.js.gz +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DDkkYDMp.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DDkkYDMp.js.gz +0 -0
- package/dist/client/assets/classDiagram-ZZMXUADV-CRTloq-v.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-CRTloq-v.js +0 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-D1SSHh8-.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-D1SSHh8-.js.gz +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-BwyEKhRj.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-BwyEKhRj.js.gz +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-C-37gprr.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-C-37gprr.js.gz +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-D-CrfEPO.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-D-CrfEPO.js.gz +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-CWcwLpnZ.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-CWcwLpnZ.js.gz +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-DYBHXnFg.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-DYBHXnFg.js.gz +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-ChHGrhQk.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-ChHGrhQk.js.gz +0 -0
- package/dist/client/assets/diagram-VX7I27RA-BLRGz0tZ.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-BLRGz0tZ.js.gz +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-1y-77z0j.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-1y-77z0j.js.gz +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-CkWYT96W.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-CkWYT96W.js.gz +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-5UOgSbxO.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-5UOgSbxO.js.gz +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-B34ih9F5.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-B34ih9F5.js.gz +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-Df8xOtuv.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-Df8xOtuv.js.gz +0 -0
- package/dist/client/assets/gestureArbiter-BMlW6Vkl.js.br +0 -0
- package/dist/client/assets/gestureArbiter-BMlW6Vkl.js.gz +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DCQxgM1e.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DCQxgM1e.js.gz +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-Dxm41GIR.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-Dxm41GIR.js.gz +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-6EeNJsvk.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-6EeNJsvk.js.gz +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-Cqy7b348.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-Cqy7b348.js.gz +0 -0
- package/dist/client/assets/layout-2zQZggOo.js.br +0 -0
- package/dist/client/assets/layout-2zQZggOo.js.gz +0 -0
- package/dist/client/assets/linear-B_n7SwkQ.js.br +0 -0
- package/dist/client/assets/linear-B_n7SwkQ.js.gz +0 -0
- package/dist/client/assets/mermaid.core-BbAe0O0I.js.br +0 -0
- package/dist/client/assets/mermaid.core-BbAe0O0I.js.gz +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-9cQsoIK-.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-9cQsoIK-.js.gz +0 -0
- package/dist/client/assets/passwordBootstrap-D20oiv4Y.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-D20oiv4Y.js.gz +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-DAJtEqBo.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-DAJtEqBo.js.gz +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-BfTrVCVw.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-BfTrVCVw.js.gz +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-O0-rsLC6.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-O0-rsLC6.js.gz +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-BmnxmIkC.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-BmnxmIkC.js.gz +0 -0
- package/dist/client/assets/referenceLongPress-CCa3ab0P.js.br +0 -0
- package/dist/client/assets/referenceLongPress-CCa3ab0P.js.gz +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-DDkFvkBr.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-DDkFvkBr.js.gz +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-D9FHbxr4.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-D9FHbxr4.js.gz +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-CNiMBOrr.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-CNiMBOrr.js.gz +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-aQkXiDbr.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-aQkXiDbr.js.gz +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-Cy-ouYt1.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-Cy-ouYt1.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BBcvA2eS.js +0 -1
- package/dist/client/assets/swimlanes-42K2YHIH-CzalwHK_.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-CzalwHK_.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DG4zIqD3.js +0 -8
- package/dist/client/assets/timeline-definition-24CTP7MA-6mx1eXdq.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-lYrJr0Ul.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-lYrJr0Ul.js.gz +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-n0hxf-l2.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-n0hxf-l2.js.gz +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-CEAOqXIs.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-CEAOqXIs.js.gz +0 -0
|
@@ -18,6 +18,13 @@ export const COLLAB_HELP = `td collab — durable messages; no agent-specific ho
|
|
|
18
18
|
Scheduled self-reminders: td automation create --name 'Review progress' --every 30 --self --prompt 'Review group progress and continue'
|
|
19
19
|
Scheduling help: td automation --help
|
|
20
20
|
status | capabilities
|
|
21
|
+
transport info
|
|
22
|
+
Print this service's public identity and CA fingerprint (no private keys).
|
|
23
|
+
transport register <group-id> --file <nodes.json>
|
|
24
|
+
One-time server peer registration; nodes.json is an array of public
|
|
25
|
+
{serviceId, origin, caFingerprint256?} entries, including this service.
|
|
26
|
+
Obtain pins from each administrator's transport info over a trusted channel.
|
|
27
|
+
Registered servers deliver without an open browser or Desktop client.
|
|
21
28
|
rebind [--pane %3] (explicitly bind this peer to its current Agent; resumes queued delivery)
|
|
22
29
|
send <session-id> <message> | reply <message-id> <message> | handoff <session-id> <message>
|
|
23
30
|
(send fan-out: comma-separated same-group ids, e.g. send a,b "任务"; every
|
|
@@ -25,23 +32,27 @@ export const COLLAB_HELP = `td collab — durable messages; no agent-specific ho
|
|
|
25
32
|
single-recipient sends only)
|
|
26
33
|
--group <id> --thread <id> --idempotency-key <key>
|
|
27
34
|
--file <path> | --stdin (instead of inline body; -- ends option parsing)
|
|
28
|
-
--wait-until queued|delivered
|
|
35
|
+
--wait-until queued|delivered --timeout 30s
|
|
29
36
|
--expect-reply ack|result|any
|
|
30
37
|
--response-kind ack|progress|result --metadata '<JSON object>'
|
|
31
38
|
--expires-at <ISO timestamp or epoch milliseconds>
|
|
32
39
|
reply: --task-envelope '<JSON: task_id,status,progress?,evidence?,blocker?>'
|
|
33
40
|
(status reporting happens only via reply; send/handoff dispatch carries no task state)
|
|
34
|
-
message get <message-id> [--receipt-only]
|
|
41
|
+
message get <message-id> [--receipt-only] [--raw]
|
|
35
42
|
message confirm-shell <message-id> (sender confirms delivery into a shell; continues the same message)
|
|
36
|
-
message
|
|
37
|
-
|
|
38
|
-
inbox [--unread] [--since <ISO or epoch-ms>] [--after-id <id>]
|
|
43
|
+
message watch <message-id> [--wait-until delivered] [--timeout 30s]
|
|
44
|
+
inbox [--since <ISO or epoch-ms>] [--after-id <id>]
|
|
39
45
|
[--cursor <token>] [--consumer <name>] [--limit 1..200]
|
|
40
46
|
[--from <id>] [--group <id>] [--thread <id>] [--kind <kind>]
|
|
41
47
|
[--response-kind ack|progress|result] [--follow] [--timeout 30s]
|
|
42
48
|
cursor commit <token> --consumer <name> (commit after processing the page)
|
|
43
49
|
add|remove <group-id> <session-id>
|
|
44
50
|
spawn <group-id> <agent-slug> [--name <name>] [--cwd <path>] [--task <text>]
|
|
51
|
+
rules get <group-id> [--text]
|
|
52
|
+
rules set <group-id> <text> | --file <path> | --stdin [--if-version <version>]
|
|
53
|
+
rules clear <group-id> [--if-version <version>]
|
|
54
|
+
Shared group guidance, up to 8192 UTF-8 bytes; message envelopes retain its version.
|
|
55
|
+
traits list|set|unset (alias of role; long-lived capabilities/preferences)
|
|
45
56
|
role list <group-id>
|
|
46
57
|
role set <group-id> <session-id> <role…> (trailing words join as the role)
|
|
47
58
|
role unset <group-id> <session-id>
|
|
@@ -49,7 +60,7 @@ export const COLLAB_HELP = `td collab — durable messages; no agent-specific ho
|
|
|
49
60
|
rides the delivery shell header)
|
|
50
61
|
rename <session-id> <name…> (rename a member of any shared group;
|
|
51
62
|
trailing words join as the new name; roster and shells show it at once)
|
|
52
|
-
capture <session-id> [--text]
|
|
63
|
+
capture <session-id> [--lines 1..10000] [--raw] [--text]
|
|
53
64
|
(查看伙伴正在做什么:读取同组、本机 tmux 成员的当前屏幕,不发送按键、不打断对方。
|
|
54
65
|
需要了解进展、排查卡住或决定是否跟进时先 capture;不是完整聊天历史或完成凭证。
|
|
55
66
|
用 status --text 查成员 ID;不支持远端成员,远端请 send 询问进展。)
|
|
@@ -74,17 +85,17 @@ Exit codes: 0 requested condition met; 1 invalid request/network error;
|
|
|
74
85
|
cleanup without --confirm prints the plan and refuses (also 1);
|
|
75
86
|
2 wait timeout (message may still deliver); 3 failed/expired.
|
|
76
87
|
Message limit: ${COLLAB_LIMITS.message_bytes} UTF-8 bytes; metadata: ${COLLAB_LIMITS.metadata_bytes} bytes.
|
|
77
|
-
Idempotency retention: 7 days.
|
|
78
|
-
Inbox defaults to
|
|
79
|
-
Reading never advances a consumer
|
|
88
|
+
Idempotency retention: 7 days. Terminal delivery, ACK and result never imply each other.
|
|
89
|
+
Inbox defaults to newest 50; cursor/consumer mode reads oldest unseen first.
|
|
90
|
+
Reading never advances a consumer. Read receipts are not supported.`;
|
|
80
91
|
/** One roster row: prefer the member's human name, keep the full session id
|
|
81
92
|
* reachable for role set/unset targeting, mark unset members explicitly. */
|
|
82
93
|
function roleLine(member, role) {
|
|
83
94
|
const label = member.name ? `${member.name} (${member.sessionId})` : member.sessionId;
|
|
84
95
|
return role ? `- ${label}:${role}` : `- ${label}(未设置)`;
|
|
85
96
|
}
|
|
86
|
-
const BOOLEAN_OPTIONS = new Set(['json', 'jsonl', 'text', '
|
|
87
|
-
const VALUE_OPTIONS = new Set(['session', 'group', 'thread', 'idempotency-key', 'file', 'wait-until', 'timeout', 'expect-reply', 'response-kind', 'metadata', 'task-envelope', 'expires-at', 'since', 'after-id', 'cursor', 'consumer', 'limit', 'from', 'kind', 'name', 'cwd', 'task', 'pane']);
|
|
97
|
+
const BOOLEAN_OPTIONS = new Set(['json', 'jsonl', 'text', 'follow', 'stdin', 'receipt-only', 'confirm', 'raw', 'help']);
|
|
98
|
+
const VALUE_OPTIONS = new Set(['session', 'group', 'thread', 'idempotency-key', 'file', 'wait-until', 'timeout', 'expect-reply', 'response-kind', 'metadata', 'task-envelope', 'expires-at', 'since', 'after-id', 'cursor', 'consumer', 'limit', 'from', 'kind', 'name', 'cwd', 'task', 'pane', 'lines', 'if-version']);
|
|
88
99
|
export function parseCollaborationCommand(argv) {
|
|
89
100
|
const options = {};
|
|
90
101
|
const positional = [];
|
|
@@ -118,11 +129,11 @@ export function parseCollaborationCommand(argv) {
|
|
|
118
129
|
// A discoverable read-only entry point, sharing capture's existing scope and transport.
|
|
119
130
|
if (requestedAction === 'capture') {
|
|
120
131
|
if (positional.length !== 1)
|
|
121
|
-
throw new Error('Usage: td collab capture <session-id> [--text]');
|
|
132
|
+
throw new Error('Usage: td collab capture <session-id> [--lines 1..10000] [--raw] [--text]');
|
|
122
133
|
positional.push('capture');
|
|
123
134
|
}
|
|
124
|
-
const action = (requestedAction === 'capture' ? 'drive' : requestedAction);
|
|
125
|
-
if (!['status', 'inbox', 'send', 'handoff', 'reply', 'add', 'remove', 'spawn', 'message', 'cursor', 'rebind', 'role', 'rename', 'cleanup', 'drive', 'capabilities', 'help'].includes(action))
|
|
135
|
+
const action = (requestedAction === 'capture' ? 'drive' : requestedAction === 'traits' ? 'role' : requestedAction);
|
|
136
|
+
if (!['status', 'inbox', 'send', 'handoff', 'reply', 'add', 'remove', 'spawn', 'message', 'cursor', 'rebind', 'role', 'rename', 'cleanup', 'drive', 'capabilities', 'transport', 'rules', 'help'].includes(action))
|
|
126
137
|
throw new Error('Unknown collaboration command; see td collab --help');
|
|
127
138
|
if (typeof options.session === 'string' && !options.session.trim())
|
|
128
139
|
throw new Error('--session requires a non-empty full Termdock session id');
|
|
@@ -130,8 +141,8 @@ export function parseCollaborationCommand(argv) {
|
|
|
130
141
|
throw new Error('pane must be a tmux pane id such as %3');
|
|
131
142
|
if (['json', 'jsonl', 'text'].filter((key) => options[key]).length > 1)
|
|
132
143
|
throw new Error('Choose one output format');
|
|
133
|
-
if (options['wait-until'] && !['queued', 'delivered'
|
|
134
|
-
throw new Error('wait-until must be queued
|
|
144
|
+
if (options['wait-until'] && !['queued', 'delivered'].includes(String(options['wait-until'])))
|
|
145
|
+
throw new Error('wait-until must be queued or delivered');
|
|
135
146
|
if (options['expect-reply'] && !['ack', 'result', 'any'].includes(String(options['expect-reply'])))
|
|
136
147
|
throw new Error('expect-reply must be ack, result or any');
|
|
137
148
|
if (options.timeout)
|
|
@@ -145,11 +156,29 @@ export function parseCollaborationCommand(argv) {
|
|
|
145
156
|
if ([Boolean(command.message), Boolean(options.file), Boolean(options.stdin)].filter(Boolean).length !== 1)
|
|
146
157
|
throw new Error('Choose inline body, --file, or --stdin');
|
|
147
158
|
}
|
|
159
|
+
else if (action === 'rules') {
|
|
160
|
+
command.operation = positional.shift();
|
|
161
|
+
command.groupId = positional.shift();
|
|
162
|
+
command.message = positional.join(' ');
|
|
163
|
+
if (!command.groupId || !['get', 'set', 'clear'].includes(command.operation ?? ''))
|
|
164
|
+
throw new Error('Usage: td collab rules get|set|clear <group-id>');
|
|
165
|
+
if (command.operation === 'set' ? [Boolean(command.message), Boolean(options.file), Boolean(options.stdin)].filter(Boolean).length !== 1
|
|
166
|
+
: Boolean(command.message || options.file || options.stdin))
|
|
167
|
+
throw new Error('rules set requires inline text, --file or --stdin');
|
|
168
|
+
}
|
|
169
|
+
else if (action === 'transport') {
|
|
170
|
+
command.operation = positional.shift();
|
|
171
|
+
command.groupId = positional.shift();
|
|
172
|
+
if (positional.length || !['info', 'register'].includes(command.operation ?? '')
|
|
173
|
+
|| (command.operation === 'info' ? command.groupId || options.file : !command.groupId || !options.file)) {
|
|
174
|
+
throw new Error('Usage: td collab transport info | transport register <group-id> --file <nodes.json>');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
148
177
|
else if (action === 'message') {
|
|
149
178
|
command.operation = positional.shift();
|
|
150
179
|
command.target = positional.shift();
|
|
151
|
-
if (!['get', 'watch', '
|
|
152
|
-
throw new Error('Usage: td collab message get|watch|
|
|
180
|
+
if (!['get', 'watch', 'confirm-shell'].includes(command.operation ?? '') || !command.target || positional.length)
|
|
181
|
+
throw new Error('Usage: td collab message get|watch|confirm-shell <id>');
|
|
153
182
|
}
|
|
154
183
|
else if (action === 'cursor') {
|
|
155
184
|
command.operation = positional.shift();
|
|
@@ -219,21 +248,23 @@ export function parseCollaborationCommand(argv) {
|
|
|
219
248
|
throw new Error(`Unexpected arguments for ${action}`);
|
|
220
249
|
const allowed = new Set(['json', 'jsonl', 'text', 'help', 'session']);
|
|
221
250
|
const byAction = {
|
|
222
|
-
status: [], capabilities: [], rebind: ['pane'], help: [...BOOLEAN_OPTIONS, ...VALUE_OPTIONS],
|
|
251
|
+
rules: ['file', 'stdin', 'if-version'], transport: ['file'], status: [], capabilities: [], rebind: ['pane'], help: [...BOOLEAN_OPTIONS, ...VALUE_OPTIONS],
|
|
223
252
|
send: ['group', 'thread', 'idempotency-key', 'file', 'stdin', 'wait-until', 'timeout', 'expect-reply', 'response-kind', 'metadata', 'expires-at', 'kind'],
|
|
224
253
|
handoff: ['group', 'thread', 'idempotency-key', 'file', 'stdin', 'wait-until', 'timeout', 'expect-reply', 'response-kind', 'metadata', 'expires-at'],
|
|
225
254
|
reply: ['idempotency-key', 'file', 'stdin', 'wait-until', 'timeout', 'expect-reply', 'response-kind', 'metadata', 'task-envelope', 'expires-at'],
|
|
226
|
-
inbox: ['
|
|
227
|
-
message: ['receipt-only', 'follow', 'wait-until', 'timeout', 'expect-reply'], cursor: ['consumer'],
|
|
228
|
-
add: [], remove: [], spawn: ['name', 'cwd', 'task'], role: [], rename: [], cleanup: ['confirm'], drive: [],
|
|
255
|
+
inbox: ['raw', 'since', 'after-id', 'cursor', 'consumer', 'limit', 'from', 'group', 'thread', 'kind', 'response-kind', 'follow', 'timeout'],
|
|
256
|
+
message: ['raw', 'receipt-only', 'follow', 'wait-until', 'timeout', 'expect-reply'], cursor: ['consumer'],
|
|
257
|
+
add: [], remove: [], spawn: ['name', 'cwd', 'task'], role: [], rename: [], cleanup: ['confirm'], drive: ['lines', 'raw'],
|
|
229
258
|
};
|
|
230
259
|
for (const option of byAction[action])
|
|
231
260
|
allowed.add(option);
|
|
232
261
|
for (const option of Object.keys(options))
|
|
233
262
|
if (!allowed.has(option))
|
|
234
263
|
throw new Error(`--${option} is not supported by ${action}`);
|
|
235
|
-
if (
|
|
236
|
-
throw new Error('
|
|
264
|
+
if (options.lines && (!/^\d+$/.test(String(options.lines)) || Number(options.lines) < 1 || Number(options.lines) > 10000))
|
|
265
|
+
throw new Error('--lines must be 1..10000 history rows');
|
|
266
|
+
if (action === 'drive' && command.operation !== 'capture' && (options.lines || options.raw))
|
|
267
|
+
throw new Error('--lines/--raw only apply to capture');
|
|
237
268
|
return command;
|
|
238
269
|
}
|
|
239
270
|
export function duration(value) {
|
|
@@ -244,7 +275,7 @@ export function duration(value) {
|
|
|
244
275
|
return result;
|
|
245
276
|
}
|
|
246
277
|
export function waitSatisfied(receipt, stage, reply) {
|
|
247
|
-
const reached = stage === 'queued' || (stage === 'delivered' && ['delivered', 'read'].includes(receipt.status))
|
|
278
|
+
const reached = stage === 'queued' || (stage === 'delivered' && ['delivered', 'read'].includes(receipt.status));
|
|
248
279
|
return reached && (!reply || (reply === 'ack' ? receipt.ack_at != null : reply === 'result' ? receipt.result_ids?.length > 0 : receipt.reply_ids?.length > 0));
|
|
249
280
|
}
|
|
250
281
|
export async function executeCollaborationCommand(command, context, io) {
|
|
@@ -279,12 +310,15 @@ export async function executeCollaborationCommand(command, context, io) {
|
|
|
279
310
|
io.write(`同时发给了:${fanIds.map((id) => names[id] ?? id).join('、')}`);
|
|
280
311
|
io.write(message.content);
|
|
281
312
|
}
|
|
282
|
-
else if (value.message)
|
|
313
|
+
else if (value.message) {
|
|
314
|
+
if (value.message.instructions?.text)
|
|
315
|
+
io.write(`协作约定(版本 ${value.message.instructions.version}):\n${value.message.instructions.text}`);
|
|
283
316
|
io.write(`[${value.status}] ${canonicalShortId(String(value.message_id ?? ''))}\n${value.message.content}`);
|
|
317
|
+
}
|
|
284
318
|
else if (value.message_id) {
|
|
285
319
|
io.write(`${value.status} ${canonicalShortId(String(value.message_id))}${value.thread_id ? ` thread=${canonicalShortId(String(value.thread_id))}` : ''}${value.code ? ` ${value.code}` : ''}${value.failure_reason ? ` ${value.failure_reason}` : ''}`);
|
|
286
320
|
// A timeout after the wait stage itself was reached means delivery
|
|
287
|
-
//
|
|
321
|
+
// completed — only the expected reply/result is late.
|
|
288
322
|
if (value.code === 'WAIT_TIMEOUT' && value.stage_reached && value.expect_reply) {
|
|
289
323
|
io.write(`\n投递已完成;等待${value.expect_reply === 'result' ? '结果' : '回复'}超时(expect-reply=${value.expect_reply})`);
|
|
290
324
|
}
|
|
@@ -309,6 +343,37 @@ export async function executeCollaborationCommand(command, context, io) {
|
|
|
309
343
|
let receipt;
|
|
310
344
|
let idempotencyKey;
|
|
311
345
|
try {
|
|
346
|
+
if (command.action === 'rules') {
|
|
347
|
+
let body;
|
|
348
|
+
if (command.operation === 'get')
|
|
349
|
+
body = await request('GET', `/rules?group=${encodeURIComponent(command.groupId)}`);
|
|
350
|
+
else {
|
|
351
|
+
if (o.stdin && !io.stdin)
|
|
352
|
+
throw new Error('stdin is unavailable');
|
|
353
|
+
if (o.file && fs.statSync(String(o.file)).size > 8192)
|
|
354
|
+
throw new Error('群规最多 8192 UTF-8 字节');
|
|
355
|
+
const text = command.operation === 'clear' ? '' : o.file ? fs.readFileSync(String(o.file), 'utf8') : o.stdin ? await io.stdin() : command.message;
|
|
356
|
+
body = await request('POST', '/rules', { group_id: command.groupId, text, expected_version: o['if-version'] });
|
|
357
|
+
}
|
|
358
|
+
if (o.text)
|
|
359
|
+
io.write(`群规版本:${body.instructions?.version ?? '未设置'}\n${body.instructions?.text ?? ''}`);
|
|
360
|
+
else
|
|
361
|
+
output(body);
|
|
362
|
+
return 0;
|
|
363
|
+
}
|
|
364
|
+
if (command.action === 'transport') {
|
|
365
|
+
if (command.operation === 'info')
|
|
366
|
+
output(await request('GET', '/transport'));
|
|
367
|
+
else {
|
|
368
|
+
if (fs.statSync(String(o.file)).size > 64 * 1024)
|
|
369
|
+
throw new Error('Peer registration is too large');
|
|
370
|
+
const raw = fs.readFileSync(String(o.file), 'utf8');
|
|
371
|
+
if (Buffer.byteLength(raw) > 64 * 1024)
|
|
372
|
+
throw new Error('Peer registration is too large');
|
|
373
|
+
output(await request('POST', '/transport', { groupId: command.groupId, nodes: JSON.parse(raw) }));
|
|
374
|
+
}
|
|
375
|
+
return 0;
|
|
376
|
+
}
|
|
312
377
|
if (command.action === 'help') {
|
|
313
378
|
io.write(COLLAB_HELP);
|
|
314
379
|
// Append the caller's own groups with every member role — help doubles
|
|
@@ -334,6 +399,19 @@ export async function executeCollaborationCommand(command, context, io) {
|
|
|
334
399
|
if (command.action === 'capabilities' || command.action === 'status') {
|
|
335
400
|
const result = await request('GET', command.action === 'status' ? '/peers' : '/capabilities');
|
|
336
401
|
output(result);
|
|
402
|
+
if (command.action === 'status' && o.text) {
|
|
403
|
+
for (const group of result.groups ?? []) {
|
|
404
|
+
io.write(`组「${group.name}」成员定位:`);
|
|
405
|
+
for (const id of group.sessionIds ?? []) {
|
|
406
|
+
const member = [...(result.peers ?? []), result.source].find(item => item?.sessionId === id);
|
|
407
|
+
io.write(roleLine({ sessionId: id, name: member?.name }, group.roles?.[id]));
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
for (const peer of result.peers ?? [])
|
|
411
|
+
if (peer.last_terminal_output_at && peer.activity_observed_at) {
|
|
412
|
+
io.write(`${peer.name || peer.sessionId}:观测时距终端输出 ${peer.output_idle_seconds ?? Math.max(0, Math.floor((peer.activity_observed_at - peer.last_terminal_output_at) / 1000))} 秒(不代表任务进度)`);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
337
415
|
if (command.action === 'status' && o.text && Array.isArray(result.peers) && result.peers.length) {
|
|
338
416
|
io.write('查看伙伴当前屏幕(只读,仅本机 tmux):');
|
|
339
417
|
for (const peer of result.peers) {
|
|
@@ -355,7 +433,7 @@ export async function executeCollaborationCommand(command, context, io) {
|
|
|
355
433
|
let cursor = o.cursor;
|
|
356
434
|
do {
|
|
357
435
|
const params = new URLSearchParams();
|
|
358
|
-
for (const key of ['
|
|
436
|
+
for (const key of ['raw', 'since', 'after-id', 'consumer', 'limit', 'from', 'group', 'thread', 'kind', 'response-kind'])
|
|
359
437
|
if (o[key])
|
|
360
438
|
params.set(key.replaceAll('-', '_'), String(o[key]));
|
|
361
439
|
if (cursor) {
|
|
@@ -379,11 +457,11 @@ export async function executeCollaborationCommand(command, context, io) {
|
|
|
379
457
|
}
|
|
380
458
|
if (command.action === 'message') {
|
|
381
459
|
const route = `/message/${encodeURIComponent(command.target)}`;
|
|
382
|
-
if (command.operation === '
|
|
460
|
+
if (command.operation === 'confirm-shell') {
|
|
383
461
|
output(await request('POST', `${route}/${command.operation}`));
|
|
384
462
|
return 0;
|
|
385
463
|
}
|
|
386
|
-
receipt = await request('GET', `${route}
|
|
464
|
+
receipt = await request('GET', `${route}?receipt_only=${Boolean(o['receipt-only'] || command.operation === 'watch')}&raw=${Boolean(o.raw)}`);
|
|
387
465
|
if (command.operation === 'get' && !o.follow && !o['wait-until'] && !o['expect-reply']) {
|
|
388
466
|
output(receipt);
|
|
389
467
|
return 0;
|
|
@@ -460,7 +538,7 @@ export async function executeCollaborationCommand(command, context, io) {
|
|
|
460
538
|
return 0;
|
|
461
539
|
}
|
|
462
540
|
else if (command.action === 'drive') {
|
|
463
|
-
const body = await request('POST', '/drive', { session: command.sessionId, action: command.operation, text: command.message });
|
|
541
|
+
const body = await request('POST', '/drive', { session: command.sessionId, action: command.operation, text: command.message, ...(o.lines ? { lines: Number(o.lines) } : {}), ...(o.raw ? { raw: true } : {}) });
|
|
464
542
|
const result = body;
|
|
465
543
|
if (o.text) {
|
|
466
544
|
if (command.operation === 'run') {
|
|
@@ -523,7 +601,7 @@ export async function executeCollaborationCommand(command, context, io) {
|
|
|
523
601
|
output(await request('POST', command.action === 'spawn' ? '/spawn' : '/members', body));
|
|
524
602
|
return 0;
|
|
525
603
|
}
|
|
526
|
-
const stage = String(o['wait-until'] ?? (command.action === 'message' ? '
|
|
604
|
+
const stage = String(o['wait-until'] ?? (command.action === 'message' ? 'delivered' : 'queued'));
|
|
527
605
|
let previous = '';
|
|
528
606
|
for (;;) {
|
|
529
607
|
if (['failed', 'expired'].includes(receipt.status)) {
|
|
@@ -543,7 +621,9 @@ export async function executeCollaborationCommand(command, context, io) {
|
|
|
543
621
|
}
|
|
544
622
|
if (now() >= deadline) {
|
|
545
623
|
output({ ...receipt, ok: false, code: 'WAIT_TIMEOUT', wait_until: stage, stage_reached: waitSatisfied(receipt, stage, undefined),
|
|
546
|
-
expect_reply: o['expect-reply'] ?? null, delivery_continues: true
|
|
624
|
+
expect_reply: o['expect-reply'] ?? null, delivery_continues: true,
|
|
625
|
+
delivery: receipt.delivery ?? { status: receipt.status },
|
|
626
|
+
reply: { ...receipt.reply, status: o['expect-reply'] ? 'timeout' : receipt.reply?.status ?? 'pending', expected: o['expect-reply'] ?? null } });
|
|
547
627
|
return 2;
|
|
548
628
|
}
|
|
549
629
|
await sleep(Math.min(500, deadline - now()));
|