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
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{aR as ie,e6 as ce,cc as s,g as le,L as de}from"./app-stNRNTO-.js";import{b as D}from"./dnd-BCFAPC0L.js";import{S as me}from"./sparkles-B64EiCUM.js";import{C as he}from"./chevron-left-ZgHOf4aC.js";import{M as ue}from"./maximize-2-dFjMEqgh.js";import{G as xe,T as fe,C as pe}from"./triangle-alert-LpKfIn7N.js";const ye=[["path",{d:"m14 10 7-7",key:"oa77jy"}],["path",{d:"M20 10h-6V4",key:"mjg0md"}],["path",{d:"m3 21 7-7",key:"tjx5ai"}],["path",{d:"M4 14h6v6",key:"rmj7iw"}]],ge=ie("minimize-2",ye);function be(t,d){return(d?t.filter(o=>o.repoRoot===d):t).slice().sort((o,r)=>r.injectedAt-o.injectedAt)[0]??null}function ke(t){switch(t){case"entry":case"source":return"bg-sky-400";case"ui":return"bg-fuchsia-400";case"risk":return"bg-destructive";case"test":return"bg-emerald-400";default:return"bg-primary"}}function ve(t){if(!t)return;const d=typeof t.sectionIndex=="number"?` section ${t.sectionIndex+1}`:"",i=typeof t.hunkIndex=="number"?` hunk ${t.hunkIndex+1}`:"";return`${t.filePath}${i}${d}`}function Q({anchor:t,children:d,onNavigate:i,className:o,style:r,elementRef:g,onActivate:l}){return!t&&!l?s.jsx("span",{ref:g,className:o,style:r,children:d}):s.jsx("button",{ref:g,type:"button",onClick:()=>{l?.(),t&&i(t)},title:ve(t),className:`${o} text-left transition hover:border-primary/35 hover:bg-primary/15 active:scale-[0.99]`,style:r,children:d})}const H=190,X=92,q=132,Ne=28,C=16,J=18,T=54,ee=24,re=18,we=8,B=24,z=["rgb(var(--primary-rgb))","rgb(var(--accent-rgb))","rgb(var(--warning-rgb))","rgb(var(--success-rgb))","rgb(192 132 252)"];function te(t){return z[t%z.length]}function je(t,d){return`${t.from}->${t.to}:${d}`}function Me(t,d,i){const o=Math.max(d.get(t)?.length??0,i.get(t)?.length??0);return Math.max(X,36+Math.max(0,o-1)*re)}function ne(t,d,i){if(i<=1)return t.y+t.height/2;const o=Math.max(0,t.height-36),r=Math.min(o,(i-1)*re);return t.y+t.height/2-r/2+r/(i-1)*d}function se(t,d,i){return t.slice().sort((o,r)=>{const g=d[o],l=d[r],a=i==="from"?g.toNode:g.fromNode,h=i==="from"?l.toNode:l.fromNode;return a.y-h.y||a.index-h.index||g.index-l.index})}function Ee(t,d){const i=new Map;for(const o of t){if(Math.abs(o.toNode.layer-o.fromNode.layer)!==1)continue;const r=`${o.fromNode.layer}:${o.toNode.layer}`,g=i.get(r)??[];g.push(o),i.set(r,g)}for(const o of i.values()){o.sort((h,x)=>(h.fromY+h.toY)/2-(x.fromY+x.toY)/2||h.index-x.index);const r=[];o.forEach((h,x)=>{const N=(h.fromY+h.toY)/2,M=Math.max(B,d[h.key]??0)/2;if(x===0){r.push(N);return}const w=o[x-1],E=Math.max(B,d[w.key]??0)/2;r.push(Math.max(N,r[x-1]+E+M+we))});const g=r.reduce((h,x,N)=>h+x-(o[N].fromY+o[N].toY)/2,0)/Math.max(1,r.length),l=Math.min(...r.map((h,x)=>h-g-Math.max(B,d[o[x].key]??0)/2)),a=Math.max(0,C-l);o.forEach((h,x)=>{h.laneY=r[x]-g+a})}}function $e(t,d,i={},o={}){const r=new Map(t.map((n,m)=>[n.id,{node:n,index:m}])),g=d.filter(n=>r.has(n.from)&&r.has(n.to)),l=new Map,a=new Map;for(const n of t)l.set(n.id,[]),a.set(n.id,[]);for(const n of g)l.get(n.to)?.push(n.from),a.get(n.from)?.push(n.to);const h=new Map,x=new Set,N=n=>{const m=h.get(n);if(m!==void 0)return m;if(x.has(n))return 0;x.add(n);const c=l.get(n)??[],u=c.length===0?0:Math.max(...c.map(N))+1;return x.delete(n),h.set(n,u),u};for(const n of t)N(n.id);const M=new Map;for(const n of t){const m=h.get(n.id)??0,c=M.get(m)??[],u=r.get(n.id);u&&c.push(u),M.set(m,c)}const w=[];for(const[n,m]of M.entries()){m.sort((u,f)=>u.index-f.index);let c=C+T;m.forEach(({node:u,index:f},j)=>{const I=Math.max(Me(u.id,l,a),Math.ceil(i[u.id]??X));w.push({node:u,index:f,layer:n,row:j,x:C+n*(H+q),y:c,height:I}),c+=I+Ne})}const E=new Map(w.map(n=>[n.node.id,n])),v=g.flatMap((n,m)=>{const c=E.get(n.from),u=E.get(n.to);return!c||!u?[]:[{...n,key:je(n,m),index:m,fromNode:c,toNode:u,routeIndex:m,fromPortIndex:0,toPortIndex:0,fromY:c.y+c.height/2,toY:u.y+u.height/2,laneY:(c.y+c.height/2+u.y+u.height/2)/2}]}),$=new Map,G=new Map;v.forEach((n,m)=>{$.set(n.from,[...$.get(n.from)??[],m]),G.set(n.to,[...G.get(n.to)??[],m])});for(const[n,m]of $){const c=se(m,v,"from");c.forEach((u,f)=>{const j=v[u];j.fromPortIndex=f,j.fromY=ne(E.get(n),f,c.length)})}for(const[n,m]of G){const c=se(m,v,"to");c.forEach((u,f)=>{const j=v[u];j.toPortIndex=f,j.toY=ne(E.get(n),f,c.length)})}Ee(v,o);let Y=0;v.forEach(n=>{const m=Math.min(n.fromNode.layer,n.toNode.layer),c=Math.max(n.fromNode.layer,n.toNode.layer);if(c-m<=1)return;const f=Y;Y+=1,n.routeIndex=f;const j=w.filter(A=>A.layer>=m&&A.layer<=c),I=Math.min(...j.map(A=>A.y))-ee-(Math.floor(f/2)+1)*J,S=Math.max(...j.map(A=>A.y+A.height))+ee+(Math.floor(f/2)+1)*J;n.laneY=f%2===0?Math.max(C,I):S});const O=Math.max(0,...w.map(n=>n.layer)),W=Math.max(C+T+X,...w.map(n=>n.y+n.height),...v.map(n=>n.laneY+Math.max(B,o[n.key]??0)/2));return{nodes:w,edges:v,width:C*2+(O+1)*H+O*q,height:W+C+T}}function oe(t,d=12){const i=t[0];if(!i)return"";const o=[`M ${i.x} ${i.y}`];for(let r=1;r<t.length;r+=1){const g=t[r-1],l=t[r],a=t[r+1];if(!a){o.push(`L ${l.x} ${l.y}`);continue}const h=l.x-g.x,x=l.y-g.y,N=a.x-l.x,M=a.y-l.y,w=Math.abs(h)+Math.abs(x),E=Math.abs(N)+Math.abs(M);if(w===0||E===0||h&&N||x&&M){o.push(`L ${l.x} ${l.y}`);continue}const v=Math.min(d,w/2,E/2),$={x:l.x-Math.sign(h)*v,y:l.y-Math.sign(x)*v},G={x:l.x+Math.sign(N)*v,y:l.y+Math.sign(M)*v};o.push(`L ${$.x} ${$.y}`),o.push(`Q ${l.x} ${l.y} ${G.x} ${G.y}`)}return o.join(" ")}function _e(t){const d=t.fromNode.x+H+8,i=t.fromY,o=t.toNode.x-8,r=t.toY,g=Math.abs(t.toNode.layer-t.fromNode.layer),l=d+22+t.fromPortIndex*5,a=o-22-t.toPortIndex*5;return g<=1?oe([{x:d,y:i},{x:l,y:i},{x:l,y:t.laneY},{x:a,y:t.laneY},{x:a,y:r},{x:o,y:r}]):oe([{x:d,y:i},{x:l,y:i},{x:l,y:t.laneY},{x:a,y:t.laneY},{x:a,y:r},{x:o,y:r}])}function De(t){const d=t.fromNode.x+H+8,i=t.toNode.x-8,o=Math.abs(t.toNode.layer-t.fromNode.layer),r=Math.max(34,Math.abs(i-d));return o<=1?{x:(d+i)/2,y:t.laneY,maxWidth:Math.max(72,Math.min(108,r-34))}:{x:(d+i)/2,y:t.laneY,maxWidth:Math.max(84,Math.min(120,r*.3))}}function Ce({walkthroughs:t,repoRoot:d,onNavigate:i,fullscreen:o=!1,onToggleFullscreen:r}){const{t:g}=ce(),l=D.useId(),a=be(t,d),h=D.useRef(new Map),x=D.useRef(new Map),[N,M]=D.useState({}),[w,E]=D.useState({}),[v,$]=D.useState(null),[G,Y]=D.useState(null),[O,W]=D.useState(null),[n,m]=D.useState(null),c=D.useMemo(()=>a?$e(a.nodes,a.edges,N,w):null,[N,w,a]);if(D.useLayoutEffect(()=>{if(!a)return;const e={};for(const p of a.nodes){const b=h.current.get(p.id);b&&(e[p.id]=b.offsetHeight)}M(p=>{const b=Object.keys(p),_=Object.keys(e);return b.length===_.length&&_.every(k=>p[k]===e[k])?p:e});const y={};for(const[p,b]of x.current)y[p]=b.offsetHeight;E(p=>{const b=Object.keys(p),_=Object.keys(y);return b.length===_.length&&_.every(k=>p[k]===y[k])?p:y})},[a]),!a||!c)return null;const u=`walkthrough-arrow-${l.replace(/[^a-zA-Z0-9_-]/g,"")||"default"}`,f=O??n,j=f?null:v??G,I=c.edges.some(e=>e.key===j)?j:null,S=c.edges.find(e=>e.key===I),A=f?c.edges.filter(e=>e.from===f||e.to===f):[],U=f?new Set(A.map(e=>e.key)):null,F=f?new Set([f,...A.flatMap(e=>[e.from,e.to])]):S?new Set([S.from,S.to]):null,K=new Map(a.sections.filter(e=>e.nodeId&&e.anchor).map(e=>[e.nodeId,e.anchor])),L=a.nodes.filter(e=>e.anchor??K.get(e.id)),R=L.findIndex(e=>e.id===n),V=e=>{if(L.length===0)return;const y=R<0?e<0?L.length-1:0:Math.min(L.length-1,Math.max(0,R+e)),p=L[y],b=p.anchor??K.get(p.id);b&&(m(p.id),Y(null),i(b))};return s.jsxs("section",{className:"mb-2 px-0 py-0",children:[s.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[s.jsx("span",{className:"flex h-7 w-7 shrink-0 items-center justify-center rounded-md bg-primary/12 text-primary",children:s.jsx(me,{size:14})}),s.jsxs("div",{className:"min-w-0 flex-1",children:[s.jsx("div",{className:"whitespace-normal break-words text-[12px] font-semibold leading-snug text-foreground",children:a.title}),a.summary&&s.jsx("div",{className:"mt-0.5 text-[10px] leading-snug text-muted-foreground",children:a.summary})]}),s.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[o&&L.length>0&&s.jsxs(s.Fragment,{children:[s.jsx("button",{type:"button",onClick:()=>V(-1),disabled:R===0,className:"inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition hover:bg-surface-2 hover:text-foreground active:scale-95 disabled:pointer-events-none disabled:opacity-30",title:"Previous change","aria-label":"Previous change",children:s.jsx(he,{size:15})}),s.jsxs("span",{className:"min-w-8 text-center text-[10px] tabular-nums text-muted-foreground",children:[R<0?"—":R+1,"/",L.length]}),s.jsx("button",{type:"button",onClick:()=>V(1),disabled:R===L.length-1,className:"inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition hover:bg-surface-2 hover:text-foreground active:scale-95 disabled:pointer-events-none disabled:opacity-30",title:"Next change","aria-label":"Next change",children:s.jsx(le,{size:15})})]}),r&&s.jsx("button",{type:"button",onClick:r,className:"inline-flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition hover:bg-surface-2 hover:text-foreground active:scale-95",title:o?"Exit full-screen DAG review":"Review from DAG in full screen","aria-label":o?"Exit full-screen DAG review":"Review from DAG in full screen",children:o?s.jsx(ge,{size:15}):s.jsx(ue,{size:15})})]})]}),a.highlights.length>0&&s.jsx("div",{className:"mt-2 grid gap-1.5",children:a.highlights.slice(0,4).map((e,y)=>s.jsxs("div",{className:"rounded-md bg-surface-2 px-2 py-1.5",children:[s.jsxs("div",{className:"flex min-w-0 items-center gap-1.5",children:[e.tag&&s.jsx("span",{className:"shrink-0 rounded bg-surface-elevated px-1.5 py-0.5 text-[9px] font-semibold text-primary",children:e.tag}),s.jsx("span",{className:"min-w-0 flex-1 whitespace-normal break-words text-[11px] font-semibold leading-snug text-foreground",children:e.what})]}),s.jsx("div",{className:"mt-0.5 text-[10px] leading-snug text-muted-foreground",children:e.effect})]},`${e.what}-${y}`))}),a.nodes.length>0&&s.jsxs("div",{className:"mt-2",children:[s.jsxs("div",{className:"mb-1 flex items-center justify-between gap-2 text-[10px] text-muted-foreground",children:[s.jsxs("div",{className:"flex items-center gap-1.5 font-semibold uppercase tracking-[0.12em]",children:[s.jsx(xe,{size:11}),"DAG"]}),a.edges.some(e=>e.label?.trim())&&s.jsx("span",{className:"normal-case tracking-normal",children:g("diffViewer.focusPathHint")})]}),s.jsx("div",{className:"overflow-x-auto rounded-md border border-border/15 bg-surface-2 p-1.5",onWheel:e=>e.stopPropagation(),children:s.jsxs("div",{className:"relative",style:{width:c.width,height:c.height},children:[s.jsxs("svg",{className:"absolute inset-0",width:c.width,height:c.height,"aria-hidden":"true",children:[s.jsx("defs",{children:z.map((e,y)=>s.jsx("marker",{id:`${u}-${y}`,viewBox:"0 0 10 10",refX:"8.5",refY:"5",markerWidth:"5",markerHeight:"5",orient:"auto",markerUnits:"strokeWidth",children:s.jsx("path",{d:"M0,0 L10,5 L0,10 Z",fill:e})},e))}),c.edges.map(e=>{const y=_e(e),p=te(e.index),b=I===e.key||!!U?.has(e.key),_=!!((I||f)&&!b);return s.jsxs("g",{className:"transition-opacity duration-150",style:{opacity:_?.3:1},children:[s.jsx("path",{className:"pointer-events-none",d:y,fill:"none",stroke:"var(--surface-2)",strokeWidth:b?7:5,strokeLinecap:"round"}),s.jsx("path",{className:"pointer-events-none transition-[stroke-width,opacity] duration-150",d:y,fill:"none",stroke:p,strokeWidth:b?3:1.8,strokeLinecap:"round",markerEnd:`url(#${u}-${e.index%z.length})`}),s.jsx("path",{"data-dag-edge":e.key,d:y,fill:"none",stroke:"transparent",strokeWidth:"14",className:"cursor-pointer",onPointerEnter:()=>$(e.key),onPointerLeave:()=>$(k=>k===e.key?null:k),onClick:()=>{m(null),Y(k=>k===e.key?null:e.key)}}),s.jsx("circle",{className:"pointer-events-none",cx:e.fromNode.x+H+8,cy:e.fromY,r:b?4:3,fill:p,stroke:"var(--surface-2)",strokeWidth:"2"}),s.jsx("circle",{className:"pointer-events-none",cx:e.toNode.x-8,cy:e.toY,r:b?4:3,fill:p,stroke:"var(--surface-2)",strokeWidth:"2"})]},e.key)})]}),c.edges.map(e=>{const y=e.label?.trim();if(!y)return null;const{x:p,y:b,maxWidth:_}=De(e),k=te(e.index),Z=I===e.key||!!U?.has(e.key),ae=!!((I||f)&&!Z);return s.jsxs("button",{ref:P=>{P?x.current.set(e.key,P):x.current.delete(e.key)},type:"button","data-dag-edge-label":e.key,className:"absolute -translate-x-1/2 -translate-y-1/2 whitespace-normal break-words rounded-md border bg-surface-elevated px-1.5 py-1 text-center text-[9px] leading-[11px] shadow-sm transition-[opacity,box-shadow,transform] duration-150 [overflow-wrap:anywhere] hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/60",style:{left:p,top:b,maxWidth:_,width:"max-content",borderColor:k,color:k,opacity:ae?.38:1,boxShadow:Z?`0 0 0 2px ${k}, 0 6px 18px rgb(0 0 0 / 0.24)`:void 0},title:`${e.fromNode.index+1} ${e.fromNode.node.title} → ${e.toNode.index+1} ${e.toNode.node.title}${e.desc?`
|
|
2
|
-
${e.desc}`:""}`,"aria-pressed":G===e.key,onPointerEnter:()=>$(e.key),onPointerLeave:()=>$(P=>P===e.key?null:P),onClick:()=>{m(null),Y(P=>P===e.key?null:e.key)},children:[s.jsxs("span",{className:"block font-bold tabular-nums",children:[e.fromNode.index+1," → ",e.toNode.index+1]}),s.jsx("span",{className:"block text-muted-foreground",children:y})]},`${e.key}-label`)}),c.nodes.map(({node:e,index:y,x:p,y:b,height:_})=>s.jsxs(Q,{elementRef:k=>{k?h.current.set(e.id,k):h.current.delete(e.id)},anchor:e.anchor??K.get(e.id),onActivate:()=>{m(e.id),Y(null)},onNavigate:i,className:`absolute overflow-hidden rounded-lg border bg-surface/95 px-2.5 py-2 text-foreground shadow-[0_10px_24px_rgba(0,0,0,0.18)] transition-[opacity,border-color,box-shadow] duration-150 ${F?.has(e.id)?"border-primary/60 shadow-[0_0_0_1px_rgb(var(--primary-rgb)/0.28),0_10px_24px_rgba(0,0,0,0.22)]":F?"border-border/15 opacity-40":"border-border/25"}`,style:{left:p,top:b,width:H,minHeight:_},children:[s.jsx("span",{className:"absolute inset-0",onPointerEnter:()=>W(e.id),onPointerLeave:()=>W(k=>k===e.id?null:k)}),s.jsx("span",{className:`pointer-events-none absolute bottom-2 left-0 top-2 w-[3px] rounded-r-full ${ke(e.kind)}`}),s.jsxs("div",{className:"pointer-events-none relative flex min-w-0 items-center gap-1.5",children:[s.jsx("span",{className:"flex h-4 w-4 shrink-0 items-center justify-center rounded-full bg-primary/15 text-[9px] font-bold text-primary",children:y+1}),s.jsx("span",{className:"min-w-0 flex-1 whitespace-normal break-words text-[11px] font-semibold leading-snug text-foreground",children:e.title}),e.anchor&&s.jsx(de,{size:11,className:"shrink-0 opacity-70"})]}),e.kind&&s.jsx("div",{className:"pointer-events-none relative mt-0.5 truncate text-[9px] font-semibold uppercase tracking-[0.08em] text-muted-foreground/80",children:e.kind}),s.jsx("div",{className:"pointer-events-none relative mt-0.5 whitespace-normal break-words text-[10px] leading-snug text-muted-foreground",children:e.business})]},e.id))]})})]}),(a.risks.length>0||a.checks.length>0)&&s.jsxs("div",{className:"mt-2 grid gap-1.5",children:[a.risks.slice(0,3).map((e,y)=>s.jsxs(Q,{anchor:e.anchor,onNavigate:i,className:"flex w-full items-start gap-1.5 rounded-md border border-[rgb(var(--warning-rgb)_/_0.25)] bg-[rgb(var(--warning-rgb)_/_0.10)] px-2 py-1.5 text-[10px] text-muted-foreground",children:[s.jsx(fe,{size:12,className:"mt-0.5 shrink-0 text-[color:var(--warning)]"}),s.jsx("span",{className:"min-w-0 whitespace-normal break-words leading-snug",children:e.title})]},`${e.title}-${y}`)),a.checks.slice(0,3).map((e,y)=>s.jsxs("div",{className:"flex items-start gap-1.5 rounded-md bg-surface-2 px-2 py-1.5 text-[10px] text-muted-foreground",children:[s.jsx(pe,{size:12,className:"mt-0.5 shrink-0 text-primary"}),s.jsx("span",{className:"min-w-0 whitespace-normal break-words leading-snug",children:e})]},`${e}-${y}`))]})]})}export{Ce as C,ge as M};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{e5 as B,cj as K,bd as U,bG as Y,dN as q,cc as e,x as F,b$ as k,R as C,S as H}from"./app-stNRNTO-.js";import{b as s}from"./dnd-BCFAPC0L.js";import{m as a,c as J,k as Q,P as X,W as Z,C as ee,o as te,e as se}from"./App-CqLXOAnv.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./link-D-fkBp5k.js";import"./AndroidMirrorView-D9CMPmet.js";import"./v4-EwEgHOG0.js";import"./RecordingSaveDialog-1YvzwTzo.js";import"./use-gesture-react.esm-DYpdiE_k.js";import"./gestureArbiter-DszagC-d.js";import"./arrow-up-DE9Z7GTI.js";import"./unplug-CLBg6VOD.js";import"./swiper-DJjq1TYT.js";import"./loader-circle-DZn9iP0u.js";import"./clipboardText-B0NK9NMn.js";import"./GitLoadingSkeleton-ieGTuTuO.js";import"./clipboard-BGpbRBdi.js";import"./triangle-alert-LpKfIn7N.js";import"./sun-BFxiDkET.js";import"./maximize-2-dFjMEqgh.js";import"./git-compare-C7n2uha2.js";import"./arrow-down-DaWRHIlh.js";function Se({groupId:n,activeSessionId:u,onOpenSidebar:w,leftSidebarVisible:S=!1,onToggleRightSidebar:x,rightSidebarOpen:p=!1,defaultSessionMode:E}){const b=s.useRef(null);s.useEffect(()=>{b.current?.focus()},[]);const[i,h]=s.useState(null),[R,P]=s.useState([]),[l,d]=s.useState(null),[g,D]=s.useState(null),[f,G]=s.useState(null),[z,T]=s.useState(null),r=B(),[L,j]=s.useState(!1);s.useEffect(()=>{if(r==="ready"){j(!1);return}const t=setTimeout(()=>j(!0),1e3);return()=>clearTimeout(t)},[r]);const V=a(t=>t.view),W=a(t=>t.drafts),y=a(t=>t.setDraft),[A,M]=s.useState(n),c=s.useCallback(async()=>{try{const t=await K();h(t),d(null)}catch(t){d(t instanceof Error?t.message:"协作组加载失败")}},[]);s.useEffect(()=>{let t=!1;U().then(o=>{t||P(o)}).catch(()=>{}),Y().then(o=>{if(t)return;const O=o.collaborationPanels?.[J()]?.drafts;for(const[v,_]of Object.entries(O??{}))a.getState().drafts[v]||y(v,_)}).catch(()=>{});const $=q(o=>{t||(h(o),d(null))}),I=Q(()=>{navigator.onLine!==!1&&c()},1e4,[H,"pageshow"]);return()=>{t=!0,$(),I()}},[c]);const m=i?.groups.find(t=>t.id===n),N=async t=>{await se(t),a.getState().terminal()};return e.jsxs("section",{"aria-label":"协作主工作区",className:"absolute inset-0 flex min-h-0 min-w-0 flex-col bg-[var(--chrome-bg)] text-foreground",children:[e.jsxs("header",{"data-termdock-window-header":"true",className:"flex min-h-14 shrink-0 items-center gap-1 border-b border-border/15 px-2 sm:min-h-16 sm:gap-3 sm:px-6",children:[!S&&e.jsx("button",{type:"button","aria-label":"打开会话侧栏",className:"inline-flex min-h-11 min-w-11 items-center justify-center rounded-lg text-muted-foreground hover:bg-surface-2",onClick:w,children:e.jsx(X,{size:17})}),e.jsx(Z,{size:18,className:"hidden shrink-0 text-primary sm:block"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("h2",{ref:b,tabIndex:-1,className:"truncate text-base font-semibold outline-none",children:m?.name??"协作工作区"}),e.jsx("p",{className:"text-[11px] text-muted-foreground",children:m?`${m.sessionIds.length} 位成员`:"正在连接工作组"})]}),x&&e.jsx("button",{type:"button","aria-label":"文件侧栏",title:"文件侧栏","aria-pressed":p,className:`inline-flex min-h-11 min-w-11 items-center justify-center rounded-lg ${p?"bg-surface-2 text-primary":"text-muted-foreground hover:bg-surface-2"}`,onClick:x,children:e.jsx(F,{size:17})})]}),e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col px-4 py-2 sm:px-6",children:[(L||k(l))&&e.jsxs("div",{role:"status",className:"mb-2 flex shrink-0 items-center gap-2 text-xs text-muted-foreground",children:[e.jsx(C,{size:13,className:r==="offline"?"":"animate-spin"}),e.jsx("span",{children:r==="offline"?"网络已断开,联网后自动恢复":"正在恢复连接,当前结果和草稿已保留"})]}),(g||l&&r==="ready"&&!k(l))&&e.jsxs("div",{role:"alert",className:"mb-3 flex shrink-0 items-center gap-2 rounded-lg bg-destructive/10 p-3 text-xs text-destructive",children:[e.jsx("span",{className:"flex-1",children:g||l}),e.jsx("button",{type:"button","aria-label":"重新加载协作组",className:"min-h-11 px-3",onClick:()=>{c()},children:e.jsx(C,{size:14})})]}),f&&e.jsx("p",{role:"status",className:"mb-3 shrink-0 text-xs text-primary",children:f}),i?m?e.jsx(ee,{fullWorkspace:!0,initialView:V,active:!0,notice:f,groups:i.groups,sessions:i.sessions,agents:R,sessionsState:"loaded",selectedGroupId:A,setSelectedGroupId:M,initialGroupId:n,activeSessionId:u,initialDrafts:W,onDraftChange:y,docked:!1,inputKeySuffix:"main",floatingVisible:!0,floating:!1,onOpenSession:N,onOpenTaskSession:N,onDockMessages:u?async()=>{await te(n,u)}:void 0,defaultSessionMode:E,busy:z,setBusy:T,setError:D,setNotice:G,refresh:c}):e.jsx("p",{className:"py-10 text-center text-sm text-muted-foreground",children:"协作组已移除或暂不可用。任务记录仍保留在原服务中。"}):e.jsx("p",{role:"status",className:"py-10 text-center text-sm text-muted-foreground",children:"正在加载协作工作区…"})]})]})}export{Se as default};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{cc as t}from"./app-stNRNTO-.js";import{C as s}from"./ChangeWalkthroughPanel-BYb27GTC.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-Dea8wJF3.js";import"./sparkles-B64EiCUM.js";import"./chevron-left-ZgHOf4aC.js";import"./maximize-2-dFjMEqgh.js";import"./triangle-alert-LpKfIn7N.js";const e="/tmp/termdock-dag-playground",i={version:1,id:"dag-playground",repoRoot:e,workspaceRoot:e,title:"改动解释升级为可点击导览",summary:"这是一页免登录 playground,用真实 ChangeWalkthroughPanel 调 DAG 的节点、边、label 和密度。",generatedBy:"dag-playground",injectedAt:Date.now(),highlights:[{what:"先看总览,再看链路",effect:"读者不用先进入 diff,也能理解整批改动目的。",tag:"理解"},{what:"多条链路直接画出来",effect:"分支、汇合、验证路径不再靠 next 文本猜。",tag:"链路"},{what:"点击节点跳回证据",effect:"导览和真实 diff 之间形成闭环。",tag:"导航"}],nodes:[{id:"export",title:"导出 section 级 diff",kind:"source",business:"CLI 把 hunk 拆成多个连续改动 section,并为每个 section 生成稳定 fingerprint。这里故意写长一点,用来验证 DAG 节点是否会按照真实文本高度撑开,而不是被固定高度裁掉。",anchor:{repoRoot:e,filePath:"src/server/cli.ts",hunkIndex:0,sectionIndex:0}},{id:"prompt",title:"约束 AI 输出",kind:"process",business:"提示词要求先写总览,再逐 section 生成解释。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/RightSidebar.tsx",hunkIndex:0}},{id:"schema",title:"校验导览结构",kind:"process",business:"检查节点、边和锚点字段是否完整。",anchor:{repoRoot:e,filePath:"src/server/utils/changeAuditStore.ts",hunkIndex:0}},{id:"fallback",title:"补齐兼容字段",kind:"process",business:"旧版结果缺字段时生成稳定回退值。",anchor:{repoRoot:e,filePath:"src/server/utils/changeAuditStore.ts",hunkIndex:1}},{id:"store",title:"保存整批导览结构",kind:"process",business:"服务端把 walkthrough 作为一等数据持久化。",anchor:{repoRoot:e,filePath:"src/server/utils/changeAuditStore.ts",hunkIndex:0}},{id:"api",title:"前端读取总览",kind:"api",business:"一次请求拿到 records 和 walkthroughs。",anchor:{repoRoot:e,filePath:"src/lib/terminal/api.ts",hunkIndex:0}},{id:"panel",title:"渲染 DAG 导览",kind:"ui",business:"用节点和边表达实现链路,节点可点击。节点内容可能是一两句话,也可能包含较长的业务解释;布局需要先测量 DOM 高度,再重新计算每一行节点的 y 坐标和连线端点。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/ChangeWalkthroughPanel.tsx",hunkIndex:0}},{id:"jump",title:"跳回真实 diff",kind:"ui",business:"点击节点后定位到文件、hunk 或 section。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/RightSidebar.tsx",hunkIndex:1}},{id:"section",title:"贴近改动展示解释",kind:"ui",business:"section 解释跟在对应 diff 块后面,而不是堆在 hunk 顶部。这个节点也故意写得更长,用来观察右侧分支和下方验证节点的连线是否会避让变高后的卡片。",anchor:{repoRoot:e,filePath:"src/lib/components/sidebar/DiffViewer.tsx",hunkIndex:0,sectionIndex:1}},{id:"verify",title:"验证导出和注入",kind:"test",business:"跑 lint、install、health、资源检查和注入自测。"}],edges:[{from:"export",to:"prompt",label:"提供输入",desc:"sectionFingerprint 让 AI 可以稳定引用。"},{from:"export",to:"schema",label:"结构校验",desc:"先确认输入可以稳定落库。"},{from:"export",to:"fallback",label:"兼容旧数据",desc:"为历史记录补齐必要字段。"},{from:"prompt",to:"store",label:"注入",desc:"AI payload 写回本地服务。"},{from:"schema",to:"store",label:"通过后保存",desc:"合法结构进入存储层。"},{from:"fallback",to:"store",label:"归一化后保存",desc:"兼容数据与新数据走同一链路。"},{from:"store",to:"api",label:"读取",desc:"浏览器从服务端拿到导览。"},{from:"api",to:"panel",label:"渲染",desc:"结构化数据变成导览图。"},{from:"panel",to:"jump",label:"点击",desc:"节点驱动 diff 定位。"},{from:"jump",to:"section",label:"定位",desc:"落到对应 section 解释。"},{from:"export",to:"verify",label:"验证",desc:"导出结构要覆盖 tracked/untracked。"},{from:"section",to:"verify",label:"回归",desc:"确认展示位置和交互。"}],sections:[],risks:[{title:"边和 label 不能遮住节点主体。"},{title:"窄侧栏下横向滚动要可控。"}],checks:["在 360px、560px、900px 宽度下截图检查。","确认边的箭头、label 背板和节点层级清楚。","确认节点点击区域和 hover 状态可感知。"]};function m(){return t.jsx("div",{className:"min-h-screen bg-background p-5 text-foreground","data-dag-playground":!0,children:t.jsxs("div",{className:"mx-auto max-w-[72rem]",children:[t.jsxs("div",{className:"mb-3",children:[t.jsx("h1",{className:"text-sm font-semibold",children:"DAG Playground"}),t.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Auth-free playground for tuning the real ChangeWalkthroughPanel."})]}),t.jsxs("div",{className:"grid gap-4 lg:grid-cols-[360px_minmax(0,1fr)]",children:[t.jsx("div",{className:"min-w-0",children:t.jsx(s,{walkthroughs:[i],repoRoot:e,onNavigate:o=>{console.info("[DagPlayground] navigate",o)}})}),t.jsx("div",{className:"min-w-0",children:t.jsx(s,{walkthroughs:[i],repoRoot:e,onNavigate:o=>{console.info("[DagPlayground] navigate",o)}})})]})]})})}export{m as DagPlayground};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{aR as ut,cc as r,p as dt,g as ft,f as ht,e6 as mt,en as pt,b7 as xt,c as gt,em as vt,cC as bt,a0 as yt}from"./app-stNRNTO-.js";import{b as o,r as Ye}from"./dnd-BCFAPC0L.js";import{h as Je}from"./gestureArbiter-DszagC-d.js";import{S as wt,a as Ke}from"./swiper-DJjq1TYT.js";import{S as Ze}from"./sparkles-B64EiCUM.js";import{L as kt}from"./list-tree-DKTcSR9r.js";import{D as Rt,i as jt}from"./DiffViewer-Cg3GhKcU.js";const Nt=[["path",{d:"M3 5h.01",key:"18ugdj"}],["path",{d:"M3 12h.01",key:"nlz23k"}],["path",{d:"M3 19h.01",key:"noohij"}],["path",{d:"M8 5h13",key:"1pao27"}],["path",{d:"M8 12h13",key:"1za7za"}],["path",{d:"M8 19h13",key:"m83p4d"}]],Tt=ut("list",Nt);function et({selected:t,depth:n=0,title:c,leading:m,children:h,trailing:i,role:y,tabIndex:x,ariaExpanded:g,onClick:f,onKeyDown:b,onPointerDown:z,onPointerUp:M,onPointerCancel:F,dataAttributes:B}){return r.jsxs("div",{role:y,tabIndex:x,"aria-expanded":g,title:c,onClick:f,onKeyDown:b,onPointerDown:z,onPointerUp:M,onPointerCancel:F,...B,className:`group flex w-full cursor-pointer items-center gap-1 rounded px-2 py-1.5 text-left text-[13px] transition active:scale-[0.99] ${t?"bg-surface-elevated text-foreground":"text-muted-foreground hover:bg-surface-2 hover:text-foreground"}`,style:{paddingLeft:`${n*14+8}px`},children:[r.jsx("span",{className:"flex min-w-[14px] shrink-0 items-center justify-center text-muted-foreground/80",children:m}),r.jsx("span",{className:"min-w-0 flex-1",children:h}),i]})}function tt(t){return t.path.replace(/^\/+/,"")}function Mt(t){if(t.displayName!==void 0||t.displayDir!==void 0)return{name:t.displayName||t.path,dir:t.displayDir||""};const n=t.path.split("/").filter(Boolean);return{name:n.pop()||t.path,dir:n.join("/")}}function rt(t,n){const c=new Map,m=(i,y,x,g)=>{const f=i.get(y);if(f)return f;const b={path:x,name:y,childCount:0,directories:[],files:[]};return i.set(y,b),g?.directories.push(b),b};for(const i of t){const y=n(i).split("/").filter(Boolean);if(y.length<=1)continue;let x=c,g=null,f="";for(const b of y.slice(0,-1)){f=f?`${f}/${b}`:b;const z=m(x,b,f,g);g=z,x=new Map(z.directories.map(M=>[M.name,M]))}g?.files.push(i)}const h=i=>{const y=i.directories.map(h).sort((g,f)=>g.name.localeCompare(f.name)),x=i.files.sort((g,f)=>g.path.localeCompare(f.path));return{...i,directories:y,files:x,childCount:y.reduce((g,f)=>g+f.childCount,0)+x.length}};return Array.from(c.values()).map(h).sort((i,y)=>i.name.localeCompare(y.name))}function Pe(t,n,c=0){const m=n.selectedKey===t.key||n.selectedKey===t.path||n.selectedKey===t.absolutePath,h=Mt(t);return r.jsx(et,{selected:m,role:"button",tabIndex:0,title:t.title??t.absolutePath??t.path,onClick:()=>{Je()||n.onSelectFile(t)},onKeyDown:i=>{i.key!=="Enter"&&i.key!==" "||(i.preventDefault(),n.onSelectFile(t))},leading:n.renderLeading(t),depth:c,trailing:n.renderTrailing?.(t),dataAttributes:{"data-diff-selection-path":t.key,"data-diff-file-path":t.path,"data-diff-absolute-path":t.absolutePath??"","data-diff-status":t.status},children:r.jsxs("span",{className:"select-text","data-sidebar-selectable":!0,children:[r.jsx("span",{className:`block truncate leading-snug ${m?"font-medium":""}`,children:h.name}),n.mode!=="tree"&&h.dir&&r.jsx("span",{className:"block truncate text-[10px] text-muted-foreground/75",children:h.dir}),n.renderSubtitle?.(t)]})},t.key)}function nt(t,n,c,m,h){let i=t;const y=[t.name];for(;i.files.length===0&&i.directories.length===1;)i=i.directories[0],y.push(i.name);const x=y.join("/"),g=`${n}:${i.path}`,f=c.collapsedDirectoryKeys.has(g);return r.jsxs("div",{className:"space-y-px",children:[r.jsx(et,{role:"button",tabIndex:0,onClick:()=>{Je()||c.onToggleDirectory(g)},onKeyDown:b=>{b.key!=="Enter"&&b.key!==" "||(b.preventDefault(),c.onToggleDirectory(g))},ariaExpanded:!f,depth:m,title:i.path,leading:f?r.jsx(ft,{size:13}):r.jsx(ht,{size:13}),trailing:r.jsxs("span",{className:"flex shrink-0 items-center gap-1",children:[r.jsx("span",{className:"shrink-0 rounded bg-surface-2 px-1.5 py-0.5 text-[10px] text-muted-foreground/60 transition group-hover:text-muted-foreground",children:i.childCount}),c.renderDirectoryTrailing?.(i.path,h)]}),children:r.jsxs("span",{className:"flex min-w-0 items-center gap-1",children:[r.jsx(dt,{size:14,className:"shrink-0 text-[color:var(--folder)]"}),r.jsx("span",{className:"min-w-0 flex-1 truncate leading-snug select-text","data-sidebar-selectable":!0,children:x})]})}),!f&&r.jsxs("div",{className:"space-y-px",children:[i.directories.map(b=>nt(b,n,c,m+1,h)),i.files.length>0&&r.jsx("div",{className:"space-y-px",children:i.files.map(b=>Pe(b,c,m+1))})]})]},g)}function St(t,n){const c=n.getFileTreePath??tt,m=t.files.filter(i=>c(i).split("/").filter(Boolean).length<=1),h=rt(t.files,c);return r.jsxs("div",{className:"space-y-px",children:[h.map(i=>nt(i,t.key,n,0,t)),m.length>0&&r.jsx("div",{className:"space-y-px",children:m.map(i=>Pe(i,n))})]})}function Dt(t,n=tt){const c=[],m=i=>{for(const y of i.directories)m(y);c.push(...i.files)};for(const i of rt(t,n))m(i);const h=new Set(c.map(i=>i.key));return c.push(...t.filter(i=>!h.has(i.key))),c}function It(t){return r.jsx("div",{className:t.mode==="tree"?"space-y-px pt-1":"space-y-2",children:t.groups.map(n=>{const c=!!n.header,m=!!n.collapsed;return r.jsxs("section",{className:c?"overflow-hidden rounded-lg border border-border/15 bg-surface/60":"",children:[n.header,!m&&r.jsx("div",{className:t.mode==="tree"?c?"space-y-px bg-surface/60 p-1":"space-y-px":c?"space-y-px bg-surface/60 p-1.5":"space-y-px",children:t.mode==="tree"?St(n,t):n.files.map(h=>Pe(h,t))})]},n.key)})})}const Ce="termdock:diff-review:list-width:v1",Et=120,He=320,qe=220,Ct=560;function Ft(t){return typeof t=="number"&&Number.isFinite(t)}function Ue(t,n){const c=Math.max(qe,n-360),m=Math.min(Ct,c);return Math.min(m,Math.max(qe,t))}function _t(){return bt(Ce,Ft)??He}function At({list:t,detail:n,mobile:c,mobileListHeader:m,mobileDetailHeader:h,desktopListHeader:i,backLabel:y,onMobileSlideChange:x,externalSwiperRef:g,desktopLayout:f="split",onDetailScroll:b,desktopSidePanel:z,desktopListClassName:M,detailOwnsScroll:F=!1}){const{t:B}=mt(),P=o.useRef(null),q=o.useRef(null),I=o.useRef(null),[U,$]=o.useState(_t);o.useEffect(()=>{if(c||f!=="split")return;const p=q.current;p&&$(j=>Ue(j,p.clientWidth))},[f,c]);const ae=o.useCallback(p=>{c||f!=="split"||(p.preventDefault(),I.current={startX:p.clientX,startWidth:U,pointerId:p.pointerId},p.currentTarget.setPointerCapture(p.pointerId))},[f,U,c]),ue=o.useCallback(p=>{const j=I.current;if(!j||j.pointerId!==p.pointerId)return;const S=q.current?.clientWidth??window.innerWidth,_=Ue(j.startWidth+p.clientX-j.startX,S);$(_),pt(Ce,_,Et)},[]),ie=o.useCallback(p=>{const j=I.current;if(!(!j||j.pointerId!==p.pointerId)){I.current=null,xt(Ce);try{p.currentTarget.releasePointerCapture(p.pointerId)}catch{}}},[]);if(c){const p=()=>{const v=P.current;v&&v.slideTo(1)},j=()=>{const v=P.current;v&&v.slideTo(0)},S=typeof t=="function"?t({slideToDetail:p}):t,_=typeof h=="function"?h({slideToList:j,slideToDetail:p}):h;return r.jsxs(wt,{className:"h-full min-h-0 w-full",slidesPerView:1,resistanceRatio:.45,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:".swiper-no-swiping",allowTouchMove:!1,touchAngle:75,touchStartPreventDefault:!1,onSwiper:v=>{P.current=v,g&&(g.current=v)},onSlideChange:v=>{x?.(v.activeIndex)},children:[r.jsx(Ke,{className:"h-full min-h-0",children:r.jsxs("div",{className:"flex h-full min-h-0 flex-col overflow-hidden",children:[m&&r.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 py-2",children:m}),r.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto overscroll-contain",children:S})]})}),r.jsx(Ke,{className:"h-full min-h-0",children:r.jsxs("div",{className:"flex h-full min-h-0 flex-col overflow-hidden bg-surface",children:[r.jsx("div",{className:"shrink-0 border-b border-border/15 px-3 py-2",children:_??r.jsxs("button",{type:"button",onClick:j,className:"inline-flex h-9 shrink-0 items-center gap-1.5 rounded-full bg-surface-2 px-3 text-xs font-semibold text-muted-foreground transition hover:bg-surface-elevated hover:text-foreground active:scale-95",children:[r.jsx(gt,{size:14}),y]})}),r.jsx("div",{className:F?"min-h-0 flex-1 overflow-hidden":"termdock-diff-stream-scroller min-h-0 flex-1 overflow-y-auto overscroll-contain",onScroll:F?void 0:v=>b?.(v.currentTarget),children:n})]})})]})}const W=typeof t=="function"?t({slideToDetail:()=>{}}):t;return f==="stacked"?F?r.jsxs("div",{className:"termdock-native-select min-h-0 flex-1 overflow-hidden px-2 pb-[calc(env(safe-area-inset-bottom)+4.5rem)]",children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W,r.jsx("div",{className:"mt-3 h-[calc(100%-3rem)] min-h-0 overflow-hidden rounded-xl border border-border/15 bg-surface",children:n})]}):r.jsxs("div",{className:"termdock-native-select termdock-diff-stream-scroller min-h-0 flex-1 overflow-y-auto overscroll-contain px-2 pb-[calc(env(safe-area-inset-bottom)+4.5rem)]",onScroll:p=>b?.(p.currentTarget),children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W,r.jsx("div",{className:"mt-3 overflow-hidden rounded-xl border border-border/15 bg-surface",children:n})]}):r.jsxs("div",{ref:q,className:"flex h-full min-h-0 overflow-hidden",children:[z,r.jsxs("div",{className:M??"shrink-0 overflow-y-auto overscroll-contain border-r border-border/15 bg-surface",style:{width:U},children:[i&&r.jsx("div",{className:"sticky top-0 z-10 border-b border-border/15 bg-surface px-2 py-2",children:i}),W]}),r.jsx("div",{role:"separator","aria-orientation":"vertical","aria-label":B("diffViewer.resizeNavigation"),title:B("diffViewer.resizeNavigation"),className:"group relative z-10 w-2 shrink-0 cursor-col-resize touch-none border-r border-border/15 bg-surface",onPointerDown:ae,onPointerMove:ue,onPointerUp:ie,onPointerCancel:ie,onDoubleClick:()=>{$(He),vt(Ce,He)},children:r.jsx("span",{className:"pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 bg-border/30 transition group-hover:bg-primary/60"})}),r.jsx("div",{className:F?"min-w-0 flex-1 overflow-hidden":"termdock-diff-stream-scroller min-w-0 flex-1 overflow-y-auto overscroll-contain",onScroll:F?void 0:p=>b?.(p.currentTarget),children:n})]})}function zt({mode:t,onModeChange:n,showAi:c=!1}){return r.jsxs("div",{className:"inline-flex h-7 shrink-0 overflow-hidden rounded-md bg-surface-2 p-0.5",children:[r.jsx("button",{type:"button",onClick:()=>n("list"),"aria-pressed":t==="list",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="list"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(Tt,{size:13})}),r.jsx("button",{type:"button",onClick:()=>n("tree"),"aria-pressed":t==="tree",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="tree"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(kt,{size:13})}),c&&r.jsx("button",{type:"button",onClick:()=>n("ai"),"aria-pressed":t==="ai",className:`inline-flex h-6 w-7 items-center justify-center rounded-md transition active:scale-95 ${t==="ai"?"bg-surface-elevated text-foreground shadow-sm":"text-muted-foreground hover:text-foreground"}`,children:r.jsx(Ze,{size:13})})]})}function Lt({groups:t,mode:n,onModeChange:c,selectedKey:m,collapsedDirectoryKeys:h,onToggleDirectory:i,onSelectFile:y,renderLeading:x,renderTrailing:g,renderDirectoryTrailing:f,renderSubtitle:b,detail:z,mobile:M,backLabel:F,compact:B=!1,emptyContent:P,listPrefix:q,aiContent:I,listContainerClassName:U="px-2 py-2",detailContainerClassName:$="termdock-native-select termdock-diff-stream-scroller min-h-0",renderListHeader:ae,renderMobileDetailHeader:ue,externalSwiperRef:ie,onMobileSlideChange:W,slideToDetailOnMobile:p=!0,desktopLayout:j="split",onDetailScroll:S,desktopSidePanel:_,desktopListClassName:v,detailOwnsScroll:ee}){const[V,O]=o.useState(!1);o.useEffect(()=>{if(!V)return;const A=L=>{L.key==="Escape"&&O(!1)};return document.addEventListener("keydown",A),()=>document.removeEventListener("keydown",A)},[V]);const de=r.jsx(zt,{mode:n,onModeChange:c,showAi:!!I}),pe=n==="tree"?"tree":"list",xe=ae?ae(de):r.jsx("div",{className:"flex justify-end",children:de}),ge=t.some(A=>A.files.length>0),te=r.jsx(At,{mobile:V?!1:M,backLabel:F,externalSwiperRef:ie,onMobileSlideChange:W,desktopLayout:V?"split":j,onDetailScroll:S,desktopSidePanel:_,desktopListClassName:v,detailOwnsScroll:ee,mobileListHeader:M?xe:void 0,desktopListHeader:M?void 0:xe,mobileDetailHeader:ue,list:({slideToDetail:A})=>r.jsx("div",{className:U,children:n==="ai"?typeof I=="function"?I({slideToDetail:A,fullscreen:V,toggleFullscreen:()=>O(L=>!L)}):I??P:r.jsxs(r.Fragment,{children:[q,ge?r.jsx(It,{groups:t,selectedKey:m,mode:pe,mobile:M,compact:B,collapsedDirectoryKeys:h,onToggleDirectory:i,onSelectFile:L=>{y(L),M&&p&&window.requestAnimationFrame(A)},renderLeading:x,renderTrailing:g,renderDirectoryTrailing:f,renderSubtitle:b}):P]})}),detail:r.jsx("div",{className:ee?"h-full min-h-0":$,children:z})});return!V||typeof document>"u"?te:Ye.createPortal(r.jsxs("div",{className:"fixed inset-0 z-modal-panel flex min-h-0 flex-col bg-surface text-foreground",children:[r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b border-border/15 bg-[var(--chrome-bg)] px-3",children:[r.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[r.jsx(Ze,{size:15,className:"shrink-0 text-primary"}),r.jsx("span",{className:"truncate text-[12px] font-semibold",children:"DAG Review"}),r.jsx("span",{className:"hidden text-[10px] text-muted-foreground sm:inline",children:"Select a step to inspect its exact change"})]}),r.jsx("button",{type:"button",onClick:()=>O(!1),className:"inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground transition hover:bg-surface-2 hover:text-foreground active:scale-95",title:"Exit full-screen DAG review (Esc)","aria-label":"Exit full-screen DAG review",children:r.jsx(yt,{size:16})})]}),r.jsx("div",{className:"min-h-0 flex-1",children:te})]}),document.body)}const Ht=96,ze=44;function Pt({file:t,repoRoot:n,selectionPath:c,displayName:m,displayDir:h,selected:i,activePane:y,visible:x,reusableContent:g=!1,estimatedHeight:f,lightweight:b=!1,wrap:z,viewType:M,inlineMode:F,diffOptions:B,reloadKey:P=0,auditRecords:q,diffOverride:I,oldSourceRef:U,preparedDiff:$,renderBadge:ae,onInsertDiffReference:ue,onHunkGitAction:ie,previewReverts:W,onReferenceCopied:p,insertedReferenceKey:j,copiedReferenceKey:S,onClearAuditRecord:_,onContentReady:v,onHeightChange:ee}){const V=o.useRef(null),O=o.useRef(null),de=o.useRef(null),[pe,xe]=o.useState(null),ge=o.useRef(64),te=o.useRef(f??104),A=o.useRef(null),L=o.useRef(null),Q=o.useRef(!1),le=o.useRef(!1),E=o.useRef(null),[re,je]=o.useState(!1),[Ne,De]=o.useState(!1),ve=t.absolutePath||(n?`${n}/${t.path}`:t.path),N=o.useCallback(()=>{le.current||(le.current=!0,De(!0),v?.(c))},[v,c]);o.useLayoutEffect(()=>{if(!(I!==void 0&&x&&le.current))return Q.current=!1,le.current=!1,A.current=null,L.current=null,E.current!==null&&(window.clearTimeout(E.current),E.current=null),je(!1),De(!1),()=>{E.current!==null&&(window.clearTimeout(E.current),E.current=null)}},[I,$,P,g,x]),o.useLayoutEffect(()=>{const X=A.current;!re||X===null||Math.abs((f??104)-X)>=1||(A.current=null,N())},[N,f,re]),o.useLayoutEffect(()=>{if(!x||!re)return;const X=de.current;if(!X)return;const be=()=>{if(!Q.current)return;const Y=X.firstElementChild;if(!Y)return;const K=Math.ceil(Math.max(Y.getBoundingClientRect().height,Y.scrollHeight,64)),he=ge.current;if(K>0&&he!==K&&(ge.current=K,xe(K)),!V.current)return;const C=O.current?.getBoundingClientRect().height??ze,se=Math.ceil(C+K+1);se<=0||L.current===se||(L.current=se,E.current!==null&&window.clearTimeout(E.current),E.current=window.setTimeout(()=>{if(E.current=null,!Q.current)return;const H=L.current;if(H===null)return;const D=te.current;if(le.current){te.current=H,Math.abs(D-H)>=1&&ee?.(c,D,H),v?.(c);return}if(A.current=H,Math.abs(D-H)<1||!ee){te.current=H,A.current=null,N();return}te.current=H,ee(c,D,H)},Ht))};if(be(),typeof ResizeObserver>"u")return;const fe=new ResizeObserver(be);return fe.observe(X),X.firstElementChild&&fe.observe(X.firstElementChild),O.current&&fe.observe(O.current),()=>fe.disconnect()},[N,v,ee,c,re,x,z,M,F]);const G=x&&!Ne;return r.jsxs("div",{ref:V,"data-diff-stream-item":c,"data-diff-selection-path":c,"data-diff-file-path":t.path,"data-diff-absolute-path":ve,className:`scroll-mt-3 border-b border-border/15 last:border-b-0 ${G||!x?"overflow-hidden":""} ${i?"bg-surface-elevated/35":""}`,style:x?G?{height:f??104}:void 0:{height:f??104},children:[r.jsxs("div",{ref:O,"data-diff-stream-header":!0,className:`sticky top-0 z-10 flex min-w-0 items-center gap-2 border-b border-border/15 px-3 py-2 ${i?"bg-surface-elevated":"bg-surface"}`,children:[ae(t.status),r.jsxs("div",{className:"min-w-0 flex-1",title:ve,children:[r.jsx("div",{className:"truncate text-xs font-semibold text-foreground",children:m}),h&&r.jsx("div",{className:"truncate text-[10px] text-muted-foreground",children:h})]})]}),r.jsxs("div",{ref:de,className:"relative","data-diff-stream-body":!0,style:x?{minHeight:Ne?64:Math.max(pe??64,(f??104)-ze)}:{height:Math.max(pe??64,(f??104)-ze)},children:[x?r.jsx(Rt,{active:y,repoRoot:n,filePath:t.path,referenceFilePath:ve,changedFile:t,wrap:z,viewType:M,inlineMode:F,diffOptions:B,reloadKey:P,embedded:!0,lightweight:b,auditRecords:q,diffOverride:I,oldSourceRef:U,preparedDiff:$,onClearAuditRecord:_,onContentReady:()=>{if(g){Q.current=!0,je(!0),N();return}Q.current||(Q.current=!0,je(!0))},onInsertDiffReference:ue,onHunkGitAction:ie,previewReverts:W,onReferenceCopied:p,insertedReferenceKey:j,copiedReferenceKey:S}):r.jsx("div",{className:"flex h-full min-h-16 items-center justify-center bg-surface px-3 py-4 text-center text-xs text-muted-foreground",children:t.path}),x&&re&&!Ne&&r.jsx("div",{"data-diff-measuring-overlay":!0,className:"absolute inset-0 z-20 bg-surface"})]})]})}const Oe=8,Le=1600,Qe=104,Wt=1e3,Re=new Map;function Bt(t,n){for(Re.delete(t),Re.set(t,n);Re.size>Wt;){const c=Re.keys().next().value;if(c===void 0)break;Re.delete(c)}}function $t(t,n){return!!(t&&t.diffOverride===n.diffOverride&&t.oldSourceRef===n.oldSourceRef&&t.reloadKey===n.reloadKey&&t.wrap===n.wrap&&t.viewType===n.viewType&&t.inlineMode===n.inlineMode&&t.algorithm===n.algorithm&&t.whitespace===n.whitespace&&t.context===n.context)}const Vt={added:{label:"A",className:"text-[color:var(--diff-insert-strong)]",title:"Added"},modified:{label:"M",className:"text-[color:var(--diff-hunk-accent)]",title:"Modified"},deleted:{label:"D",className:"text-[color:var(--diff-delete-strong)]",title:"Deleted"},renamed:{label:"R",className:"text-muted-foreground",title:"Renamed"},copied:{label:"C",className:"text-[color:var(--diff-insert-strong)]",title:"Copied"},untracked:{label:"U",className:"text-[color:var(--diff-insert-strong)]",title:"Untracked (new file)"},conflicted:{label:"!",className:"text-destructive",title:"Conflicted"},unknown:{label:"?",className:"text-muted-foreground",title:"Unknown"}};function er({status:t}){const n=Vt[t]??{label:"?",className:"text-muted-foreground",title:t};return r.jsx("span",{className:`w-4 shrink-0 text-center text-[10px] font-mono font-bold ${n.className}`,title:n.title,children:n.label})}function tr(t,n){return n?{key:n,nonce:t.nonce+1}:t}function rr({files:t,groups:n,selectedKey:c,onSelectFile:m,mode:h,onModeChange:i,collapsedDirectoryKeys:y,onToggleDirectory:x,renderLeading:g,renderTrailing:f,renderDirectoryTrailing:b,renderSubtitle:z,renderStreamBadge:M,onInsertDiffReference:F,onHunkGitAction:B,onReferenceCopied:P,insertedReferenceKey:q,copiedReferenceKey:I,onClearAuditRecord:U,mobile:$,backLabel:ae,compact:ue,desktopLayout:ie,wrap:W,diffViewType:p,inlineMode:j,diffOptions:S,activePane:_,reloadKey:v=0,renderListHeader:ee,renderMobileDetailHeader:V,emptyContent:O,listPrefix:de,aiContent:pe,listContainerClassName:xe,detailContainerClassName:ge,desktopSidePanel:te,desktopListClassName:A,onDetailScroll:L,initialDetailScrollTop:Q,preserveScrollOnUpdate:le=!1,scrollToKey:E,scrollToKeyNonce:re=0,externalSwiperRef:je,onMobileSlideChange:Ne,slideToDetailOnMobile:De}){const ve=o.useMemo(()=>e=>c===e.key||c===e.path||c===e.absolutePath,[c]),N=o.useMemo(()=>{const e=new Map;for(const a of t)e.set(a.key,a),a.path&&e.set(a.path,a),a.absolutePath&&e.set(a.absolutePath,a);const s=[],l=new Set;for(const a of n){const d=h==="tree"?Dt(a.files):a.files;for(const w of d){const u=e.get(w.key);!u||l.has(u.key)||(s.push(u),l.add(u.key))}}for(const a of t)l.has(a.key)||s.push(a);return s},[t,n,h]),G=o.useRef(null),X=o.useRef(null),be=o.useRef(null),fe=o.useRef(v),Y=o.useRef(0),K=o.useRef(null),he=o.useRef(new Map(Re)),ne=o.useRef({key:null,top:0}),C=o.useRef(new Set),se=o.useRef(new Map),H=o.useRef(new Map),D=o.useRef(null),We=o.useRef(()=>{}),Te=o.useRef([]),me=o.useRef(new Map),Be=o.useRef({tops:[],heights:[],bottom:0}),[Ie,st]=o.useState(()=>new Set),[ot,ct]=o.useState(0),[J,ye]=o.useState({top:0,height:0}),Me=o.useMemo(()=>N.map(e=>e.key),[N]),Ee=Me.join("");H.current=o.useMemo(()=>new Map(N.map(e=>[e.key,{diffOverride:e.diffOverride,oldSourceRef:e.oldSourceRef,reloadKey:v,wrap:W,viewType:p,inlineMode:j,algorithm:S?.algorithm,whitespace:S?.whitespace,context:S?.context}])),[N,v,W,p,j,S?.algorithm,S?.whitespace,S?.context]),Te.current=Me,me.current=o.useMemo(()=>new Map(Me.map((e,s)=>[e,s])),[Me]);const k=o.useMemo(()=>{const e=Me.map(a=>he.current.get(a)??Qe),s=new Array(e.length);for(let a=0;a<e.length;a+=1)s[a]=a===0?0:s[a-1]+e[a-1];const l=e.length>0?s[e.length-1]+e[e.length-1]:0;return{tops:s,heights:e,bottom:l}},[ot,Ee]);Be.current=k;const oe=o.useMemo(()=>E?N.find(e=>E===e.key||E===e.path||E===e.absolutePath)?.key??null:null,[N,E]),Fe=o.useMemo(()=>c?N.find(e=>c===e.key||c===e.path||c===e.absolutePath)?.key??null:null,[N,c]),Se=o.useMemo(()=>{const e=k.tops.length;if(e===0)return-1;let s=0,l=e;for(;s<l;){const a=Math.floor((s+l)/2);k.tops[a]<=J.top+1?s=a+1:l=a}return Math.min(e-1,Math.max(0,s-1))},[k.tops,J.top]),ce=o.useCallback(e=>{C.current=e,st(e)},[]),$e=o.useMemo(()=>{const e=J.top-Le,s=J.top+J.height+Le,l=new Set;let a=0,d=k.tops.length;for(;a<d;){const u=Math.floor((a+d)/2);k.tops[u]<=e?a=u+1:d=u}const w=Math.max(0,a-1);for(let u=w;u<k.tops.length;u+=1){const R=k.tops[u];if(R>s)break;R+k.heights[u]>=e&&R<=s&&l.add(u)}for(let u=Se-1;u<=Se+1;u+=1)u>=0&&u<k.tops.length&&l.add(u);for(const u of Ie){const R=me.current.get(u);R!==void 0&&l.add(R)}return Array.from(l).sort((u,R)=>u-R)},[k,J,Ie,Se]),_e=o.useCallback(()=>{if(!_||D.current)return;const e=Te.current;if(e.length===0)return;const s=ne.current.key,l=Math.min(e.length-1,(s!==null?me.current.get(s):void 0)??Math.max(0,Se)),a=u=>Math.abs((me.current.get(u)??0)-l),d=[];C.current.has(e[l])||d.push(e[l]);for(let u=1;u<=Oe;u+=1){const R=l+u,T=l-u;R<e.length&&!C.current.has(e[R])&&d.push(e[R]),T>=0&&!C.current.has(e[T])&&d.push(e[T])}const w=d[0];if(w){if(C.current.size>=Oe){const u=a(w),R=Array.from(C.current).filter(Z=>Z!==D.current).sort((Z,ke)=>a(ke)-a(Z))[0];if(!R||a(R)<=u)return;const T=new Set(C.current);T.delete(R),ce(T)}D.current=w,ce(new Set(C.current).add(w))}},[_,ce,Se]);We.current=_e;const we=o.useCallback(e=>{if(C.current.has(e))return;const s=D.current;if(s&&s!==e){const l=new Set(C.current);l.delete(s),ce(l),D.current=null}D.current=e,ce(new Set(C.current).add(e))},[ce]),Ve=o.useCallback(e=>{if(!C.current.has(e))return;const s=H.current.get(e);s&&se.current.set(e,s),D.current===e&&(D.current=null),window.requestAnimationFrame(()=>We.current())},[]),Ge=o.useCallback((e,s,l)=>{if(Math.abs(l-s)<1)return;const a=he.current.get(e);a!==void 0&&Math.abs(a-l)<1||(he.current.set(e,l),Bt(e,l),ct(d=>d+1))},[]);o.useLayoutEffect(()=>{if(fe.current!==v){fe.current=v;for(const e of N){if(e.diffOverride!==void 0)continue;const s=Kt(e.path,e.repoRoot);jt(s,e.repoRoot??void 0,S)}}},[N,S,v]),o.useLayoutEffect(()=>{const e=G.current;if(!e)return;const s=()=>{const a=Math.max(0,Math.ceil(e.clientHeight));if(a===0)return;const d=e.scrollTop;ye(w=>w.height===a&&w.top===d?w:{top:d,height:a})};if(s(),typeof ResizeObserver>"u")return;const l=new ResizeObserver(s);return l.observe(e),()=>l.disconnect()},[$]),o.useEffect(()=>{_&&Fe&&we(Fe)},[_,we,Fe]),o.useEffect(()=>{const e=new Set(Te.current);for(const s of Array.from(he.current.keys()))e.has(s)||he.current.delete(s);for(const s of Array.from(C.current))if(!e.has(s)){const l=new Set(C.current);l.delete(s),ce(l)}for(const s of Array.from(se.current.keys()))e.has(s)||se.current.delete(s);if(D.current&&!e.has(D.current)&&(D.current=null),N.length===0){D.current=null,se.current.clear(),ce(new Set);return}_e()},[N.length,Ee,_e,$e,ce]);const Xe=o.useCallback(e=>{G.current=e;const s=Y.current,l=e.scrollTop;Y.current=l;const a=d=>{const w=Be.current,u=Te.current;let R=0,T=w.tops.length;for(;R<T;){const Ae=Math.floor((R+T)/2);w.tops[Ae]<=d+1?R=Ae+1:T=Ae}const Z=Math.min(u.length-1,Math.max(0,R-1)),ke=u[Z]??null;ne.current={key:ke,top:w.tops[Z]??0},ke&&we(ke)};Math.abs(l-s)>=Le?(Ye.flushSync(()=>{ye({top:l,height:e.clientHeight})}),a(l)):K.current===null&&(K.current=window.requestAnimationFrame(()=>{K.current=null;const d=G.current;if(d){const w=d.scrollTop;ye({top:w,height:d.clientHeight}),a(w)}})),L?.(e)},[L,we]);o.useEffect(()=>()=>{K.current!==null&&window.cancelAnimationFrame(K.current)},[]),o.useLayoutEffect(()=>{const e=G.current;if(!e)return;const s=ne.current;if(s.key===null)return;const l=me.current.get(s.key);if(l===void 0)return;const a=(k.tops[l]??s.top)-s.top;if(Math.abs(a)<1)return;const d=e.scrollTop+a;Y.current=d,ye(w=>({top:d,height:w.height})),typeof e.scrollTo=="function"?e.scrollTo({top:d,behavior:"instant"}):e.scrollTop=d},[k]),o.useLayoutEffect(()=>{const e=Te.current,s=k.tops;if(e.length===0){ne.current={key:null,top:0};return}const l=Y.current,a=l+(G.current?.clientHeight??J.height),d=ne.current;if(d.key!==null){const T=me.current.get(d.key);if(T!==void 0){const Z=s[T]??0;if(Z+(k.heights[T]??Qe)>l&&Z<a){ne.current={key:d.key,top:Z};return}}}let w=0,u=s.length;for(;w<u;){const T=Math.floor((w+u)/2);s[T]<=l+1?w=T+1:u=T}const R=Math.min(s.length-1,Math.max(0,w-1));ne.current={key:e[R]??null,top:s[R]??0}}),o.useLayoutEffect(()=>{if(!oe)return;const e=X.current;if(e?.key===oe&&e.nonce===re)return;const s=me.current.get(oe);if(s===void 0)return;we(oe),ne.current={key:oe,top:k.tops[s]??0};const l=G.current;if(!l||l.clientHeight===0||J.height!==l.clientHeight)return;X.current={key:oe,nonce:re};const a=k.tops[s]??0;typeof l.scrollTo=="function"?l.scrollTo({top:a,behavior:"instant"}):l.scrollTop=a;const d=l.scrollTop;Y.current=d,ye({top:d,height:l.clientHeight})},[k,J.height,we,oe,re]),o.useLayoutEffect(()=>{if(Q===void 0||oe)return;const e=Ee;if(be.current===e||le&&be.current!==null)return;const s=G.current;if(!s)return;be.current=e;const l=Math.max(0,k.bottom-s.clientHeight),a=Math.min(Math.max(0,Q),l);typeof s.scrollTo=="function"?s.scrollTo({top:a,behavior:"instant"}):s.scrollTop=a;const d=s.scrollTop;Y.current=d,ye({top:d,height:s.clientHeight})},[k.bottom,Q,Ee,le,oe]);const at=o.useCallback((e,s)=>{const l=ve(e),a=H.current.get(e.key),d=a!==void 0&&$t(se.current.get(e.key),a);return r.jsx(Gt,{item:e,repoRoot:e.repoRoot,selectionPath:e.key,displayName:e.displayName,displayDir:e.displayDir,selected:l,activePane:_,visible:Ie.has(e.key),reusableContent:d,estimatedHeight:s,lightweight:!1,wrap:W,viewType:p,inlineMode:j,diffOptions:S,reloadKey:v,auditRecords:e.auditRecords,diffOverride:e.diffOverride,oldSourceRef:e.oldSourceRef,renderStreamBadge:M,onInsertDiffReference:e.onInsertDiffReference??F,onHunkGitAction:e.onHunkGitAction??B,previewReverts:e.previewReverts,onReferenceCopied:P,insertedReferenceKey:q,copiedReferenceKey:I,onClearAuditRecord:U,onContentReady:Ve,onHeightChange:Ge})},[_,I,S,p,Ve,Ge,j,q,ve,Ie,U,B,F,P,v,M,W]),it=r.jsx("div",{"data-diff-stream-content":!0,"data-diff-stream-canvas":!0,className:"termdock-diff-stream relative overflow-clip bg-surface will-change-transform",style:{height:Math.max(k.bottom,(k.tops.at(-1)??0)+J.height)},children:$e.map(e=>{const s=N[e];return s?r.jsx("div",{"data-diff-canvas-slot":s.key,className:"absolute inset-x-0",style:{top:k.tops[e]},children:at(s,k.heights[e])},s.key):null})}),lt=r.jsx("div",{ref:G,className:"termdock-diff-stream termdock-diff-stream-scroller h-full max-h-full min-h-0 overflow-y-auto overscroll-contain bg-surface [overflow-anchor:none]",onScroll:e=>Xe(e.currentTarget),children:it});return r.jsx(Lt,{groups:n,mode:h,onModeChange:i,selectedKey:c,collapsedDirectoryKeys:y,onToggleDirectory:x,onSelectFile:m,renderLeading:g,renderTrailing:f,renderDirectoryTrailing:b,renderSubtitle:z,detail:lt,mobile:$,backLabel:ae,compact:ue,emptyContent:O,listPrefix:de,aiContent:pe,listContainerClassName:xe,detailContainerClassName:ge,renderListHeader:ee,renderMobileDetailHeader:V,externalSwiperRef:je,onMobileSlideChange:Ne,slideToDetailOnMobile:De,desktopLayout:ie,onDetailScroll:Xe,desktopSidePanel:te,desktopListClassName:A,detailOwnsScroll:!0})}const Gt=o.memo(function({item:n,renderStreamBadge:c,...m}){return r.jsx(Pt,{...m,file:Xt(n),renderBadge:h=>c(h,n)})});function Xt(t){return{path:t.path,oldPath:t.oldPath,absolutePath:t.absolutePath,status:t.status}}function Kt(t,n){if(t)return n&&t.startsWith(`${n}/`)?t.slice(n.length+1):t}export{er as C,rr as D,Dt as f,tr as n};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{aR as s,e6 as c,cc as e}from"./app-stNRNTO-.js";const i=[["rect",{width:"20",height:"5",x:"2",y:"3",rx:"1",key:"1wp1u1"}],["path",{d:"M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8",key:"1s80jp"}],["path",{d:"M10 12h4",key:"a56b0p"}]],p=s("archive",i);const n=[["path",{d:"M20 4v7a4 4 0 0 1-4 4H4",key:"6o5b7l"}],["path",{d:"m9 10-5 5 5 5",key:"1kshq7"}]],b=s("corner-down-left",n);const l=[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]],f=s("network",l);const t=[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]],j=s("pause",t);const h=[["path",{d:"M13 21h8",key:"1jsn5i"}],["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],v=s("pen-line",h);const o=[["path",{d:"M13 21h8",key:"1jsn5i"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}],["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}]],N=s("pencil-line",o);const u=[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]],y=s("play",u);const x=[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]],w=s("search",x);const m=[["path",{d:"M10 5H3",key:"1qgfaw"}],["path",{d:"M12 19H3",key:"yhmn1j"}],["path",{d:"M14 3v4",key:"1sua03"}],["path",{d:"M16 17v4",key:"1q0r14"}],["path",{d:"M21 12h-9",key:"1o4lsq"}],["path",{d:"M21 19h-5",key:"1rlt1p"}],["path",{d:"M21 5h-7",key:"1oszz2"}],["path",{d:"M8 10v4",key:"tgpxqk"}],["path",{d:"M8 12H3",key:"a7s4jb"}]],k=s("sliders-horizontal",m);function M(){const{t:d}=c();return e.jsxs("div",{role:"status","aria-label":d("rightSidebar.loadingGitChanges"),className:"td-loading-skeleton flex h-full min-h-0 flex-col overflow-hidden bg-surface",children:[e.jsx("span",{className:"sr-only",children:d("rightSidebar.loadingGitChanges")}),e.jsxs("div",{"aria-hidden":"true",className:"shrink-0 border-b border-border/15 px-3 py-2",children:[e.jsxs("div",{className:"mb-2 flex h-5 items-center gap-1",children:[e.jsx("div",{className:"h-4 w-16 rounded bg-surface-2"}),e.jsx("div",{className:"h-4 w-7 rounded bg-surface-2"}),e.jsx("div",{className:"h-4 w-12 rounded bg-surface-2"})]}),e.jsxs("div",{className:"flex h-[15px] items-center justify-between",children:[e.jsx("div",{className:"h-2 w-14 rounded bg-surface-2"}),e.jsx("div",{className:"h-2 w-6 rounded bg-surface-2"})]}),e.jsxs("div",{className:"mt-2 flex h-7 items-center gap-1.5",children:[e.jsx("div",{className:"h-7 w-12 rounded-full bg-surface-2"}),e.jsx("div",{className:"h-7 w-16 rounded-full bg-surface-2"}),e.jsx("div",{className:"h-3 w-24 max-w-[30%] rounded bg-surface-2"}),e.jsx("div",{className:"ml-auto h-4 w-4 rounded-full bg-surface-2"})]})]}),e.jsxs("div",{"aria-hidden":"true",className:"overflow-hidden px-3 py-2",children:[e.jsxs("div",{className:"flex h-8 items-center gap-2",children:[e.jsx("div",{className:"h-3 w-3 rounded-sm bg-surface-2"}),e.jsx("div",{className:"h-2 w-32 max-w-[55%] rounded bg-surface-2"})]}),["w-3/5","w-2/5","w-1/2","w-1/3"].map((a,r)=>e.jsxs("div",{className:"flex h-9 items-center gap-2 pl-5",style:{opacity:1-r*.15},children:[e.jsx("div",{className:"h-3 w-3 shrink-0 rounded-sm bg-surface-2"}),e.jsx("div",{className:`h-2 rounded bg-surface-2 ${a}`})]},a))]})]})}function _({slow:d=!1}){const{t:a}=c();return e.jsxs("div",{role:"status","aria-label":a("rightSidebar.loadingGitChanges"),className:"td-loading-skeleton relative h-full min-h-0 overflow-hidden bg-surface px-3",children:[e.jsx("span",{className:"sr-only",children:a("rightSidebar.loadingGitChanges")}),e.jsxs("div",{"aria-hidden":"true",children:[e.jsxs("div",{className:"flex h-[76px] items-center gap-2 border-b border-border/40 px-2",children:[e.jsx("div",{className:"h-6 w-6 rounded-md bg-surface-2"}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"h-3 w-16 rounded bg-surface-2"}),e.jsx("div",{className:"h-2 w-12 rounded bg-surface-2"})]})]}),e.jsxs("div",{className:"flex h-11 items-center gap-2 px-1 pt-3",children:[e.jsx("div",{className:"h-6 w-6 rounded-md bg-surface-2"}),e.jsx("div",{className:"h-3 w-16 rounded bg-surface-2"}),e.jsx("div",{className:"ml-auto h-4 w-12 rounded-full bg-surface-2"})]}),[!1,!0].map(r=>e.jsxs("div",{className:"border-b border-border/40 px-1 py-4",children:[e.jsxs("div",{className:"mb-2 flex h-8 items-center justify-between",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"h-3 w-14 rounded bg-surface-2"}),r&&e.jsx("div",{className:"h-2 w-28 rounded bg-surface-2"})]}),e.jsx("div",{className:"h-8 w-12 rounded-md bg-surface-2"})]}),e.jsx("div",{className:"h-10 rounded-md bg-surface-2"})]},String(r))),e.jsx("div",{className:"flex h-[69px] items-center border-b border-border/40 px-2",children:e.jsx("div",{className:"h-3 w-16 rounded bg-surface-2"})}),e.jsxs("div",{className:"space-y-2 px-1 py-4",children:[e.jsxs("div",{className:"flex h-8 items-center justify-between",children:[e.jsx("div",{className:"h-3 w-14 rounded bg-surface-2"}),e.jsx("div",{className:"h-8 w-28 rounded-md bg-surface-2"})]}),e.jsx("div",{className:"h-7 rounded-md bg-surface-2"}),e.jsx("div",{className:"h-10 rounded-md bg-surface-2"})]})]}),d&&e.jsx("div",{className:"absolute inset-x-3 bottom-3 rounded-md bg-surface-elevated px-3 py-2 text-xs text-muted-foreground",children:a("rightSidebar.loadingGitChangesSlow")})]})}export{p as A,M as C,_ as G,f as N,j as P,w as S,b as a,v as b,N as c,y as d,k as e};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/MarkdownPreview-b_bwDNcY.js","assets/app-stNRNTO-.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-Dea8wJF3.js","assets/index-bfj9dYEg.css","assets/use-gesture-react.esm-DYpdiE_k.js","assets/swiper-DJjq1TYT.js","assets/swiper-C2J0D0kV.css","assets/syntaxHighlight-Bgt0lmWx.js","assets/list-tree-DKTcSR9r.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{Y as Ce,cc as t,C as Se,j as Te,a0 as me,a1 as Ke,e3 as He,e2 as Je,b4 as Be,bL as pe,dl as Ae,aU as Y,bb as X,di as Qe,ee as Ge,v as Ye,R as Xe,Q as Le,cG as Ze,ac as We}from"./app-stNRNTO-.js";import{b as s}from"./dnd-BCFAPC0L.js";import{B as et,r as tt,T as rt,p as le,b as nt,a as Re,w as st,P as De}from"./clipboardText-B0NK9NMn.js";import{Q as ge}from"./quote-QwQvV6RF.js";import{L as ze}from"./loader-circle-DZn9iP0u.js";import{A as at}from"./arrow-down-DaWRHIlh.js";import{A as it}from"./arrow-up-DE9Z7GTI.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";function ot(i){const a=[];for(const r of i){const c=a[a.length-1];r.role==="assistant"&&c?.role==="assistant"?c.messages.push(r):a.push({id:r.id,role:r.role,messages:[r]})}return a}function ct(i){const a=i.slice().reverse().find(r=>r.role==="user");return!a||["failed","expired"].includes(a.status)?!1:!i.some(r=>r.role==="assistant"&&r.replyTo===a.id&&!["ack","progress"].includes(r.responseKind||""))}function lt(i){return{pending:"已发送",delivered:"已发送",stored:"已发送",failed:"发送失败",expired:"发送失败"}[i]||"待确认"}const ue=new Set;function ut(i){const[a,r]=s.useState(!1);return s.useLayoutEffect(()=>{if(!i){r(!1);return}const c=Symbol("chat-viewport");ue.add(c);const m=document.documentElement,v=()=>{const j=Number.parseFloat(m.style.getPropertyValue("--kb-height"))>=80;m.dataset.termdockChatViewport="true",m.dataset.termdockChatKeyboard=String(j),r(p=>p===j?p:j)};return v(),document.addEventListener(Ce,v),document.addEventListener("termdock:viewport-keyboard-change",v),()=>{document.removeEventListener(Ce,v),document.removeEventListener("termdock:viewport-keyboard-change",v),ue.delete(c),ue.size||(delete m.dataset.termdockChatViewport,delete m.dataset.termdockChatKeyboard)}},[i]),a}function de(i,a){return a?`> ${a.author.replace(/[\r\n]/g," ")} · ${a.time}
|
|
3
|
-
${a.text.replace(/\r\n?/g,`
|
|
4
|
-
`).split(`
|
|
5
|
-
`).map(r=>`> ${r}`).join(`
|
|
6
|
-
`)}
|
|
7
|
-
|
|
8
|
-
${i.trim()}`:i.trim()}function xe(i){const a=i.split(`
|
|
9
|
-
`),r=a[0].match(/^> (.+) · (\d{2}:\d{2})$/);if(!r)return{text:i,reference:null};let c=1;for(;c<a.length&&a[c].startsWith(">");)c++;return c<2||a[c]!==""?{text:i,reference:null}:{text:a.slice(c+1).join(`
|
|
10
|
-
`),reference:{author:r[1],time:r[2],text:a.slice(1,c).map(m=>m.replace(/^> ?/,"")).join(`
|
|
11
|
-
`)}}}const dt=s.lazy(()=>Ke(()=>import("./MarkdownPreview-b_bwDNcY.js").then(i=>i.b),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10])).then(i=>({default:i.MarkdownPreview}))),he=i=>new Date(i).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hourCycle:"h23"}),ft=new Set(["amp","claude","codex","copilot","cursor","droid","gemini","goose","grok","kimi","opencode"]);function $e({name:i,slug:a}){const r=a&&ft.has(a)?`url(/icons/agents/${a}.svg) center / contain no-repeat`:void 0;return t.jsxs("span",{className:"inline-flex items-center gap-2 font-medium text-foreground/75",children:[r?t.jsx("span",{"aria-hidden":"true",className:"h-4 w-4 shrink-0 bg-current",style:{mask:r,WebkitMask:r}}):t.jsx(et,{size:15,"aria-hidden":"true"}),t.jsx("span",{children:i})]})}function Ie({reference:i,onRemove:a}){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(ge,{size:12}),t.jsxs("span",{className:"min-w-0 flex-1 truncate",children:[i.author," · ",i.time]}),a&&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:r=>r.preventDefault(),onClick:a,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:i.text,children:i.text})]})}function Pe({content:i}){const a=xe(i);return t.jsxs(t.Fragment,{children:[a.reference&&t.jsx(Ie,{reference:a.reference}),t.jsx("p",{className:"whitespace-pre-wrap break-words text-[15px] leading-7 sm:text-base",children:a.text})]})}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 mt({messages:i,agentName:a,agentSlug:r,canWrite:c,copied:m,onCopy:v,onReference:j}){return t.jsx("div",{className:"space-y-6 sm:space-y-7",children:ot(i).map(p=>{const A=p.messages[p.messages.length-1],b=p.role==="user",N=p.messages.map(n=>n.content).join(`
|
|
12
|
-
|
|
13
|
-
`),R=n=>c&&t.jsx("button",{type:"button","aria-label":"引用消息",title:"引用这条消息",className:`${fe} shrink-0`,onPointerDown:u=>u.preventDefault(),onClick:()=>j(n),children:t.jsx(ge,{size:13})});return t.jsxs("article",{"data-chat-turn":p.role,"data-chat-message":b?p.id:void 0,className:b?"ml-auto w-fit max-w-[88%] sm:max-w-[85%]":"w-full",children:[b?t.jsx("div",{className:"rounded-2xl bg-surface-2 px-4 py-3",children:t.jsx(Pe,{content:N})}):t.jsx("div",{className:"session-chat-markdown min-w-0 space-y-4 break-words",children:p.messages.map((n,u)=>t.jsxs("div",{"data-chat-message":n.id,children:[t.jsxs("div",{"data-chat-continuation":u>0?"":void 0,className:`mb-2 flex min-h-8 items-center gap-3 text-[11px] leading-4 text-muted-foreground/60 ${u>0?"pt-1":""}`,children:[u===0&&t.jsx($e,{name:a,slug:r}),u>0?t.jsx("span",{"aria-hidden":"true",className:"h-px min-w-0 flex-1 bg-border/60"}):t.jsx("span",{className:"flex-1"}),t.jsx("time",{className:"shrink-0 tabular-nums",dateTime:new Date(n.createdAt).toISOString(),title:new Date(n.createdAt).toLocaleString(),children:he(n.createdAt)})]}),t.jsx(s.Suspense,{fallback:t.jsx("p",{className:"whitespace-pre-wrap text-[15px] leading-7",children:n.content}),children:t.jsx(dt,{embedded:!0,referenceLines:!1,content:n.content,filePath:null,rootPath:null,lineRange:null,onLineRangeClick:()=>{},scrollTop:0,outlineOpen:!1,lightboxOpen:!1})}),t.jsxs("div",{"data-chat-message-actions":!0,className:"mt-1 flex items-center gap-2",children:[R(n),t.jsxs("button",{type:"button",className:fe,"aria-label":"复制回复",title:"复制",onClick:()=>v(n.content,n.id),children:[m===n.id?t.jsx(Se,{size:13}):t.jsx(Te,{size:13}),m===n.id&&t.jsx("span",{className:"text-[10px]",children:"已复制"})]})]})]},n.id))}),b&&t.jsxs("div",{"data-chat-message-actions":!0,className:"mt-1 flex items-center justify-end gap-2 text-[10px] text-muted-foreground",children:[t.jsx("span",{children:lt(A.status)}),t.jsx("time",{dateTime:new Date(A.createdAt).toISOString(),title:new Date(A.createdAt).toLocaleString(),className:"opacity-60",children:he(A.createdAt)}),R(A),t.jsxs("button",{type:"button",className:fe,"aria-label":"复制消息",title:"复制",onClick:()=>v(N,p.id),children:[m===p.id?t.jsx(Se,{size:13}):t.jsx(Te,{size:13}),m===p.id&&t.jsx("span",{className:"text-[10px]",children:"已复制"})]})]})]},p.id)})})}function pt(i){const a=s.useRef(i);a.current=i;const[r,c]=s.useState(null),m=s.useRef(null),v=s.useRef(!0),j=s.useCallback(()=>{m.current?.controller.abort();const n=a.current,u=Ae(),h=Y(),y=X(),x=document.activeElement,C=new AbortController,f={controller:C,current:()=>v.current&&!C.signal.aborted&&m.current===f&&a.current.active&&a.current.canWrite&&a.current.sessionId===n.sessionId&&Ae()===u&&Y()===h&&!h?.closed&&X()===y,focus:()=>document.activeElement===x||document.activeElement===n.input.current||document.activeElement===document.body};return m.current=f,f},[]);s.useEffect(()=>{const n=()=>{m.current&&!m.current.current()&&(m.current.controller.abort(),m.current=null,c(null))};n();const u=()=>{m.current?.controller.abort(),m.current=null,c(null)};return window.addEventListener("termdock:secure-state",n),window.addEventListener("auth:unauthorized",u),document.addEventListener("focusin",n),()=>{window.removeEventListener("termdock:secure-state",n),window.removeEventListener("auth:unauthorized",u),document.removeEventListener("focusin",n)}},[i.active,i.canWrite,i.sessionId]),s.useEffect(()=>(v.current=!0,()=>{v.current=!1,m.current?.controller.abort()}),[]);const p=s.useCallback(async(n,u,h=[])=>{if(n.current()){c({stage:"uploading",percent:u.length?0:void 0,files:u,paths:h}),a.current.error("");try{if(u.length&&!a.current.directory&&!a.current.sessionAttachments)throw new Error("附件上传暂不可用,请重试");const y=f=>{n.current()&&c({stage:"uploading",percent:Math.round(f),files:u,paths:h})},x=u.length?a.current.sessionAttachments?await He(a.current.sessionId,u,n.controller.signal,y,n.current):await Je(a.current.directory,u,n.controller.signal,y,n.current):{files:[]};if(!n.current())return;if(x.files.length!==u.length||x.files.some(f=>!f.path))throw new Error("部分文件未上传成功,请重试");const C=[...h,...x.files.map(f=>f.path)];if(!C.length)throw new Error("没有可添加的文件");a.current.insert(`${C.map(Be).join(" ")} `,n.focus()),c(null),m.current=null}catch(y){if(!n.current())return;c({stage:"failed",files:u,paths:h}),a.current.error(y instanceof Error?y.message:"文件上传失败,请重试")}}},[]),A=s.useCallback(n=>{!a.current.active||!a.current.canWrite||!n.length||p(j(),n)},[j,p]),b=s.useCallback(async n=>{if(!a.current.active||!a.current.canWrite)return;const u=j();c({stage:"reading"}),a.current.error("");const h=x=>{if(!u.current())throw new DOMException("Clipboard target changed","AbortError");return x},y=x=>{u.current()&&(a.current.insert(x,u.focus()),c(null),m.current=null)};try{const x=pe();let C;if(x?.readClipboardFiles)try{const{files:f,paths:z}=h(await tt());if(f.length||z.length)return await p(u,f,z)}catch(f){if(!u.current()||f instanceof rt)throw f;C=f}if(n?.files.length){const f=n.files.length===1&&n.files[0].type.startsWith("image/")?[le(n.files[0])]:n.files;return await p(u,f)}if(n?.text){y(n.text);return}if(!x?.readClipboardImage&&typeof navigator.clipboard?.read=="function"){const f=h(await navigator.clipboard.read()),z=h(await nt({read:async()=>f}));if(z.length)return await p(u,z);const H=h(await Re({read:async()=>f}));if(H)return await p(u,[le(H)]);for(const P of f)if(P.types.includes("text/plain")){y(h(await h(await P.getType("text/plain")).text()));return}}else{const f=h(await Re(navigator.clipboard));if(f)return await p(u,[le(f)])}if(navigator.clipboard?.readText){const f=h(await navigator.clipboard.readText());if(f){y(f);return}}throw C||new Error("剪贴板没有可读取的内容,请使用系统粘贴或选择文件")}catch(x){u.current()&&(c(null),a.current.error(x instanceof Error?x.message:"粘贴失败,请重试"))}},[j,p]);return{transfer:r,addFiles:A,paste:b,cancel:()=>{m.current?.controller.abort(),m.current=null,c(n=>n?{...n,stage:"cancelled"}:null)},retry:()=>{(r?.files?.length||r?.paths?.length)&&p(j(),r.files||[],r.paths)},dismiss:()=>c(null),busy:r?.stage==="reading"||r?.stage==="uploading"}}const G="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 kt({sessionId:i,name:a="当前会话",canWrite:r=!0,active:c=!0,terminalLink:m=!1,onKeyboardChange:v,onTerminal:j}){const p=ut(c),A=s.useRef(v);A.current=v,s.useEffect(()=>{A.current?.(c&&p)},[c,p]);const b=`termdock:chat:${Qe()?.targetPeerId||location.origin}:${i}`,[N,R]=s.useState(()=>{try{return sessionStorage.getItem(`${b}:draft`)||""}catch{return""}}),[n,u]=s.useState(()=>{try{const e=JSON.parse(sessionStorage.getItem(`${b}:reference`)||"null");return e&&typeof e.author=="string"&&typeof e.time=="string"&&typeof e.text=="string"?e:null}catch{return null}}),[h,y]=s.useState(null),[x,C]=s.useState("助手"),[f,z]=s.useState(),[H,P]=s.useState(!1),[k,J]=s.useState(()=>{try{return JSON.parse(sessionStorage.getItem(`${b}:pending`)||"null")}catch{return null}}),[O,be]=s.useState([]),[Oe,ye]=s.useState(!0),[F,Fe]=s.useState(),[Z,S]=s.useState(""),[W,we]=s.useState(!1),[Me,ee]=s.useState(!1),[qe,Ue]=s.useState(""),M=s.useRef(null),D=s.useRef(null),$=s.useRef(!0),te=s.useRef(!1),q=s.useRef(0),re=s.useRef(""),ve=s.useRef(0),ne=s.useRef(null),se=s.useRef(null),je=s.useRef(null),U=s.useRef(0),ae=s.useRef({draft:N,reference:n});ae.current={draft:N,reference:n};const V=s.useRef({active:c,canWrite:r,sessionId:i});V.current={active:c,canWrite:r,sessionId:i};const ie=Ge(),I=s.useCallback((e,l=!0)=>{const o=D.current,d=o?.selectionStart,g=o?.selectionEnd,L=V.current,E=Y(),T=X();R(K=>{const Q=Math.min(d??K.length,K.length),_e=Math.min(g??Q,K.length),Ee=K.slice(0,Q)+e+K.slice(_e);return requestAnimationFrame(()=>{o?.isConnected&&o.value===Ee&&V.current.active&&V.current.canWrite&&V.current.sessionId===L.sessionId&&Y()===E&&X()===T&&(l&&o.focus({preventScroll:!0}),o.setSelectionRange(Q+e.length,Q+e.length))}),Ee})},[]),w=pt({sessionId:i,active:c,canWrite:r,input:D,insert:I,error:S,sessionAttachments:!!ie,directory:ie?ie.directories?.find(e=>e.access==="write")?.path:"/tmp"}),Ne=s.useCallback((e,l)=>{if(!c||!r)return;const o=l||xe(e.content).text;if(new TextEncoder().encode(o).byteLength>8e3){S("这条消息较长,请选中需要引用的内容。");return}y(null),u({author:e.role==="user"?"用户":x,time:he(e.createdAt),text:o}),S(""),window.getSelection()?.removeAllRanges(),D.current?.focus({preventScroll:!0})},[c,r,x]);s.useEffect(()=>{if(!c||!r){y(null);return}const e=()=>{const l=window.getSelection(),o=l?.toString().trim(),d=T=>T instanceof Element?T:T?.parentElement,g=d(l?.anchorNode)?.closest("[data-chat-message]"),L=d(l?.focusNode)?.closest("[data-chat-message]"),E=o&&g===L&&g&&se.current?.contains(g)?{id:g.dataset.chatMessage,text:o}:null;E&&y(T=>T?.id===E.id&&T?.text===E.text?T:E)};return document.addEventListener("selectionchange",e),()=>document.removeEventListener("selectionchange",e)},[c,r]),s.useEffect(()=>{try{n?sessionStorage.setItem(`${b}:reference`,JSON.stringify(n)):sessionStorage.removeItem(`${b}:reference`)}catch{}},[b,n]);const oe=`/api/terminal/${encodeURIComponent(i)}/chat`,B=s.useCallback(async e=>{const l=++ve.current,o=await fetch(oe,{signal:e}),d=await o.json();if(e?.aborted||l!==ve.current)return;if(!o.ok)throw new Error("暂时无法读取对话,请重试");Fe(d.agentAvailable===!0),C(typeof d.agent?.displayName=="string"&&d.agent.displayName.trim()?d.agent.displayName:"助手"),z(typeof d.agent?.slug=="string"?d.agent.slug:void 0);const g=d.messages;if(!Array.isArray(g))throw new Error("暂时无法读取对话,请重试");const L=JSON.stringify(g);re.current!==L&&(re.current&&!$.current&&ee(!0),re.current=L,be(g)),J(E=>E&&g.some(T=>T.requestId===E.requestId)?null:E),ye(!1),S("")},[oe]);s.useEffect(()=>{if(!c)return;const e=new AbortController;let l=!1;const o=async()=>{if(!(l||document.visibilityState==="hidden")){l=!0;try{await B(e.signal)}catch{e.signal.aborted||(S("连接暂时中断,正在重试…"),ye(!1))}finally{l=!1}}};o();const d=setInterval(()=>{o()},2500);return window.addEventListener("online",o),document.addEventListener("visibilitychange",o),()=>{e.abort(),clearInterval(d),window.removeEventListener("online",o),document.removeEventListener("visibilitychange",o)}},[c,B]),s.useEffect(()=>()=>{q.current++},[]),s.useEffect(()=>{try{sessionStorage.setItem(`${b}:draft`,N)}catch{}},[b,N]),s.useEffect(()=>{try{k?sessionStorage.setItem(`${b}:pending`,JSON.stringify(k)):sessionStorage.removeItem(`${b}:pending`)}catch{}},[b,k]);const _=s.useCallback(()=>{const e=M.current;e&&(e.scrollTop=e.scrollHeight,$.current=!0,ee(!1))},[]);s.useEffect(()=>{if(!ne.current||typeof ResizeObserver>"u")return;const e=new ResizeObserver(()=>{$.current&&_()});return e.observe(ne.current),M.current&&e.observe(M.current),()=>e.disconnect()},[_]),s.useLayoutEffect(()=>{$.current&&_()},[O,k,_]),s.useLayoutEffect(()=>{const e=D.current;e&&(e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,176)}px`)},[N,c]),s.useEffect(()=>{const e=D.current;if(!e||typeof ResizeObserver>"u")return;let l=0;const o=new ResizeObserver(()=>{e.clientWidth!==l&&(l=e.clientWidth,e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,176)}px`)});return o.observe(e),()=>o.disconnect()},[]);const ce=async e=>{if(te.current||w.busy||!r||F!==!0)return;const l=e||{content:de(N,n),requestId:crypto.randomUUID(),createdAt:Date.now()};if(!l.content||new TextEncoder().encode(l.content).byteLength>32e3)return;te.current=!0,we(!0),S(""),J(l),$.current=!0;const o=q.current;try{const d=await fetch(oe,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:l.content,requestId:l.requestId}),signal:AbortSignal.timeout(2e4)}),g=await d.json();if(!d.ok)throw new Error("发送失败,请重试。");if(o!==q.current)return;de(ae.current.draft,ae.current.reference)===l.content&&(R(""),u(null)),J(null),be(L=>L.some(E=>E.id===g.id)?L:[...L,{...l,id:g.id,role:"user",status:g.status}]);try{await B()}catch{S("消息已发送,暂时无法获取回复。")}}catch(d){o===q.current&&S(d instanceof Error&&d.name==="TimeoutError"?"发送状态待确认,请重试。":"发送失败,请重试。")}finally{te.current=!1,o===q.current&&we(!1)}};s.useEffect(()=>{const e=l=>{const o=l.detail;c&&r&&o.sessionId===i&&I(o.text)};return window.addEventListener("termdock:chat-insert",e),()=>window.removeEventListener("termdock:chat-insert",e)},[i,c,r,I]),s.useEffect(()=>{if(!c)return;const e=l=>{const o=l.detail;if(!o?.text||o.sessionId!==i)return;l.stopImmediatePropagation();const d=r&&(!o.ownedPaste||!!We(o,i));d&&I(o.text,o.focus!==!1),o.nonce&&window.dispatchEvent(new CustomEvent("termdock-insert-reference-ack",{detail:{nonce:o.nonce,ok:d}}))};return window.addEventListener("termdock-insert-reference",e,!0),()=>window.removeEventListener("termdock-insert-reference",e,!0)},[i,c,r,I]);const Ve=F===!0&&!k&&ct(O),ke=new TextEncoder().encode(de(N,n)).byteLength>32e3;return t.jsxs("section",{ref:se,"data-session-chat":!0,onDragEnter:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),U.current++,r&&P(!0))},onDragOver:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),e.dataTransfer.dropEffect=r?"copy":"none")},onDragLeave:e=>{e.dataTransfer.types.includes("Files")&&(U.current=Math.max(0,U.current-1),U.current||P(!1))},onDrop:e=>{let l;try{l=Ze(e.dataTransfer)}catch(d){e.preventDefault(),S(d instanceof Error?d.message:"文件引用无效");return}if(l&&r){e.preventDefault(),e.stopPropagation(),I(l);return}const o=Array.from(e.dataTransfer.files);if(o.length)e.preventDefault(),e.stopPropagation(),P(!1),U.current=0,w.addFiles(o);else if(r&&e.target.closest("[data-chat-composer]")){const d=e.dataTransfer.getData("text/plain");d&&(e.preventDefault(),I(d))}},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":`${a}对话`,children:[t.jsx("div",{ref:M,className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-4 [overflow-anchor:none] sm:px-8",onScroll:()=>{const e=M.current;$.current=e.scrollHeight-e.scrollTop-e.clientHeight<96,$.current&&ee(!1)},children:t.jsxs("div",{ref:ne,className:"mx-auto flex min-h-full w-full max-w-screen-2xl flex-col py-5 sm:py-8",children:[Oe&&!O.length?t.jsxs("div",{role:"status",className:"space-y-4 py-8",children:[t.jsx("p",{className:"text-sm text-muted-foreground",children:"正在读取对话…"}),[0,1,2].map(e=>t.jsx("div",{className:"h-3 animate-pulse rounded bg-surface-2",style:{width:`${75-e*15}%`}},e))]}):!O.length&&!k?t.jsxs("div",{className:"my-auto py-6",children:[t.jsx(Ye,{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:"直接描述你的目标,或从一个问题开始。"}),!p&&t.jsx("div",{className:"mt-5 flex flex-wrap gap-2",children:["帮我梳理一下当前工作","请解释一下刚才的结果","我们继续下一步"].map(e=>t.jsx("button",{type:"button",className:`${G} border border-border/60 text-left text-xs text-muted-foreground`,disabled:!r,onClick:()=>{R(e),D.current?.focus({preventScroll:!0})},children:e},e))})]}):t.jsx(mt,{messages:O,agentName:x,agentSlug:f,canWrite:r,copied:qe,onReference:e=>Ne(e),onCopy:(e,l)=>{st(e,()=>se.current?.isConnected===!0).then(o=>{o?Ue(l):S("复制失败,请选择正文复制")})}}),k&&t.jsxs("div",{className:"mt-5 ml-auto w-fit max-w-[88%] rounded-2xl bg-surface-2 px-4 py-3",children:[t.jsx(Pe,{content:k.content}),t.jsxs("div",{className:"mt-1 flex flex-wrap items-center justify-end gap-2 text-[11px] text-muted-foreground",children:[t.jsx("span",{children:W?"发送中…":"待重试"}),!W&&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=xe(k.content);R(e.text),u(e.reference),J(null),S(""),D.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:!r||F!==!0,onClick:()=>{ce(k)},children:[t.jsx(Xe,{size:12}),"重试发送"]})]})]})]}),Ve&&!Z&&t.jsxs("div",{"data-chat-reply-status":!0,role:"status","aria-label":`${x}思考中`,"aria-live":"polite",className:"mt-6 space-y-2 py-2 text-xs text-muted-foreground",children:[t.jsx($e,{name:x,slug:f}),t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(ze,{size:14,className:"animate-spin text-primary"}),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(De,{size:18,className:"mr-2"}),"松开以添加文件"]}),t.jsxs("div",{className:"session-chat-composer relative shrink-0 px-3 pb-3 pt-1 sm:px-8 sm:pb-4",children:[Me&&t.jsx("div",{className:"flex justify-center pb-2",children:t.jsxs("button",{type:"button",className:`${G} rounded-full border border-border bg-surface text-xs shadow-lg`,onClick:_,children:[t.jsx(at,{size:14}),"查看新消息"]})}),t.jsxs("div",{className:"relative mx-auto max-w-screen-2xl",children:[Z&&t.jsxs("p",{role:"alert",className:"mb-2 rounded-xl bg-surface-2 px-3 py-2 text-xs leading-6 text-destructive",children:[Z,t.jsx("button",{type:"button",className:"ml-2 underline",onClick:()=>{B().catch(()=>{})},children:"重新连接"})]}),F===!1&&t.jsxs("div",{role:"status",className:"mb-2 flex flex-wrap items-center gap-2 text-xs text-muted-foreground",children:[t.jsx("span",{children:"当前对话暂不可用。"}),t.jsxs("button",{type:"button",className:G,onClick:j,children:[t.jsx(Le,{size:14}),"打开终端"]})]}),h&&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(l=>l.id===h.id);e&&Ne(e,h.text)},children:[t.jsx(ge,{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:h.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:()=>{y(null),window.getSelection()?.removeAllRanges()},children:t.jsx(me,{size:13})})]})}),w.transfer&&t.jsxs("div",{role:"status",className:"mb-2 flex min-h-9 items-center gap-2 px-1 text-xs text-muted-foreground",children:[w.busy&&t.jsx(ze,{size:13,className:"animate-spin text-primary"}),t.jsx("span",{className:"min-w-0 flex-1",children:w.transfer.stage==="reading"?"正在读取剪贴板…":w.transfer.stage==="uploading"?`正在上传文件${w.transfer.percent===void 0?"…":` · ${w.transfer.percent}%`}`:w.transfer.stage==="cancelled"?"已取消上传":"上传未完成,文件尚未添加"}),w.busy?t.jsx("button",{type:"button",className:"min-h-9 px-2",onClick:w.cancel,children:"取消"}):t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"min-h-9 px-2 text-primary",onClick:w.retry,children:"重试上传"}),t.jsx("button",{type:"button","aria-label":"关闭上传提示",className:"min-h-9 px-2",onClick:w.dismiss,children:t.jsx(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(),k||ce()},children:[n&&t.jsx(Ie,{reference:n,onRemove:()=>u(null)}),t.jsxs("div",{className:"flex items-end gap-2",children:[t.jsx("input",{ref:je,type:"file",multiple:!0,tabIndex:-1,className:"hidden","aria-label":"选择附件",onChange:e=>{w.addFiles(Array.from(e.currentTarget.files||[])),e.currentTarget.value=""}}),t.jsx("button",{type:"button","aria-label":"添加文件",title:"添加文件,也可拖入或粘贴",className:"mb-0.5 inline-flex h-10 w-8 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition hover:bg-surface-2 disabled:opacity-30",disabled:!r||w.busy,onPointerDown:e=>e.preventDefault(),onClick:()=>je.current?.click(),children:t.jsx(De,{size:18})}),t.jsx("textarea",{ref:D,onFocus:()=>y(null),onPaste:e=>{const l=e.clipboardData,o=l.files.length?Array.from(l.files):Array.from(l.items).filter(g=>g.kind==="file").map(g=>g.getAsFile()).filter(g=>!!g),d=l.getData("text/plain");(o.length||pe()?.readClipboardFiles||!d&&(pe()||typeof navigator.clipboard?.read=="function"))&&(e.preventDefault(),w.paste({files:o,text:d}))},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":`给${x}的消息`,placeholder:r?"输入消息…":"此会话仅允许查看",value:N,disabled:!r,onChange:e=>R(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key==="Enter"&&!e.shiftKey&&!e.altKey&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&(e.preventDefault(),k||ce())}}),t.jsx("button",{type:"submit","aria-label":"发送消息",onPointerDown:e=>{document.activeElement===D.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:W||w.busy||!!k||!N.trim()||ke||!r||F!==!0,children:t.jsx(it,{size:19})})]})]}),ke?t.jsx("p",{className:"mt-2 px-1 text-xs text-destructive",children:"消息过长,请缩短后发送。"}):r?!p&&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:"仅查看"}),m&&t.jsx("div",{className:"mt-1 flex justify-end",children:t.jsxs("button",{type:"button",className:`${G} min-h-9 px-2 text-xs text-muted-foreground`,onClick:j,children:[t.jsx(Le,{size:13}),"查看终端"]})})]})]})]})}export{kt as SessionChatView};
|
|
Binary file
|
|
Binary file
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AndroidMirrorView-D9CMPmet.js","assets/app-stNRNTO-.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-Dea8wJF3.js","assets/index-bfj9dYEg.css","assets/v4-EwEgHOG0.js","assets/RecordingSaveDialog-1YvzwTzo.js","assets/use-gesture-react.esm-DYpdiE_k.js","assets/gestureArbiter-DszagC-d.js","assets/arrow-up-DE9Z7GTI.js","assets/unplug-CLBg6VOD.js","assets/ComputerControlView-VNUyl2Gb.js","assets/chevron-left-ZgHOf4aC.js","assets/loader-circle-DZn9iP0u.js","assets/clipboard-BGpbRBdi.js","assets/maximize-2-dFjMEqgh.js","assets/settings-2-9tlRImVo.js","assets/RightSidebar-CCk8ovoK.js","assets/MarkdownPreview-b_bwDNcY.js","assets/swiper-DJjq1TYT.js","assets/swiper-C2J0D0kV.css","assets/syntaxHighlight-Bgt0lmWx.js","assets/list-tree-DKTcSR9r.js","assets/GitLoadingSkeleton-ieGTuTuO.js","assets/DiffReview-DAUBgpsh.js","assets/sparkles-B64EiCUM.js","assets/DiffViewer-Cg3GhKcU.js","assets/git-compare-C7n2uha2.js","assets/DiffViewer-T3uj2-aP.css","assets/triangle-alert-LpKfIn7N.js","assets/ChangeWalkthroughPanel-BYb27GTC.js","assets/arrow-down-DaWRHIlh.js","assets/RightSidebar-DW-JEgm2.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{cc as e,N as T,O as A,w as O,p as $,a0 as D,aH as V,ak as _,a1 as k,ef as F,c as M,y as I,cF as U,e2 as B,o as J,e3 as K,ap as H}from"./app-stNRNTO-.js";import{b as s}from"./dnd-BCFAPC0L.js";import{S as W,R as X,U as q}from"./RecordingSaveDialog-1YvzwTzo.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-DE9Z7GTI.js";const G=s.lazy(()=>k(()=>import("./AndroidMirrorView-D9CMPmet.js").then(n=>n.c),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(n=>({default:n.AndroidMirrorView}))),Q=s.lazy(()=>k(()=>import("./ComputerControlView-VNUyl2Gb.js").then(n=>n.a),__vite__mapDeps([12,1,2,3,4,5,13,14,11,15,16,17]))),Y=s.lazy(()=>k(()=>import("./RightSidebar-CCk8ovoK.js").then(n=>n.R),__vite__mapDeps([18,1,2,3,4,5,19,8,20,21,22,23,24,7,9,10,25,26,27,28,29,30,31,13,16,0,6,11,14,32,33])).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,b]=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=H(r),g=n,c=()=>a.current&&o()&&d.current.sessionId===g&&d.current.canWrite;if(!g||!c())throw new Error("此会话当前无法添加附件");const h=(await K(g,[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(G,{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&&b(u)}:void 0}),l&&e.jsx(X,{file:l,initialPath:"/",onInsert:async(u,r)=>d.current.canWrite&&a.current?d.current.onInsert(_(u,null),r):!1,onDone:()=>b(void 0)},l.id)]})}function ee({directories:n,onInsert:f,onDirty:m}){const[l,b]=s.useState(n[0]?.path||""),[a,d]=s.useState(null),[p,u]=s.useState(null),[r,o]=s.useState(),[g,c]=s.useState(""),[x,h]=s.useState(!1),[R,S]=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)||(b(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)),z=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),S(N=>N+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=N=>{t&&(N.preventDefault(),N.returnValue="")};return window.addEventListener("beforeunload",j),()=>{window.removeEventListener("beforeunload",j),m(!1)}},[r,m]);const L=()=>{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(""),U(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(I,{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=>{b(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(q,{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 N=l;h(!0),c(""),B(N,j).then(()=>{F.getState().invalidateDirectoryCache(N),S(C=>C+1)}).catch(C=>c(C.message)).finally(()=>h(!1))}})]})}),g&&e.jsx("p",{role:"alert",className:"p-3 text-xs leading-5 text-destructive",children:g}),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:L,children:"取消编辑"}),e.jsx("button",{type:"button",className:`${v} bg-primary text-primary-foreground`,disabled:x,onClick:()=>{z()},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:b,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],g=s.useRef(!1),c=s.useRef(i=>{g.current=i}).current,x=async i=>{i!==u&&(g.current&&!await V({title:"放弃文件修改?",message:"当前文件有未保存的修改。",confirmLabel:"放弃修改",cancelLabel:"继续编辑"})||r(i))},[h,R]=s.useState(0),S=n.computers?.[h]??n.computers?.[0],E=o==="computer"?{...n,computers:S?[S]:[]}:n;return p.length?e.jsx(T.Provider,{value:E,children:e.jsx(W,{side:"right",isOpen:b,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"&&b&&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:b},JSON.stringify(S))]}),o==="files"&&e.jsx(ee,{directories:n.directories,onInsert:d,onDirty:c})]})]})})}):null}export{ce as SessionResourceSidebar};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{aR as St,aN as Ct,e7 as ot,cc as e,a0 as ct,C as dt,q as It,U as Le,m as $t,e as At,R as Et,di as _,bd as Dt,bG as zt,bF as st,I as at,S as De,c as ze,H as nt,y as Tt,W as qt}from"./app-stNRNTO-.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 Ut,m as lt,u as Te,f as Jt,d as Kt,i as rt,s as Mt,j as Vt,b as Wt}from"./App-CqLXOAnv.js";import{D as Bt}from"./RecordingSaveDialog-1YvzwTzo.js";import{d as Ue,S as Ht}from"./GitLoadingSkeleton-ieGTuTuO.js";import{S as Yt}from"./settings-2-9tlRImVo.js";import{S as ut}from"./sparkles-B64EiCUM.js";import{C as Gt}from"./triangle-alert-LpKfIn7N.js";import{C as Xt}from"./AndroidMirrorView-D9CMPmet.js";import"./react-XDCjal2T.js";import"./terminal-Dea8wJF3.js";import"./link-D-fkBp5k.js";import"./swiper-DJjq1TYT.js";import"./loader-circle-DZn9iP0u.js";import"./clipboardText-B0NK9NMn.js";import"./clipboard-BGpbRBdi.js";import"./v4-EwEgHOG0.js";import"./sun-BFxiDkET.js";import"./maximize-2-dFjMEqgh.js";import"./git-compare-C7n2uha2.js";import"./arrow-up-DE9Z7GTI.js";import"./arrow-down-DaWRHIlh.js";import"./unplug-CLBg6VOD.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 Je(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 Ke(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=Ke(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,...Ke(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 Me="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=`${Me} bg-primary text-primary-foreground hover:opacity-90`,K=`${Me} bg-surface-2 text-foreground hover:bg-surface-elevated`,S=`${Me} text-muted-foreground hover:bg-surface-2 hover:text-foreground`,U="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",J="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 Ve({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]=Je(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:J,children:["要做什么",e.jsx("input",{autoFocus:!0,required:!0,maxLength:200,className:U,value:d.title,onChange:u=>o({...d,title:u.target.value}),placeholder:"一句话描述这件事"})]}),e.jsxs("label",{className:J,children:["背景和处理要求",e.jsx("textarea",{className:`${U} 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(Ve,{children:[e.jsx("button",{type:"button",className:S,disabled:l,onClick:n,children:"取消"}),!a&&e.jsx("button",{type:"button",className:K,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:J,children:[e.jsx("label",{htmlFor:N,children:"Agent"}),e.jsxs("select",{id:N,className:U,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:J,children:[e.jsx("label",{htmlFor:c,children:"工作目录"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{id:c,className:U,value:s.cwd,autoCapitalize:"none",autoCorrect:"off",spellCheck:!1,onChange:m=>o({...s,cwd:m.target.value}),placeholder:"选择这件事所在的项目或目录"}),e.jsx("button",{type:"button",className:K,"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:J,children:[y?"收集要求":"处理要求",e.jsx("textarea",{required:y,className:`${U} min-h-32 resize-y`,maxLength:2e4,value:s.prompt,onChange:m=>o({...s,prompt:m.target.value}),placeholder:y?"从哪里收集、筛选哪些事项、需要哪些背景与来源…":"补充 Agent 应该遵守的要求,可留空"})]}),e.jsx(Bt,{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]=Je(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(Ve,{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(Ue,{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]=Je(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:K,onClick:()=>m({...c,name:f.name,config:{...c.config,prompt:f.prompt}}),children:f.name},f.name))}),e.jsxs("label",{className:J,children:["收集方向",e.jsx("input",{required:!0,className:U,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:J,children:["运行频率",e.jsxs("select",{className:U,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:J,children:["间隔(分钟)",e.jsx("input",{className:U,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:J,children:["时间(服务所在时区)",e.jsx("input",{className:U,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(Ve,{children:[e.jsx("button",{type:"button",className:S,disabled:u,onClick:N,children:"取消"}),e.jsx("button",{type:"button",className:K,disabled:u||!C,onClick:()=>I(!1),children:"仅保存"}),e.jsxs("button",{className:Y,disabled:u||!C,children:[e.jsx(Ue,{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:K,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:K,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(Yt,{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(Ue,{size:16}),I]})]})]})}const it={agentSlug:"",command:"",cwd:"",prompt:""};function Os({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,We]=h.useState(!1),[ge,be]=h.useState(null),je=h.useRef(null),[ht,gt]=h.useState(0),V=ht>=900,M=h.useRef(!0),ve=h.useRef(!1),we=h.useRef(!1),Ne=h.useRef(0),Be=h.useRef(_()?.targetPeerId),z=()=>M.current&&Be.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();M.current&&i===Ne.current&&x===_()?.targetPeerId&&(y(v),A.getState().cache(r,v),g(""))}catch(v){M.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(!M.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(()=>{M.current=!0;const t=je.current,i=()=>gt(t?.clientWidth??0);i();const x=new ResizeObserver(i);t&&x.observe(t),G();const v=()=>{Be.current!==_()?.targetPeerId&<.getState().terminal()};window.addEventListener(at,v),window.addEventListener(De,G);const j=Ft(()=>{navigator.onLine!==!1&&te()},1200,[De]);return()=>{M.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,We(!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,M.current&&We(!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)=>Vt($,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&&W&&u.agents.some(x=>x.slug===W.agentSlug)?L(()=>Se(t,W,!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=>Wt(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=Ke(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),W=o?.defaults.agentSlug?o.defaults:X?P:void 0,bt=$e?{...it,...$e}:P,Ye=ts(u.cwd,u.directories??[],o,r),B=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"?B?.[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"&&!V&&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(Ut,{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:K,disabled:E,onClick:()=>{L(()=>re(de))},children:"全部收集"})]}),o.collectors.length?e.jsx("div",{className:`grid items-start gap-4 ${V?"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 Jt(t)})}},t.id))}):e.jsx(Oe,{title:"让 Agent 帮你发现下一件事",text:"添加一个收集方向,写下关注的内容和筛选要求。"})]}):e.jsxs("div",{className:"flex min-h-0 flex-1",children:[e.jsxs("div",{className:`${V?"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(Ht,{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&&V?"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 帮你收集。":"清除筛选可回到当前待办。"})})]}),(V||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:V,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 Kt({...t,idempotencyKey:ye(["create",t])});if(!z())return;ke(["create",t]),se(`todo:${Q?.id??"new"}`);const v=i&&W&&u.agents.some(j=>j.slug===W.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],W,!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:B&&new Set(Object.values(B).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,B&&JSON.stringify(t)===JSON.stringify(B[b.ids[0]])?B: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 Mt(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:`${K} 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{Os as default};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|