termdock 1.4.355 → 1.4.357
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/README.md +22 -4
- package/dist/client/assets/AndroidMirrorView-BGagwKtL.js +3 -0
- package/dist/client/assets/AndroidMirrorView-BGagwKtL.js.br +0 -0
- package/dist/client/assets/AndroidMirrorView-BGagwKtL.js.gz +0 -0
- package/dist/client/assets/App-DpMhxwYW.js +178 -0
- package/dist/client/assets/App-DpMhxwYW.js.br +0 -0
- package/dist/client/assets/App-DpMhxwYW.js.gz +0 -0
- package/dist/client/assets/ArchitecturePanel-Bd_l74EC.js +9 -0
- package/dist/client/assets/ArchitecturePanel-Bd_l74EC.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-Bd_l74EC.js.gz +0 -0
- package/dist/client/assets/{ChangeWalkthroughPanel-mAiaX5i8.js → ChangeWalkthroughPanel-6DN-2BdR.js} +2 -2
- package/dist/client/assets/ChangeWalkthroughPanel-6DN-2BdR.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-6DN-2BdR.js.gz +0 -0
- package/dist/client/assets/{ChatRichContent-D2NtgMuL.js → ChatRichContent-DjwpmW7d.js} +55 -55
- package/dist/client/assets/ChatRichContent-DjwpmW7d.js.br +0 -0
- package/dist/client/assets/ChatRichContent-DjwpmW7d.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-DPTJ9pCt.js +1 -0
- package/dist/client/assets/CollaborationMainWorkspace-DPTJ9pCt.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-DPTJ9pCt.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-Cbu1Bjl0.js +1 -0
- package/dist/client/assets/ComputerControlView-CwB-wQqB.js +6 -0
- package/dist/client/assets/ComputerControlView-CwB-wQqB.js.br +0 -0
- package/dist/client/assets/ComputerControlView-CwB-wQqB.js.gz +0 -0
- package/dist/client/assets/{DagPlayground-CbEuQA68.js → DagPlayground-DMn9Gyrw.js} +1 -1
- package/dist/client/assets/DagPlayground-DMn9Gyrw.js.br +0 -0
- package/dist/client/assets/DagPlayground-DMn9Gyrw.js.gz +0 -0
- package/dist/client/assets/{DiffLab-PysBkJrJ.js → DiffLab-YBWlCU2T.js} +1 -1
- package/dist/client/assets/DiffLab-YBWlCU2T.js.br +0 -0
- package/dist/client/assets/DiffLab-YBWlCU2T.js.gz +0 -0
- package/dist/client/assets/DiffReview-YOPDWqhv.js +1 -0
- package/dist/client/assets/DiffReview-YOPDWqhv.js.br +0 -0
- package/dist/client/assets/DiffReview-YOPDWqhv.js.gz +0 -0
- package/dist/client/assets/{DiffReviewLab-D6PxvtBY.js → DiffReviewLab-SYomq14c.js} +1 -1
- package/dist/client/assets/DiffReviewLab-SYomq14c.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-SYomq14c.js.gz +0 -0
- package/dist/client/assets/{DiffViewer-Bp-BLT2f.js → DiffViewer-mh9cBl5v.js} +1 -1
- package/dist/client/assets/DiffViewer-mh9cBl5v.js.br +0 -0
- package/dist/client/assets/DiffViewer-mh9cBl5v.js.gz +0 -0
- package/dist/client/assets/{GitLoadingSkeleton-Fa4AXG-N.js → GitLoadingSkeleton-DKRTc5sz.js} +1 -1
- package/dist/client/assets/GitLoadingSkeleton-DKRTc5sz.js.br +0 -0
- package/dist/client/assets/GitLoadingSkeleton-DKRTc5sz.js.gz +0 -0
- package/dist/client/assets/Markdown-C8OP1j-g.js +23 -0
- package/dist/client/assets/Markdown-C8OP1j-g.js.br +0 -0
- package/dist/client/assets/Markdown-C8OP1j-g.js.gz +0 -0
- package/dist/client/assets/Markdown-DKQhs57e.css +1 -0
- package/dist/client/assets/Markdown-DKQhs57e.css.br +0 -0
- package/dist/client/assets/Markdown-DKQhs57e.css.gz +0 -0
- package/dist/client/assets/{ModelPreview-Cl0X7I-U.js → ModelPreview-CsZry3Wd.js} +3 -3
- package/dist/client/assets/ModelPreview-CsZry3Wd.js.br +0 -0
- package/dist/client/assets/ModelPreview-CsZry3Wd.js.gz +0 -0
- package/dist/client/assets/RecordingSaveDialog-CoRGi97z.js +1 -0
- package/dist/client/assets/RecordingSaveDialog-CoRGi97z.js.br +0 -0
- package/dist/client/assets/RecordingSaveDialog-CoRGi97z.js.gz +0 -0
- package/dist/client/assets/RightSidebar-DNY2kC6B.js +1662 -0
- package/dist/client/assets/RightSidebar-DNY2kC6B.js.br +0 -0
- package/dist/client/assets/RightSidebar-DNY2kC6B.js.gz +0 -0
- package/dist/client/assets/SessionChatView-DXNpYUrk.js +13 -0
- package/dist/client/assets/SessionChatView-DXNpYUrk.js.br +0 -0
- package/dist/client/assets/SessionChatView-DXNpYUrk.js.gz +0 -0
- package/dist/client/assets/SessionResourceSidebar-B_379HBJ.js +2 -0
- package/dist/client/assets/SessionResourceSidebar-B_379HBJ.js.br +0 -0
- package/dist/client/assets/SessionResourceSidebar-B_379HBJ.js.gz +0 -0
- package/dist/client/assets/TodoWorkspace-DfwGOAHB.js +1 -0
- package/dist/client/assets/TodoWorkspace-DfwGOAHB.js.br +0 -0
- package/dist/client/assets/TodoWorkspace-DfwGOAHB.js.gz +0 -0
- package/dist/client/assets/{abnfDiagram-VCTEODGH-BajyXVpH.js → abnfDiagram-VCTEODGH-C9M0gnl-.js} +1 -1
- package/dist/client/assets/abnfDiagram-VCTEODGH-C9M0gnl-.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-C9M0gnl-.js.gz +0 -0
- package/dist/client/assets/app-CovJYQoW.js +37 -0
- package/dist/client/assets/app-CovJYQoW.js.br +0 -0
- package/dist/client/assets/app-CovJYQoW.js.gz +0 -0
- package/dist/client/assets/{arc-CbhM5I2d.js → arc-q4wfkQcT.js} +1 -1
- package/dist/client/assets/arc-q4wfkQcT.js.br +0 -0
- package/dist/client/assets/arc-q4wfkQcT.js.gz +0 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-CDKLcS6D.js → architectureDiagram-5GKGNRK7-CCuna3ab.js} +1 -1
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CCuna3ab.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CCuna3ab.js.gz +0 -0
- package/dist/client/assets/{arrow-down-Dp27yS0N.js → arrow-down-WyzmLXwQ.js} +1 -1
- package/dist/client/assets/{blockDiagram-I7D4REHJ-CXiIO6_W.js → blockDiagram-I7D4REHJ-BXK68Qyt.js} +1 -1
- package/dist/client/assets/blockDiagram-I7D4REHJ-BXK68Qyt.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-BXK68Qyt.js.gz +0 -0
- package/dist/client/assets/{c4Diagram-7LVT6UL2-uZ-i2eKH.js → c4Diagram-7LVT6UL2-BqwmmVmS.js} +1 -1
- package/dist/client/assets/{c4Diagram-7LVT6UL2-uZ-i2eKH.js.br → c4Diagram-7LVT6UL2-BqwmmVmS.js.br} +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-BqwmmVmS.js.gz +0 -0
- package/dist/client/assets/channel-Dd6WQGB7.js +1 -0
- package/dist/client/assets/{chevron-left-D8ntyw2S.js → chevron-left-CxeWIsDK.js} +1 -1
- package/dist/client/assets/{chunk-2Q5K7J3B-DVe3dVJR.js → chunk-2Q5K7J3B-esKGR38U.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-BDBNKGuU.js → chunk-5VM5RSS4-B3InxqDA.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-BP7hTwtm.js → chunk-F27PBJKO-CjUVyF-E.js} +1 -1
- package/dist/client/assets/chunk-F27PBJKO-CjUVyF-E.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-CjUVyF-E.js.gz +0 -0
- package/dist/client/assets/{chunk-IMKFNOWR-LIGuOtnb.js → chunk-IMKFNOWR-BR8mmBs7.js} +1 -1
- package/dist/client/assets/chunk-IMKFNOWR-BR8mmBs7.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-BR8mmBs7.js.gz +0 -0
- package/dist/client/assets/{chunk-JWPE2WC7-C1_iFEvk.js → chunk-JWPE2WC7-CplXNOA7.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-CYZsO-QL.js → chunk-POPQ4Y6H-D0JWCGnb.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-FnWYLNCS.js → chunk-SVP7TREG-BdJtJSmy.js} +1 -1
- package/dist/client/assets/chunk-SVP7TREG-BdJtJSmy.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-BdJtJSmy.js.gz +0 -0
- package/dist/client/assets/{chunk-TICWLB2K-dcOCcmQq.js → chunk-TICWLB2K-CoevFj8I.js} +1 -1
- package/dist/client/assets/chunk-TICWLB2K-CoevFj8I.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-CoevFj8I.js.gz +0 -0
- package/dist/client/assets/{chunk-XXDRQBXY-B2H2Yt9G.js → chunk-XXDRQBXY-D7qYRhMH.js} +1 -1
- package/dist/client/assets/{circle-Pldg1yI9.js → circle-xgKDXpwG.js} +1 -1
- package/dist/client/assets/classDiagram-ZZMXUADV-BdIUq_D7.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-BdIUq_D7.js +1 -0
- package/dist/client/assets/{clipboard-tTkMEO1S.js → clipboard-DeK6pJD3.js} +1 -1
- package/dist/client/assets/clipboardText-BWOwer6N.js +1 -0
- package/dist/client/assets/clipboardText-BWOwer6N.js.br +0 -0
- package/dist/client/assets/clipboardText-BWOwer6N.js.gz +0 -0
- package/dist/client/assets/clipboardText-vX90C7eX.css +1 -0
- package/dist/client/assets/clipboardText-vX90C7eX.css.br +0 -0
- package/dist/client/assets/clipboardText-vX90C7eX.css.gz +0 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-Bz38mqD8.js → cose-bilkent-JH36ORCC-CvnsiaWP.js} +1 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-CvnsiaWP.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-CvnsiaWP.js.gz +0 -0
- package/dist/client/assets/{cynefin-OW5HDTMX-CZAa1A6y.js → cynefin-OW5HDTMX-BSGz8Olu.js} +1 -1
- package/dist/client/assets/cynefin-OW5HDTMX-BSGz8Olu.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-BSGz8Olu.js.gz +0 -0
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-BaQnW4VG.js → cynefinDiagram-5FMLGOSQ-DYYT0AHs.js} +1 -1
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DYYT0AHs.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DYYT0AHs.js.gz +0 -0
- package/dist/client/assets/{dagre-GXQ25YYZ-BdnT61bc.js → dagre-GXQ25YYZ-BM883MN7.js} +1 -1
- package/dist/client/assets/dagre-GXQ25YYZ-BM883MN7.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-BM883MN7.js.gz +0 -0
- package/dist/client/assets/{diagram-S7CK7UJ4-BWiF8QNc.js → diagram-S7CK7UJ4-CYnxXy7R.js} +1 -1
- package/dist/client/assets/diagram-S7CK7UJ4-CYnxXy7R.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-CYnxXy7R.js.gz +0 -0
- package/dist/client/assets/{diagram-UQ7AKVKN-DLURjCFp.js → diagram-UQ7AKVKN-UOIBVxRf.js} +1 -1
- package/dist/client/assets/diagram-UQ7AKVKN-UOIBVxRf.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-UOIBVxRf.js.gz +0 -0
- package/dist/client/assets/{diagram-VSXAHHWV-DYIcLklz.js → diagram-VSXAHHWV-CqTJzfmm.js} +1 -1
- package/dist/client/assets/diagram-VSXAHHWV-CqTJzfmm.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-CqTJzfmm.js.gz +0 -0
- package/dist/client/assets/{diagram-VX7I27RA-C9vqviXX.js → diagram-VX7I27RA-T9Y88CFB.js} +1 -1
- package/dist/client/assets/diagram-VX7I27RA-T9Y88CFB.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-T9Y88CFB.js.gz +0 -0
- package/dist/client/assets/{diagram-Z3DM3KII-BJuQxTkw.js → diagram-Z3DM3KII-kIQDy7E0.js} +1 -1
- package/dist/client/assets/diagram-Z3DM3KII-kIQDy7E0.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-kIQDy7E0.js.gz +0 -0
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-BcbISm-z.js → ebnfDiagram-PWID7BFC-z_VqR_JE.js} +1 -1
- package/dist/client/assets/ebnfDiagram-PWID7BFC-z_VqR_JE.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-z_VqR_JE.js.gz +0 -0
- package/dist/client/assets/{erDiagram-RLTQ6QDP-fhNpRzUG.js → erDiagram-RLTQ6QDP-0q52Z-pm.js} +1 -1
- package/dist/client/assets/erDiagram-RLTQ6QDP-0q52Z-pm.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-0q52Z-pm.js.gz +0 -0
- package/dist/client/assets/{external-link-DE8Gj-da.js → external-link-CsydVmO1.js} +1 -1
- package/dist/client/assets/{flowDiagram-HODETNUW-CVDJ_1Zu.js → flowDiagram-HODETNUW-BrGqcUWn.js} +1 -1
- package/dist/client/assets/flowDiagram-HODETNUW-BrGqcUWn.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-BrGqcUWn.js.gz +0 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-Dzn-mrfe.js → ganttDiagram-EL5Y4UJY-CHAN6vQv.js} +1 -1
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CHAN6vQv.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CHAN6vQv.js.gz +0 -0
- package/dist/client/assets/{git-compare-Ct2eJNs4.js → git-compare-BmKAtQTt.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-Ci-wfvCz.js → gitGraphDiagram-WWUBYQGX-C0ZV4FeB.js} +1 -1
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C0ZV4FeB.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C0ZV4FeB.js.gz +0 -0
- package/dist/client/assets/index-DEAMSl55.css +1 -0
- package/dist/client/assets/index-DEAMSl55.css.br +0 -0
- package/dist/client/assets/index-DEAMSl55.css.gz +0 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-npBmeTt7.js → infoDiagram-27XIBGKW-CrLj9y1o.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-CCn5Ha25.js → ishikawaDiagram-5VMMS53U-BxGvUfLX.js} +1 -1
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-BxGvUfLX.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-BxGvUfLX.js.gz +0 -0
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-CPl5oPfe.js → journeyDiagram-3NMN7TZE-rW9xlQ8G.js} +1 -1
- package/dist/client/assets/journeyDiagram-3NMN7TZE-rW9xlQ8G.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-rW9xlQ8G.js.gz +0 -0
- package/dist/client/assets/{kanban-definition-UXKFOSKX-Dmia2kLZ.js → kanban-definition-UXKFOSKX-CFI5iv9R.js} +1 -1
- package/dist/client/assets/kanban-definition-UXKFOSKX-CFI5iv9R.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-CFI5iv9R.js.gz +0 -0
- package/dist/client/assets/{layout-B2Kz5M73.js → layout-Ct_an5XT.js} +1 -1
- package/dist/client/assets/layout-Ct_an5XT.js.br +0 -0
- package/dist/client/assets/layout-Ct_an5XT.js.gz +0 -0
- package/dist/client/assets/{linear-D2CT7wE3.js → linear-DpEFOA9l.js} +1 -1
- package/dist/client/assets/linear-DpEFOA9l.js.br +0 -0
- package/dist/client/assets/linear-DpEFOA9l.js.gz +0 -0
- package/dist/client/assets/{link-x33s12VI.js → link-34ChBc4F.js} +3 -3
- package/dist/client/assets/link-34ChBc4F.js.br +0 -0
- package/dist/client/assets/link-34ChBc4F.js.gz +0 -0
- package/dist/client/assets/{list-tree-XBmm9il2.js → list-tree-48dzbuUh.js} +1 -1
- package/dist/client/assets/{maximize-2-t-zzENew.js → maximize-2-CbvSsu7O.js} +1 -1
- package/dist/client/assets/{mermaid.core-G9XIcppl.js → mermaid.core-DnVKnMmy.js} +5 -5
- package/dist/client/assets/mermaid.core-DnVKnMmy.js.br +0 -0
- package/dist/client/assets/mermaid.core-DnVKnMmy.js.gz +0 -0
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-D2OX9OkO.js → mindmap-definition-YA3MSWOX-C6shupTY.js} +1 -1
- package/dist/client/assets/mindmap-definition-YA3MSWOX-C6shupTY.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-C6shupTY.js.gz +0 -0
- package/dist/client/assets/{passwordBootstrap-DkTynZfV.js → passwordBootstrap-Doe50DSa.js} +1 -1
- package/dist/client/assets/passwordBootstrap-Doe50DSa.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-Doe50DSa.js.gz +0 -0
- package/dist/client/assets/{pegDiagram-XKGWAZYB-qNjd6dbd.js → pegDiagram-XKGWAZYB-CDcnrvKX.js} +1 -1
- package/dist/client/assets/pegDiagram-XKGWAZYB-CDcnrvKX.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-CDcnrvKX.js.gz +0 -0
- package/dist/client/assets/{pieDiagram-E7YTZNPT-DcCmKDFh.js → pieDiagram-E7YTZNPT-CrGc03Tg.js} +1 -1
- package/dist/client/assets/pieDiagram-E7YTZNPT-CrGc03Tg.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-CrGc03Tg.js.gz +0 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-BpDzkl9h.js → quadrantDiagram-AXDQQJYC-3-aldwKj.js} +1 -1
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-3-aldwKj.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-3-aldwKj.js.gz +0 -0
- package/dist/client/assets/{quote-DeByS04O.js → quote-B5GeKEq1.js} +1 -1
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-DkwV8w7x.js → railroadDiagram-O6MQD6OU-51uKwR2_.js} +1 -1
- package/dist/client/assets/railroadDiagram-O6MQD6OU-51uKwR2_.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-51uKwR2_.js.gz +0 -0
- package/dist/client/assets/rdpSession-ocpkj4XY.js +1 -0
- package/dist/client/assets/rdpSession-ocpkj4XY.js.br +0 -0
- package/dist/client/assets/rdpSession-ocpkj4XY.js.gz +0 -0
- package/dist/client/assets/referenceSelection-fvfRDbgp.js +4 -0
- package/dist/client/assets/referenceSelection-fvfRDbgp.js.br +0 -0
- package/dist/client/assets/referenceSelection-fvfRDbgp.js.gz +0 -0
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-BRwt5MXl.js → requirementDiagram-BXWQKSXE-CY6kp0_Y.js} +1 -1
- package/dist/client/assets/requirementDiagram-BXWQKSXE-CY6kp0_Y.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-CY6kp0_Y.js.gz +0 -0
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-DZ8y_gv3.js → sankeyDiagram-P5KCCOFB-BsA0NkHG.js} +1 -1
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-BsA0NkHG.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-BsA0NkHG.js.gz +0 -0
- package/dist/client/assets/{search-CDJ4fv-q.js → search-CbpNLSpd.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-CJ9lZEsN.js → sequenceDiagram-WJ2MYXX4-BDzn7N2D.js} +1 -1
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BDzn7N2D.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BDzn7N2D.js.gz +0 -0
- package/dist/client/assets/{sizeCapture-INFHLROL-Dt9ZzegQ.js → sizeCapture-INFHLROL-gxtam7nc.js} +1 -1
- package/dist/client/assets/sizeCapture-INFHLROL-gxtam7nc.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-gxtam7nc.js.gz +0 -0
- package/dist/client/assets/{stateDiagram-D77RDMKH-DgeQtV3s.js → stateDiagram-D77RDMKH-C4XjYLZR.js} +1 -1
- package/dist/client/assets/stateDiagram-D77RDMKH-C4XjYLZR.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-C4XjYLZR.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BfHWFf-I.js +1 -0
- package/dist/client/assets/{sun-CvzpsfHU.js → sun-CMXn_ntS.js} +1 -1
- package/dist/client/assets/{swimlanes-42K2YHIH-DHB6MQ8v.js → swimlanes-42K2YHIH--a1wkQO8.js} +1 -1
- package/dist/client/assets/swimlanes-42K2YHIH--a1wkQO8.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH--a1wkQO8.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DsiDF1XD.js +8 -0
- package/dist/client/assets/swiper-CTPycjLq.js +1 -0
- package/dist/client/assets/swiper-CTPycjLq.js.br +0 -0
- package/dist/client/assets/swiper-CTPycjLq.js.gz +0 -0
- package/dist/client/assets/{terminal-Dea8wJF3.js → terminal-DaiFCKy_.js} +7 -7
- package/dist/client/assets/terminal-DaiFCKy_.js.br +0 -0
- package/dist/client/assets/terminal-DaiFCKy_.js.gz +0 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-EqVVyv-E.js → timeline-definition-24CTP7MA-DFmXXUuU.js} +1 -1
- package/dist/client/assets/timeline-definition-24CTP7MA-DFmXXUuU.js.br +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-DFmXXUuU.js.gz +0 -0
- package/dist/client/assets/triangle-alert-DgGU_xB4.js +1 -0
- package/dist/client/assets/{unplug-BNUx6Lmk.js → unplug-CnZtWzVW.js} +1 -1
- package/dist/client/assets/use-gesture-react.esm-DHU0wi7Q.js +1 -0
- package/dist/client/assets/use-gesture-react.esm-DHU0wi7Q.js.br +0 -0
- package/dist/client/assets/use-gesture-react.esm-DHU0wi7Q.js.gz +0 -0
- package/dist/client/assets/{vennDiagram-4TSXK5OY-BBE17-sL.js → vennDiagram-4TSXK5OY-DgR4zroQ.js} +1 -1
- package/dist/client/assets/vennDiagram-4TSXK5OY-DgR4zroQ.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-DgR4zroQ.js.gz +0 -0
- package/dist/client/assets/{videoCompression-B09OiyP5.js → videoCompression-CcffRZdP.js} +1 -1
- package/dist/client/assets/videoCompression-CcffRZdP.js.br +0 -0
- package/dist/client/assets/videoCompression-CcffRZdP.js.gz +0 -0
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-B4gZGXiA.js → wardleyDiagram-VM6X3IG4-CY4SVUkf.js} +1 -1
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-CY4SVUkf.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-CY4SVUkf.js.gz +0 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-BDO5xF5D.js → xychartDiagram-S5SC5T6Z-PblQhR-b.js} +1 -1
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-PblQhR-b.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-PblQhR-b.js.gz +0 -0
- package/dist/client/index.html +3 -3
- package/dist/client/index.html.br +0 -0
- package/dist/client/index.html.gz +0 -0
- package/dist/client/sw-encrypted-background.js +1 -1
- package/dist/client/sw-encrypted-background.js.br +0 -0
- package/dist/client/sw-encrypted-background.js.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/chatUIPrompt.js +1 -0
- package/dist/server/agent/collaborationPeerTransport.js +14 -69
- package/dist/server/agent/collaborationStore.js +5 -0
- package/dist/server/agent/installers.js +89 -33
- package/dist/server/agent/integrationServer.js +31 -2
- package/dist/server/agent/pluginPackages.js +51 -22
- package/dist/server/agent/sessionChatRoutes.js +45 -7
- package/dist/server/agentHook.js +56 -12
- package/dist/server/android/adb.js +24 -31
- package/dist/server/cli.js +52 -110
- package/dist/server/entry.js +17 -23
- package/dist/server/federation/cli.js +13 -47
- package/dist/server/federation/connectionErrors.js +37 -0
- package/dist/server/federation/connectionModel.js +83 -0
- package/dist/server/federation/desktopTargets.js +35 -13
- package/dist/server/federation/directRoutes.js +28 -36
- package/dist/server/federation/directTargetRegistry.js +106 -0
- package/dist/server/federation/httpUploadLimit.js +8 -0
- package/dist/server/federation/invitations.js +5 -1
- package/dist/server/federation/relay.js +13 -6
- package/dist/server/federation/relayTransport.js +147 -0
- package/dist/server/federation/routeAccess.js +5 -3
- package/dist/server/federation/routeInvitations.js +5 -1
- package/dist/server/federation/runtime.js +4 -2
- package/dist/server/federation/selfRelay.js +10 -59
- package/dist/server/federation/serviceTransport.js +123 -0
- package/dist/server/federation/streamLimits.js +3 -0
- package/dist/server/federation/trustedCa.js +61 -0
- package/dist/server/routes/android.js +5 -7
- package/dist/server/routes/terminal.js +149 -111
- package/dist/server/shared/androidDevices.js +64 -0
- package/dist/server/shared/programStatus.js +174 -0
- package/dist/server/shared/shareResources.js +3 -2
- package/dist/server/todos/routes.js +36 -0
- package/dist/server/todos/store.js +31 -1
- package/dist/server/utils/bootCheck.js +41 -271
- package/dist/server/utils/localHttpsSetup.js +257 -0
- package/dist/server/utils/oscBuffer.js +9 -0
- package/dist/server/utils/sessionDisplayName.js +11 -9
- package/dist/server/utils/settings.js +6 -3
- package/dist/server/utils/tmuxDisplayGeometry.js +54 -0
- package/dist/server/utils/tmuxObserverSize.js +26 -0
- package/docs/integrations.md +2 -1
- package/package.json +5 -1
- package/runtime-manifest.json +3 -3
- package/scripts/ensure-node-pty.cjs +22 -7
- package/scripts/install-utils.cjs +81 -0
- package/scripts/postinstall.mjs +24 -110
- package/dist/client/assets/AndroidMirrorView-BC_6L3mG.js +0 -3
- package/dist/client/assets/AndroidMirrorView-BC_6L3mG.js.br +0 -0
- package/dist/client/assets/AndroidMirrorView-BC_6L3mG.js.gz +0 -0
- package/dist/client/assets/App-BGECv_n_.js +0 -178
- package/dist/client/assets/App-BGECv_n_.js.br +0 -0
- package/dist/client/assets/App-BGECv_n_.js.gz +0 -0
- package/dist/client/assets/ArchitecturePanel-CYdolNzT.js +0 -9
- package/dist/client/assets/ArchitecturePanel-CYdolNzT.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-CYdolNzT.js.gz +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-mAiaX5i8.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-mAiaX5i8.js.gz +0 -0
- package/dist/client/assets/ChatRichContent-D2NtgMuL.js.br +0 -0
- package/dist/client/assets/ChatRichContent-D2NtgMuL.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-CcHsVfXD.js +0 -1
- package/dist/client/assets/CollaborationMainWorkspace-CcHsVfXD.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-CcHsVfXD.js.gz +0 -0
- package/dist/client/assets/CollaborationTaskContent-FcrGGSr_.js +0 -2
- package/dist/client/assets/ComputerControlView-DU9krDsg.js +0 -6
- package/dist/client/assets/ComputerControlView-DU9krDsg.js.br +0 -0
- package/dist/client/assets/ComputerControlView-DU9krDsg.js.gz +0 -0
- package/dist/client/assets/DagPlayground-CbEuQA68.js.br +0 -0
- package/dist/client/assets/DagPlayground-CbEuQA68.js.gz +0 -0
- package/dist/client/assets/DiffLab-PysBkJrJ.js.br +0 -0
- package/dist/client/assets/DiffLab-PysBkJrJ.js.gz +0 -0
- package/dist/client/assets/DiffReview-Ce3wKMBk.js +0 -1
- package/dist/client/assets/DiffReview-Ce3wKMBk.js.br +0 -0
- package/dist/client/assets/DiffReview-Ce3wKMBk.js.gz +0 -0
- package/dist/client/assets/DiffReviewLab-D6PxvtBY.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-D6PxvtBY.js.gz +0 -0
- package/dist/client/assets/DiffViewer-Bp-BLT2f.js.br +0 -0
- package/dist/client/assets/DiffViewer-Bp-BLT2f.js.gz +0 -0
- package/dist/client/assets/GitLoadingSkeleton-Fa4AXG-N.js.br +0 -0
- package/dist/client/assets/GitLoadingSkeleton-Fa4AXG-N.js.gz +0 -0
- package/dist/client/assets/MarkdownPreview-_Z5UzhLt.js +0 -19
- package/dist/client/assets/MarkdownPreview-_Z5UzhLt.js.br +0 -0
- package/dist/client/assets/MarkdownPreview-_Z5UzhLt.js.gz +0 -0
- package/dist/client/assets/ModelPreview-Cl0X7I-U.js.br +0 -0
- package/dist/client/assets/ModelPreview-Cl0X7I-U.js.gz +0 -0
- package/dist/client/assets/RecordingSaveDialog-Ca2iJsOW.js +0 -1
- package/dist/client/assets/RecordingSaveDialog-Ca2iJsOW.js.br +0 -0
- package/dist/client/assets/RecordingSaveDialog-Ca2iJsOW.js.gz +0 -0
- package/dist/client/assets/RightSidebar-CwXIBpEw.js +0 -1662
- package/dist/client/assets/RightSidebar-CwXIBpEw.js.br +0 -0
- package/dist/client/assets/RightSidebar-CwXIBpEw.js.gz +0 -0
- package/dist/client/assets/SessionChatView-D3sLcYAc.js +0 -13
- package/dist/client/assets/SessionChatView-D3sLcYAc.js.br +0 -0
- package/dist/client/assets/SessionChatView-D3sLcYAc.js.gz +0 -0
- package/dist/client/assets/SessionChatView-D8GoESjb.css +0 -1
- package/dist/client/assets/SessionChatView-D8GoESjb.css.br +0 -0
- package/dist/client/assets/SessionChatView-D8GoESjb.css.gz +0 -0
- package/dist/client/assets/SessionResourceSidebar-BObKJeA9.js +0 -2
- package/dist/client/assets/SessionResourceSidebar-BObKJeA9.js.br +0 -0
- package/dist/client/assets/SessionResourceSidebar-BObKJeA9.js.gz +0 -0
- package/dist/client/assets/TodoWorkspace-BdesAuz4.js +0 -1
- package/dist/client/assets/TodoWorkspace-BdesAuz4.js.br +0 -0
- package/dist/client/assets/TodoWorkspace-BdesAuz4.js.gz +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-BajyXVpH.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-BajyXVpH.js.gz +0 -0
- package/dist/client/assets/app-C3WX_u_Z.js +0 -37
- package/dist/client/assets/app-C3WX_u_Z.js.br +0 -0
- package/dist/client/assets/app-C3WX_u_Z.js.gz +0 -0
- package/dist/client/assets/arc-CbhM5I2d.js.br +0 -0
- package/dist/client/assets/arc-CbhM5I2d.js.gz +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CDKLcS6D.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-CDKLcS6D.js.gz +0 -0
- package/dist/client/assets/arrow-up-BEUQcf-s.js +0 -1
- package/dist/client/assets/blockDiagram-I7D4REHJ-CXiIO6_W.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-CXiIO6_W.js.gz +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-uZ-i2eKH.js.gz +0 -0
- package/dist/client/assets/channel-Dg7JKsqi.js +0 -1
- package/dist/client/assets/chunk-F27PBJKO-BP7hTwtm.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-BP7hTwtm.js.gz +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-LIGuOtnb.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-LIGuOtnb.js.gz +0 -0
- package/dist/client/assets/chunk-SVP7TREG-FnWYLNCS.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-FnWYLNCS.js.gz +0 -0
- package/dist/client/assets/chunk-TICWLB2K-dcOCcmQq.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-dcOCcmQq.js.gz +0 -0
- package/dist/client/assets/classDiagram-ZZMXUADV-D6QBd_IP.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-D6QBd_IP.js +0 -1
- package/dist/client/assets/clipboardText-BapOM7QN.js +0 -1
- package/dist/client/assets/clipboardText-BapOM7QN.js.br +0 -0
- package/dist/client/assets/clipboardText-BapOM7QN.js.gz +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-Bz38mqD8.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-Bz38mqD8.js.gz +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-CZAa1A6y.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-CZAa1A6y.js.gz +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BaQnW4VG.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BaQnW4VG.js.gz +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-BdnT61bc.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-BdnT61bc.js.gz +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-BWiF8QNc.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-BWiF8QNc.js.gz +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-DLURjCFp.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-DLURjCFp.js.gz +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-DYIcLklz.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-DYIcLklz.js.gz +0 -0
- package/dist/client/assets/diagram-VX7I27RA-C9vqviXX.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-C9vqviXX.js.gz +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-BJuQxTkw.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-BJuQxTkw.js.gz +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-BcbISm-z.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-BcbISm-z.js.gz +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-fhNpRzUG.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-fhNpRzUG.js.gz +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-CVDJ_1Zu.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-CVDJ_1Zu.js.gz +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-Dzn-mrfe.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-Dzn-mrfe.js.gz +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-Ci-wfvCz.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-Ci-wfvCz.js.gz +0 -0
- package/dist/client/assets/index-DOq3vkFG.css +0 -1
- package/dist/client/assets/index-DOq3vkFG.css.br +0 -0
- package/dist/client/assets/index-DOq3vkFG.css.gz +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-CCn5Ha25.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-CCn5Ha25.js.gz +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-CPl5oPfe.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-CPl5oPfe.js.gz +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-Dmia2kLZ.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-Dmia2kLZ.js.gz +0 -0
- package/dist/client/assets/layout-B2Kz5M73.js.br +0 -0
- package/dist/client/assets/layout-B2Kz5M73.js.gz +0 -0
- package/dist/client/assets/linear-D2CT7wE3.js.br +0 -0
- package/dist/client/assets/linear-D2CT7wE3.js.gz +0 -0
- package/dist/client/assets/link-x33s12VI.js.br +0 -0
- package/dist/client/assets/link-x33s12VI.js.gz +0 -0
- package/dist/client/assets/loader-circle-D_nJKmMD.js +0 -1
- package/dist/client/assets/mermaid.core-G9XIcppl.js.br +0 -0
- package/dist/client/assets/mermaid.core-G9XIcppl.js.gz +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-D2OX9OkO.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-D2OX9OkO.js.gz +0 -0
- package/dist/client/assets/passwordBootstrap-DkTynZfV.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-DkTynZfV.js.gz +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-qNjd6dbd.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-qNjd6dbd.js.gz +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-DcCmKDFh.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-DcCmKDFh.js.gz +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-BpDzkl9h.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-BpDzkl9h.js.gz +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-DkwV8w7x.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-DkwV8w7x.js.gz +0 -0
- package/dist/client/assets/rdpSession-D5NrFTav.js +0 -1
- package/dist/client/assets/rdpSession-D5NrFTav.js.br +0 -0
- package/dist/client/assets/rdpSession-D5NrFTav.js.gz +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-BRwt5MXl.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-BRwt5MXl.js.gz +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-DZ8y_gv3.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-DZ8y_gv3.js.gz +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-CJ9lZEsN.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-CJ9lZEsN.js.gz +0 -0
- package/dist/client/assets/settings-2-DtFz7lgk.js +0 -1
- package/dist/client/assets/sizeCapture-INFHLROL-Dt9ZzegQ.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-Dt9ZzegQ.js.gz +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-DgeQtV3s.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-DgeQtV3s.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CKS6y2rR.js +0 -1
- package/dist/client/assets/swimlanes-42K2YHIH-DHB6MQ8v.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-DHB6MQ8v.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DvUzDKPI.js +0 -8
- package/dist/client/assets/swiper-DJjq1TYT.js +0 -1
- package/dist/client/assets/swiper-DJjq1TYT.js.br +0 -0
- package/dist/client/assets/swiper-DJjq1TYT.js.gz +0 -0
- package/dist/client/assets/syntaxHighlight-DF6Q5phI.js +0 -4
- package/dist/client/assets/syntaxHighlight-DF6Q5phI.js.br +0 -0
- package/dist/client/assets/syntaxHighlight-DF6Q5phI.js.gz +0 -0
- package/dist/client/assets/terminal-Dea8wJF3.js.br +0 -0
- package/dist/client/assets/terminal-Dea8wJF3.js.gz +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-EqVVyv-E.js.br +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-EqVVyv-E.js.gz +0 -0
- package/dist/client/assets/triangle-alert--5QOrsVl.js +0 -1
- package/dist/client/assets/use-gesture-react.esm-DYpdiE_k.js +0 -1
- package/dist/client/assets/use-gesture-react.esm-DYpdiE_k.js.br +0 -0
- package/dist/client/assets/use-gesture-react.esm-DYpdiE_k.js.gz +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-BBE17-sL.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-BBE17-sL.js.gz +0 -0
- package/dist/client/assets/videoCompression-B09OiyP5.js.br +0 -0
- package/dist/client/assets/videoCompression-B09OiyP5.js.gz +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-B4gZGXiA.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-B4gZGXiA.js.gz +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-BDO5xF5D.js.br +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-BDO5xF5D.js.gz +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarkdownPreview-_Z5UzhLt.js","assets/app-C3WX_u_Z.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-Dea8wJF3.js","assets/index-DOq3vkFG.css","assets/use-gesture-react.esm-DYpdiE_k.js","assets/swiper-DJjq1TYT.js","assets/swiper-C2J0D0kV.css","assets/syntaxHighlight-DF6Q5phI.js","assets/list-tree-XBmm9il2.js","assets/ChatRichContent-D2NtgMuL.js","assets/circle-Pldg1yI9.js","assets/search-CDJ4fv-q.js","assets/external-link-DE8Gj-da.js","assets/quote-DeByS04O.js","assets/clipboardText-BapOM7QN.js","assets/loader-circle-D_nJKmMD.js","assets/arrow-down-Dp27yS0N.js","assets/arrow-up-BEUQcf-s.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{a0 as Ne,cg as t,a5 as $e,C as Ee,k as Ce,f as He,a4 as fe,e7 as Je,e6 as Be,b8 as Qe,bP as me,dq as Se,aY as W,bf as ee,dm as Ye,ei as Ge,x as Xe,R as Ze,W as Te,cK as We,ag as et}from"./app-C3WX_u_Z.js";import{b as s}from"./dnd-BCFAPC0L.js";import{Q as xe}from"./quote-DeByS04O.js";import{r as tt,T as rt,p as ce,b as nt,a as Ae,w as st,P as Re}from"./clipboardText-BapOM7QN.js";import{L as Le}from"./loader-circle-D_nJKmMD.js";import{A as at}from"./arrow-down-Dp27yS0N.js";import{A as it}from"./arrow-up-BEUQcf-s.js";function ot(a){const r=[];for(const n of a){const o=r[r.length-1];n.role==="assistant"&&o?.role==="assistant"?o.messages.push(n):r.push({id:n.id,role:n.role,messages:[n]})}return r}function lt(a){const r=a.slice().reverse().find(n=>n.role==="user");return!r||["failed","expired"].includes(r.status)?!1:!a.some(n=>n.role==="assistant"&&n.replyTo===r.id&&!["ack","progress"].includes(n.responseKind||""))}function ct(a){return{pending:"已发送",delivered:"已发送",stored:"已发送",failed:"发送失败",expired:"发送失败"}[a]||"待确认"}const ue=new Set;function ut(a){const[r,n]=s.useState(!1);return s.useLayoutEffect(()=>{if(!a){n(!1);return}const o=Symbol("chat-viewport");ue.add(o);const x=document.documentElement,v=()=>{const k=Number.parseFloat(x.style.getPropertyValue("--kb-height"))>=80;x.dataset.termdockChatViewport="true",x.dataset.termdockChatKeyboard=String(k),n(y=>y===k?y:k)};return v(),document.addEventListener(Ne,v),document.addEventListener("termdock:viewport-keyboard-change",v),()=>{document.removeEventListener(Ne,v),document.removeEventListener("termdock:viewport-keyboard-change",v),ue.delete(o),ue.size||(delete x.dataset.termdockChatViewport,delete x.dataset.termdockChatKeyboard)}},[a]),r}function De(a,r){return r?`> ${r.author.replace(/[\r\n]/g," ")} · ${r.time}
|
|
3
|
-
${r.text.replace(/\r\n?/g,`
|
|
4
|
-
`).split(`
|
|
5
|
-
`).map(n=>`> ${n}`).join(`
|
|
6
|
-
`)}
|
|
7
|
-
|
|
8
|
-
${a.trim()}`:a.trim()}function pe(a){const r=a.split(`
|
|
9
|
-
`),n=r[0].match(/^> (.+) · (\d{2}:\d{2})$/);if(!n)return{text:a,reference:null};let o=1;for(;o<r.length&&r[o].startsWith(">");)o++;return o<2||r[o]!==""?{text:a,reference:null}:{text:r.slice(o+1).join(`
|
|
10
|
-
`),reference:{author:n[1],time:n[2],text:r.slice(1,o).map(x=>x.replace(/^> ?/,"")).join(`
|
|
11
|
-
`)}}}const dt=s.lazy(()=>$e(()=>import("./MarkdownPreview-_Z5UzhLt.js").then(a=>a.b),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(a=>({default:a.MarkdownPreview}))),ze=s.memo(function({content:r}){return t.jsx(s.Suspense,{fallback:t.jsx("p",{className:"whitespace-pre-wrap text-[15px] leading-7",children:r}),children:t.jsx(dt,{embedded:!0,referenceLines:!1,content:r,filePath:null,rootPath:null,lineRange:null,onLineRangeClick:()=>{},scrollTop:0,outlineOpen:!1,lightboxOpen:!1})})}),ft=s.lazy(()=>$e(()=>import("./ChatRichContent-D2NtgMuL.js"),__vite__mapDeps([11,1,2,3,4,5,12,13,14,15,16,17,18,19])).then(a=>({default:a.ChatRichContent}))),Z=a=>new Date(a).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hourCycle:"h23"}),mt=new Set(["amp","claude","codex","copilot","cursor","droid","gemini","goose","grok","kimi","opencode"]);function Ie({name:a,slug:r}){const n=r&&mt.has(r)?`url(/icons/agents/${r}.svg) center / contain no-repeat`:void 0;return t.jsxs("span",{className:"inline-flex items-center gap-2 font-medium text-foreground/75",children:[n?t.jsx("span",{"aria-hidden":"true",className:"h-4 w-4 shrink-0 bg-current",style:{mask:n,WebkitMask:n}}):t.jsx(He,{size:15,"aria-hidden":"true"}),t.jsx("span",{children:a})]})}function Pe({reference:a,onRemove:r}){return t.jsxs("blockquote",{className:"mb-2 min-w-0 rounded-lg border-l-2 border-primary/50 bg-surface px-3 py-2 text-left",children:[t.jsxs("div",{className:"flex items-center gap-2 text-[11px] leading-5 text-muted-foreground",children:[t.jsx(xe,{size:12}),t.jsxs("span",{className:"min-w-0 flex-1 truncate",children:[a.author," · ",a.time]}),r&&t.jsx("button",{type:"button","aria-label":"移除消息引用",title:"移除引用",className:"inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md hover:bg-surface-2",onPointerDown:n=>n.preventDefault(),onClick:r,children:t.jsx(fe,{size:13})})]}),t.jsx("p",{className:"line-clamp-3 whitespace-pre-wrap break-words text-[13px] leading-6 text-foreground/75",title:a.text,children:a.text})]})}function Oe({content:a}){const r=pe(a);return t.jsxs(t.Fragment,{children:[r.reference&&t.jsx(Pe,{reference:r.reference}),t.jsx("p",{className:"whitespace-pre-wrap break-words text-[15px] leading-7 sm:text-base",children:r.text})]})}const de="inline-flex h-8 min-w-8 items-center justify-center gap-1 rounded-lg text-muted-foreground/60 transition hover:bg-surface-2 hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring";function pt({messages:a,agentName:r,agentSlug:n,canWrite:o,copied:x,onCopy:v,onReference:k,sessionId:y,uiWritable:P,onAction:j}){return t.jsx("div",{className:"space-y-6 sm:space-y-7",children:ot(a).map(h=>{const S=h.messages[h.messages.length-1],l=h.role==="user",d=h.messages.map(c=>c.content).join(`
|
|
12
|
-
|
|
13
|
-
`),g=c=>o&&t.jsx("button",{type:"button","aria-label":"引用消息",title:"引用这条消息",className:`${de} shrink-0`,onPointerDown:m=>m.preventDefault(),onClick:()=>k(c),children:t.jsx(xe,{size:13})});return t.jsxs("article",{"data-chat-turn":h.role,"data-chat-message":l?h.id:void 0,className:l?"ml-auto w-fit max-w-[88%] sm:max-w-[85%]":"w-full",children:[l?t.jsx("div",{className:"rounded-2xl bg-surface-2 px-4 py-3",children:t.jsx(Oe,{content:d})}):t.jsx("div",{className:"session-chat-markdown min-w-0 space-y-4 break-words",children:h.messages.map((c,m)=>t.jsxs("div",{"data-chat-message":c.id,children:[m===0&&t.jsxs("div",{className:"mb-2 flex min-h-8 items-center gap-3 text-[11px] leading-4 text-muted-foreground/60",children:[t.jsx(Ie,{name:r,slug:n}),t.jsx("span",{className:"flex-1"}),t.jsx("time",{className:"shrink-0 tabular-nums",dateTime:new Date(c.createdAt).toISOString(),title:new Date(c.createdAt).toLocaleString(),children:Z(c.createdAt)})]}),c.ui?t.jsx(s.Suspense,{fallback:t.jsx(ze,{content:c.content}),children:t.jsx(ft,{message:c,sessionId:y,canWrite:P,onAction:j},c.id)}):t.jsx(ze,{content:c.content}),t.jsxs("div",{"data-chat-message-actions":!0,"data-chat-continuation":m<h.messages.length-1?"":void 0,className:"mt-1 flex items-center gap-2",children:[g(c),t.jsxs("button",{type:"button",className:de,"aria-label":"复制回复",title:"复制",onClick:()=>v(c.content,c.id),children:[x===c.id?t.jsx(Ee,{size:13}):t.jsx(Ce,{size:13}),x===c.id&&t.jsx("span",{className:"text-[10px]",children:"已复制"})]}),m<h.messages.length-1&&t.jsxs(t.Fragment,{children:[t.jsx("span",{"aria-hidden":"true",className:"mx-1 h-px min-w-0 flex-1 bg-border/60"}),t.jsx("time",{className:"shrink-0 text-[11px] tabular-nums text-muted-foreground/60",dateTime:new Date(h.messages[m+1].createdAt).toISOString(),children:Z(h.messages[m+1].createdAt)})]})]})]},c.id))}),l&&t.jsxs("div",{"data-chat-message-actions":!0,className:"mt-1 flex items-center justify-end gap-2 text-[10px] text-muted-foreground",children:[t.jsx("span",{children:ct(S.status)}),t.jsx("time",{dateTime:new Date(S.createdAt).toISOString(),title:new Date(S.createdAt).toLocaleString(),className:"opacity-60",children:Z(S.createdAt)}),g(S),t.jsxs("button",{type:"button",className:de,"aria-label":"复制消息",title:"复制",onClick:()=>v(d,h.id),children:[x===h.id?t.jsx(Ee,{size:13}):t.jsx(Ce,{size:13}),x===h.id&&t.jsx("span",{className:"text-[10px]",children:"已复制"})]})]})]},h.id)})})}function xt(a){const r=s.useRef(a);r.current=a;const[n,o]=s.useState(null),x=s.useRef(null),v=s.useRef(!0),k=s.useCallback(()=>{x.current?.controller.abort();const l=r.current,d=Se(),g=W(),c=ee(),m=document.activeElement,T=new AbortController,f={controller:T,current:()=>v.current&&!T.signal.aborted&&x.current===f&&r.current.active&&r.current.canWrite&&r.current.sessionId===l.sessionId&&Se()===d&&W()===g&&!g?.closed&&ee()===c,focus:()=>document.activeElement===m||document.activeElement===l.input.current||document.activeElement===document.body};return x.current=f,f},[]);s.useEffect(()=>{const l=()=>{x.current&&!x.current.current()&&(x.current.controller.abort(),x.current=null,o(null))};l();const d=()=>{x.current?.controller.abort(),x.current=null,o(null)};return window.addEventListener("termdock:secure-state",l),window.addEventListener("auth:unauthorized",d),document.addEventListener("focusin",l),()=>{window.removeEventListener("termdock:secure-state",l),window.removeEventListener("auth:unauthorized",d),document.removeEventListener("focusin",l)}},[a.active,a.canWrite,a.sessionId]),s.useEffect(()=>(v.current=!0,()=>{v.current=!1,x.current?.controller.abort()}),[]);const y=s.useCallback(async(l,d,g=[])=>{if(l.current()){o({stage:"uploading",percent:d.length?0:void 0,files:d,paths:g}),r.current.error("");try{if(d.length&&!r.current.directory&&!r.current.sessionAttachments)throw new Error("附件上传暂不可用,请重试");const c=f=>{l.current()&&o({stage:"uploading",percent:Math.round(f),files:d,paths:g})},m=d.length?r.current.sessionAttachments?await Je(r.current.sessionId,d,l.controller.signal,c,l.current):await Be(r.current.directory,d,l.controller.signal,c,l.current):{files:[]};if(!l.current())return;if(m.files.length!==d.length||m.files.some(f=>!f.path))throw new Error("部分文件未上传成功,请重试");const T=[...g,...m.files.map(f=>f.path)];if(!T.length)throw new Error("没有可添加的文件");r.current.insert(`${T.map(Qe).join(" ")} `,l.focus()),o(null),x.current=null}catch(c){if(!l.current())return;o({stage:"failed",files:d,paths:g}),r.current.error(c instanceof Error?c.message:"文件上传失败,请重试")}}},[]),P=s.useCallback(l=>{!r.current.active||!r.current.canWrite||!l.length||y(k(),l)},[k,y]),j=s.useCallback(async l=>{if(!r.current.active||!r.current.canWrite)return;const d=k();o({stage:"reading"}),r.current.error("");const g=m=>{if(!d.current())throw new DOMException("Clipboard target changed","AbortError");return m},c=m=>{d.current()&&(r.current.insert(m,d.focus()),o(null),x.current=null)};try{const m=me();let T;if(m?.readClipboardFiles)try{const{files:f,paths:D}=g(await tt());if(f.length||D.length)return await y(d,f,D)}catch(f){if(!d.current()||f instanceof rt)throw f;T=f}if(l?.files.length){const f=l.files.length===1&&l.files[0].type.startsWith("image/")?[ce(l.files[0])]:l.files;return await y(d,f)}if(l?.text){c(l.text);return}if(!m?.readClipboardImage&&typeof navigator.clipboard?.read=="function"){const f=g(await navigator.clipboard.read()),D=g(await nt({read:async()=>f}));if(D.length)return await y(d,D);const H=g(await Ae({read:async()=>f}));if(H)return await y(d,[ce(H)]);for(const O of f)if(O.types.includes("text/plain")){c(g(await g(await O.getType("text/plain")).text()));return}}else{const f=g(await Ae(navigator.clipboard));if(f)return await y(d,[ce(f)])}if(navigator.clipboard?.readText){const f=g(await navigator.clipboard.readText());if(f){c(f);return}}throw T||new Error("剪贴板没有可读取的内容,请使用系统粘贴或选择文件")}catch(m){d.current()&&(o(null),r.current.error(m instanceof Error?m.message:"粘贴失败,请重试"))}},[k,y]);return{transfer:n,addFiles:P,paste:j,cancel:()=>{x.current?.controller.abort(),x.current=null,o(l=>l?{...l,stage:"cancelled"}:null)},retry:()=>{(n?.files?.length||n?.paths?.length)&&y(k(),n.files||[],n.paths)},dismiss:()=>o(null),busy:n?.stage==="reading"||n?.stage==="uploading"}}const X="inline-flex min-h-11 items-center justify-center gap-2 rounded-xl px-3 text-sm transition hover:bg-surface-2 disabled:opacity-40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring";function ht({sessionId:a,name:r="当前会话",canWrite:n=!0,active:o=!0,terminalLink:x=!1,onKeyboardChange:v,onTerminal:k}){const y=ut(o),P=s.useRef(v);P.current=v,s.useEffect(()=>{P.current?.(o&&y)},[o,y]);const j=`termdock:chat:${Ye()?.targetPeerId||location.origin}:${a}`,[h,S]=s.useState(()=>{try{return sessionStorage.getItem(`${j}:draft`)||""}catch{return""}}),[l,d]=s.useState(()=>{try{const e=JSON.parse(sessionStorage.getItem(`${j}:reference`)||"null");return e&&typeof e.author=="string"&&typeof e.time=="string"&&typeof e.text=="string"?e:null}catch{return null}}),[g,c]=s.useState(null),[m,T]=s.useState("助手"),[f,D]=s.useState(),[H,O]=s.useState(!1),[N,J]=s.useState(()=>{try{return JSON.parse(sessionStorage.getItem(`${j}:pending`)||"null")}catch{return null}}),[_,he]=s.useState([]),[_e,ge]=s.useState(!0),[F,Fe]=s.useState(),[te,A]=s.useState(""),[B,be]=s.useState(!1),[Me,re]=s.useState(!1),[qe,Ve]=s.useState(""),M=s.useRef(null),L=s.useRef(null),z=s.useRef(!0),ne=s.useRef(!1),q=s.useRef(0),se=s.useRef(""),ye=s.useRef(0),ae=s.useRef(null),ie=s.useRef(null),we=s.useRef(null),V=s.useRef(0),$=s.useRef({active:o,canWrite:n,sessionId:a});$.current={active:o,canWrite:n,sessionId:a};const oe=Ge(),I=s.useCallback((e,u=!0)=>{const i=L.current,p=i?.selectionStart,b=i?.selectionEnd,R=$.current,E=W(),C=ee();S(U=>{const G=Math.min(p??U.length,U.length),Ue=Math.min(b??G,U.length),ke=U.slice(0,G)+e+U.slice(Ue);return requestAnimationFrame(()=>{i?.isConnected&&i.value===ke&&$.current.active&&$.current.canWrite&&$.current.sessionId===R.sessionId&&W()===E&&ee()===C&&(u&&i.focus({preventScroll:!0}),i.setSelectionRange(G+e.length,G+e.length))}),ke})},[]),w=xt({sessionId:a,active:o,canWrite:n,input:L,insert:I,error:A,sessionAttachments:!!oe,directory:oe?oe.directories?.find(e=>e.access==="write")?.path:"/tmp"}),ve=s.useCallback((e,u)=>{if(!o||!n)return;const i=u||pe(e.content).text;if(new TextEncoder().encode(i).byteLength>8e3){A("这条消息较长,请选中需要引用的内容。");return}c(null),d({author:e.role==="user"?"用户":m,time:Z(e.createdAt),text:i}),A(""),window.getSelection()?.removeAllRanges(),L.current?.focus({preventScroll:!0})},[o,n,m]);s.useEffect(()=>{if(!o||!n){c(null);return}const e=()=>{const u=window.getSelection(),i=u?.toString().trim(),p=C=>C instanceof Element?C:C?.parentElement,b=p(u?.anchorNode)?.closest("[data-chat-message]"),R=p(u?.focusNode)?.closest("[data-chat-message]"),E=i&&b===R&&b&&ie.current?.contains(b)?{id:b.dataset.chatMessage,text:i}:null;c(C=>C?.id===E?.id&&C?.text===E?.text?C:E)};return document.addEventListener("selectionchange",e),()=>document.removeEventListener("selectionchange",e)},[o,n]),s.useEffect(()=>{try{l?sessionStorage.setItem(`${j}:reference`,JSON.stringify(l)):sessionStorage.removeItem(`${j}:reference`)}catch{}},[j,l]);const le=`/api/terminal/${encodeURIComponent(a)}/chat`,Q=s.useCallback(async e=>{const u=++ye.current,i=await fetch(le,{signal:e}),p=await i.json();if(e?.aborted||u!==ye.current)return;if(!i.ok)throw new Error("暂时无法读取对话,请重试");Fe(p.agentAvailable===!0),T(typeof p.agent?.displayName=="string"&&p.agent.displayName.trim()?p.agent.displayName:"助手"),D(typeof p.agent?.slug=="string"?p.agent.slug:void 0);const b=p.messages;if(!Array.isArray(b))throw new Error("暂时无法读取对话,请重试");const R=JSON.stringify(b);se.current!==R&&(se.current&&!z.current&&re(!0),se.current=R,he(b)),J(E=>E&&b.some(C=>C.requestId===E.requestId)?null:E),ge(!1),A("")},[le]);s.useEffect(()=>{if(!o)return;const e=new AbortController;let u=!1;const i=async()=>{if(!(u||document.visibilityState==="hidden")){u=!0;try{await Q(e.signal)}catch{e.signal.aborted||(A("连接暂时中断,正在重试…"),ge(!1))}finally{u=!1}}};i();const p=setInterval(()=>{i()},2500);return window.addEventListener("online",i),document.addEventListener("visibilitychange",i),()=>{e.abort(),clearInterval(p),window.removeEventListener("online",i),document.removeEventListener("visibilitychange",i)}},[o,Q]),s.useEffect(()=>()=>{q.current++},[]),s.useEffect(()=>{try{sessionStorage.setItem(`${j}:draft`,h)}catch{}},[j,h]),s.useEffect(()=>{try{N?sessionStorage.setItem(`${j}:pending`,JSON.stringify(N)):sessionStorage.removeItem(`${j}:pending`)}catch{}},[j,N]);const K=s.useCallback(()=>{const e=M.current;e&&(e.scrollTop=e.scrollHeight,z.current=!0,re(!1))},[]);s.useEffect(()=>{if(!ae.current||typeof ResizeObserver>"u")return;const e=new ResizeObserver(()=>{z.current&&K()});return e.observe(ae.current),M.current&&e.observe(M.current),()=>e.disconnect()},[K]),s.useLayoutEffect(()=>{z.current&&K()},[_,N,K]),s.useLayoutEffect(()=>{const e=L.current;e&&(e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,176)}px`)},[h,o]),s.useEffect(()=>{const e=L.current;if(!e||typeof ResizeObserver>"u")return;let u=0;const i=new ResizeObserver(()=>{e.clientWidth!==u&&(u=e.clientWidth,e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,176)}px`)});return i.observe(e),()=>i.disconnect()},[]);const Y=async(e,u)=>{if(ne.current||w.busy||!$.current.active||!$.current.canWrite||F!==!0)return!1;const i=e||{content:u??De(h,l),requestId:crypto.randomUUID(),createdAt:Date.now()};if(!i.content||new TextEncoder().encode(i.content).byteLength>32e3)return!1;ne.current=!0,be(!0),A(""),J(i),z.current=!0,!e&&u===void 0&&(S(""),d(null));const p=q.current;try{const b=await fetch(le,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:i.content,requestId:i.requestId}),signal:AbortSignal.timeout(2e4)}),R=await b.json();if(!b.ok)throw new Error("发送失败,请重试。");if(p!==q.current)return!1;J(null),he(E=>E.some(C=>C.id===R.id)?E:[...E,{...i,id:R.id,role:"user",status:R.status}]);try{await Q()}catch{A("消息已发送,暂时无法获取回复。")}return!0}catch(b){return p===q.current&&A(b instanceof Error&&b.name==="TimeoutError"?"发送状态待确认,请重试。":"发送失败,请重试。"),!1}finally{ne.current=!1,p===q.current&&be(!1)}};s.useEffect(()=>{const e=u=>{const i=u.detail;o&&n&&i.sessionId===a&&I(i.text)};return window.addEventListener("termdock:chat-insert",e),()=>window.removeEventListener("termdock:chat-insert",e)},[a,o,n,I]),s.useEffect(()=>{if(!o)return;const e=u=>{const i=u.detail;if(!i?.text||i.sessionId!==a)return;u.stopImmediatePropagation();const p=n&&(!i.ownedPaste||!!et(i,a));p&&I(i.text,i.focus!==!1),i.nonce&&window.dispatchEvent(new CustomEvent("termdock-insert-reference-ack",{detail:{nonce:i.nonce,ok:p}}))};return window.addEventListener("termdock-insert-reference",e,!0),()=>window.removeEventListener("termdock-insert-reference",e,!0)},[a,o,n,I]);const Ke=F===!0&&!N&<(_),je=new TextEncoder().encode(De(h,l)).byteLength>32e3;return t.jsxs("section",{ref:ie,"data-session-chat":!0,onDragEnter:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),V.current++,n&&O(!0))},onDragOver:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),e.dataTransfer.dropEffect=n?"copy":"none")},onDragLeave:e=>{e.dataTransfer.types.includes("Files")&&(V.current=Math.max(0,V.current-1),V.current||O(!1))},onDrop:e=>{let u;try{u=We(e.dataTransfer)}catch(p){e.preventDefault(),A(p instanceof Error?p.message:"文件引用无效");return}if(u&&n){e.preventDefault(),e.stopPropagation(),I(u);return}const i=Array.from(e.dataTransfer.files);if(i.length)e.preventDefault(),e.stopPropagation(),O(!1),V.current=0,w.addFiles(i);else if(n&&e.target.closest("[data-chat-composer]")){const p=e.dataTransfer.getData("text/plain");p&&(e.preventDefault(),I(p))}},onKeyDown:e=>e.stopPropagation(),className:"session-chat relative flex h-full min-h-0 flex-col overflow-hidden bg-[var(--chrome-bg)] text-foreground","aria-label":`${r}对话`,children:[t.jsx("div",{ref:M,className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-4 [overflow-anchor:none] sm:px-8",onScroll:()=>{const e=M.current;z.current=e.scrollHeight-e.scrollTop-e.clientHeight<96,z.current&&re(!1)},children:t.jsxs("div",{ref:ae,className:"mx-auto flex min-h-full w-full max-w-screen-2xl flex-col py-5 sm:py-8",children:[_e&&!_.length?t.jsxs("div",{role:"status",className:"space-y-4 py-8",children:[t.jsx("p",{className:"text-sm text-muted-foreground",children:"正在读取对话…"}),[0,1,2].map(e=>t.jsx("div",{className:"h-3 animate-pulse rounded bg-surface-2",style:{width:`${75-e*15}%`}},e))]}):!_.length&&!N?t.jsxs("div",{className:"my-auto py-6",children:[t.jsx(Xe,{size:27,strokeWidth:1.5,className:"mb-4 text-primary"}),t.jsx("h2",{className:"text-xl font-semibold tracking-tight sm:text-2xl",children:"想一起完成什么?"}),t.jsx("p",{className:"mt-2 max-w-md text-[15px] leading-7 text-muted-foreground",children:"直接描述你的目标,或从一个问题开始。"}),!y&&t.jsx("div",{className:"mt-5 flex flex-wrap gap-2",children:["帮我梳理一下当前工作","请解释一下刚才的结果","我们继续下一步"].map(e=>t.jsx("button",{type:"button",className:`${X} border border-border/60 text-left text-xs text-muted-foreground`,disabled:!n,onClick:()=>{S(e),L.current?.focus({preventScroll:!0})},children:e},e))})]}):t.jsx(pt,{sessionId:a,uiWritable:o&&n&&!N&&!B&&F===!0,onAction:e=>Y(void 0,e),messages:_,agentName:m,agentSlug:f,canWrite:n,copied:qe,onReference:e=>ve(e),onCopy:(e,u)=>{st(e,()=>ie.current?.isConnected===!0).then(i=>{i?Ve(u):A("复制失败,请选择正文复制")})}}),N&&t.jsxs("div",{className:"mt-5 ml-auto w-fit max-w-[88%] rounded-2xl bg-surface-2 px-4 py-3",children:[t.jsx(Oe,{content:N.content}),t.jsxs("div",{className:"mt-1 flex flex-wrap items-center justify-end gap-2 text-[11px] text-muted-foreground",children:[t.jsx("span",{children:B?"发送中…":"待重试"}),!B&&t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"min-h-9 rounded-lg px-2 hover:bg-surface-2",onClick:()=>{const e=pe(N.content);S(e.text),d(e.reference),J(null),A(""),L.current?.focus({preventScroll:!0})},children:"修改草稿"}),t.jsxs("button",{type:"button",className:"inline-flex min-h-9 items-center gap-1 rounded-lg px-2 text-primary hover:bg-surface-2",disabled:!n||F!==!0,onClick:()=>{Y(N)},children:[t.jsx(Ze,{size:12}),"重试发送"]})]})]})]}),Ke&&!te&&t.jsxs("div",{"data-chat-reply-status":!0,role:"status","aria-label":`${m}工作中`,"aria-live":"polite",className:"mt-6 inline-flex w-fit max-w-full items-center gap-3 self-start rounded-lg border border-border/50 bg-[color-mix(in_srgb,var(--surface)_35%,var(--chrome-bg))] px-3 py-2 text-xs text-muted-foreground",children:[t.jsx(Ie,{name:m,slug:f}),t.jsxs("span",{className:"inline-flex shrink-0 items-center gap-1.5",children:[t.jsx(Le,{size:14,className:"animate-spin text-primary motion-reduce:animate-none"}),t.jsx("span",{children:"工作中…"})]})]})]})}),H&&t.jsxs("div",{className:"pointer-events-none absolute inset-3 z-20 flex items-center justify-center rounded-2xl border-2 border-dashed border-primary bg-surface/95 text-sm text-primary",children:[t.jsx(Re,{size:18,className:"mr-2"}),"松开以添加文件"]}),t.jsxs("div",{className:"session-chat-composer relative shrink-0 px-3 pb-3 pt-1 sm:px-8 sm:pb-4",children:[Me&&t.jsx("div",{className:"flex justify-center pb-2",children:t.jsxs("button",{type:"button",className:`${X} rounded-full border border-border bg-surface text-xs shadow-lg`,onClick:K,children:[t.jsx(at,{size:14}),"查看新消息"]})}),t.jsxs("div",{className:"relative mx-auto max-w-screen-2xl",children:[te&&t.jsxs("p",{role:"alert",className:"mb-2 rounded-xl bg-surface-2 px-3 py-2 text-xs leading-6 text-destructive",children:[te,t.jsx("button",{type:"button",className:"ml-2 underline",onClick:()=>{Q().catch(()=>{})},children:"重新连接"})]}),F===!1&&t.jsxs("div",{role:"status",className:"mb-2 flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[t.jsx("span",{children:"当前对话暂不可用。"}),t.jsxs("button",{type:"button",className:X,onClick:k,children:[t.jsx(Te,{size:14}),"打开终端"]})]}),g&&t.jsx("div",{className:"pointer-events-none absolute inset-x-0 bottom-full z-20 mb-2 flex justify-center",children:t.jsxs("div",{className:"pointer-events-auto flex max-w-full items-center overflow-hidden rounded-xl border border-border bg-surface-2 shadow-lg transition-colors hover:bg-surface-elevated focus-within:bg-surface-elevated",children:[t.jsxs("button",{type:"button","aria-label":"引用选中内容",className:"inline-flex min-h-11 min-w-0 flex-1 items-center gap-2 rounded-l-xl px-3 py-1 text-left text-xs focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",onPointerDown:e=>e.preventDefault(),onClick:()=>{const e=_.find(u=>u.id===g.id);e&&ve(e,g.text)},children:[t.jsx(xe,{size:13,className:"shrink-0 text-primary"}),t.jsx("span",{className:"shrink-0 text-primary",children:"引用选中内容"}),t.jsx("span",{className:"hidden min-w-0 max-w-sm truncate text-muted-foreground sm:block",children:g.text})]}),t.jsx("button",{type:"button","aria-label":"取消选中引用",className:"inline-flex h-11 w-11 shrink-0 items-center justify-center rounded-r-xl text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring",onClick:()=>{c(null),window.getSelection()?.removeAllRanges()},children:t.jsx(fe,{size:13})})]})}),w.transfer&&t.jsxs("div",{role:"status",className:"mb-2 flex min-h-9 items-center gap-2 px-1 text-xs text-muted-foreground",children:[w.busy&&t.jsx(Le,{size:13,className:"animate-spin text-primary"}),t.jsx("span",{className:"min-w-0 flex-1",children:w.transfer.stage==="reading"?"正在读取剪贴板…":w.transfer.stage==="uploading"?`正在上传文件${w.transfer.percent===void 0?"…":` · ${w.transfer.percent}%`}`:w.transfer.stage==="cancelled"?"已取消上传":"上传未完成,文件尚未添加"}),w.busy?t.jsx("button",{type:"button",className:"min-h-9 px-2",onClick:w.cancel,children:"取消"}):t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"min-h-9 px-2 text-primary",onClick:w.retry,children:"重试上传"}),t.jsx("button",{type:"button","aria-label":"关闭上传提示",className:"min-h-9 px-2",onClick:w.dismiss,children:t.jsx(fe,{size:13})})]})]}),t.jsxs("form",{"data-chat-composer":!0,className:"rounded-2xl border border-border bg-surface p-2.5 transition-colors focus-within:border-primary/60",onSubmit:e=>{e.preventDefault(),N||Y()},children:[l&&t.jsx(Pe,{reference:l,onRemove:()=>d(null)}),t.jsxs("div",{className:"flex items-end gap-2",children:[t.jsx("input",{ref:we,type:"file",multiple:!0,tabIndex:-1,className:"hidden","aria-label":"选择附件",onChange:e=>{w.addFiles(Array.from(e.currentTarget.files||[])),e.currentTarget.value=""}}),t.jsx("button",{type:"button","aria-label":"添加文件",title:"添加文件,也可拖入或粘贴",className:"mb-0.5 inline-flex h-10 w-8 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition hover:bg-surface-2 disabled:opacity-30",disabled:!n||w.busy,onPointerDown:e=>e.preventDefault(),onClick:()=>we.current?.click(),children:t.jsx(Re,{size:18})}),t.jsx("textarea",{ref:L,onFocus:()=>c(null),onPaste:e=>{const u=e.clipboardData,i=u.files.length?Array.from(u.files):Array.from(u.items).filter(b=>b.kind==="file").map(b=>b.getAsFile()).filter(b=>!!b),p=u.getData("text/plain");(i.length||me()?.readClipboardFiles||!p&&(me()||typeof navigator.clipboard?.read=="function"))&&(e.preventDefault(),w.paste({files:i,text:p}))},rows:1,autoComplete:"off",className:"session-chat-input min-w-0 flex-1 resize-none bg-transparent px-1 py-2 text-base leading-7 outline-none placeholder:text-muted-foreground/60","aria-label":`给${m}的消息`,placeholder:n?"输入消息…":"此会话仅允许查看",value:h,disabled:!n,onChange:e=>S(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key==="Enter"&&!e.shiftKey&&!e.altKey&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&(e.preventDefault(),N||Y())}}),t.jsx("button",{type:"submit","aria-label":"发送消息",onPointerDown:e=>{document.activeElement===L.current&&e.preventDefault()},className:"mb-0.5 inline-flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-primary text-primary-foreground transition hover:opacity-90 disabled:opacity-30",disabled:B||w.busy||!!N||!h.trim()||je||!n||F!==!0,children:t.jsx(it,{size:19})})]})]}),je?t.jsx("p",{className:"mt-2 px-1 text-xs text-destructive",children:"消息过长,请缩短后发送。"}):n?!y&&t.jsx("p",{className:"session-chat-keyboard-hint mt-2 hidden px-1 text-[11px] text-muted-foreground/60 sm:block",children:"Enter 发送 · Shift + Enter 换行"}):t.jsx("p",{className:"mt-2 px-1 text-[11px] text-muted-foreground",children:"仅查看"}),x&&t.jsx("div",{className:"mt-1 flex justify-end",children:t.jsxs("button",{type:"button",className:`${X} min-h-9 px-2 text-xs text-muted-foreground`,onClick:k,children:[t.jsx(Te,{size:13}),"查看终端"]})})]})]})]})}const Nt=Object.freeze(Object.defineProperty({__proto__:null,SessionChatView:ht},Symbol.toStringTag,{value:"Module"}));export{ze as C,Nt as S};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.session-chat-markdown{font-size:15px;line-height:1.85}.session-chat-markdown p,.session-chat-markdown li,.session-chat-markdown blockquote{font-size:15px;line-height:1.85;color:var(--foreground)}.session-chat-markdown [data-markdown-preview-block-start]{padding-block:0}.session-chat-markdown h1{font-size:1.5rem;line-height:1.5}.session-chat-markdown h2{font-size:1.25rem;line-height:1.6}.session-chat-markdown h3,.session-chat-markdown h4{font-size:1.05rem;line-height:1.7}.session-chat-markdown pre,.session-chat-markdown pre code,.session-chat-markdown pre span{font-size:13px;line-height:1.7}.session-chat-markdown table{font-size:14px;line-height:1.7}.session-chat-markdown a{text-underline-offset:3px}.swiper.session-chat-swiper{touch-action:pan-x pan-y}.session-chat-input{min-height:44px;max-height:min(176px,calc(var(--app-visual-vh, 100dvh) * .35))}html[data-termdock-touch-viewport=true][data-termdock-chat-viewport=true] #root{height:var(--app-visual-vh, var(--app-vh, 100dvh));top:max(0px,var(--app-vv-offset-top, 0px))}html[data-termdock-touch-viewport=true][data-termdock-chat-keyboard=true] #root{padding-bottom:0}html[data-termdock-touch-viewport=true] .session-chat-keyboard-hint{display:none}html[data-termdock-chat-keyboard=true] .session-chat-composer{padding-bottom:8px}
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AndroidMirrorView-BC_6L3mG.js","assets/app-C3WX_u_Z.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-Dea8wJF3.js","assets/index-DOq3vkFG.css","assets/v4-EwEgHOG0.js","assets/RecordingSaveDialog-Ca2iJsOW.js","assets/use-gesture-react.esm-DYpdiE_k.js","assets/gestureArbiter-DszagC-d.js","assets/arrow-up-BEUQcf-s.js","assets/unplug-BNUx6Lmk.js","assets/circle-Pldg1yI9.js","assets/ComputerControlView-DU9krDsg.js","assets/chevron-left-D8ntyw2S.js","assets/loader-circle-D_nJKmMD.js","assets/clipboard-tTkMEO1S.js","assets/maximize-2-t-zzENew.js","assets/settings-2-DtFz7lgk.js","assets/RightSidebar-CwXIBpEw.js","assets/MarkdownPreview-_Z5UzhLt.js","assets/swiper-DJjq1TYT.js","assets/swiper-C2J0D0kV.css","assets/syntaxHighlight-DF6Q5phI.js","assets/list-tree-XBmm9il2.js","assets/GitLoadingSkeleton-Fa4AXG-N.js","assets/DiffReview-Ce3wKMBk.js","assets/DiffViewer-Bp-BLT2f.js","assets/git-compare-Ct2eJNs4.js","assets/DiffViewer-T3uj2-aP.css","assets/triangle-alert--5QOrsVl.js","assets/ChangeWalkthroughPanel-mAiaX5i8.js","assets/search-CDJ4fv-q.js","assets/arrow-down-Dp27yS0N.js","assets/RightSidebar-DW-JEgm2.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{cg as e,T as z,U as A,y as $,r as O,a4 as D,aL as V,ao as _,a5 as k,ej as F,c as M,G as U,cJ as I,e6 as B,q as J,e7 as K,at as q}from"./app-C3WX_u_Z.js";import{b as s}from"./dnd-BCFAPC0L.js";import{S as G,R as W,U as X}from"./RecordingSaveDialog-Ca2iJsOW.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./use-gesture-react.esm-DYpdiE_k.js";import"./gestureArbiter-DszagC-d.js";import"./arrow-up-BEUQcf-s.js";const H=s.lazy(()=>k(()=>import("./AndroidMirrorView-BC_6L3mG.js").then(n=>n.c),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12])).then(n=>({default:n.AndroidMirrorView}))),Q=s.lazy(()=>k(()=>import("./ComputerControlView-DU9krDsg.js").then(n=>n.a),__vite__mapDeps([13,1,2,3,4,5,14,15,11,16,17,18]))),Y=s.lazy(()=>k(()=>import("./RightSidebar-CwXIBpEw.js").then(n=>n.R),__vite__mapDeps([19,1,2,3,4,5,20,8,21,22,23,24,25,7,9,10,26,27,28,29,30,31,14,17,0,6,11,12,15,32,33,34])).then(n=>({default:n.FilePreview}))),v="inline-flex min-h-11 items-center justify-center gap-2 rounded-lg px-3 text-xs hover:bg-surface-2 disabled:opacity-40";function Z({sessionId:n,canWrite:f,onInsert:m}){const[l,g]=s.useState(),a=s.useRef(!0),d=s.useRef({sessionId:n,canWrite:f,onInsert:m});d.current={sessionId:n,canWrite:f,onInsert:m},s.useEffect(()=>(a.current=!0,()=>{a.current=!1}),[]);const p=async(u,r)=>{const o=q(r),b=n,c=()=>a.current&&o()&&d.current.sessionId===b&&d.current.canWrite;if(!b||!c())throw new Error("此会话当前无法添加附件");const h=(await K(b,[u],void 0,void 0,c)).files[0]?.path;if(!h||!c()||await d.current.onInsert(_(h,null),r)===!1)throw new Error("截图尚未添加,请重试")};return e.jsxs(e.Fragment,{children:[e.jsx(H,{sessionId:n,onInsertFile:f&&n?p:void 0,onInsertPrompt:f?async(u,r)=>{if(await m(u,r)===!1)throw new Error("当前无法添加")}:void 0,onRecordingComplete:f&&n?u=>{a.current&&g(u)}:void 0}),l&&e.jsx(W,{file:l,initialPath:"/",onInsert:async(u,r)=>d.current.canWrite&&a.current?d.current.onInsert(_(u,null),r):!1,onDone:()=>g(void 0)},l.id)]})}function ee({directories:n,onInsert:f,onDirty:m}){const[l,g]=s.useState(n[0]?.path||""),[a,d]=s.useState(null),[p,u]=s.useState(null),[r,o]=s.useState(),[b,c]=s.useState(""),[x,h]=s.useState(!1),[R,N]=s.useState(0),[E,i]=s.useState(!1),y=s.useRef(null),w=s.useRef(!0);s.useEffect(()=>()=>{w.current=!1},[]),s.useEffect(()=>{n.some(t=>t.path===l)||(g(n[0]?.path||""),d(null),o(void 0))},[n,l]),s.useEffect(()=>{F.getState().setRootPath(l)},[l]);const P=n.some(t=>t.access==="write"&&(a?a===t.path||a.startsWith(t.path.replace(/\/+$/,"")+"/"):l===t.path)),L=async()=>{if(r){h(!0),c("");try{const t=await fetch(`/api/terminal/fs/write?${new URLSearchParams({path:r.path})}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:r.content,original:r.original})}),j=await t.json();if(!t.ok)throw new Error(j.error);w.current&&(o(void 0),N(S=>S+1))}catch(t){w.current&&c(t instanceof Error?t.message:"保存失败,编辑内容已保留")}finally{w.current&&h(!1)}}};s.useEffect(()=>{const t=!!r&&r.content!==r.original;m(t);const j=S=>{t&&(S.preventDefault(),S.returnValue="")};return window.addEventListener("beforeunload",j),()=>{window.removeEventListener("beforeunload",j),m(!1)}},[r,m]);const T=()=>{r&&r.content!==r.original?i(!0):o(void 0)};return e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col",children:[e.jsx("div",{className:"flex shrink-0 items-center gap-1 border-b border-border/30 p-2",children:a?e.jsxs(e.Fragment,{children:[e.jsxs("button",{type:"button",className:v,disabled:!!r||x,onClick:()=>{d(null),c("")},children:[e.jsx(M,{size:14}),"文件列表"]}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs",title:a,children:a.split("/").pop()}),P&&!r&&e.jsxs("button",{type:"button",className:v,disabled:x,onClick:()=>{h(!0),c(""),I(a).then(t=>{if(t.binary||t.truncated||t.size>1024*1024)throw new Error("仅支持编辑 1 MB 以内的完整文本");w.current&&o({path:a,content:t.content,original:t.content})}).catch(t=>c(t.message)).finally(()=>h(!1))},children:[e.jsx(U,{size:14}),"编辑"]})]}):e.jsxs(e.Fragment,{children:[e.jsx("select",{"aria-label":"共享目录",className:"min-h-11 min-w-0 flex-1 rounded-lg bg-surface px-2 text-xs",value:l,onChange:t=>{g(t.target.value),c("")},children:n.map((t,j)=>e.jsxs("option",{value:t.path,children:[t.path," · ",t.access==="write"?"可修改":"只读"]},j))}),P&&e.jsxs("button",{type:"button",className:v,disabled:x,onClick:()=>y.current?.click(),children:[e.jsx(X,{size:14}),"上传"]}),e.jsx("input",{ref:y,type:"file",multiple:!0,hidden:!0,onChange:t=>{const j=Array.from(t.target.files||[]);if(t.target.value="",!j.length)return;const S=l;h(!0),c(""),B(S,j).then(()=>{F.getState().invalidateDirectoryCache(S),N(C=>C+1)}).catch(C=>c(C.message)).finally(()=>h(!1))}})]})}),b&&e.jsx("p",{role:"alert",className:"p-3 text-xs leading-5 text-destructive",children:b}),r?e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col",children:[e.jsx("textarea",{"aria-label":"编辑文件内容",spellCheck:!1,className:"min-h-0 flex-1 resize-none bg-background p-3 font-mono text-sm leading-6 outline-none",value:r.content,disabled:x,onChange:t=>o({...r,content:t.target.value})}),e.jsx("div",{className:"shrink-0 border-t border-border p-2",children:E?e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-xs",children:"有未保存的修改,确定放弃?"}),e.jsx("button",{type:"button",className:v,onClick:()=>i(!1),children:"继续编辑"}),e.jsx("button",{type:"button",className:`${v} text-destructive`,onClick:()=>{o(void 0),i(!1)},children:"放弃修改"})]}):e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",className:v,disabled:x,onClick:T,children:"取消编辑"}),e.jsx("button",{type:"button",className:`${v} bg-primary text-primary-foreground`,disabled:x,onClick:()=>{L()},children:x?"正在保存…":"保存修改"})]})})]}):a?e.jsx("div",{className:"min-h-0 flex-1 overflow-auto",children:e.jsx(s.Suspense,{fallback:e.jsx("p",{className:"p-4 text-sm text-muted-foreground",children:"正在读取预览…"}),children:e.jsx(Y,{filePath:a,onInsertReference:t=>f(t),onInsertText:f,onReferenceCopied:()=>{},isMobile:!0,markdownOutlineOpen:!1,markdownImageLightboxOpen:!1,lineRange:p,onLineRangeChange:u,insertedReferenceKey:null,copiedReferenceKey:null},`${a}:${R}`)})}):e.jsx("div",{className:"min-h-0 flex-1 overflow-auto",children:e.jsx(J,{rootPath:l,selectedFilePath:a,onFileSelect:d,onPathReference:f},`${l}:${R}`)})]})}function ce({resources:n,sessionId:f,canWrite:m=!1,pinned:l,open:g,onClose:a,onInsert:d}){const p=[n.android?.length?"android":"",n.computers?.length?"computer":"",n.directories?.length?"files":""].filter(Boolean),[u,r]=s.useState(p[0]),o=p.includes(u)?u:p[0],b=s.useRef(!1),c=s.useRef(i=>{b.current=i}).current,x=async i=>{i!==u&&(b.current&&!await V({title:"放弃文件修改?",message:"当前文件有未保存的修改。",confirmLabel:"放弃修改",cancelLabel:"继续编辑"})||r(i))},[h,R]=s.useState(0),N=n.computers?.[h]??n.computers?.[0],E=o==="computer"?{...n,computers:N?[N]:[]}:n;return p.length?e.jsx(z.Provider,{value:E,children:e.jsx(G,{side:"right",isOpen:g,pinned:l,drawerWidthPx:Math.min(window.innerWidth-16,480),onClose:a,children:e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col",children:[e.jsxs("header",{className:"flex shrink-0 items-center gap-1 border-b border-border/40 px-2 py-1",children:[e.jsx("div",{role:p.length>1?"tablist":void 0,"aria-label":"侧栏功能",className:"flex min-w-0 flex-1 gap-1",children:p.map(i=>{const[y,w]=i==="android"?["手机",A]:i==="computer"?["电脑",$]:["文件",O];return p.length===1?e.jsxs("span",{className:"inline-flex min-h-9 items-center gap-2 px-2 text-xs",children:[e.jsx(w,{size:14}),y]},i):e.jsxs("button",{type:"button",role:"tab","aria-selected":o===i,onClick:()=>{x(i)},className:`${v} flex-1 ${o===i?"bg-surface-elevated":"text-muted-foreground"}`,children:[e.jsx(w,{size:14}),y]},i)})}),e.jsx("button",{type:"button",className:v,"aria-label":"关闭共享侧栏",onClick:a,children:e.jsx(D,{size:17})})]}),e.jsxs(s.Suspense,{fallback:e.jsx("p",{role:"status",className:"p-4 text-sm text-muted-foreground",children:"正在打开共享内容…"}),children:[o==="android"&&g&&e.jsx(Z,{sessionId:f,canWrite:m,onInsert:d},f),o==="computer"&&e.jsxs(e.Fragment,{children:[(n.computers?.length??0)>1&&e.jsx("select",{"aria-label":"共享电脑",className:"min-h-11 bg-surface px-3 text-xs",value:h,onChange:i=>R(Number(i.target.value)),children:n.computers?.map((i,y)=>e.jsxs("option",{value:y,children:[i.host,":",i.port]},y))}),e.jsx(Q,{active:g},JSON.stringify(N))]}),o==="files"&&e.jsx(ee,{directories:n.directories,onInsert:d,onDirty:c})]})]})})}):null}export{ce as SessionResourceSidebar};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{aV as St,aR as Ct,eb as ot,cg as e,a4 as ct,C as dt,s as It,Y as Le,n as $t,e as At,R as Et,dm as _,bh as Dt,bK as zt,bJ as st,N as at,S as De,c as ze,J as nt,V as ut,G as Tt,_ as qt}from"./app-C3WX_u_Z.js";import{b as h,r as Ot}from"./dnd-BCFAPC0L.js";import{g as _e,A as Lt,l as Pt,r as Rt,k as Ft,h as _t,P as Jt,m as lt,u as Te,f as Ut,d as Vt,i as rt,s as Kt,j as Mt,b as Bt}from"./App-BGECv_n_.js";import{D as Wt}from"./RecordingSaveDialog-Ca2iJsOW.js";import{d as Je}from"./GitLoadingSkeleton-Fa4AXG-N.js";import{S as Ht}from"./settings-2-DtFz7lgk.js";import{S as Yt}from"./search-CDJ4fv-q.js";import{C as Gt}from"./triangle-alert--5QOrsVl.js";import{C as Xt}from"./circle-Pldg1yI9.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./link-x33s12VI.js";import"./AndroidMirrorView-BC_6L3mG.js";import"./v4-EwEgHOG0.js";import"./unplug-BNUx6Lmk.js";import"./swiper-DJjq1TYT.js";import"./loader-circle-D_nJKmMD.js";import"./clipboardText-BapOM7QN.js";import"./clipboard-tTkMEO1S.js";import"./external-link-DE8Gj-da.js";import"./maximize-2-t-zzENew.js";import"./git-compare-Ct2eJNs4.js";import"./arrow-up-BEUQcf-s.js";import"./arrow-down-Dp27yS0N.js";import"./sun-CvzpsfHU.js";import"./use-gesture-react.esm-DYpdiE_k.js";import"./gestureArbiter-DszagC-d.js";const Qt=[["polyline",{points:"22 12 16 12 14 15 10 15 8 12 2 12",key:"o97t9d"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}]],Zt=St("inbox",Qt),H={tab:"todos",filter:"open",source:"",query:"",selectedId:null,mobileDetail:!1,selecting:!1,checked:[],toolsOpen:!1,modal:null,drafts:{},requests:{}},xe=s=>`launch:${JSON.stringify(s.slice().sort())}`,A=Ct((s,a)=>({views:{},snapshots:{},options:{},cache:(l,r)=>s(n=>({snapshots:{...n.snapshots,[l]:r}})),cacheOptions:(l,r)=>s(n=>({options:{...n.options,[l]:r}})),patch:(l,r)=>s(n=>({views:{...n.views,[l]:{...n.views[l]??H,...r}}})),draft:(l,r,n)=>{const d=a().views[l]??H;a().patch(l,{drafts:{...d.drafts,[r]:n}})},clearDraft:(l,r)=>{const n={...(a().views[l]??H).drafts};delete n[r],a().patch(l,{drafts:n})},requestKey:(l,r)=>{const n=JSON.stringify(r),d=a().views[l]??H;if(d.requests[n])return d.requests[n];const o=crypto.randomUUID();return a().patch(l,{requests:{...d.requests,[n]:o}}),o},finishRequest:(l,r)=>{const n={...(a().views[l]??H).requests};delete n[JSON.stringify(r)],a().patch(l,{requests:n})}}));function Ue(s,a,l){return[A(n=>n.views[s]?.drafts[a])??l,n=>A.getState().draft(s,a,n)]}function pe(s,a){return s.runs.filter(l=>l.todoId===a).at(-1)}function es(s,a,l){return l==="review"?a.status==="open"&&pe(s,a.id)?.status==="complete":a.status===(l==="completed"?"completed":l==="ignored"?"ignored":"open")}const mt=s=>`termdock:todo-preferences:v1:${s}`,Pe=s=>s.replace(/\/+$/,"").split("/").pop()||s;function ee(s){return[...new Set(s.filter(a=>typeof a=="string"&&!!a.trim()).map(a=>a.trim().replace(/\/+$/,"")||"/"))]}function Ve(s){try{const a=JSON.parse(localStorage.getItem(mt(s))||"{}"),l=a?.choice;return{choice:l&&["agentSlug","command","cwd"].every(r=>typeof l[r]=="string")?l:void 0,directories:ee(Array.isArray(a?.directories)?a.directories:[]).slice(0,8)}}catch{return{directories:[]}}}function qe(s,a){try{const l=Ve(s);localStorage.setItem(mt(s),JSON.stringify({choice:{agentSlug:a.agentSlug,command:a.command,cwd:a.cwd},directories:ee([a.cwd,...l.directories]).slice(0,8)}))}catch{}}function ts(s,a,l,r){return ee([s,...Ve(r).directories,l?.defaults.cwd,...l?.runs.slice().reverse().map(n=>n.config.cwd)??[],...a,...l?.collectors.map(n=>n.config.cwd)??[]]).slice(0,8)}const Ke="inline-flex min-h-11 items-center justify-center gap-2 rounded-lg px-3 text-sm font-medium transition disabled:cursor-not-allowed disabled:opacity-40",Y=`${Ke} bg-primary text-primary-foreground hover:opacity-90`,V=`${Ke} bg-surface-2 text-foreground hover:bg-surface-elevated`,S=`${Ke} text-muted-foreground hover:bg-surface-2 hover:text-foreground`,J="w-full min-h-11 min-w-0 rounded-lg border border-border/40 bg-surface-2 px-3 py-2.5 text-base text-foreground outline-none focus:border-primary sm:text-sm",U="block space-y-2 text-sm text-muted-foreground";function ss({title:s,busy:a,error:l,onClose:r,children:n}){const d=h.useRef(null),o=h.useId();return ot(d,!0,()=>{a||r()}),Ot.createPortal(e.jsxs(e.Fragment,{children:[e.jsx("button",{className:"fixed inset-0 z-drawer-backdrop bg-[var(--app-backdrop)] backdrop-blur-sm","aria-label":"关闭待办面板",disabled:a,onClick:r}),e.jsxs("section",{ref:d,role:"dialog","aria-modal":"true","aria-labelledby":o,"aria-busy":a,tabIndex:-1,className:"fixed inset-y-0 right-0 z-drawer-panel flex w-full min-w-0 flex-col border-l border-border/30 bg-surface pt-[env(safe-area-inset-top,0px)] text-foreground shadow-xl sm:w-[32rem] sm:max-w-[90vw]",children:[e.jsxs("header",{className:"flex min-h-16 shrink-0 items-center gap-3 border-b border-border/20 px-5",children:[e.jsx("h2",{id:o,className:"flex-1 text-base font-semibold",children:s}),e.jsx("button",{type:"button",className:S,"aria-label":"关闭",disabled:a,onClick:r,children:e.jsx(ct,{size:18})})]}),l&&e.jsx("p",{role:"alert",className:"shrink-0 border-b border-[color-mix(in_srgb,var(--destructive)_20%,transparent)] bg-[color-mix(in_srgb,var(--destructive)_10%,transparent)] px-5 py-3 text-sm leading-6 text-destructive",children:l}),e.jsx("div",{className:"flex min-h-0 flex-1 flex-col",children:n})]})]}),document.body)}function he({children:s}){return e.jsx("div",{className:"min-h-0 flex-1 space-y-5 overflow-y-auto overscroll-contain px-5 py-5",children:s})}function Me({children:s}){return e.jsx("footer",{className:"flex shrink-0 flex-wrap items-center justify-end gap-2 border-t border-border/20 px-5 py-4 pb-[max(1rem,env(safe-area-inset-bottom,0px))]",children:s})}function as({workspace:s,todo:a,busy:l,onSave:r,onCancel:n}){const[d,o]=Ue(s,`todo:${a?.id??"new"}`,{title:a?.title??"",description:a?.description??""}),y=u=>{!l&&d.title.trim()&&r({...d,title:d.title.trim()},u)};return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col",onSubmit:u=>{u.preventDefault(),y(!a)},children:[e.jsxs(he,{children:[e.jsxs("label",{className:U,children:["要做什么",e.jsx("input",{autoFocus:!0,required:!0,maxLength:200,className:J,value:d.title,onChange:u=>o({...d,title:u.target.value}),placeholder:"一句话描述这件事"})]}),e.jsxs("label",{className:U,children:["背景和处理要求",e.jsx("textarea",{className:`${J} min-h-44 resize-y`,maxLength:4e4,value:d.description,onChange:u=>o({...d,description:u.target.value}),placeholder:"为什么要做、参考资料、希望得到什么结果…"})]}),!a&&e.jsx("p",{className:"text-xs leading-6 text-muted-foreground",children:"可以先存进清单,也可以保存后立即交给 Agent。"})]}),e.jsxs(Me,{children:[e.jsx("button",{type:"button",className:S,disabled:l,onClick:n,children:"取消"}),!a&&e.jsx("button",{type:"button",className:V,disabled:l||!d.title.trim(),onClick:()=>y(!1),children:"仅保存"}),e.jsx("button",{className:Y,disabled:l||!d.title.trim(),children:l?"正在保存…":a?"保存修改":"保存并处理"})]})]})}function fe(s,a,l,r){const n=a.find(d=>d.slug===(s.agentSlug||l))??(s.agentSlug?void 0:a[0]);return{...s,agentSlug:s.agentSlug||n?.slug||"",command:s.command||(n?_e(n.slug,n.command):""),cwd:s.cwd||r||""}}function xt({config:s,agents:a,loading:l,service:r,directories:n,currentCwd:d,onChange:o,collect:y=!1}){const[u,p]=h.useState(!1),N=h.useId(),c=h.useId();return e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:["运行于 ",r]}),e.jsxs("div",{className:U,children:[e.jsx("label",{htmlFor:N,children:"Agent"}),e.jsxs("select",{id:N,className:J,required:!0,disabled:l,value:s.agentSlug,onChange:m=>{const g=a.find(C=>C.slug===m.target.value);o({...s,agentSlug:m.target.value,command:g?_e(g.slug,g.command):""})},children:[e.jsx("option",{value:"",disabled:a.length>0,children:l?"正在加载 Agent…":"选择 Agent"}),a.map(m=>e.jsx("option",{value:m.slug,children:m.displayName},m.slug)),s.agentSlug&&!a.some(m=>m.slug===s.agentSlug)&&e.jsxs("option",{value:s.agentSlug,children:[s.agentSlug,"(当前不可用)"]})]})]}),a.find(m=>m.slug===s.agentSlug)&&e.jsx(Lt,{agent:a.find(m=>m.slug===s.agentSlug),value:s.command,onChange:m=>o({...s,command:m})},s.agentSlug),!l&&a.length===0&&e.jsx("p",{className:"text-sm text-destructive",children:"未找到可启动的 Agent,请检查该服务的 Agent 配置。"}),e.jsxs("div",{className:U,children:[e.jsx("label",{htmlFor:c,children:"工作目录"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{id:c,className:J,value:s.cwd,autoCapitalize:"none",autoCorrect:"off",spellCheck:!1,onChange:m=>o({...s,cwd:m.target.value}),placeholder:"选择这件事所在的项目或目录"}),e.jsx("button",{type:"button",className:V,"aria-label":"选择工作目录",onClick:()=>p(!0),children:e.jsx(It,{size:17})})]}),!!n.length&&e.jsx("div",{className:"flex gap-1.5 overflow-x-auto pb-1","aria-label":"快捷选择工作目录",children:n.map(m=>{const g=Pe(m),I=n.some(f=>f!==m&&Pe(f)===g)?m.split("/").filter(Boolean).slice(-2).join("/"):g;return e.jsx("button",{type:"button","aria-label":`使用目录 ${m}`,"aria-pressed":s.cwd===m,title:m,className:`min-h-10 max-w-48 shrink-0 truncate rounded-lg border px-2.5 text-xs ${s.cwd===m?"border-[rgb(var(--primary-rgb)/0.3)] bg-[rgb(var(--primary-rgb)/0.1)] text-primary":"border-transparent bg-surface-2 text-muted-foreground hover:text-foreground"}`,onClick:()=>o({...s,cwd:m}),children:m===d?`当前 · ${I}`:I},m)})})]}),e.jsxs("label",{className:U,children:[y?"收集要求":"处理要求",e.jsx("textarea",{required:y,className:`${J} min-h-32 resize-y`,maxLength:2e4,value:s.prompt,onChange:m=>o({...s,prompt:m.target.value}),placeholder:y?"从哪里收集、筛选哪些事项、需要哪些背景与来源…":"补充 Agent 应该遵守的要求,可留空"})]}),e.jsx(Wt,{open:u,initialPath:s.cwd||"/",title:"选择工作目录",labels:{hint:"选择 Agent 运行的目录",cancel:"取消",confirm:"使用此目录",close:"关闭",parent:"上级目录"},onCancel:()=>p(!1),onConfirm:m=>{o({...s,cwd:m}),p(!1)}})]})}function ns({workspace:s,draftId:a,config:l,agents:r,loading:n,service:d,directories:o,currentCwd:y,multipleDirectories:u,busy:p,settings:N,onSave:c,onCancel:m}){const[g,C]=Ue(s,a,{config:l,remember:!0}),I=g.config.agentSlug?g.config:{...fe(g.config,r,l.agentSlug,l.cwd),prompt:g.config.prompt},f=!n&&r.some(w=>w.slug===I.agentSlug);return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col",onSubmit:w=>{w.preventDefault(),!p&&f&&c(I,g.remember)},children:[e.jsx(he,{children:e.jsxs("fieldset",{disabled:p,className:"min-w-0 space-y-5",children:[u&&e.jsx("p",{className:"text-sm leading-6 text-muted-foreground",children:"这些待办分别使用各自的项目目录。直接启动会保留各自配置;修改配置后将统一应用。"}),e.jsx(xt,{config:I,agents:r,loading:n,service:d,directories:o,currentCwd:y,onChange:w=>C({...g,config:w})}),!N&&e.jsxs("label",{className:"flex min-h-11 items-center gap-3 text-sm text-muted-foreground",children:[e.jsx("input",{type:"checkbox",checked:g.remember,onChange:w=>C({...g,remember:w.target.checked}),className:"h-4 w-4 accent-[var(--primary)]"}),"记住配置,下次直接处理"]})]})}),e.jsxs(Me,{children:[e.jsx("button",{type:"button",className:S,disabled:p,onClick:m,children:"取消"}),e.jsxs("button",{className:Y,disabled:p||!f,children:[N?e.jsx(dt,{size:16}):e.jsx(Je,{size:16}),p?"正在提交…":N?"保存配置":"启动 Agent"]})]})]})}const ls=[{name:"项目巡检",prompt:"检查工作目录中的项目,找出值得处理的问题。每条待办写清问题、依据和建议,避免重复。只收集待办,不修改项目。"},{name:"技术动态",prompt:"收集我关注方向的技术动态,筛选值得进一步调研或尝试的事项。每条待办附来源和后续建议,避免重复。"}];function rs({workspace:s,collector:a,config:l,agents:r,loading:n,service:d,directories:o,currentCwd:y,busy:u,onSave:p,onCancel:N}){const[c,m]=Ue(s,`collector:${a?.id??"new"}`,{name:a?.name??"",config:a?.config??{...l,prompt:""},enabled:a?.enabled??!0,schedule:a?.schedule?.kind??"manual",minutes:a?.schedule?.kind==="interval"?a.schedule.everyMinutes:60,daily:a?.schedule?.kind==="daily"?a.schedule.time:"09:00"}),g=c.config.agentSlug?c.config:{...fe(c.config,r,l.agentSlug,l.cwd),prompt:c.config.prompt},C=c.name.trim()&&g.prompt.trim()&&!n&&r.some(f=>f.slug===g.agentSlug),I=f=>{u||!C||p({id:a?.id,revision:a?.revision,name:c.name.trim(),config:g,enabled:c.enabled,schedule:c.schedule==="manual"?null:c.schedule==="interval"?{kind:"interval",everyMinutes:c.minutes}:{kind:"daily",time:c.daily,weekdays:a?.schedule?.kind==="daily"?a.schedule.weekdays:[0,1,2,3,4,5,6]}},f)};return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col",onSubmit:f=>{f.preventDefault(),I(!0)},children:[e.jsx(he,{children:e.jsxs("fieldset",{disabled:u,className:"min-w-0 space-y-5",children:[!a&&e.jsx("div",{className:"flex flex-wrap gap-2",children:ls.map(f=>e.jsx("button",{type:"button",className:V,onClick:()=>m({...c,name:f.name,config:{...c.config,prompt:f.prompt}}),children:f.name},f.name))}),e.jsxs("label",{className:U,children:["收集方向",e.jsx("input",{required:!0,className:J,maxLength:200,value:c.name,onChange:f=>m({...c,name:f.target.value}),placeholder:"例如:项目巡检、技术动态"})]}),e.jsx(xt,{collect:!0,config:g,agents:r,loading:n,service:d,directories:o,currentCwd:y,onChange:f=>m({...c,config:f})}),e.jsxs("details",{className:"rounded-lg border border-border/20 px-3 text-sm text-muted-foreground",children:[e.jsxs("summary",{className:"cursor-pointer py-3",children:["定时与启用 · ",c.schedule==="manual"?"手动运行":c.schedule==="interval"?`每 ${c.minutes} 分钟`:`每天 ${c.daily}`]}),e.jsxs("div",{className:"space-y-4 pb-3",children:[e.jsxs("label",{className:U,children:["运行频率",e.jsxs("select",{className:J,value:c.schedule,onChange:f=>m({...c,schedule:f.target.value}),children:[e.jsx("option",{value:"manual",children:"手动运行"}),e.jsx("option",{value:"interval",children:"按间隔运行"}),e.jsx("option",{value:"daily",children:"每天定时"})]})]}),c.schedule==="interval"&&e.jsxs("label",{className:U,children:["间隔(分钟)",e.jsx("input",{className:J,required:!0,type:"number",min:1,max:43200,step:1,value:c.minutes,onChange:f=>m({...c,minutes:Number(f.target.value)})})]}),c.schedule==="daily"&&e.jsxs("label",{className:U,children:["时间(服务所在时区)",e.jsx("input",{className:J,required:!0,type:"time",value:c.daily,onChange:f=>m({...c,daily:f.target.value})})]}),e.jsxs("label",{className:"flex items-center gap-3 text-sm",children:[e.jsx("input",{type:"checkbox",checked:c.enabled,onChange:f=>m({...c,enabled:f.target.checked})}),"启用此方向,参与全部收集和定时运行"]})]})]})]})}),e.jsxs(Me,{children:[e.jsx("button",{type:"button",className:S,disabled:u,onClick:N,children:"取消"}),e.jsx("button",{type:"button",className:V,disabled:u||!C,onClick:()=>I(!1),children:"仅保存"}),e.jsxs("button",{className:Y,disabled:u||!C,children:[e.jsx(Je,{size:16}),u?"正在保存…":"保存并收集"]})]})]})}function is(){const[s,a]=h.useState(!1),l='td todo add --title "检查项目依赖" --description "核实升级影响" --source "项目巡检" --external-id "deps-review"';return e.jsxs(he,{children:[e.jsx("p",{className:"text-sm leading-7 text-muted-foreground",children:"外部程序或 Agent 可以在服务所在机器,通过 CLI 写入待办。相同来源与外部标识会去重。"}),e.jsx("pre",{className:"overflow-x-auto rounded-lg bg-surface-2 p-4 text-xs leading-6",children:e.jsx("code",{children:l})}),e.jsx("button",{className:V,onClick:()=>{navigator.clipboard.writeText(l).then(()=>a(!0)).catch(()=>a(!1))},children:s?"已复制":"复制命令"}),e.jsxs("p",{className:"text-xs leading-6 text-muted-foreground",children:["完整用法:",e.jsx("code",{children:"td todo --help"}),"。API:",e.jsx("code",{className:"break-all",children:"POST /api/terminal/operations/todos"}),",沿用当前服务的鉴权和加密连接。"]})]})}const Re=s=>{const a=new Date(s),l=new Date,r=a.toDateString()===l.toDateString();return new Intl.DateTimeFormat("zh-CN",{...r?{}:{month:"short",day:"numeric",...a.getFullYear()===l.getFullYear()?{}:{year:"numeric"}},hour:"2-digit",minute:"2-digit",hour12:!1}).format(a)},pt={launching:"正在准备终端",delivered:"任务已发送到终端",complete:"已收到结果,待你确认",blocked:"Agent 需要你协助",failed:"启动或处理失败"};function ft({run:s,onOpen:a,busy:l}){return e.jsxs("article",{className:"rounded-xl border border-border/30 bg-surface p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:`min-w-0 flex-1 text-sm font-medium ${s.status==="complete"?"text-primary":s.status==="failed"||s.status==="blocked"?"text-destructive":""}`,children:s.status==="complete"?"已收到结果报告":pt[s.status]}),s.sessionId&&e.jsxs("button",{type:"button",className:V,disabled:l,onClick:a,children:[e.jsx(Le,{size:15}),"打开终端"]})]}),e.jsxs("p",{className:"mt-1 text-xs leading-6 text-muted-foreground",children:[s.config.agentSlug," · ",Re(s.createdAt)]}),s.status==="delivered"&&!s.result&&e.jsx("p",{className:"mt-2 text-xs leading-6 text-muted-foreground",children:"打开终端查看输出,或处理 Agent 的登录与授权。明确结果报告会显示在这里。"}),s.error&&e.jsx("p",{className:"mt-3 whitespace-pre-wrap break-words text-sm leading-7 text-destructive",children:s.error}),s.result&&e.jsx("div",{className:"termdock-native-select mt-3 whitespace-pre-wrap break-words border-t border-border/20 pt-3 text-sm leading-7",children:s.result})]})}function Fe({label:s="更多操作",items:a,disabled:l}){const[r,n]=h.useState(!1),d=h.useRef(null),o=h.useRef(null),y=h.useId();return ot(o,r,()=>n(!1)),h.useEffect(()=>{if(!r)return;const u=p=>{p.target instanceof Node&&!d.current?.contains(p.target)&&n(!1)};return document.addEventListener("pointerdown",u,!0),()=>document.removeEventListener("pointerdown",u,!0)},[r]),e.jsxs("div",{ref:d,className:"relative z-20 shrink-0",children:[e.jsx("button",{type:"button","aria-label":s,title:s,"aria-haspopup":"menu","aria-expanded":r,"aria-controls":r?y:void 0,disabled:l,className:"inline-flex min-h-11 w-11 items-center justify-center rounded-lg text-muted-foreground transition hover:bg-surface-2 hover:text-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:opacity-40",onClick:()=>n(u=>!u),children:e.jsx($t,{size:20})}),r&&e.jsx("div",{ref:o,id:y,role:"menu","aria-label":s,tabIndex:-1,className:"absolute right-0 top-full z-30 mt-1 w-56 max-w-[calc(100vw-2rem)] rounded-xl border border-border/50 bg-surface p-1.5 shadow-xl",onKeyDown:u=>{if(!["ArrowDown","ArrowUp","Home","End"].includes(u.key))return;u.preventDefault();const p=Array.from(o.current?.querySelectorAll('[role="menuitem"]:not(:disabled)')??[]),N=p.indexOf(document.activeElement);p[u.key==="Home"?0:u.key==="End"?p.length-1:(N+(u.key==="ArrowDown"?1:-1)+p.length)%p.length]?.focus()},children:a.map(u=>e.jsx("button",{type:"button",role:"menuitem",disabled:u.disabled,className:`flex min-h-11 w-full items-center rounded-lg px-3 text-left text-sm outline-none transition hover:bg-surface-2 focus:bg-surface-2 disabled:opacity-40 ${u.danger?"text-destructive":"text-foreground"}`,onClick:()=>{n(!1),u.action()},children:u.label},u.label))})]})}function os({todo:s,runs:a,config:l,agentName:r,busy:n,wide:d,menu:o,onLaunch:y,onConfigure:u,onOpen:p,onStatus:N}){const c=a.at(-1),m=c?.result,g=c?.status==="complete",C=c?.status==="launching"||c?.status==="delivered",I=s.status!=="open"?"重新打开":g?"确认完成":c?.sessionId&&(C||c.status==="blocked")?"查看执行":c?.status==="launching"?"正在准备终端…":c?"重新处理":"交给 Agent",f=()=>{s.status!=="open"?N("open"):g?N("completed"):c?.sessionId&&(C||c.status==="blocked")?p(c):c?u():y()};return e.jsxs("section",{"aria-label":"待办详情",className:"flex min-h-0 min-w-0 flex-1 flex-col",children:[e.jsxs("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-5 pb-8 pt-6 sm:px-8",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("h2",{className:"min-w-0 flex-1 break-words text-xl font-semibold leading-8",children:s.title}),d&&e.jsx(Fe,{label:"待办操作",items:o,disabled:n})]}),!m&&s.source&&s.source!=="手动添加"&&e.jsx("p",{className:"mt-2 text-xs leading-6 text-muted-foreground",children:s.source}),c&&e.jsxs("p",{className:"mt-3 flex flex-wrap gap-x-3 text-xs leading-6 text-muted-foreground",children:[e.jsx("span",{className:g?"text-primary":c.status==="failed"||c.status==="blocked"?"text-destructive":"",children:g?s.status==="open"?"待你确认":s.status==="ignored"?"已忽略":"已完成":c.status==="launching"?"正在准备终端":c.status==="delivered"?"任务已发送,可查看终端输出":c.status==="blocked"?"Agent 报告需要协助":"这次处理未能完成"}),m&&e.jsxs("span",{children:[r," · ",Re(c.updatedAt)]})]}),m?e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"termdock-native-select mt-5 whitespace-pre-wrap break-words text-[15px] leading-8 text-foreground",children:m}),s.description&&e.jsxs("details",{className:"mt-8 border-t border-border/30 pt-3 text-sm text-muted-foreground",children:[e.jsx("summary",{className:"min-h-11 cursor-pointer py-2.5",children:"原始待办"}),e.jsx("p",{className:"termdock-native-select mt-2 whitespace-pre-wrap break-words leading-7",children:s.description})]})]}):e.jsxs(e.Fragment,{children:[s.description&&e.jsx("p",{className:"termdock-native-select mt-5 whitespace-pre-wrap break-words text-[15px] leading-8",children:s.description}),c?.status==="delivered"&&e.jsx("p",{className:"mt-5 text-sm leading-7 text-muted-foreground",children:"结果会回到这条待办。需要登录或授权时,打开终端继续。"})]}),c?.error&&e.jsx("p",{role:"alert",className:"mt-5 whitespace-pre-wrap break-words text-sm leading-7 text-destructive",children:c.error}),s.sourceUrl&&e.jsxs("a",{className:"mt-4 inline-flex min-h-11 items-center gap-1 text-sm text-primary",href:s.sourceUrl,target:"_blank",rel:"noreferrer",children:["查看来源",e.jsx(At,{size:14})]}),e.jsxs("details",{className:"mt-8 border-t border-border/30 pt-3 text-sm text-muted-foreground",children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-2.5",children:["任务信息",a.length>1?`与 ${a.length-1} 次历史记录`:""]}),e.jsxs("dl",{className:"space-y-3 py-3 text-xs leading-6",children:[e.jsxs("div",{children:[e.jsx("dt",{children:"来源"}),e.jsx("dd",{children:s.source})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"创建时间"}),e.jsx("dd",{children:Re(s.createdAt)})]}),e.jsxs("div",{children:[e.jsx("dt",{children:"处理配置"}),e.jsxs("dd",{className:"break-all",children:[r," · ",l.cwd||"服务默认目录"]})]})]}),c?.sessionId&&e.jsxs("button",{type:"button",className:S,disabled:n,onClick:()=>p(c),children:[e.jsx(Le,{size:15}),"打开终端"]}),a.length>1&&e.jsx("div",{className:"space-y-3 pt-3",children:a.slice(0,-1).reverse().map(w=>e.jsx(ft,{run:w,busy:n,onOpen:()=>p(w)},w.id))})]})]}),e.jsxs("footer",{className:"shrink-0 border-t border-border/30 bg-[var(--chrome-bg)] px-5 py-3 pb-[max(0.75rem,env(safe-area-inset-bottom,0px))] sm:px-8",children:[s.status==="open"&&!c&&e.jsxs("button",{type:"button",className:"mb-2 flex min-h-9 max-w-full items-center gap-2 text-xs text-muted-foreground hover:text-foreground",title:l.cwd||"服务默认目录",onClick:u,disabled:n,children:[e.jsx(Ht,{size:13}),e.jsxs("span",{className:"truncate",children:[r," · ",Pe(l.cwd)||"服务默认目录"]})]}),e.jsxs("button",{type:"button",className:`${Y} w-full sm:w-auto sm:min-w-40`,disabled:n||s.status==="open"&&c?.status==="launching"&&!c.sessionId,onClick:f,children:[s.status!=="open"?e.jsx(Et,{size:16}):g?e.jsx(dt,{size:16}):c?.sessionId&&C?e.jsx(Le,{size:16}):e.jsx(Je,{size:16}),I]})]})]})}const it={agentSlug:"",command:"",cwd:"",prompt:""};function Ps({onOpenSidebar:s,leftSidebarVisible:a,activeSessionId:l}){const[r]=h.useState(()=>_()?.targetPeerId??location.origin),n=A(t=>t.views[r]??H),d=t=>A.getState().patch(r,t),[o,y]=h.useState(()=>A.getState().snapshots[r]??null),[u,p]=h.useState(()=>A.getState().options[r]??{agents:[],preferred:null,cwd:"",directories:[]}),[N,c]=h.useState(!A.getState().options[r]),[m,g]=h.useState(""),[C,I]=h.useState(""),[f,w]=h.useState(""),[E,Be]=h.useState(!1),[ge,be]=h.useState(null),je=h.useRef(null),[ht,gt]=h.useState(0),M=ht>=900,K=h.useRef(!0),ve=h.useRef(!1),we=h.useRef(!1),Ne=h.useRef(0),We=h.useRef(_()?.targetPeerId),z=()=>K.current&&We.current===_()?.targetPeerId,te=h.useCallback(async(t=!1)=>{if(we.current&&!t)return;we.current=!0;const i=++Ne.current,x=_()?.targetPeerId;try{const v=await Pt();K.current&&i===Ne.current&&x===_()?.targetPeerId&&(y(v),A.getState().cache(r,v),g(""))}catch(v){K.current&&x===_()?.targetPeerId&&g(v instanceof Error?v.message:"待办加载失败")}finally{i===Ne.current&&(we.current=!1)}},[r]),G=h.useCallback(async()=>{const t=_()?.targetPeerId;c(!0);const[i,x,v]=await Promise.allSettled([Dt(),zt(),st()]);if(!K.current||_()?.targetPeerId!==t)return;const j=A.getState().options[r],D=v.status==="fulfilled"?v.value.clientSessions.slice().sort((q,Z)=>Z.lastActivity-q.lastActivity):[],F={agents:i.status==="fulfilled"?i.value:j?.agents??[],preferred:x.status==="fulfilled"?x.value.newSessionAgentSlug:j?.preferred??Rt()?.slug??null,cwd:D.find(q=>q.sessionId===l)?.cwd??j?.cwd??D[0]?.cwd??"",directories:ee(D.map(q=>q.cwd).concat(j?.directories??[]))};p(F),A.getState().cacheOptions(r,F),c(!1),i.status==="rejected"&&I("Agent 列表加载失败,请点击执行设置重试。")},[r,l]);h.useEffect(()=>{K.current=!0;const t=je.current,i=()=>gt(t?.clientWidth??0);i();const x=new ResizeObserver(i);t&&x.observe(t),G();const v=()=>{We.current!==_()?.targetPeerId&<.getState().terminal()};window.addEventListener(at,v),window.addEventListener(De,G);const j=Ft(()=>{navigator.onLine!==!1&&te()},1200,[De]);return()=>{K.current=!1,x.disconnect(),j(),window.removeEventListener(at,v),window.removeEventListener(De,G)}},[te,G]),h.useEffect(()=>{if(!f)return;const t=window.setTimeout(()=>{w(""),be(null)},5e3);return()=>window.clearTimeout(t)},[f]);const ye=t=>A.getState().requestKey(r,t),ke=t=>A.getState().finishRequest(r,t),se=t=>A.getState().clearDraft(r,t),b=n.modal,T=t=>{I(""),d({modal:t})},L=async t=>{if(!ve.current){ve.current=!0,Be(!0),I(""),w(""),be(null);try{await t(),z()&&(await te(!0),window.dispatchEvent(new Event("termdock:todos-changed")))}catch(i){z()&&I(i instanceof Error?i.message:"操作失败,请重试")}finally{ve.current=!1,K.current&&Be(!1)}}},He=t=>d({selectedId:t.id,mobileDetail:!0}),ae=t=>{L(async()=>{const i=await st();if(z()){if(!i.clientSessions.some(x=>x.sessionId===t.sessionId))throw new Error("这个终端已关闭。结果仍保留;需要继续时,请在待办详情里重新发起。");d({modal:null}),window.dispatchEvent(new CustomEvent("switch-terminal-session",{detail:t.sessionId}))}})},ne=(t,i)=>{const x=o?.todos.find(j=>j.id===t)?.collectorId,v=o?.collectors.find(j=>j.id===x);return v?{...i,cwd:v.config.cwd}:i},Se=async(t,i,x,v=!1,j)=>{if(x&&(await rt(i),!z()))return;const D=t.map($=>j?.[$]??(v?ne($,i):i)),F=await Promise.allSettled(t.map(($,O)=>Mt($,D[O],ye(["execute",$,D[O]]))));if(!z())return;const q=[],Z=[];if(F.forEach(($,O)=>{$.status==="fulfilled"?(q.push(t[O]),ke(["execute",t[O],D[O]])):Z.push(`${o?.todos.find(kt=>kt.id===t[O])?.title??"待办"}:${$.reason instanceof Error?$.reason.message:String($.reason)}`)}),q.length&&(x&&qe(r,i),se(xe(t)),d({tab:"todos",filter:"open",selecting:!1,checked:[],selectedId:q[0],mobileDetail:t.length===1,modal:null}),w(q.length===1?"已发起处理":`已发起 ${q.length} 项处理`)),Z.length){const $=t.filter(O=>!q.includes(O));throw A.getState().draft(r,xe($),{config:D[t.indexOf($[0])],remember:!1}),d({modal:{kind:"launch",ids:$,configs:Object.fromEntries($.map(O=>[O,D[t.indexOf(O)]]))}}),new Error(Z.join(";"))}},le=(t,i=!1)=>{o&&(!i&&B&&u.agents.some(x=>x.slug===B.agentSlug)?L(()=>Se(t,B,!o.defaults.agentSlug,!0)):T({kind:"launch",ids:t,...!i&&t.length>1?{configs:Object.fromEntries(t.map(x=>[x,ne(x,P)]))}:{}}))},re=async t=>{const i=await Promise.allSettled(t.map(j=>Bt(j.id,ye(["collect",j.id,j.config]))));if(!z())return;let x=0;const v=[];if(i.forEach((j,D)=>{const F=t[D];j.status==="fulfilled"?(x++,ke(["collect",F.id,F.config])):v.push(`${F.name}:${j.reason instanceof Error?j.reason.message:String(j.reason)}`)}),d({modal:null}),x&&w(`已发起 ${x} 个收集任务`),v.length)throw new Error(v.join(";"))},ie=(t,i)=>{L(async()=>{const x=await Te(t,{status:i});z()&&(i!=="open"&&(be({todo:x.todo,previous:t.status}),n.selectedId===t.id&&d({selectedId:null,mobileDetail:!1})),w(i==="completed"?"已完成":i==="ignored"?"已忽略":"已重新打开"))})},k=o?.todos.find(t=>t.id===n.selectedId),R=k&&o?pe(o,k.id):void 0,oe=o?.todos.filter(t=>es(o,t,n.filter)&&(!n.source||t.source===n.source)&&`${t.title} ${t.description} ${t.source}`.toLowerCase().includes(n.query.toLowerCase()))??[],ce=t=>{const i=o&&pe(o,t.id);return t.status==="open"&&(!i||i.status==="failed")},Ce=oe.filter(t=>n.checked.includes(t.id)&&ce(t)),de=o?.collectors.filter(t=>t.enabled)??[],Ie=Ve(r),ue=o?.collectors.slice().sort((t,i)=>i.updatedAt-t.updatedAt).find(t=>u.agents.some(i=>i.slug===t.config.agentSlug))?.config,X=Ie.choice&&u.agents.some(t=>t.slug===Ie.choice?.agentSlug)?Ie.choice:ue?{agentSlug:ue.agentSlug,command:ue.command,cwd:ue.cwd}:void 0,me=u.agents.find(t=>t.slug===X?.agentSlug),$e=X&&me&&_t(me.slug)?{...X,command:_e(me.slug,me.command)}:X,P=fe(o?.defaults.agentSlug?o.defaults:{...it,...$e},u.agents,u.preferred,u.cwd),B=o?.defaults.agentSlug?o.defaults:X?P:void 0,bt=$e?{...it,...$e}:P,Ye=ts(u.cwd,u.directories??[],o,r),W=b?.kind==="launch"&&b.configs?Object.fromEntries(Object.entries(b.configs).map(([t,i])=>[t,fe(i,u.agents,P.agentSlug,P.cwd)])):void 0,Ge=b?.kind==="launch"?W?.[b.ids[0]]??(b.ids.length===1?ne(b.ids[0],P):P):P,Xe=_()?.serviceName||"当前服务",Ae=b?.kind==="collector"?o?.collectors.find(t=>t.id===b.id):void 0,Q=b?.kind==="edit"?b.todo:void 0,jt=b?.kind==="edit"?Q?"编辑待办":"新增待办":b?.kind==="launch"?b.ids.length>1?`处理 ${b.ids.length} 条待办`:"交给 Agent 处理":b?.kind==="collector"?Ae?"编辑收集方向":"添加收集方向":b?.kind==="defaults"?"执行设置":"外部接入",Ee=n.tab==="todos"&&!M&&n.mobileDetail&&!!k,vt=n.toolsOpen||n.filter!=="open"||!!n.query||!!n.source,wt=n.tab==="todos"&&!Ee,Qe=()=>d({tab:"todos",mobileDetail:!1,selecting:!1,checked:[]}),Ze=()=>{k&&(R&&A.getState().draft(r,xe([k.id]),{config:R.config,remember:!1}),le([k.id],!0))},et=k?[{label:"编辑待办",action:()=>T({kind:"edit",todo:k})},...R?.sessionId?[{label:"打开终端",action:()=>ae(R)}]:[],...k.status==="open"?[{label:R?"重新发起":"处理配置",action:Ze,disabled:R?.status==="launching"},...R?.status!=="complete"?[{label:"标记完成",action:()=>ie(k,"completed")}]:[],{label:"忽略这条待办",action:()=>ie(k,"ignored"),danger:!0}]:[]]:[],Nt=[{label:"搜索和筛选",action:()=>{d({toolsOpen:!0}),window.setTimeout(()=>{z()&&je.current?.querySelector('[aria-label="搜索待办"]')?.focus()},0)}},{label:"多选待办",action:()=>d({selecting:!0,mobileDetail:!1,checked:[]}),disabled:!oe.some(ce)},{label:"已完成",action:()=>d({filter:"completed",mobileDetail:!1,checked:[]})},{label:"已忽略",action:()=>d({filter:"ignored",mobileDetail:!1,checked:[]})},{label:"收集方向",action:()=>d({tab:"collectors",mobileDetail:!1})},{label:"执行设置",action:()=>{G(),T({kind:"defaults"})}},{label:"外部接入",action:()=>T({kind:"integration"})}],yt=()=>{o&&(de.length?L(()=>re(de)):o.collectors.length?d({tab:"collectors",mobileDetail:!1}):T({kind:"collector"}))},tt=o?.collectors.filter(t=>{const i=o.runs.filter(x=>x.collectorId===t.id).at(-1);return i&&(i.status==="launching"||i.status==="delivered")}).length??0;return e.jsxs("section",{ref:je,"aria-label":"待办工作区",className:"absolute inset-0 flex min-h-0 min-w-0 flex-col bg-[var(--chrome-bg)] text-foreground",children:[e.jsx("header",{"data-termdock-window-header":"true",className:"relative z-20 flex min-h-16 shrink-0 items-center gap-1 border-b border-border/30 px-3 sm:gap-2 sm:px-5",children:Ee?e.jsxs(e.Fragment,{children:[e.jsxs("button",{type:"button",className:S,"aria-label":"返回清单",onClick:Qe,children:[e.jsx(ze,{size:18}),e.jsx("span",{children:"待办"})]}),e.jsx("h1",{className:"sr-only",children:"待办详情"}),e.jsx("div",{className:"flex-1"}),e.jsx(Fe,{label:"待办操作",items:et,disabled:E})]}):n.tab==="collectors"?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:S,"aria-label":"返回清单",onClick:Qe,children:e.jsx(ze,{size:18})}),e.jsx("h1",{className:"min-w-0 flex-1 text-base font-semibold",children:"收集方向"}),e.jsxs("button",{type:"button",className:S,"aria-label":"添加方向",title:"添加方向",disabled:!o,onClick:()=>T({kind:"collector"}),children:[e.jsx(nt,{size:20}),e.jsx("span",{className:"hidden sm:inline",children:"添加方向"})]})]}):n.selecting?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:S,onClick:()=>d({selecting:!1,checked:[]}),children:"取消"}),e.jsxs("h1",{className:"min-w-0 flex-1 text-sm",children:["已选 ",Ce.length," 项"]}),e.jsx("button",{type:"button",className:Y,disabled:E||!Ce.length,onClick:()=>le(Ce.map(t=>t.id)),children:"批量处理"})]}):e.jsxs(e.Fragment,{children:[!a&&e.jsx("button",{type:"button",className:`${S} hidden sm:inline-flex`,"aria-label":"打开会话侧栏",onClick:s,children:e.jsx(Jt,{size:18})}),e.jsx("button",{type:"button",className:`${S} px-2`,"aria-label":"返回终端",title:"返回终端",onClick:()=>lt.getState().terminal(),children:e.jsx(ze,{size:18})}),e.jsxs("h1",{className:"min-w-0 flex-1 text-base font-semibold",children:["待办",o&&e.jsx("span",{className:"ml-2 text-xs font-normal tabular-nums text-muted-foreground",children:o.todos.filter(t=>t.status==="open").length})]}),e.jsxs("button",{type:"button",className:`${S} px-2 text-primary`,"aria-label":"收集待办",disabled:!o||E,onClick:yt,children:[e.jsx(ut,{size:16}),e.jsx("span",{children:"收集"})]}),e.jsx("button",{type:"button",className:`${S} px-2`,"aria-label":"新增待办",title:"新增待办",disabled:!o,onClick:()=>T({kind:"edit"}),children:e.jsx(nt,{size:21})}),e.jsx(Fe,{label:"待办菜单",items:Nt,disabled:!o||E})]})}),(m||C&&!b)&&e.jsxs("div",{role:"alert",className:"flex shrink-0 items-start gap-3 border-b border-border/30 px-5 py-3 text-sm text-destructive",children:[e.jsx("span",{className:"min-w-0 flex-1 break-words",children:C||m}),m&&e.jsx("button",{type:"button",className:"shrink-0 underline",onClick:()=>{te(!0)},children:"重试"}),e.jsx("button",{type:"button","aria-label":"关闭提示",onClick:()=>{I(""),g("")},children:"×"})]}),f&&e.jsxs("div",{role:"status",className:"fixed bottom-[max(1.5rem,env(safe-area-inset-bottom,0px))] left-1/2 z-toast flex max-w-[calc(100vw-2rem)] -translate-x-1/2 items-center gap-4 rounded-xl border border-border bg-surface-elevated px-4 py-3 text-sm shadow-lg",children:[e.jsx("span",{className:"min-w-0 break-words",children:f}),ge&&e.jsx("button",{type:"button",className:"min-h-9 shrink-0 text-primary",onClick:()=>{L(async()=>{await Te(ge.todo,{status:ge.previous}),z()&&w("已撤销")})},children:"撤销"})]}),o?n.tab==="collectors"?e.jsxs("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-4 py-5 sm:px-6",children:[e.jsxs("div",{className:"mb-5 flex flex-wrap items-center justify-between gap-3",children:[e.jsx("p",{className:"text-sm leading-6 text-muted-foreground",children:"配置一次,之后从清单一键收集。"}),de.length>1&&e.jsx("button",{type:"button",className:V,disabled:E,onClick:()=>{L(()=>re(de))},children:"全部收集"})]}),o.collectors.length?e.jsx("div",{className:`grid items-start gap-4 ${M?"grid-cols-2":""}`,children:o.collectors.map(t=>e.jsx(cs,{collector:t,runs:o.runs.filter(i=>i.collectorId===t.id),busy:E,onRun:()=>{L(()=>re([t]))},onEdit:()=>T({kind:"collector",id:t.id}),onOpen:ae,onRemove:()=>{L(async()=>{await Ut(t)})}},t.id))}):e.jsx(Oe,{title:"让 Agent 帮你发现下一件事",text:"添加一个收集方向,写下关注的内容和筛选要求。"})]}):e.jsxs("div",{className:"flex min-h-0 flex-1",children:[e.jsxs("div",{className:`${M?"flex w-[42%] shrink-0 border-r border-border/30":wt?"flex flex-1":"hidden"} min-h-0 min-w-0 flex-col`,children:[vt&&e.jsxs("div",{"aria-label":"搜索和筛选",className:"shrink-0 space-y-2 border-b border-border/30 px-4 py-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("div",{className:"relative min-w-0 flex-1",children:[e.jsx(Yt,{size:15,className:"pointer-events-none absolute left-3 top-3.5 text-muted-foreground"}),e.jsx("input",{autoFocus:n.toolsOpen,"aria-label":"搜索待办",className:"min-h-11 w-full min-w-0 rounded-lg bg-surface-2 py-2 pl-9 pr-3 text-base outline-none focus:ring-1 focus:ring-primary sm:text-sm",placeholder:"搜索待办",value:n.query,onChange:t=>d({query:t.target.value})})]}),e.jsx("button",{type:"button",className:S,"aria-label":"清除筛选",onClick:()=>d({query:"",source:"",filter:"open",toolsOpen:!1,checked:[]}),children:e.jsx(ct,{size:17})})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("select",{"aria-label":"待办状态",className:"min-h-11 min-w-0 flex-1 rounded-lg bg-surface-2 px-3 text-base sm:text-sm",value:n.filter,onChange:t=>d({filter:t.target.value,checked:[]}),children:[e.jsx("option",{value:"open",children:"未完成"}),e.jsx("option",{value:"review",children:"待确认"}),e.jsx("option",{value:"completed",children:"已完成"}),e.jsx("option",{value:"ignored",children:"已忽略"})]}),e.jsxs("select",{"aria-label":"按来源筛选",className:"min-h-11 min-w-0 flex-1 rounded-lg bg-surface-2 px-3 text-base sm:text-sm",value:n.source,onChange:t=>d({source:t.target.value,checked:[]}),children:[e.jsx("option",{value:"",children:"全部来源"}),[...new Set(o.todos.map(t=>t.source))].map(t=>e.jsx("option",{children:t},t))]})]})]}),!!tt&&e.jsxs("button",{type:"button",className:"flex min-h-11 shrink-0 items-center justify-between gap-3 px-5 text-left text-xs text-muted-foreground hover:bg-surface",onClick:()=>d({tab:"collectors"}),children:[e.jsxs("span",{children:["已发起 ",tt," 个收集任务"]}),e.jsx("span",{className:"text-primary",children:"查看"})]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-3 pb-6 pt-2 sm:px-4",children:oe.length?oe.map(t=>{const i=pe(o,t.id),x=i?.sessionId&&["launching","delivered","blocked"].includes(i.status),v=x?"查看执行":i?.status==="complete"?"查看结果":i?.status==="failed"?"查看问题":"处理",j=i?i.status==="complete"?"待确认":i.status==="delivered"?"已发送到终端":i.status==="launching"?"准备终端":i.status==="blocked"?"需要协助":"处理失败":"";return e.jsxs("article",{className:`flex items-start gap-1 border-b border-border/30 px-1 py-4 ${n.selectedId===t.id&&M?"bg-surface":"hover:bg-surface"}`,children:[n.selecting?e.jsx("label",{className:"flex min-h-11 w-10 shrink-0 items-center justify-center",children:e.jsx("input",{type:"checkbox","aria-label":`选择 ${t.title}`,checked:ce(t)&&n.checked.includes(t.id),disabled:!ce(t),onChange:D=>d({checked:D.target.checked?[...n.checked,t.id]:n.checked.filter(F=>F!==t.id)}),className:"h-4 w-4 accent-[var(--primary)]"})}):e.jsx("button",{type:"button",className:"flex min-h-11 w-10 shrink-0 items-center justify-center text-muted-foreground hover:text-primary",disabled:E||t.status==="ignored","aria-label":`${t.status==="completed"?"重新打开":"完成"} ${t.title}`,onClick:()=>ie(t,t.status==="completed"?"open":"completed"),children:t.status==="completed"?e.jsx(Gt,{size:19,className:"text-primary"}):e.jsx(Xt,{size:19})}),e.jsxs("button",{type:"button",className:"min-w-0 flex-1 py-2 text-left",onClick:()=>He(t),children:[e.jsx("span",{className:`block break-words text-[15px] font-medium leading-6 ${t.status==="completed"?"text-muted-foreground line-through":""}`,children:t.title}),e.jsxs("span",{className:`mt-1.5 block truncate text-xs leading-5 ${i?.status==="complete"&&t.status==="open"?"text-primary":"text-muted-foreground"}`,children:[t.status==="open"&&j?j:t.status==="completed"?"已完成":t.status==="ignored"?"已忽略":t.source,t.status==="open"&&j&&t.source!=="手动添加"?` · ${t.source}`:""]})]}),t.status==="open"&&!n.selecting&&e.jsx("button",{type:"button",className:"mt-1 inline-flex min-h-11 shrink-0 items-center gap-1 rounded-lg px-2 text-xs font-medium text-primary hover:bg-surface-2 disabled:opacity-40",disabled:E||i?.status==="launching"&&!i.sessionId,"aria-label":`${x?"打开终端":i?.status==="complete"?"查看结果":i?.status==="failed"?"查看问题":"处理"} ${t.title}`,onClick:()=>x?ae(i):i?He(t):le([t.id]),children:e.jsx("span",{children:v})})]},t.id)}):e.jsx(Oe,{title:n.query||n.source?"没有匹配的待办":n.filter==="completed"?"还没有已完成的待办":n.filter==="review"?"暂时没有待确认的结果":n.filter==="ignored"?"没有已忽略的待办":o.todos.length?"清单已清空":"还没有待办",text:n.query||n.source?"换个关键词,或清除筛选。":n.filter==="open"?"点 + 记下一件事,或让 Agent 帮你收集。":"清除筛选可回到当前待办。"})})]}),(M||Ee)&&e.jsx("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col",children:k?e.jsx(os,{todo:k,runs:o.runs.filter(t=>t.todoId===k.id),config:R?.config??ne(k.id,P),agentName:u.agents.find(t=>t.slug===(R?.config.agentSlug??P.agentSlug))?.displayName??R?.config.agentSlug??P.agentSlug,busy:E,wide:M,menu:et,onLaunch:()=>le([k.id]),onConfigure:Ze,onOpen:ae,onStatus:t=>ie(k,t)},k.id):e.jsx(Oe,{title:"从清单开始",text:"选择一条待办,查看内容或处理结果。"})})]}):e.jsx("div",{className:"flex flex-1 items-center justify-center text-sm text-muted-foreground",children:m?"加载失败,请重试":"正在加载待办…"}),b&&e.jsxs(ss,{title:jt,busy:E,error:C,onClose:()=>T(null),children:[b.kind==="edit"&&e.jsx(as,{workspace:r,todo:Q,busy:E,onCancel:()=>T(null),onSave:(t,i)=>{L(async()=>{const x=Q?await Te(Q,t):await Vt({...t,idempotencyKey:ye(["create",t])});if(!z())return;ke(["create",t]),se(`todo:${Q?.id??"new"}`);const v=i&&B&&u.agents.some(j=>j.slug===B.agentSlug);d({tab:"todos",filter:"open",source:"",query:"",selectedId:x.todo.id,mobileDetail:!0,modal:i&&!v?{kind:"launch",ids:[x.todo.id]}:null}),v?await Se([x.todo.id],B,!o?.defaults.agentSlug):w(i?"待办已保存,选择 Agent 后开始处理。":"待办已保存。")})}}),(b.kind==="launch"||b.kind==="defaults")&&e.jsx(ns,{workspace:r,draftId:b.kind==="defaults"?"defaults":xe(b.ids),config:Ge,agents:u.agents,loading:N,service:Xe,directories:ee([Ge.cwd,...Ye]),currentCwd:u.cwd,multipleDirectories:W&&new Set(Object.values(W).map(t=>t.cwd)).size>1,busy:E,settings:b.kind==="defaults",onCancel:()=>T(null),onSave:(t,i)=>{L(async()=>{b.kind==="defaults"?(await rt(t),z()&&(qe(r,t),se("defaults"),d({modal:null}),w("执行配置已保存,下次点击「处理」即可直接启动。"))):await Se(b.ids,t,i,!1,W&&JSON.stringify(t)===JSON.stringify(W[b.ids[0]])?W:void 0)})}}),b.kind==="collector"&&e.jsx(rs,{workspace:r,collector:Ae,config:bt,agents:u.agents,loading:N,service:Xe,directories:Ye,currentCwd:u.cwd,busy:E,onCancel:()=>T(null),onSave:(t,i)=>{L(async()=>{const x=await Kt(t);z()&&(qe(r,t.config),se(`collector:${Ae?.id??"new"}`),d({tab:i&&n.tab!=="collectors"?"todos":"collectors",modal:null}),i?await re([x.collector]):w("收集方向已保存,可以随时开始。"))})}}),b.kind==="integration"&&e.jsx(is,{})]})]})}function Oe({title:s,text:a}){return e.jsxs("div",{className:"mx-auto flex max-w-sm flex-col items-center px-6 py-12 text-center",children:[e.jsx(Zt,{size:30,strokeWidth:1.2,className:"mb-4 text-muted-foreground/50"}),e.jsx("h2",{className:"text-base font-medium",children:s}),e.jsx("p",{className:"mt-2 text-sm leading-7 text-muted-foreground",children:a})]})}function cs({collector:s,runs:a,busy:l,onRun:r,onEdit:n,onRemove:d,onOpen:o}){const[y,u]=h.useState(!1),p=a.at(-1);return e.jsxs("article",{className:"rounded-xl border border-border/30 bg-surface p-4 sm:p-5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h2",{className:"min-w-0 flex-1 break-words text-base font-semibold",children:s.name}),e.jsx("button",{type:"button",className:S,"aria-label":`编辑 ${s.name}`,disabled:l,onClick:n,children:e.jsx(Tt,{size:16})}),e.jsx("button",{type:"button",className:S,"aria-label":`移除 ${s.name}`,disabled:l,onClick:()=>u(!0),children:e.jsx(qt,{size:16})})]}),e.jsxs("p",{className:"mt-1 text-xs leading-6 text-muted-foreground",children:[s.config.agentSlug," · ",s.enabled?s.schedule?s.schedule.kind==="interval"?`每 ${s.schedule.everyMinutes} 分钟`:`每天 ${s.schedule.time}`:"手动运行":"已停用"]}),e.jsx("p",{className:"my-3 line-clamp-3 whitespace-pre-wrap text-sm leading-7 text-muted-foreground",children:s.config.prompt}),y?e.jsxs("div",{className:"rounded-lg bg-surface-2 p-3",children:[e.jsx("p",{className:"text-sm leading-6",children:"移除此方向?已有待办、终端和结果会保留。"}),e.jsxs("div",{className:"mt-2 flex justify-end gap-2",children:[e.jsx("button",{type:"button",className:S,onClick:()=>u(!1),children:"取消"}),e.jsx("button",{type:"button",className:`${V} text-destructive`,disabled:l,onClick:d,children:"确认移除"})]})]}):e.jsx("div",{className:"flex flex-wrap gap-2",children:e.jsxs("button",{type:"button",className:Y,disabled:l||p?.status==="launching",onClick:r,children:[e.jsx(ut,{size:16}),p?"再次收集":"开始收集"]})}),p&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mt-4 flex items-center gap-2 text-xs leading-6 text-muted-foreground",children:[e.jsx("span",{className:"flex-1",children:p.status==="complete"?"已收到收集结果":pt[p.status]}),p.sessionId&&p.status!=="complete"&&e.jsx("button",{type:"button",className:S,disabled:l,onClick:()=>o(p),children:"打开终端"})]}),e.jsxs("details",{className:"mt-2 text-sm text-muted-foreground",children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-2.5",children:["收集记录 · ",a.length," 次"]}),e.jsx("div",{className:"space-y-3 pt-2",children:a.slice().reverse().map(N=>e.jsx(ft,{run:N,onOpen:()=>o(N),busy:l},N.id))})]})]})]})}export{Ps as default};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|