termdock 1.4.354 → 1.4.356
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/THIRD_PARTY_NOTICES.md +56 -0
- package/dist/client/assets/{AndroidMirrorView-D9CMPmet.js → AndroidMirrorView-DW9oRr0w.js} +3 -3
- package/dist/client/assets/AndroidMirrorView-DW9oRr0w.js.br +0 -0
- package/dist/client/assets/AndroidMirrorView-DW9oRr0w.js.gz +0 -0
- package/dist/client/assets/App-DEZ2i9ZZ.js +178 -0
- package/dist/client/assets/App-DEZ2i9ZZ.js.br +0 -0
- package/dist/client/assets/App-DEZ2i9ZZ.js.gz +0 -0
- package/dist/client/assets/{ArchitecturePanel-Dlnd9PH-.js → ArchitecturePanel-Bf4b-6An.js} +3 -3
- package/dist/client/assets/ArchitecturePanel-Bf4b-6An.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-Bf4b-6An.js.gz +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-DO_zJfZr.js +2 -0
- package/dist/client/assets/ChangeWalkthroughPanel-DO_zJfZr.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-DO_zJfZr.js.gz +0 -0
- package/dist/client/assets/ChatRichContent-Cu1E1cJ8.js +277 -0
- package/dist/client/assets/ChatRichContent-Cu1E1cJ8.js.br +0 -0
- package/dist/client/assets/ChatRichContent-Cu1E1cJ8.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-BhmpSEbf.js +1 -0
- package/dist/client/assets/CollaborationMainWorkspace-BhmpSEbf.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-BhmpSEbf.js.gz +0 -0
- package/dist/client/assets/{CollaborationTaskContent-GMhtQgeq.js → CollaborationTaskContent-CX0Aqdi2.js} +1 -1
- package/dist/client/assets/{ComputerControlView-VNUyl2Gb.js → ComputerControlView-DjQLzn10.js} +4 -4
- package/dist/client/assets/ComputerControlView-DjQLzn10.js.br +0 -0
- package/dist/client/assets/ComputerControlView-DjQLzn10.js.gz +0 -0
- package/dist/client/assets/DagPlayground-CPYwfryM.js +1 -0
- package/dist/client/assets/DagPlayground-CPYwfryM.js.br +0 -0
- package/dist/client/assets/DagPlayground-CPYwfryM.js.gz +0 -0
- package/dist/client/assets/{DiffLab-CKBHu65J.js → DiffLab-ptw96Q_4.js} +1 -1
- package/dist/client/assets/DiffLab-ptw96Q_4.js.br +0 -0
- package/dist/client/assets/DiffLab-ptw96Q_4.js.gz +0 -0
- package/dist/client/assets/DiffReview-12E2zWyL.js +1 -0
- package/dist/client/assets/DiffReview-12E2zWyL.js.br +0 -0
- package/dist/client/assets/DiffReview-12E2zWyL.js.gz +0 -0
- package/dist/client/assets/{DiffReviewLab--PbhIP71.js → DiffReviewLab-eEi3y-0G.js} +2 -2
- package/dist/client/assets/DiffReviewLab-eEi3y-0G.js.br +0 -0
- package/dist/client/assets/DiffReviewLab-eEi3y-0G.js.gz +0 -0
- package/dist/client/assets/{DiffViewer-Cg3GhKcU.js → DiffViewer-DqcQxp4Q.js} +1 -1
- package/dist/client/assets/DiffViewer-DqcQxp4Q.js.br +0 -0
- package/dist/client/assets/DiffViewer-DqcQxp4Q.js.gz +0 -0
- package/dist/client/assets/GitLoadingSkeleton-DYrDIDF1.js +1 -0
- package/dist/client/assets/GitLoadingSkeleton-DYrDIDF1.js.br +0 -0
- package/dist/client/assets/GitLoadingSkeleton-DYrDIDF1.js.gz +0 -0
- package/dist/client/assets/{MarkdownPreview-b_bwDNcY.js → MarkdownPreview-CsJGsDRL.js} +2 -2
- package/dist/client/assets/MarkdownPreview-CsJGsDRL.js.br +0 -0
- package/dist/client/assets/MarkdownPreview-CsJGsDRL.js.gz +0 -0
- package/dist/client/assets/{ModelPreview-C9nka14O.js → ModelPreview-DjtHLlqP.js} +3 -3
- package/dist/client/assets/ModelPreview-DjtHLlqP.js.br +0 -0
- package/dist/client/assets/ModelPreview-DjtHLlqP.js.gz +0 -0
- package/dist/client/assets/{RecordingSaveDialog-1YvzwTzo.js → RecordingSaveDialog-DUtwgIME.js} +1 -1
- package/dist/client/assets/RecordingSaveDialog-DUtwgIME.js.br +0 -0
- package/dist/client/assets/RecordingSaveDialog-DUtwgIME.js.gz +0 -0
- package/dist/client/assets/{RightSidebar-CCk8ovoK.js → RightSidebar-BltjUFwI.js} +20 -20
- package/dist/client/assets/RightSidebar-BltjUFwI.js.br +0 -0
- package/dist/client/assets/RightSidebar-BltjUFwI.js.gz +0 -0
- package/dist/client/assets/SessionChatView-CdKfHRp8.js +13 -0
- package/dist/client/assets/SessionChatView-CdKfHRp8.js.br +0 -0
- package/dist/client/assets/SessionChatView-CdKfHRp8.js.gz +0 -0
- package/dist/client/assets/SessionResourceSidebar-DmQOydhf.js +2 -0
- package/dist/client/assets/SessionResourceSidebar-DmQOydhf.js.br +0 -0
- package/dist/client/assets/SessionResourceSidebar-DmQOydhf.js.gz +0 -0
- package/dist/client/assets/TodoWorkspace-Bh1C035B.js +1 -0
- package/dist/client/assets/TodoWorkspace-Bh1C035B.js.br +0 -0
- package/dist/client/assets/TodoWorkspace-Bh1C035B.js.gz +0 -0
- package/dist/client/assets/{abnfDiagram-VCTEODGH-CTqKSsYV.js → abnfDiagram-VCTEODGH-Cvf_KWZ0.js} +1 -1
- package/dist/client/assets/abnfDiagram-VCTEODGH-Cvf_KWZ0.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-Cvf_KWZ0.js.gz +0 -0
- package/dist/client/assets/app-DuUnqxq-.js +37 -0
- package/dist/client/assets/app-DuUnqxq-.js.br +0 -0
- package/dist/client/assets/app-DuUnqxq-.js.gz +0 -0
- package/dist/client/assets/{arc-CcvWcKBR.js → arc-UvdowQOf.js} +1 -1
- package/dist/client/assets/arc-UvdowQOf.js.br +0 -0
- package/dist/client/assets/arc-UvdowQOf.js.gz +0 -0
- package/dist/client/assets/{architectureDiagram-5GKGNRK7-B_2ae8Tt.js → architectureDiagram-5GKGNRK7-DotsbCCA.js} +1 -1
- package/dist/client/assets/architectureDiagram-5GKGNRK7-DotsbCCA.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-DotsbCCA.js.gz +0 -0
- package/dist/client/assets/{arrow-down-DaWRHIlh.js → arrow-down-FGzRy9D-.js} +1 -1
- package/dist/client/assets/{arrow-up-DE9Z7GTI.js → arrow-up-DNkfesW0.js} +1 -1
- package/dist/client/assets/{blockDiagram-I7D4REHJ-CGXUOwJg.js → blockDiagram-I7D4REHJ-CoOfSG4k.js} +1 -1
- package/dist/client/assets/blockDiagram-I7D4REHJ-CoOfSG4k.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-CoOfSG4k.js.gz +0 -0
- package/dist/client/assets/{c4Diagram-7LVT6UL2-BSU3omYQ.js → c4Diagram-7LVT6UL2-BAfjgs8B.js} +1 -1
- package/dist/client/assets/c4Diagram-7LVT6UL2-BAfjgs8B.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-BAfjgs8B.js.gz +0 -0
- package/dist/client/assets/channel-BzMU9Wks.js +1 -0
- package/dist/client/assets/{chevron-left-ZgHOf4aC.js → chevron-left-xqARwD-7.js} +1 -1
- package/dist/client/assets/{chunk-2Q5K7J3B-B67WsCJN.js → chunk-2Q5K7J3B-DiiQ7BvG.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-B8k7JXrn.js → chunk-5VM5RSS4-CczSK8wW.js} +1 -1
- package/dist/client/assets/{chunk-F27PBJKO-CP85XeHB.js → chunk-F27PBJKO-BI3Di4Ve.js} +1 -1
- package/dist/client/assets/chunk-F27PBJKO-BI3Di4Ve.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-BI3Di4Ve.js.gz +0 -0
- package/dist/client/assets/{chunk-IMKFNOWR-BjTbac0d.js → chunk-IMKFNOWR-Cvvs1wmn.js} +1 -1
- package/dist/client/assets/chunk-IMKFNOWR-Cvvs1wmn.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-Cvvs1wmn.js.gz +0 -0
- package/dist/client/assets/{chunk-JWPE2WC7-vEdRTCxh.js → chunk-JWPE2WC7-lrJRD9WA.js} +1 -1
- package/dist/client/assets/{chunk-POPQ4Y6H-BI8tSW7F.js → chunk-POPQ4Y6H-CnPC9D8B.js} +1 -1
- package/dist/client/assets/{chunk-SVP7TREG-Dde8KTpr.js → chunk-SVP7TREG-BZfMhm64.js} +1 -1
- package/dist/client/assets/chunk-SVP7TREG-BZfMhm64.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-BZfMhm64.js.gz +0 -0
- package/dist/client/assets/{chunk-TICWLB2K-DIBgH5zV.js → chunk-TICWLB2K-DmkEaRK3.js} +1 -1
- package/dist/client/assets/chunk-TICWLB2K-DmkEaRK3.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DmkEaRK3.js.gz +0 -0
- package/dist/client/assets/{chunk-XXDRQBXY-LSjj35mz.js → chunk-XXDRQBXY-BP9Lccpe.js} +1 -1
- package/dist/client/assets/circle-DGZOpG8V.js +1 -0
- package/dist/client/assets/classDiagram-ZZMXUADV-DtAtEoWU.js +1 -0
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-DtAtEoWU.js +1 -0
- package/dist/client/assets/{clipboard-BGpbRBdi.js → clipboard-rLx5CzbY.js} +1 -1
- package/dist/client/assets/clipboardText-cZXParp1.js +1 -0
- package/dist/client/assets/clipboardText-cZXParp1.js.br +0 -0
- package/dist/client/assets/clipboardText-cZXParp1.js.gz +0 -0
- package/dist/client/assets/{cose-bilkent-JH36ORCC-v4utSIkX.js → cose-bilkent-JH36ORCC-0xPYMc2z.js} +1 -1
- package/dist/client/assets/cose-bilkent-JH36ORCC-0xPYMc2z.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-0xPYMc2z.js.gz +0 -0
- package/dist/client/assets/{cynefin-OW5HDTMX-BdbtIufa.js → cynefin-OW5HDTMX-BQ7-lCHm.js} +1 -1
- package/dist/client/assets/cynefin-OW5HDTMX-BQ7-lCHm.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-BQ7-lCHm.js.gz +0 -0
- package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-B9EVx2-N.js → cynefinDiagram-5FMLGOSQ-CazHuSj1.js} +1 -1
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CazHuSj1.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CazHuSj1.js.gz +0 -0
- package/dist/client/assets/{dagre-GXQ25YYZ-Do2YjWuC.js → dagre-GXQ25YYZ-CJNgsyHQ.js} +1 -1
- package/dist/client/assets/dagre-GXQ25YYZ-CJNgsyHQ.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-CJNgsyHQ.js.gz +0 -0
- package/dist/client/assets/{diagram-S7CK7UJ4-BnJa3bbo.js → diagram-S7CK7UJ4-D4xXIj1P.js} +1 -1
- package/dist/client/assets/diagram-S7CK7UJ4-D4xXIj1P.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-D4xXIj1P.js.gz +0 -0
- package/dist/client/assets/{diagram-UQ7AKVKN-C09N8-nE.js → diagram-UQ7AKVKN-BWhpL-35.js} +1 -1
- package/dist/client/assets/diagram-UQ7AKVKN-BWhpL-35.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-BWhpL-35.js.gz +0 -0
- package/dist/client/assets/{diagram-VSXAHHWV-mMv3O2zK.js → diagram-VSXAHHWV-DG9A7EgJ.js} +1 -1
- package/dist/client/assets/diagram-VSXAHHWV-DG9A7EgJ.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-DG9A7EgJ.js.gz +0 -0
- package/dist/client/assets/{diagram-VX7I27RA-B0aepUKS.js → diagram-VX7I27RA-L5PSvynM.js} +1 -1
- package/dist/client/assets/diagram-VX7I27RA-L5PSvynM.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-L5PSvynM.js.gz +0 -0
- package/dist/client/assets/{diagram-Z3DM3KII-BstqsbCO.js → diagram-Z3DM3KII-moBH7ruR.js} +1 -1
- package/dist/client/assets/diagram-Z3DM3KII-moBH7ruR.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-moBH7ruR.js.gz +0 -0
- package/dist/client/assets/{ebnfDiagram-PWID7BFC-CPINc9LK.js → ebnfDiagram-PWID7BFC-DEiGgcRP.js} +1 -1
- package/dist/client/assets/ebnfDiagram-PWID7BFC-DEiGgcRP.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-DEiGgcRP.js.gz +0 -0
- package/dist/client/assets/{erDiagram-RLTQ6QDP-dUgaGLHP.js → erDiagram-RLTQ6QDP-BboIleYi.js} +1 -1
- package/dist/client/assets/erDiagram-RLTQ6QDP-BboIleYi.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-BboIleYi.js.gz +0 -0
- package/dist/client/assets/external-link-AZ3wjUg5.js +1 -0
- package/dist/client/assets/{flowDiagram-HODETNUW-4ottFlnS.js → flowDiagram-HODETNUW-COxz7Rda.js} +1 -1
- package/dist/client/assets/flowDiagram-HODETNUW-COxz7Rda.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-COxz7Rda.js.gz +0 -0
- package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CZOkoivd.js → ganttDiagram-EL5Y4UJY-_XdRvgyZ.js} +1 -1
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-_XdRvgyZ.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-_XdRvgyZ.js.gz +0 -0
- package/dist/client/assets/{git-compare-C7n2uha2.js → git-compare-90v75Jal.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-kh9xx53r.js → gitGraphDiagram-WWUBYQGX-CBb9xBNW.js} +1 -1
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-CBb9xBNW.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-CBb9xBNW.js.gz +0 -0
- package/dist/client/assets/index-ByrWASlZ.js +1 -0
- package/dist/client/assets/index-ByrWASlZ.js.br +0 -0
- package/dist/client/assets/index-ByrWASlZ.js.gz +0 -0
- package/dist/client/assets/{index-bfj9dYEg.css → index-nIgxJ6I3.css} +1 -1
- package/dist/client/assets/index-nIgxJ6I3.css.br +0 -0
- package/dist/client/assets/{index-bfj9dYEg.css.gz → index-nIgxJ6I3.css.gz} +0 -0
- package/dist/client/assets/{infoDiagram-27XIBGKW-zRkMruS-.js → infoDiagram-27XIBGKW-DjLdeNZi.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DPntAz12.js → ishikawaDiagram-5VMMS53U-Bcr-lhIE.js} +1 -1
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-Bcr-lhIE.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-Bcr-lhIE.js.gz +0 -0
- package/dist/client/assets/{journeyDiagram-3NMN7TZE-B074bD6a.js → journeyDiagram-3NMN7TZE-3vK6s9Pq.js} +1 -1
- package/dist/client/assets/journeyDiagram-3NMN7TZE-3vK6s9Pq.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-3vK6s9Pq.js.gz +0 -0
- package/dist/client/assets/{kanban-definition-UXKFOSKX-wPbpE7ij.js → kanban-definition-UXKFOSKX-DqDYDca0.js} +1 -1
- package/dist/client/assets/kanban-definition-UXKFOSKX-DqDYDca0.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-DqDYDca0.js.gz +0 -0
- package/dist/client/assets/{layout-D-nTHjVE.js → layout-C7_WwzCP.js} +1 -1
- package/dist/client/assets/layout-C7_WwzCP.js.br +0 -0
- package/dist/client/assets/layout-C7_WwzCP.js.gz +0 -0
- package/dist/client/assets/{linear-BVxgfw5H.js → linear-BQCRhl6P.js} +1 -1
- package/dist/client/assets/linear-BQCRhl6P.js.br +0 -0
- package/dist/client/assets/linear-BQCRhl6P.js.gz +0 -0
- package/dist/client/assets/{link-D-fkBp5k.js → link-Cq14tNBm.js} +3 -3
- package/dist/client/assets/link-Cq14tNBm.js.br +0 -0
- package/dist/client/assets/link-Cq14tNBm.js.gz +0 -0
- package/dist/client/assets/{list-tree-DKTcSR9r.js → list-tree-C281zrdg.js} +1 -1
- package/dist/client/assets/{loader-circle-DZn9iP0u.js → loader-circle-Df0zpx5N.js} +1 -1
- package/dist/client/assets/{maximize-2-dFjMEqgh.js → maximize-2-CovPxWdw.js} +1 -1
- package/dist/client/assets/{mermaid.core-D89ctjDO.js → mermaid.core-DGsccxt-.js} +5 -5
- package/dist/client/assets/mermaid.core-DGsccxt-.js.br +0 -0
- package/dist/client/assets/mermaid.core-DGsccxt-.js.gz +0 -0
- package/dist/client/assets/{mindmap-definition-YA3MSWOX-1TrbOKNK.js → mindmap-definition-YA3MSWOX-l0eF1PQE.js} +1 -1
- package/dist/client/assets/mindmap-definition-YA3MSWOX-l0eF1PQE.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-l0eF1PQE.js.gz +0 -0
- package/dist/client/assets/{passwordBootstrap-8XHlXyYk.js → passwordBootstrap-B5VzheZz.js} +2 -2
- package/dist/client/assets/passwordBootstrap-B5VzheZz.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-B5VzheZz.js.gz +0 -0
- package/dist/client/assets/{pegDiagram-XKGWAZYB-CJYo1Bz4.js → pegDiagram-XKGWAZYB-fRrxGIDM.js} +1 -1
- package/dist/client/assets/pegDiagram-XKGWAZYB-fRrxGIDM.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-fRrxGIDM.js.gz +0 -0
- package/dist/client/assets/{pieDiagram-E7YTZNPT-DyE6_2FS.js → pieDiagram-E7YTZNPT-B-EBa3qN.js} +1 -1
- package/dist/client/assets/pieDiagram-E7YTZNPT-B-EBa3qN.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-B-EBa3qN.js.gz +0 -0
- package/dist/client/assets/{quadrantDiagram-AXDQQJYC-OgNN7-oZ.js → quadrantDiagram-AXDQQJYC-Dj4e6f4h.js} +1 -1
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-Dj4e6f4h.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-Dj4e6f4h.js.gz +0 -0
- package/dist/client/assets/{quote-QwQvV6RF.js → quote-COQfrXhi.js} +1 -1
- package/dist/client/assets/{railroadDiagram-O6MQD6OU-Dmqw_B10.js → railroadDiagram-O6MQD6OU-CEMppxTC.js} +1 -1
- package/dist/client/assets/railroadDiagram-O6MQD6OU-CEMppxTC.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-CEMppxTC.js.gz +0 -0
- package/dist/client/assets/{rdpSession-tgxFIJYE.js → rdpSession-C5rS-ImV.js} +1 -1
- package/dist/client/assets/rdpSession-C5rS-ImV.js.br +0 -0
- package/dist/client/assets/rdpSession-C5rS-ImV.js.gz +0 -0
- package/dist/client/assets/{requirementDiagram-BXWQKSXE-nZK7--1f.js → requirementDiagram-BXWQKSXE-Dri1k4_x.js} +1 -1
- package/dist/client/assets/requirementDiagram-BXWQKSXE-Dri1k4_x.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-Dri1k4_x.js.gz +0 -0
- package/dist/client/assets/{sankeyDiagram-P5KCCOFB-Db_TVWjx.js → sankeyDiagram-P5KCCOFB-CMsL_tYL.js} +1 -1
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-CMsL_tYL.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-CMsL_tYL.js.gz +0 -0
- package/dist/client/assets/search-Dg6HWygj.js +1 -0
- package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-B7TK9j0_.js → sequenceDiagram-WJ2MYXX4-4_4hZtOd.js} +1 -1
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-4_4hZtOd.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-4_4hZtOd.js.gz +0 -0
- package/dist/client/assets/{settings-2-9tlRImVo.js → settings-2-iGqzPez0.js} +1 -1
- package/dist/client/assets/{sizeCapture-INFHLROL-roX-pGgF.js → sizeCapture-INFHLROL-3QA6qj2j.js} +1 -1
- package/dist/client/assets/sizeCapture-INFHLROL-3QA6qj2j.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-3QA6qj2j.js.gz +0 -0
- package/dist/client/assets/{stateDiagram-D77RDMKH-BdBm0h1F.js → stateDiagram-D77RDMKH-90IFPhD9.js} +1 -1
- package/dist/client/assets/stateDiagram-D77RDMKH-90IFPhD9.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-90IFPhD9.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CH-yvmL4.js +1 -0
- package/dist/client/assets/sun-BAMMjiA8.js +1 -0
- package/dist/client/assets/{swimlanes-42K2YHIH-DUulb0LD.js → swimlanes-42K2YHIH-BuHieVWC.js} +1 -1
- package/dist/client/assets/swimlanes-42K2YHIH-BuHieVWC.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-BuHieVWC.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-P_rDqbtg.js +8 -0
- package/dist/client/assets/{syntaxHighlight-Bgt0lmWx.js → syntaxHighlight-Cz6TPDW9.js} +1 -1
- package/dist/client/assets/syntaxHighlight-Cz6TPDW9.js.br +0 -0
- package/dist/client/assets/syntaxHighlight-Cz6TPDW9.js.gz +0 -0
- package/dist/client/assets/{timeline-definition-24CTP7MA-CIQuxjVB.js → timeline-definition-24CTP7MA-C7FpaNwf.js} +1 -1
- package/dist/client/assets/timeline-definition-24CTP7MA-C7FpaNwf.js.br +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-C7FpaNwf.js.gz +0 -0
- package/dist/client/assets/{triangle-alert-LpKfIn7N.js → triangle-alert-Oj-OsZDw.js} +1 -1
- package/dist/client/assets/{unplug-CLBg6VOD.js → unplug-DN2SNXUL.js} +1 -1
- package/dist/client/assets/{vennDiagram-4TSXK5OY-CMRFApvJ.js → vennDiagram-4TSXK5OY-CxoHHVcs.js} +1 -1
- package/dist/client/assets/vennDiagram-4TSXK5OY-CxoHHVcs.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-CxoHHVcs.js.gz +0 -0
- package/dist/client/assets/{videoCompression-DjyAuV3i.js → videoCompression-rr2lu3uy.js} +1 -1
- package/dist/client/assets/videoCompression-rr2lu3uy.js.br +0 -0
- package/dist/client/assets/videoCompression-rr2lu3uy.js.gz +0 -0
- package/dist/client/assets/{wardleyDiagram-VM6X3IG4-BEb3x-zl.js → wardleyDiagram-VM6X3IG4-B4Hsh-Ad.js} +1 -1
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-B4Hsh-Ad.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-B4Hsh-Ad.js.gz +0 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-DUvoeYl2.js → xychartDiagram-S5SC5T6Z-CghzsxQv.js} +1 -1
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-CghzsxQv.js.br +0 -0
- package/dist/client/assets/{xychartDiagram-S5SC5T6Z-DUvoeYl2.js.gz → xychartDiagram-S5SC5T6Z-CghzsxQv.js.gz} +0 -0
- package/dist/client/index.html +2 -2
- package/dist/client/index.html.br +0 -0
- package/dist/client/index.html.gz +0 -0
- package/dist/client/sw.js +1 -1
- package/dist/client/sw.js.br +0 -0
- package/dist/client/sw.js.gz +0 -0
- package/dist/server/agent/chatUIPrompt.js +14 -0
- package/dist/server/agent/collaborationCli.js +8 -2
- package/dist/server/agent/collaborationPrompt.js +2 -2
- package/dist/server/agent/collaborationStore.js +17 -0
- package/dist/server/agent/sessionChatRoutes.js +23 -1
- package/dist/server/cli.js +5 -0
- package/dist/server/federation/accessPolicy.js +3 -0
- package/dist/server/federation/authorization.js +7 -3
- package/dist/server/federation/invitations.js +14 -7
- package/dist/server/federation/routeInvitations.js +5 -1
- package/dist/server/federation/runtime.js +8 -1
- package/dist/server/shared/chatPresentation.js +36 -0
- package/dist/server/shared/chatUILibrary.js +26 -0
- package/dist/server/shared/sessionAppearance.js +17 -0
- package/package.json +4 -1
- package/runtime-manifest.json +4 -4
- package/scripts/ensure-node-pty.cjs +22 -7
- package/scripts/postinstall.mjs +5 -4
- package/dist/client/assets/AndroidMirrorView-D9CMPmet.js.br +0 -0
- package/dist/client/assets/AndroidMirrorView-D9CMPmet.js.gz +0 -0
- package/dist/client/assets/App-CqLXOAnv.js +0 -178
- package/dist/client/assets/App-CqLXOAnv.js.br +0 -0
- package/dist/client/assets/App-CqLXOAnv.js.gz +0 -0
- package/dist/client/assets/ArchitecturePanel-Dlnd9PH-.js.br +0 -0
- package/dist/client/assets/ArchitecturePanel-Dlnd9PH-.js.gz +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-BYb27GTC.js +0 -2
- package/dist/client/assets/ChangeWalkthroughPanel-BYb27GTC.js.br +0 -0
- package/dist/client/assets/ChangeWalkthroughPanel-BYb27GTC.js.gz +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-BJ_pbIlW.js +0 -1
- package/dist/client/assets/CollaborationMainWorkspace-BJ_pbIlW.js.br +0 -0
- package/dist/client/assets/CollaborationMainWorkspace-BJ_pbIlW.js.gz +0 -0
- package/dist/client/assets/ComputerControlView-VNUyl2Gb.js.br +0 -0
- package/dist/client/assets/ComputerControlView-VNUyl2Gb.js.gz +0 -0
- package/dist/client/assets/DagPlayground-Bzu6gfYW.js +0 -1
- package/dist/client/assets/DagPlayground-Bzu6gfYW.js.br +0 -0
- package/dist/client/assets/DagPlayground-Bzu6gfYW.js.gz +0 -0
- package/dist/client/assets/DiffLab-CKBHu65J.js.br +0 -0
- package/dist/client/assets/DiffLab-CKBHu65J.js.gz +0 -0
- package/dist/client/assets/DiffReview-DAUBgpsh.js +0 -1
- package/dist/client/assets/DiffReview-DAUBgpsh.js.br +0 -0
- package/dist/client/assets/DiffReview-DAUBgpsh.js.gz +0 -0
- package/dist/client/assets/DiffReviewLab--PbhIP71.js.br +0 -0
- package/dist/client/assets/DiffReviewLab--PbhIP71.js.gz +0 -0
- package/dist/client/assets/DiffViewer-Cg3GhKcU.js.br +0 -0
- package/dist/client/assets/DiffViewer-Cg3GhKcU.js.gz +0 -0
- package/dist/client/assets/GitLoadingSkeleton-ieGTuTuO.js +0 -1
- package/dist/client/assets/GitLoadingSkeleton-ieGTuTuO.js.br +0 -0
- package/dist/client/assets/GitLoadingSkeleton-ieGTuTuO.js.gz +0 -0
- package/dist/client/assets/MarkdownPreview-b_bwDNcY.js.br +0 -0
- package/dist/client/assets/MarkdownPreview-b_bwDNcY.js.gz +0 -0
- package/dist/client/assets/ModelPreview-C9nka14O.js.br +0 -0
- package/dist/client/assets/ModelPreview-C9nka14O.js.gz +0 -0
- package/dist/client/assets/RecordingSaveDialog-1YvzwTzo.js.br +0 -0
- package/dist/client/assets/RecordingSaveDialog-1YvzwTzo.js.gz +0 -0
- package/dist/client/assets/RightSidebar-CCk8ovoK.js.br +0 -0
- package/dist/client/assets/RightSidebar-CCk8ovoK.js.gz +0 -0
- package/dist/client/assets/SessionChatView-DORRzcNq.js +0 -13
- package/dist/client/assets/SessionChatView-DORRzcNq.js.br +0 -0
- package/dist/client/assets/SessionChatView-DORRzcNq.js.gz +0 -0
- package/dist/client/assets/SessionResourceSidebar-De0sHmdG.js +0 -2
- package/dist/client/assets/SessionResourceSidebar-De0sHmdG.js.br +0 -0
- package/dist/client/assets/SessionResourceSidebar-De0sHmdG.js.gz +0 -0
- package/dist/client/assets/TodoWorkspace-BHHT954s.js +0 -1
- package/dist/client/assets/TodoWorkspace-BHHT954s.js.br +0 -0
- package/dist/client/assets/TodoWorkspace-BHHT954s.js.gz +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-CTqKSsYV.js.br +0 -0
- package/dist/client/assets/abnfDiagram-VCTEODGH-CTqKSsYV.js.gz +0 -0
- package/dist/client/assets/app-stNRNTO-.js +0 -37
- package/dist/client/assets/app-stNRNTO-.js.br +0 -0
- package/dist/client/assets/app-stNRNTO-.js.gz +0 -0
- package/dist/client/assets/arc-CcvWcKBR.js.br +0 -0
- package/dist/client/assets/arc-CcvWcKBR.js.gz +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-B_2ae8Tt.js.br +0 -0
- package/dist/client/assets/architectureDiagram-5GKGNRK7-B_2ae8Tt.js.gz +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-CGXUOwJg.js.br +0 -0
- package/dist/client/assets/blockDiagram-I7D4REHJ-CGXUOwJg.js.gz +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-BSU3omYQ.js.br +0 -0
- package/dist/client/assets/c4Diagram-7LVT6UL2-BSU3omYQ.js.gz +0 -0
- package/dist/client/assets/channel-CREmT4wq.js +0 -1
- package/dist/client/assets/chunk-F27PBJKO-CP85XeHB.js.br +0 -0
- package/dist/client/assets/chunk-F27PBJKO-CP85XeHB.js.gz +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-BjTbac0d.js.br +0 -0
- package/dist/client/assets/chunk-IMKFNOWR-BjTbac0d.js.gz +0 -0
- package/dist/client/assets/chunk-SVP7TREG-Dde8KTpr.js.br +0 -0
- package/dist/client/assets/chunk-SVP7TREG-Dde8KTpr.js.gz +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DIBgH5zV.js.br +0 -0
- package/dist/client/assets/chunk-TICWLB2K-DIBgH5zV.js.gz +0 -0
- package/dist/client/assets/classDiagram-ZZMXUADV-CTHA5GVu.js +0 -1
- package/dist/client/assets/classDiagram-v2-VYDZK3BY-CTHA5GVu.js +0 -1
- package/dist/client/assets/clipboardText-B0NK9NMn.js +0 -1
- package/dist/client/assets/clipboardText-B0NK9NMn.js.br +0 -0
- package/dist/client/assets/clipboardText-B0NK9NMn.js.gz +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-v4utSIkX.js.br +0 -0
- package/dist/client/assets/cose-bilkent-JH36ORCC-v4utSIkX.js.gz +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-BdbtIufa.js.br +0 -0
- package/dist/client/assets/cynefin-OW5HDTMX-BdbtIufa.js.gz +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-B9EVx2-N.js.br +0 -0
- package/dist/client/assets/cynefinDiagram-5FMLGOSQ-B9EVx2-N.js.gz +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-Do2YjWuC.js.br +0 -0
- package/dist/client/assets/dagre-GXQ25YYZ-Do2YjWuC.js.gz +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-BnJa3bbo.js.br +0 -0
- package/dist/client/assets/diagram-S7CK7UJ4-BnJa3bbo.js.gz +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-C09N8-nE.js.br +0 -0
- package/dist/client/assets/diagram-UQ7AKVKN-C09N8-nE.js.gz +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-mMv3O2zK.js.br +0 -0
- package/dist/client/assets/diagram-VSXAHHWV-mMv3O2zK.js.gz +0 -0
- package/dist/client/assets/diagram-VX7I27RA-B0aepUKS.js.br +0 -0
- package/dist/client/assets/diagram-VX7I27RA-B0aepUKS.js.gz +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-BstqsbCO.js.br +0 -0
- package/dist/client/assets/diagram-Z3DM3KII-BstqsbCO.js.gz +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-CPINc9LK.js.br +0 -0
- package/dist/client/assets/ebnfDiagram-PWID7BFC-CPINc9LK.js.gz +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-dUgaGLHP.js.br +0 -0
- package/dist/client/assets/erDiagram-RLTQ6QDP-dUgaGLHP.js.gz +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-4ottFlnS.js.br +0 -0
- package/dist/client/assets/flowDiagram-HODETNUW-4ottFlnS.js.gz +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CZOkoivd.js.br +0 -0
- package/dist/client/assets/ganttDiagram-EL5Y4UJY-CZOkoivd.js.gz +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-kh9xx53r.js.br +0 -0
- package/dist/client/assets/gitGraphDiagram-WWUBYQGX-kh9xx53r.js.gz +0 -0
- package/dist/client/assets/index-bfj9dYEg.css.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-DPntAz12.js.br +0 -0
- package/dist/client/assets/ishikawaDiagram-5VMMS53U-DPntAz12.js.gz +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-B074bD6a.js.br +0 -0
- package/dist/client/assets/journeyDiagram-3NMN7TZE-B074bD6a.js.gz +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-wPbpE7ij.js.br +0 -0
- package/dist/client/assets/kanban-definition-UXKFOSKX-wPbpE7ij.js.gz +0 -0
- package/dist/client/assets/layout-D-nTHjVE.js.br +0 -0
- package/dist/client/assets/layout-D-nTHjVE.js.gz +0 -0
- package/dist/client/assets/linear-BVxgfw5H.js.br +0 -0
- package/dist/client/assets/linear-BVxgfw5H.js.gz +0 -0
- package/dist/client/assets/link-D-fkBp5k.js.br +0 -0
- package/dist/client/assets/link-D-fkBp5k.js.gz +0 -0
- package/dist/client/assets/mermaid.core-D89ctjDO.js.br +0 -0
- package/dist/client/assets/mermaid.core-D89ctjDO.js.gz +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-1TrbOKNK.js.br +0 -0
- package/dist/client/assets/mindmap-definition-YA3MSWOX-1TrbOKNK.js.gz +0 -0
- package/dist/client/assets/passwordBootstrap-8XHlXyYk.js.br +0 -0
- package/dist/client/assets/passwordBootstrap-8XHlXyYk.js.gz +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-CJYo1Bz4.js.br +0 -0
- package/dist/client/assets/pegDiagram-XKGWAZYB-CJYo1Bz4.js.gz +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-DyE6_2FS.js.br +0 -0
- package/dist/client/assets/pieDiagram-E7YTZNPT-DyE6_2FS.js.gz +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-OgNN7-oZ.js.br +0 -0
- package/dist/client/assets/quadrantDiagram-AXDQQJYC-OgNN7-oZ.js.gz +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-Dmqw_B10.js.br +0 -0
- package/dist/client/assets/railroadDiagram-O6MQD6OU-Dmqw_B10.js.gz +0 -0
- package/dist/client/assets/rdpSession-tgxFIJYE.js.br +0 -0
- package/dist/client/assets/rdpSession-tgxFIJYE.js.gz +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-nZK7--1f.js.br +0 -0
- package/dist/client/assets/requirementDiagram-BXWQKSXE-nZK7--1f.js.gz +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-Db_TVWjx.js.br +0 -0
- package/dist/client/assets/sankeyDiagram-P5KCCOFB-Db_TVWjx.js.gz +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-B7TK9j0_.js.br +0 -0
- package/dist/client/assets/sequenceDiagram-WJ2MYXX4-B7TK9j0_.js.gz +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-roX-pGgF.js.br +0 -0
- package/dist/client/assets/sizeCapture-INFHLROL-roX-pGgF.js.gz +0 -0
- package/dist/client/assets/sparkles-B64EiCUM.js +0 -1
- package/dist/client/assets/stateDiagram-D77RDMKH-BdBm0h1F.js.br +0 -0
- package/dist/client/assets/stateDiagram-D77RDMKH-BdBm0h1F.js.gz +0 -0
- package/dist/client/assets/stateDiagram-v2-MP3YSRHH-ClZ2Tfz8.js +0 -1
- package/dist/client/assets/sun-BFxiDkET.js +0 -1
- package/dist/client/assets/swimlanes-42K2YHIH-DUulb0LD.js.br +0 -0
- package/dist/client/assets/swimlanes-42K2YHIH-DUulb0LD.js.gz +0 -0
- package/dist/client/assets/swimlanesDiagram-VR7AAH4N-CGI6rSok.js +0 -8
- package/dist/client/assets/syntaxHighlight-Bgt0lmWx.js.br +0 -0
- package/dist/client/assets/syntaxHighlight-Bgt0lmWx.js.gz +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-CIQuxjVB.js.br +0 -0
- package/dist/client/assets/timeline-definition-24CTP7MA-CIQuxjVB.js.gz +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-CMRFApvJ.js.br +0 -0
- package/dist/client/assets/vennDiagram-4TSXK5OY-CMRFApvJ.js.gz +0 -0
- package/dist/client/assets/videoCompression-DjyAuV3i.js.br +0 -0
- package/dist/client/assets/videoCompression-DjyAuV3i.js.gz +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-BEb3x-zl.js.br +0 -0
- package/dist/client/assets/wardleyDiagram-VM6X3IG4-BEb3x-zl.js.gz +0 -0
- package/dist/client/assets/xychartDiagram-S5SC5T6Z-DUvoeYl2.js.br +0 -0
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarkdownPreview-CsJGsDRL.js","assets/app-DuUnqxq-.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-Dea8wJF3.js","assets/index-nIgxJ6I3.css","assets/use-gesture-react.esm-DYpdiE_k.js","assets/swiper-DJjq1TYT.js","assets/swiper-C2J0D0kV.css","assets/syntaxHighlight-Cz6TPDW9.js","assets/list-tree-C281zrdg.js","assets/ChatRichContent-Cu1E1cJ8.js","assets/circle-DGZOpG8V.js","assets/search-Dg6HWygj.js","assets/external-link-AZ3wjUg5.js","assets/quote-COQfrXhi.js","assets/clipboardText-cZXParp1.js","assets/loader-circle-Df0zpx5N.js","assets/arrow-down-FGzRy9D-.js","assets/arrow-up-DNkfesW0.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{a0 as Ee,cg as t,a5 as Ie,C as Ce,k as Se,f as Je,a4 as me,e7 as Be,e6 as Qe,b8 as Ye,bP as pe,dq as Te,aY as Z,bf as W,dm as Ge,ei as Xe,x as Ze,R as We,W as Ae,cK as et,ag as tt}from"./app-DuUnqxq-.js";import{b as s}from"./dnd-BCFAPC0L.js";import{Q as xe}from"./quote-COQfrXhi.js";import{r as rt,T as nt,p as ue,b as st,a as Le,w as at,P as Re}from"./clipboardText-cZXParp1.js";import{L as De}from"./loader-circle-Df0zpx5N.js";import{A as it}from"./arrow-down-FGzRy9D-.js";import{A as ot}from"./arrow-up-DNkfesW0.js";function lt(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 ct(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 ut(a){return{pending:"已发送",delivered:"已发送",stored:"已发送",failed:"发送失败",expired:"发送失败"}[a]||"待确认"}const de=new Set;function dt(a){const[r,n]=s.useState(!1);return s.useLayoutEffect(()=>{if(!a){n(!1);return}const o=Symbol("chat-viewport");de.add(o);const f=document.documentElement,k=()=>{const N=Number.parseFloat(f.style.getPropertyValue("--kb-height"))>=80;f.dataset.termdockChatViewport="true",f.dataset.termdockChatKeyboard=String(N),n(w=>w===N?w:N)};return k(),document.addEventListener(Ee,k),document.addEventListener("termdock:viewport-keyboard-change",k),()=>{document.removeEventListener(Ee,k),document.removeEventListener("termdock:viewport-keyboard-change",k),de.delete(o),de.size||(delete f.dataset.termdockChatViewport,delete f.dataset.termdockChatKeyboard)}},[a]),r}function ze(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 he(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(f=>f.replace(/^> ?/,"")).join(`
|
|
11
|
+
`)}}}const ft=s.lazy(()=>Ie(()=>import("./MarkdownPreview-CsJGsDRL.js").then(a=>a.b),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(a=>({default:a.MarkdownPreview}))),$e=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(ft,{embedded:!0,referenceLines:!1,content:r,filePath:null,rootPath:null,lineRange:null,onLineRangeClick:()=>{},scrollTop:0,outlineOpen:!1,lightboxOpen:!1})})}),mt=s.lazy(()=>Ie(()=>import("./ChatRichContent-Cu1E1cJ8.js"),__vite__mapDeps([11,1,2,3,4,5,12,13,14,15,16,17,18,19])).then(a=>({default:a.ChatRichContent}))),ee=a=>new Date(a).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hourCycle:"h23"}),pt=new Set(["amp","claude","codex","copilot","cursor","droid","gemini","goose","grok","kimi","opencode"]);function Pe({name:a,slug:r}){const n=r&&pt.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(Je,{size:15,"aria-hidden":"true"}),t.jsx("span",{children:a})]})}function Oe({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(me,{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 ht({content:a}){const r=he(a);return t.jsxs(t.Fragment,{children:[r.reference&&t.jsx(Oe,{reference:r.reference}),t.jsx("p",{className:"whitespace-pre-wrap break-words text-[15px] leading-7 sm:text-base",children:r.text})]})}function _e({content:a,createdAt:r,status:n,messageId:o,children:f}){return t.jsxs("article",{"data-chat-turn":"user","data-chat-message":o,className:"ml-auto flex w-fit max-w-[88%] flex-col items-end sm:max-w-[85%]",children:[t.jsx("div",{"data-chat-user-bubble":!0,className:"w-fit max-w-full rounded-2xl bg-surface-2 px-4 py-3",children:t.jsx(ht,{content:a})}),t.jsxs("div",{"data-chat-message-actions":!0,className:"mt-1 flex min-h-8 flex-wrap items-center justify-end gap-2 text-[10px] text-muted-foreground",children:[t.jsx("span",{children:n}),t.jsx("time",{dateTime:new Date(r).toISOString(),title:new Date(r).toLocaleString(),className:"opacity-60",children:ee(r)}),f]})]})}const fe="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 xt({messages:a,agentName:r,agentSlug:n,canWrite:o,copied:f,onCopy:k,onReference:N,sessionId:w,uiWritable:R,onAction:P,pendingMessage:E}){return t.jsxs("div",{className:"space-y-6 sm:space-y-7",children:[lt(a).map(h=>{const l=h.messages[h.messages.length-1],d=h.role==="user",x=h.messages.map(c=>c.content).join(`
|
|
12
|
+
|
|
13
|
+
`),y=c=>o&&t.jsx("button",{type:"button","aria-label":"引用消息",title:"引用这条消息",className:`${fe} shrink-0`,onPointerDown:g=>g.preventDefault(),onClick:()=>N(c),children:t.jsx(xe,{size:13})});return d?t.jsxs(_e,{messageId:h.id,content:x,createdAt:l.createdAt,status:ut(l.status),children:[y(l),t.jsxs("button",{type:"button",className:fe,"aria-label":"复制消息",title:"复制",onClick:()=>k(x,h.id),children:[f===h.id?t.jsx(Ce,{size:13}):t.jsx(Se,{size:13}),f===h.id&&t.jsx("span",{className:"text-[10px]",children:"已复制"})]})]},h.id):t.jsx("article",{"data-chat-turn":"assistant",className:"w-full",children:t.jsx("div",{className:"session-chat-markdown min-w-0 space-y-4 break-words",children:h.messages.map((c,g)=>t.jsxs("div",{"data-chat-message":c.id,children:[g===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(Pe,{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:ee(c.createdAt)})]}),c.ui?t.jsx(s.Suspense,{fallback:t.jsx($e,{content:c.content}),children:t.jsx(mt,{message:c,sessionId:w,canWrite:R,onAction:P},c.id)}):t.jsx($e,{content:c.content}),t.jsxs("div",{"data-chat-message-actions":!0,"data-chat-continuation":g<h.messages.length-1?"":void 0,className:"mt-1 flex items-center gap-2",children:[y(c),t.jsxs("button",{type:"button",className:fe,"aria-label":"复制回复",title:"复制",onClick:()=>k(c.content,c.id),children:[f===c.id?t.jsx(Ce,{size:13}):t.jsx(Se,{size:13}),f===c.id&&t.jsx("span",{className:"text-[10px]",children:"已复制"})]}),g<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[g+1].createdAt).toISOString(),children:ee(h.messages[g+1].createdAt)})]})]})]},c.id))})},h.id)}),E]})}function gt(a){const r=s.useRef(a);r.current=a;const[n,o]=s.useState(null),f=s.useRef(null),k=s.useRef(!0),N=s.useCallback(()=>{f.current?.controller.abort();const l=r.current,d=Te(),x=Z(),y=W(),c=document.activeElement,g=new AbortController,m={controller:g,current:()=>k.current&&!g.signal.aborted&&f.current===m&&r.current.active&&r.current.canWrite&&r.current.sessionId===l.sessionId&&Te()===d&&Z()===x&&!x?.closed&&W()===y,focus:()=>document.activeElement===c||document.activeElement===l.input.current||document.activeElement===document.body};return f.current=m,m},[]);s.useEffect(()=>{const l=()=>{f.current&&!f.current.current()&&(f.current.controller.abort(),f.current=null,o(null))};l();const d=()=>{f.current?.controller.abort(),f.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(()=>(k.current=!0,()=>{k.current=!1,f.current?.controller.abort()}),[]);const w=s.useCallback(async(l,d,x=[])=>{if(l.current()){o({stage:"uploading",percent:d.length?0:void 0,files:d,paths:x}),r.current.error("");try{if(d.length&&!r.current.directory&&!r.current.sessionAttachments)throw new Error("附件上传暂不可用,请重试");const y=m=>{l.current()&&o({stage:"uploading",percent:Math.round(m),files:d,paths:x})},c=d.length?r.current.sessionAttachments?await Be(r.current.sessionId,d,l.controller.signal,y,l.current):await Qe(r.current.directory,d,l.controller.signal,y,l.current):{files:[]};if(!l.current())return;if(c.files.length!==d.length||c.files.some(m=>!m.path))throw new Error("部分文件未上传成功,请重试");const g=[...x,...c.files.map(m=>m.path)];if(!g.length)throw new Error("没有可添加的文件");r.current.insert(`${g.map(Ye).join(" ")} `,l.focus()),o(null),f.current=null}catch(y){if(!l.current())return;o({stage:"failed",files:d,paths:x}),r.current.error(y instanceof Error?y.message:"文件上传失败,请重试")}}},[]),R=s.useCallback(l=>{!r.current.active||!r.current.canWrite||!l.length||w(N(),l)},[N,w]),P=s.useCallback(async l=>{if(!r.current.active||!r.current.canWrite)return;const d=N();o({stage:"reading"}),r.current.error("");const x=c=>{if(!d.current())throw new DOMException("Clipboard target changed","AbortError");return c},y=c=>{d.current()&&(r.current.insert(c,d.focus()),o(null),f.current=null)};try{const c=pe();let g;if(c?.readClipboardFiles)try{const{files:m,paths:D}=x(await rt());if(m.length||D.length)return await w(d,m,D)}catch(m){if(!d.current()||m instanceof nt)throw m;g=m}if(l?.files.length){const m=l.files.length===1&&l.files[0].type.startsWith("image/")?[ue(l.files[0])]:l.files;return await w(d,m)}if(l?.text){y(l.text);return}if(!c?.readClipboardImage&&typeof navigator.clipboard?.read=="function"){const m=x(await navigator.clipboard.read()),D=x(await st({read:async()=>m}));if(D.length)return await w(d,D);const U=x(await Le({read:async()=>m}));if(U)return await w(d,[ue(U)]);for(const H of m)if(H.types.includes("text/plain")){y(x(await x(await H.getType("text/plain")).text()));return}}else{const m=x(await Le(navigator.clipboard));if(m)return await w(d,[ue(m)])}if(navigator.clipboard?.readText){const m=x(await navigator.clipboard.readText());if(m){y(m);return}}throw g||new Error("剪贴板没有可读取的内容,请使用系统粘贴或选择文件")}catch(c){d.current()&&(o(null),r.current.error(c instanceof Error?c.message:"粘贴失败,请重试"))}},[N,w]);return{transfer:n,addFiles:R,paste:P,cancel:()=>{f.current?.controller.abort(),f.current=null,o(l=>l?{...l,stage:"cancelled"}:null)},retry:()=>{(n?.files?.length||n?.paths?.length)&&w(N(),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 bt({sessionId:a,name:r="当前会话",canWrite:n=!0,active:o=!0,terminalLink:f=!1,onKeyboardChange:k,onReadyChange:N,onTerminal:w}){s.useEffect(()=>(N?.(!0),()=>N?.(!1)),[N]);const R=dt(o),P=s.useRef(k);P.current=k,s.useEffect(()=>{P.current?.(o&&R)},[o,R]);const E=`termdock:chat:${Ge()?.targetPeerId||location.origin}:${a}`,[h,l]=s.useState(()=>{try{return sessionStorage.getItem(`${E}:draft`)||""}catch{return""}}),[d,x]=s.useState(()=>{try{const e=JSON.parse(sessionStorage.getItem(`${E}:reference`)||"null");return e&&typeof e.author=="string"&&typeof e.time=="string"&&typeof e.text=="string"?e:null}catch{return null}}),[y,c]=s.useState(null),[g,m]=s.useState("助手"),[D,U]=s.useState(),[H,te]=s.useState(!1),[j,J]=s.useState(()=>{try{return JSON.parse(sessionStorage.getItem(`${E}:pending`)||"null")}catch{return null}}),[O,ge]=s.useState([]),[Fe,be]=s.useState(!0),[_,Me]=s.useState(),[re,T]=s.useState(""),[B,ye]=s.useState(!1),[qe,ne]=s.useState(!1),[Ve,Ke]=s.useState(""),F=s.useRef(null),L=s.useRef(null),z=s.useRef(!0),se=s.useRef(!1),M=s.useRef(0),ae=s.useRef(""),we=s.useRef(0),ie=s.useRef(null),oe=s.useRef(null),ve=s.useRef(null),q=s.useRef(0),$=s.useRef({active:o,canWrite:n,sessionId:a});$.current={active:o,canWrite:n,sessionId:a};const le=Xe(),I=s.useCallback((e,u=!0)=>{const i=L.current,p=i?.selectionStart,b=i?.selectionEnd,A=$.current,C=Z(),S=W();l(K=>{const G=Math.min(p??K.length,K.length),He=Math.min(b??G,K.length),Ne=K.slice(0,G)+e+K.slice(He);return requestAnimationFrame(()=>{i?.isConnected&&i.value===Ne&&$.current.active&&$.current.canWrite&&$.current.sessionId===A.sessionId&&Z()===C&&W()===S&&(u&&i.focus({preventScroll:!0}),i.setSelectionRange(G+e.length,G+e.length))}),Ne})},[]),v=gt({sessionId:a,active:o,canWrite:n,input:L,insert:I,error:T,sessionAttachments:!!le,directory:le?le.directories?.find(e=>e.access==="write")?.path:"/tmp"}),je=s.useCallback((e,u)=>{if(!o||!n)return;const i=u||he(e.content).text;if(new TextEncoder().encode(i).byteLength>8e3){T("这条消息较长,请选中需要引用的内容。");return}c(null),x({author:e.role==="user"?"用户":g,time:ee(e.createdAt),text:i}),T(""),window.getSelection()?.removeAllRanges(),L.current?.focus({preventScroll:!0})},[o,n,g]);s.useEffect(()=>{if(!o||!n){c(null);return}const e=()=>{const u=window.getSelection(),i=u?.toString().trim(),p=S=>S instanceof Element?S:S?.parentElement,b=p(u?.anchorNode)?.closest("[data-chat-message]"),A=p(u?.focusNode)?.closest("[data-chat-message]"),C=i&&b===A&&b&&oe.current?.contains(b)?{id:b.dataset.chatMessage,text:i}:null;c(S=>S?.id===C?.id&&S?.text===C?.text?S:C)};return document.addEventListener("selectionchange",e),()=>document.removeEventListener("selectionchange",e)},[o,n]),s.useEffect(()=>{try{d?sessionStorage.setItem(`${E}:reference`,JSON.stringify(d)):sessionStorage.removeItem(`${E}:reference`)}catch{}},[E,d]);const ce=`/api/terminal/${encodeURIComponent(a)}/chat`,Q=s.useCallback(async e=>{const u=++we.current,i=await fetch(ce,{signal:e}),p=await i.json();if(e?.aborted||u!==we.current)return;if(!i.ok)throw new Error("暂时无法读取对话,请重试");Me(p.agentAvailable===!0),m(typeof p.agent?.displayName=="string"&&p.agent.displayName.trim()?p.agent.displayName:"助手"),U(typeof p.agent?.slug=="string"?p.agent.slug:void 0);const b=p.messages;if(!Array.isArray(b))throw new Error("暂时无法读取对话,请重试");const A=JSON.stringify(b);ae.current!==A&&(ae.current&&!z.current&&ne(!0),ae.current=A,ge(b)),J(C=>C&&b.some(S=>S.requestId===C.requestId)?null:C),be(!1),T("")},[ce]);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||(T("连接暂时中断,正在重试…"),be(!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(()=>()=>{M.current++},[]),s.useEffect(()=>{try{sessionStorage.setItem(`${E}:draft`,h)}catch{}},[E,h]),s.useEffect(()=>{try{j?sessionStorage.setItem(`${E}:pending`,JSON.stringify(j)):sessionStorage.removeItem(`${E}:pending`)}catch{}},[E,j]);const V=s.useCallback(()=>{const e=F.current;e&&(e.scrollTop=e.scrollHeight,z.current=!0,ne(!1))},[]);s.useEffect(()=>{if(!ie.current||typeof ResizeObserver>"u")return;const e=new ResizeObserver(()=>{z.current&&V()});return e.observe(ie.current),F.current&&e.observe(F.current),()=>e.disconnect()},[V]),s.useLayoutEffect(()=>{z.current&&V()},[O,j,V]),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(se.current||v.busy||!$.current.active||!$.current.canWrite||_!==!0)return!1;const i=e||{content:u??ze(h,d),requestId:crypto.randomUUID(),createdAt:Date.now()};if(!i.content||new TextEncoder().encode(i.content).byteLength>32e3)return!1;se.current=!0,ye(!0),T(""),J(i),z.current=!0,!e&&u===void 0&&(l(""),x(null));const p=M.current;try{const b=await fetch(ce,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:i.content,requestId:i.requestId}),signal:AbortSignal.timeout(2e4)}),A=await b.json();if(!b.ok)throw new Error("发送失败,请重试。");if(p!==M.current)return!1;J(null),ge(C=>C.some(S=>S.id===A.id)?C:[...C,{...i,id:A.id,role:"user",status:A.status}]);try{await Q()}catch{T("消息已发送,暂时无法获取回复。")}return!0}catch(b){return p===M.current&&T(b instanceof Error&&b.name==="TimeoutError"?"发送状态待确认,请重试。":"发送失败,请重试。"),!1}finally{se.current=!1,p===M.current&&ye(!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||!!tt(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 Ue=_===!0&&!j&&ct(O),ke=new TextEncoder().encode(ze(h,d)).byteLength>32e3;return t.jsxs("section",{ref:oe,"data-session-chat":!0,onDragEnter:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),q.current++,n&&te(!0))},onDragOver:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),e.dataTransfer.dropEffect=n?"copy":"none")},onDragLeave:e=>{e.dataTransfer.types.includes("Files")&&(q.current=Math.max(0,q.current-1),q.current||te(!1))},onDrop:e=>{let u;try{u=et(e.dataTransfer)}catch(p){e.preventDefault(),T(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(),te(!1),q.current=0,v.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:F,className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-4 [overflow-anchor:none] sm:px-8",onScroll:()=>{const e=F.current;z.current=e.scrollHeight-e.scrollTop-e.clientHeight<96,z.current&&ne(!1)},children:t.jsxs("div",{ref:ie,className:"mx-auto flex min-h-full w-full max-w-screen-2xl flex-col py-5 sm:py-8",children:[Fe&&!O.length&&!j?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))]}):!O.length&&!j?t.jsxs("div",{className:"my-auto py-6",children:[t.jsx(Ze,{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:"直接描述你的目标,或从一个问题开始。"}),!R&&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:()=>{l(e),L.current?.focus({preventScroll:!0})},children:e},e))})]}):t.jsx(xt,{pendingMessage:j&&t.jsx(_e,{content:j.content,createdAt:j.createdAt,status:B?"发送中…":"待重试",children:!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=he(j.content);l(e.text),x(e.reference),J(null),T(""),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||_!==!0,onClick:()=>{Y(j)},children:[t.jsx(We,{size:12}),"重试发送"]})]})}),sessionId:a,uiWritable:o&&n&&!j&&!B&&_===!0,onAction:e=>Y(void 0,e),messages:O,agentName:g,agentSlug:D,canWrite:n,copied:Ve,onReference:e=>je(e),onCopy:(e,u)=>{at(e,()=>oe.current?.isConnected===!0).then(i=>{i?Ke(u):T("复制失败,请选择正文复制")})}}),Ue&&!re&&t.jsxs("div",{"data-chat-reply-status":!0,role:"status","aria-label":`${g}工作中`,"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(Pe,{name:g,slug:D}),t.jsxs("span",{className:"inline-flex shrink-0 items-center gap-1.5",children:[t.jsx(De,{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:[qe&&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:V,children:[t.jsx(it,{size:14}),"查看新消息"]})}),t.jsxs("div",{className:"relative mx-auto max-w-screen-2xl",children:[re&&t.jsxs("p",{role:"alert",className:"mb-2 rounded-xl bg-surface-2 px-3 py-2 text-xs leading-6 text-destructive",children:[re,t.jsx("button",{type:"button",className:"ml-2 underline",onClick:()=>{Q().catch(()=>{})},children:"重新连接"})]}),_===!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:w,children:[t.jsx(Ae,{size:14}),"打开终端"]})]}),y&&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=O.find(u=>u.id===y.id);e&&je(e,y.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:y.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(me,{size:13})})]})}),v.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:[v.busy&&t.jsx(De,{size:13,className:"animate-spin text-primary"}),t.jsx("span",{className:"min-w-0 flex-1",children:v.transfer.stage==="reading"?"正在读取剪贴板…":v.transfer.stage==="uploading"?`正在上传文件${v.transfer.percent===void 0?"…":` · ${v.transfer.percent}%`}`:v.transfer.stage==="cancelled"?"已取消上传":"上传未完成,文件尚未添加"}),v.busy?t.jsx("button",{type:"button",className:"min-h-9 px-2",onClick:v.cancel,children:"取消"}):t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"min-h-9 px-2 text-primary",onClick:v.retry,children:"重试上传"}),t.jsx("button",{type:"button","aria-label":"关闭上传提示",className:"min-h-9 px-2",onClick:v.dismiss,children:t.jsx(me,{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(),j||Y()},children:[d&&t.jsx(Oe,{reference:d,onRemove:()=>x(null)}),t.jsxs("div",{className:"flex items-end gap-2",children:[t.jsx("input",{ref:ve,type:"file",multiple:!0,tabIndex:-1,className:"hidden","aria-label":"选择附件",onChange:e=>{v.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||v.busy,onPointerDown:e=>e.preventDefault(),onClick:()=>ve.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||pe()?.readClipboardFiles||!p&&(pe()||typeof navigator.clipboard?.read=="function"))&&(e.preventDefault(),v.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":`给${g}的消息`,placeholder:n?"输入消息…":"此会话仅允许查看",value:h,disabled:!n,onChange:e=>l(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key==="Enter"&&!e.shiftKey&&!e.altKey&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&(e.preventDefault(),j||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||v.busy||!!j||!h.trim()||ke||!n||_!==!0,children:t.jsx(ot,{size:19})})]})]}),ke?t.jsx("p",{className:"mt-2 px-1 text-xs text-destructive",children:"消息过长,请缩短后发送。"}):n?!R&&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:"仅查看"}),f&&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:w,children:[t.jsx(Ae,{size:13}),"查看终端"]})})]})]})]})}const Ct=Object.freeze(Object.defineProperty({__proto__:null,SessionChatView:bt},Symbol.toStringTag,{value:"Module"}));export{$e as C,Ct as S};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AndroidMirrorView-DW9oRr0w.js","assets/app-DuUnqxq-.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-Dea8wJF3.js","assets/index-nIgxJ6I3.css","assets/v4-EwEgHOG0.js","assets/RecordingSaveDialog-DUtwgIME.js","assets/use-gesture-react.esm-DYpdiE_k.js","assets/gestureArbiter-DszagC-d.js","assets/arrow-up-DNkfesW0.js","assets/unplug-DN2SNXUL.js","assets/circle-DGZOpG8V.js","assets/ComputerControlView-DjQLzn10.js","assets/chevron-left-xqARwD-7.js","assets/loader-circle-Df0zpx5N.js","assets/clipboard-rLx5CzbY.js","assets/maximize-2-CovPxWdw.js","assets/settings-2-iGqzPez0.js","assets/RightSidebar-BltjUFwI.js","assets/MarkdownPreview-CsJGsDRL.js","assets/swiper-DJjq1TYT.js","assets/swiper-C2J0D0kV.css","assets/syntaxHighlight-Cz6TPDW9.js","assets/list-tree-C281zrdg.js","assets/GitLoadingSkeleton-DYrDIDF1.js","assets/DiffReview-12E2zWyL.js","assets/DiffViewer-DqcQxp4Q.js","assets/git-compare-90v75Jal.js","assets/DiffViewer-T3uj2-aP.css","assets/triangle-alert-Oj-OsZDw.js","assets/ChangeWalkthroughPanel-DO_zJfZr.js","assets/search-Dg6HWygj.js","assets/arrow-down-FGzRy9D-.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-DuUnqxq-.js";import{b as s}from"./dnd-BCFAPC0L.js";import{S as G,R as W,U as X}from"./RecordingSaveDialog-DUtwgIME.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-DNkfesW0.js";const H=s.lazy(()=>k(()=>import("./AndroidMirrorView-DW9oRr0w.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-DjQLzn10.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-BltjUFwI.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
|
|
@@ -0,0 +1 @@
|
|
|
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-DuUnqxq-.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-DEZ2i9ZZ.js";import{D as Wt}from"./RecordingSaveDialog-DUtwgIME.js";import{d as Je}from"./GitLoadingSkeleton-DYrDIDF1.js";import{S as Ht}from"./settings-2-iGqzPez0.js";import{S as Yt}from"./search-Dg6HWygj.js";import{C as Gt}from"./triangle-alert-Oj-OsZDw.js";import{C as Xt}from"./circle-DGZOpG8V.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./link-Cq14tNBm.js";import"./AndroidMirrorView-DW9oRr0w.js";import"./v4-EwEgHOG0.js";import"./unplug-DN2SNXUL.js";import"./swiper-DJjq1TYT.js";import"./loader-circle-Df0zpx5N.js";import"./clipboardText-cZXParp1.js";import"./clipboard-rLx5CzbY.js";import"./external-link-AZ3wjUg5.js";import"./maximize-2-CovPxWdw.js";import"./git-compare-90v75Jal.js";import"./arrow-up-DNkfesW0.js";import"./arrow-down-FGzRy9D-.js";import"./sun-BAMMjiA8.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
|
package/dist/client/assets/{abnfDiagram-VCTEODGH-CTqKSsYV.js → abnfDiagram-VCTEODGH-Cvf_KWZ0.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-SVP7TREG-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-SVP7TREG-BZfMhm64.js";import{p as f}from"./chunk-JWPE2WC7-lrJRD9WA.js";import{d as n,bg as o}from"./mermaid.core-DGsccxt-.js";import{M as c,c as d}from"./cynefin-OW5HDTMX-BQ7-lCHm.js";import"./app-DuUnqxq-.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-Dea8wJF3.js";import"./purify.es-4eNOHKSq.js";var g=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(v);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),v=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),m=t?parseInt(t,10):0,l=s?parseInt(s,10):1/0;return{min:m,max:l}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=g.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},D={parser:R,db:a,renderer:u,styles:p};export{D as diagram};
|
|
Binary file
|
|
Binary file
|