termdock 1.4.357 → 1.4.358

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.
Files changed (409) hide show
  1. package/dist/client/assets/{AndroidMirrorView-BGagwKtL.js → AndroidMirrorView-COoPljXi.js} +1 -1
  2. package/dist/client/assets/AndroidMirrorView-COoPljXi.js.br +0 -0
  3. package/dist/client/assets/AndroidMirrorView-COoPljXi.js.gz +0 -0
  4. package/dist/client/assets/{App-DpMhxwYW.js → App-7BA7Jt-V.js} +46 -46
  5. package/dist/client/assets/App-7BA7Jt-V.js.br +0 -0
  6. package/dist/client/assets/App-7BA7Jt-V.js.gz +0 -0
  7. package/dist/client/assets/{ArchitecturePanel-Bd_l74EC.js → ArchitecturePanel-B51eVL3I.js} +2 -2
  8. package/dist/client/assets/ArchitecturePanel-B51eVL3I.js.br +0 -0
  9. package/dist/client/assets/ArchitecturePanel-B51eVL3I.js.gz +0 -0
  10. package/dist/client/assets/{ChangeWalkthroughPanel-6DN-2BdR.js → ChangeWalkthroughPanel-ZGMybE0m.js} +1 -1
  11. package/dist/client/assets/ChangeWalkthroughPanel-ZGMybE0m.js.br +0 -0
  12. package/dist/client/assets/ChangeWalkthroughPanel-ZGMybE0m.js.gz +0 -0
  13. package/dist/client/assets/{ChatRichContent-DjwpmW7d.js → ChatRichContent-KkN7aIGv.js} +3 -3
  14. package/dist/client/assets/ChatRichContent-KkN7aIGv.js.br +0 -0
  15. package/dist/client/assets/ChatRichContent-KkN7aIGv.js.gz +0 -0
  16. package/dist/client/assets/{CollaborationMainWorkspace-DPTJ9pCt.js → CollaborationMainWorkspace-BVeBgGMT.js} +1 -1
  17. package/dist/client/assets/CollaborationMainWorkspace-BVeBgGMT.js.br +0 -0
  18. package/dist/client/assets/CollaborationMainWorkspace-BVeBgGMT.js.gz +0 -0
  19. package/dist/client/assets/CollaborationTaskContent-C3Od6xQy.js +1 -0
  20. package/dist/client/assets/{ComputerControlView-CwB-wQqB.js → ComputerControlView-CnaeZBuh.js} +3 -3
  21. package/dist/client/assets/ComputerControlView-CnaeZBuh.js.br +0 -0
  22. package/dist/client/assets/{ComputerControlView-CwB-wQqB.js.gz → ComputerControlView-CnaeZBuh.js.gz} +0 -0
  23. package/dist/client/assets/{DagPlayground-DMn9Gyrw.js → DagPlayground-E7wKGgTF.js} +1 -1
  24. package/dist/client/assets/DagPlayground-E7wKGgTF.js.br +0 -0
  25. package/dist/client/assets/DagPlayground-E7wKGgTF.js.gz +0 -0
  26. package/dist/client/assets/{DiffLab-YBWlCU2T.js → DiffLab-BMXY4mRl.js} +1 -1
  27. package/dist/client/assets/DiffLab-BMXY4mRl.js.br +0 -0
  28. package/dist/client/assets/DiffLab-BMXY4mRl.js.gz +0 -0
  29. package/dist/client/assets/{DiffReview-YOPDWqhv.js → DiffReview-DHi_V-SX.js} +1 -1
  30. package/dist/client/assets/DiffReview-DHi_V-SX.js.br +0 -0
  31. package/dist/client/assets/DiffReview-DHi_V-SX.js.gz +0 -0
  32. package/dist/client/assets/{DiffReviewLab-SYomq14c.js → DiffReviewLab-nhoosNZM.js} +1 -1
  33. package/dist/client/assets/DiffReviewLab-nhoosNZM.js.br +0 -0
  34. package/dist/client/assets/DiffReviewLab-nhoosNZM.js.gz +0 -0
  35. package/dist/client/assets/{DiffViewer-mh9cBl5v.js → DiffViewer-CyDc8WOB.js} +1 -1
  36. package/dist/client/assets/DiffViewer-CyDc8WOB.js.br +0 -0
  37. package/dist/client/assets/DiffViewer-CyDc8WOB.js.gz +0 -0
  38. package/dist/client/assets/{GitLoadingSkeleton-DKRTc5sz.js → GitLoadingSkeleton-RRbTeMuA.js} +1 -1
  39. package/dist/client/assets/GitLoadingSkeleton-RRbTeMuA.js.br +0 -0
  40. package/dist/client/assets/GitLoadingSkeleton-RRbTeMuA.js.gz +0 -0
  41. package/dist/client/assets/{Markdown-C8OP1j-g.js → Markdown-Ip0FYCJ1.js} +2 -2
  42. package/dist/client/assets/Markdown-Ip0FYCJ1.js.br +0 -0
  43. package/dist/client/assets/Markdown-Ip0FYCJ1.js.gz +0 -0
  44. package/dist/client/assets/{ModelPreview-CsZry3Wd.js → ModelPreview-DuwBl4st.js} +1 -1
  45. package/dist/client/assets/ModelPreview-DuwBl4st.js.br +0 -0
  46. package/dist/client/assets/ModelPreview-DuwBl4st.js.gz +0 -0
  47. package/dist/client/assets/{RecordingSaveDialog-CoRGi97z.js → RecordingSaveDialog-Czkjuaeu.js} +1 -1
  48. package/dist/client/assets/RecordingSaveDialog-Czkjuaeu.js.br +0 -0
  49. package/dist/client/assets/RecordingSaveDialog-Czkjuaeu.js.gz +0 -0
  50. package/dist/client/assets/{RightSidebar-DNY2kC6B.js → RightSidebar-BvYh2_n2.js} +3 -3
  51. package/dist/client/assets/RightSidebar-BvYh2_n2.js.br +0 -0
  52. package/dist/client/assets/RightSidebar-BvYh2_n2.js.gz +0 -0
  53. package/dist/client/assets/SessionChatView-hFOVLdHC.js +13 -0
  54. package/dist/client/assets/SessionChatView-hFOVLdHC.js.br +0 -0
  55. package/dist/client/assets/SessionChatView-hFOVLdHC.js.gz +0 -0
  56. package/dist/client/assets/{SessionResourceSidebar-B_379HBJ.js → SessionResourceSidebar-D-VXNdmE.js} +2 -2
  57. package/dist/client/assets/SessionResourceSidebar-D-VXNdmE.js.br +0 -0
  58. package/dist/client/assets/SessionResourceSidebar-D-VXNdmE.js.gz +0 -0
  59. package/dist/client/assets/{TodoWorkspace-DfwGOAHB.js → TodoWorkspace-CCL-wZTu.js} +1 -1
  60. package/dist/client/assets/TodoWorkspace-CCL-wZTu.js.br +0 -0
  61. package/dist/client/assets/TodoWorkspace-CCL-wZTu.js.gz +0 -0
  62. package/dist/client/assets/{abnfDiagram-VCTEODGH-C9M0gnl-.js → abnfDiagram-VCTEODGH-CdEUK_s_.js} +1 -1
  63. package/dist/client/assets/abnfDiagram-VCTEODGH-CdEUK_s_.js.br +0 -0
  64. package/dist/client/assets/abnfDiagram-VCTEODGH-CdEUK_s_.js.gz +0 -0
  65. package/dist/client/assets/{app-CovJYQoW.js → app-DZ6mCJiW.js} +4 -4
  66. package/dist/client/assets/app-DZ6mCJiW.js.br +0 -0
  67. package/dist/client/assets/app-DZ6mCJiW.js.gz +0 -0
  68. package/dist/client/assets/{arc-q4wfkQcT.js → arc-Dmbeqzc-.js} +1 -1
  69. package/dist/client/assets/arc-Dmbeqzc-.js.br +0 -0
  70. package/dist/client/assets/arc-Dmbeqzc-.js.gz +0 -0
  71. package/dist/client/assets/{architectureDiagram-5GKGNRK7-CCuna3ab.js → architectureDiagram-5GKGNRK7-CZcdXQrP.js} +1 -1
  72. package/dist/client/assets/architectureDiagram-5GKGNRK7-CZcdXQrP.js.br +0 -0
  73. package/dist/client/assets/architectureDiagram-5GKGNRK7-CZcdXQrP.js.gz +0 -0
  74. package/dist/client/assets/{arrow-down-WyzmLXwQ.js → arrow-down-Ty3zwcgl.js} +1 -1
  75. package/dist/client/assets/{blockDiagram-I7D4REHJ-BXK68Qyt.js → blockDiagram-I7D4REHJ-D9jFhXcb.js} +1 -1
  76. package/dist/client/assets/blockDiagram-I7D4REHJ-D9jFhXcb.js.br +0 -0
  77. package/dist/client/assets/blockDiagram-I7D4REHJ-D9jFhXcb.js.gz +0 -0
  78. package/dist/client/assets/{c4Diagram-7LVT6UL2-BqwmmVmS.js → c4Diagram-7LVT6UL2-c9o0rNTP.js} +1 -1
  79. package/dist/client/assets/c4Diagram-7LVT6UL2-c9o0rNTP.js.br +0 -0
  80. package/dist/client/assets/c4Diagram-7LVT6UL2-c9o0rNTP.js.gz +0 -0
  81. package/dist/client/assets/channel-BzD84hIE.js +1 -0
  82. package/dist/client/assets/{chevron-left-CxeWIsDK.js → chevron-left-CVjGQZf0.js} +1 -1
  83. package/dist/client/assets/{chunk-2Q5K7J3B-esKGR38U.js → chunk-2Q5K7J3B-Bl_5wWZ4.js} +1 -1
  84. package/dist/client/assets/{chunk-5VM5RSS4-B3InxqDA.js → chunk-5VM5RSS4-D9XQn27m.js} +1 -1
  85. package/dist/client/assets/{chunk-F27PBJKO-CjUVyF-E.js → chunk-F27PBJKO-DWyskKWD.js} +1 -1
  86. package/dist/client/assets/chunk-F27PBJKO-DWyskKWD.js.br +0 -0
  87. package/dist/client/assets/chunk-F27PBJKO-DWyskKWD.js.gz +0 -0
  88. package/dist/client/assets/{chunk-IMKFNOWR-BR8mmBs7.js → chunk-IMKFNOWR-DrWbExPc.js} +1 -1
  89. package/dist/client/assets/chunk-IMKFNOWR-DrWbExPc.js.br +0 -0
  90. package/dist/client/assets/chunk-IMKFNOWR-DrWbExPc.js.gz +0 -0
  91. package/dist/client/assets/{chunk-JWPE2WC7-CplXNOA7.js → chunk-JWPE2WC7-B7O1zrh6.js} +1 -1
  92. package/dist/client/assets/{chunk-POPQ4Y6H-D0JWCGnb.js → chunk-POPQ4Y6H-D7TlizKK.js} +1 -1
  93. package/dist/client/assets/{chunk-SVP7TREG-BdJtJSmy.js → chunk-SVP7TREG-DNK10F6v.js} +1 -1
  94. package/dist/client/assets/chunk-SVP7TREG-DNK10F6v.js.br +0 -0
  95. package/dist/client/assets/chunk-SVP7TREG-DNK10F6v.js.gz +0 -0
  96. package/dist/client/assets/{chunk-TICWLB2K-CoevFj8I.js → chunk-TICWLB2K-zVD9YIYY.js} +1 -1
  97. package/dist/client/assets/chunk-TICWLB2K-zVD9YIYY.js.br +0 -0
  98. package/dist/client/assets/chunk-TICWLB2K-zVD9YIYY.js.gz +0 -0
  99. package/dist/client/assets/{chunk-XXDRQBXY-D7qYRhMH.js → chunk-XXDRQBXY-bRScHSGz.js} +1 -1
  100. package/dist/client/assets/{circle-xgKDXpwG.js → circle-BIJQEbCa.js} +1 -1
  101. package/dist/client/assets/classDiagram-ZZMXUADV-DNwfONVW.js +1 -0
  102. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DNwfONVW.js +1 -0
  103. package/dist/client/assets/{clipboard-DeK6pJD3.js → clipboard-DV8t7tww.js} +1 -1
  104. package/dist/client/assets/clipboardText-C4QKbGHg.css +1 -0
  105. package/dist/client/assets/clipboardText-C4QKbGHg.css.br +0 -0
  106. package/dist/client/assets/clipboardText-C4QKbGHg.css.gz +0 -0
  107. package/dist/client/assets/clipboardText-DoB9NjH8.js +1 -0
  108. package/dist/client/assets/clipboardText-DoB9NjH8.js.br +0 -0
  109. package/dist/client/assets/clipboardText-DoB9NjH8.js.gz +0 -0
  110. package/dist/client/assets/{cose-bilkent-JH36ORCC-CvnsiaWP.js → cose-bilkent-JH36ORCC-Bf6IObhf.js} +1 -1
  111. package/dist/client/assets/cose-bilkent-JH36ORCC-Bf6IObhf.js.br +0 -0
  112. package/dist/client/assets/cose-bilkent-JH36ORCC-Bf6IObhf.js.gz +0 -0
  113. package/dist/client/assets/{cynefin-OW5HDTMX-BSGz8Olu.js → cynefin-OW5HDTMX-DAtjde93.js} +1 -1
  114. package/dist/client/assets/cynefin-OW5HDTMX-DAtjde93.js.br +0 -0
  115. package/dist/client/assets/{cynefin-OW5HDTMX-BSGz8Olu.js.gz → cynefin-OW5HDTMX-DAtjde93.js.gz} +0 -0
  116. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-DYYT0AHs.js → cynefinDiagram-5FMLGOSQ-Bwoin99V.js} +1 -1
  117. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Bwoin99V.js.br +0 -0
  118. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Bwoin99V.js.gz +0 -0
  119. package/dist/client/assets/{dagre-GXQ25YYZ-BM883MN7.js → dagre-GXQ25YYZ-dxPzSob9.js} +1 -1
  120. package/dist/client/assets/dagre-GXQ25YYZ-dxPzSob9.js.br +0 -0
  121. package/dist/client/assets/dagre-GXQ25YYZ-dxPzSob9.js.gz +0 -0
  122. package/dist/client/assets/{diagram-S7CK7UJ4-CYnxXy7R.js → diagram-S7CK7UJ4-BXdiLivz.js} +1 -1
  123. package/dist/client/assets/diagram-S7CK7UJ4-BXdiLivz.js.br +0 -0
  124. package/dist/client/assets/diagram-S7CK7UJ4-BXdiLivz.js.gz +0 -0
  125. package/dist/client/assets/{diagram-UQ7AKVKN-UOIBVxRf.js → diagram-UQ7AKVKN-DXveP3fg.js} +1 -1
  126. package/dist/client/assets/diagram-UQ7AKVKN-DXveP3fg.js.br +0 -0
  127. package/dist/client/assets/diagram-UQ7AKVKN-DXveP3fg.js.gz +0 -0
  128. package/dist/client/assets/{diagram-VSXAHHWV-CqTJzfmm.js → diagram-VSXAHHWV-BAZtoQue.js} +1 -1
  129. package/dist/client/assets/diagram-VSXAHHWV-BAZtoQue.js.br +0 -0
  130. package/dist/client/assets/diagram-VSXAHHWV-BAZtoQue.js.gz +0 -0
  131. package/dist/client/assets/{diagram-VX7I27RA-T9Y88CFB.js → diagram-VX7I27RA-Bhc7cKpk.js} +1 -1
  132. package/dist/client/assets/diagram-VX7I27RA-Bhc7cKpk.js.br +0 -0
  133. package/dist/client/assets/diagram-VX7I27RA-Bhc7cKpk.js.gz +0 -0
  134. package/dist/client/assets/{diagram-Z3DM3KII-kIQDy7E0.js → diagram-Z3DM3KII-DWIa_F-y.js} +1 -1
  135. package/dist/client/assets/diagram-Z3DM3KII-DWIa_F-y.js.br +0 -0
  136. package/dist/client/assets/diagram-Z3DM3KII-DWIa_F-y.js.gz +0 -0
  137. package/dist/client/assets/{ebnfDiagram-PWID7BFC-z_VqR_JE.js → ebnfDiagram-PWID7BFC-B3LDILSm.js} +1 -1
  138. package/dist/client/assets/ebnfDiagram-PWID7BFC-B3LDILSm.js.br +0 -0
  139. package/dist/client/assets/ebnfDiagram-PWID7BFC-B3LDILSm.js.gz +0 -0
  140. package/dist/client/assets/{erDiagram-RLTQ6QDP-0q52Z-pm.js → erDiagram-RLTQ6QDP-Cfu95bMX.js} +1 -1
  141. package/dist/client/assets/erDiagram-RLTQ6QDP-Cfu95bMX.js.br +0 -0
  142. package/dist/client/assets/erDiagram-RLTQ6QDP-Cfu95bMX.js.gz +0 -0
  143. package/dist/client/assets/{external-link-CsydVmO1.js → external-link-DodqgrCc.js} +1 -1
  144. package/dist/client/assets/{flowDiagram-HODETNUW-BrGqcUWn.js → flowDiagram-HODETNUW-DVtO6aQE.js} +1 -1
  145. package/dist/client/assets/flowDiagram-HODETNUW-DVtO6aQE.js.br +0 -0
  146. package/dist/client/assets/flowDiagram-HODETNUW-DVtO6aQE.js.gz +0 -0
  147. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CHAN6vQv.js → ganttDiagram-EL5Y4UJY-Bh1TvYzb.js} +1 -1
  148. package/dist/client/assets/ganttDiagram-EL5Y4UJY-Bh1TvYzb.js.br +0 -0
  149. package/dist/client/assets/ganttDiagram-EL5Y4UJY-Bh1TvYzb.js.gz +0 -0
  150. package/dist/client/assets/{git-compare-BmKAtQTt.js → git-compare-KkbucDhN.js} +1 -1
  151. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-C0ZV4FeB.js → gitGraphDiagram-WWUBYQGX-BKbRxPsF.js} +1 -1
  152. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BKbRxPsF.js.br +0 -0
  153. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BKbRxPsF.js.gz +0 -0
  154. package/dist/client/assets/{infoDiagram-27XIBGKW-CrLj9y1o.js → infoDiagram-27XIBGKW-CLhO8B16.js} +1 -1
  155. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-BxGvUfLX.js → ishikawaDiagram-5VMMS53U-BwchGTP9.js} +1 -1
  156. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BwchGTP9.js.br +0 -0
  157. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BwchGTP9.js.gz +0 -0
  158. package/dist/client/assets/{journeyDiagram-3NMN7TZE-rW9xlQ8G.js → journeyDiagram-3NMN7TZE-eWBpuyMm.js} +1 -1
  159. package/dist/client/assets/journeyDiagram-3NMN7TZE-eWBpuyMm.js.br +0 -0
  160. package/dist/client/assets/journeyDiagram-3NMN7TZE-eWBpuyMm.js.gz +0 -0
  161. package/dist/client/assets/{kanban-definition-UXKFOSKX-CFI5iv9R.js → kanban-definition-UXKFOSKX-Sik-RHYc.js} +1 -1
  162. package/dist/client/assets/kanban-definition-UXKFOSKX-Sik-RHYc.js.br +0 -0
  163. package/dist/client/assets/kanban-definition-UXKFOSKX-Sik-RHYc.js.gz +0 -0
  164. package/dist/client/assets/{layout-Ct_an5XT.js → layout-BJX2CDWF.js} +1 -1
  165. package/dist/client/assets/layout-BJX2CDWF.js.br +0 -0
  166. package/dist/client/assets/layout-BJX2CDWF.js.gz +0 -0
  167. package/dist/client/assets/{linear-DpEFOA9l.js → linear-0FKHr918.js} +1 -1
  168. package/dist/client/assets/linear-0FKHr918.js.br +0 -0
  169. package/dist/client/assets/linear-0FKHr918.js.gz +0 -0
  170. package/dist/client/assets/{link-34ChBc4F.js → link-DWUQqMDL.js} +1 -1
  171. package/dist/client/assets/link-DWUQqMDL.js.br +0 -0
  172. package/dist/client/assets/link-DWUQqMDL.js.gz +0 -0
  173. package/dist/client/assets/{list-tree-48dzbuUh.js → list-tree-DxdLnXUB.js} +1 -1
  174. package/dist/client/assets/{maximize-2-CbvSsu7O.js → maximize-2-Clx4ktqB.js} +1 -1
  175. package/dist/client/assets/{mermaid.core-DnVKnMmy.js → mermaid.core-DWoaNsig.js} +5 -5
  176. package/dist/client/assets/mermaid.core-DWoaNsig.js.br +0 -0
  177. package/dist/client/assets/mermaid.core-DWoaNsig.js.gz +0 -0
  178. package/dist/client/assets/{mindmap-definition-YA3MSWOX-C6shupTY.js → mindmap-definition-YA3MSWOX-kFqW8-1C.js} +1 -1
  179. package/dist/client/assets/mindmap-definition-YA3MSWOX-kFqW8-1C.js.br +0 -0
  180. package/dist/client/assets/mindmap-definition-YA3MSWOX-kFqW8-1C.js.gz +0 -0
  181. package/dist/client/assets/{passwordBootstrap-Doe50DSa.js → passwordBootstrap-ZDVK8UPE.js} +1 -1
  182. package/dist/client/assets/passwordBootstrap-ZDVK8UPE.js.br +0 -0
  183. package/dist/client/assets/passwordBootstrap-ZDVK8UPE.js.gz +0 -0
  184. package/dist/client/assets/{pegDiagram-XKGWAZYB-CDcnrvKX.js → pegDiagram-XKGWAZYB-CndGmUtZ.js} +1 -1
  185. package/dist/client/assets/pegDiagram-XKGWAZYB-CndGmUtZ.js.br +0 -0
  186. package/dist/client/assets/pegDiagram-XKGWAZYB-CndGmUtZ.js.gz +0 -0
  187. package/dist/client/assets/{pieDiagram-E7YTZNPT-CrGc03Tg.js → pieDiagram-E7YTZNPT-Q550203T.js} +1 -1
  188. package/dist/client/assets/pieDiagram-E7YTZNPT-Q550203T.js.br +0 -0
  189. package/dist/client/assets/pieDiagram-E7YTZNPT-Q550203T.js.gz +0 -0
  190. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-3-aldwKj.js → quadrantDiagram-AXDQQJYC-BrjlUGzZ.js} +1 -1
  191. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-3-aldwKj.js.br → quadrantDiagram-AXDQQJYC-BrjlUGzZ.js.br} +0 -0
  192. package/dist/client/assets/quadrantDiagram-AXDQQJYC-BrjlUGzZ.js.gz +0 -0
  193. package/dist/client/assets/{quote-B5GeKEq1.js → quote-B9G-yF_k.js} +1 -1
  194. package/dist/client/assets/{railroadDiagram-O6MQD6OU-51uKwR2_.js → railroadDiagram-O6MQD6OU-CSqOaX_w.js} +1 -1
  195. package/dist/client/assets/railroadDiagram-O6MQD6OU-CSqOaX_w.js.br +0 -0
  196. package/dist/client/assets/railroadDiagram-O6MQD6OU-CSqOaX_w.js.gz +0 -0
  197. package/dist/client/assets/{rdpSession-ocpkj4XY.js → rdpSession-DdqSmi-Z.js} +1 -1
  198. package/dist/client/assets/rdpSession-DdqSmi-Z.js.br +0 -0
  199. package/dist/client/assets/rdpSession-DdqSmi-Z.js.gz +0 -0
  200. package/dist/client/assets/{referenceSelection-fvfRDbgp.js → referenceSelection-0uCpJjt2.js} +1 -1
  201. package/dist/client/assets/referenceSelection-0uCpJjt2.js.br +0 -0
  202. package/dist/client/assets/referenceSelection-0uCpJjt2.js.gz +0 -0
  203. package/dist/client/assets/{requirementDiagram-BXWQKSXE-CY6kp0_Y.js → requirementDiagram-BXWQKSXE-NGPth3Pf.js} +1 -1
  204. package/dist/client/assets/requirementDiagram-BXWQKSXE-NGPth3Pf.js.br +0 -0
  205. package/dist/client/assets/requirementDiagram-BXWQKSXE-NGPth3Pf.js.gz +0 -0
  206. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-BsA0NkHG.js → sankeyDiagram-P5KCCOFB-CbxpJ6iI.js} +1 -1
  207. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CbxpJ6iI.js.br +0 -0
  208. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CbxpJ6iI.js.gz +0 -0
  209. package/dist/client/assets/{search-CbpNLSpd.js → search-DAQ_AOVP.js} +1 -1
  210. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BDzn7N2D.js → sequenceDiagram-WJ2MYXX4-D3gJOK25.js} +1 -1
  211. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-D3gJOK25.js.br +0 -0
  212. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-D3gJOK25.js.gz +0 -0
  213. package/dist/client/assets/{sizeCapture-INFHLROL-gxtam7nc.js → sizeCapture-INFHLROL-D4D1KI0n.js} +1 -1
  214. package/dist/client/assets/sizeCapture-INFHLROL-D4D1KI0n.js.br +0 -0
  215. package/dist/client/assets/sizeCapture-INFHLROL-D4D1KI0n.js.gz +0 -0
  216. package/dist/client/assets/{stateDiagram-D77RDMKH-C4XjYLZR.js → stateDiagram-D77RDMKH-BjtgjBg5.js} +1 -1
  217. package/dist/client/assets/stateDiagram-D77RDMKH-BjtgjBg5.js.br +0 -0
  218. package/dist/client/assets/stateDiagram-D77RDMKH-BjtgjBg5.js.gz +0 -0
  219. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BkFsvhZ0.js +1 -0
  220. package/dist/client/assets/{sun-CMXn_ntS.js → sun-DvwMJkda.js} +1 -1
  221. package/dist/client/assets/{swimlanes-42K2YHIH--a1wkQO8.js → swimlanes-42K2YHIH-C17jwdFo.js} +1 -1
  222. package/dist/client/assets/swimlanes-42K2YHIH-C17jwdFo.js.br +0 -0
  223. package/dist/client/assets/swimlanes-42K2YHIH-C17jwdFo.js.gz +0 -0
  224. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-Bcw2hbFj.js +8 -0
  225. package/dist/client/assets/{swiper-CTPycjLq.js → swiper-BaumVgFd.js} +1 -1
  226. package/dist/client/assets/swiper-BaumVgFd.js.br +0 -0
  227. package/dist/client/assets/swiper-BaumVgFd.js.gz +0 -0
  228. package/dist/client/assets/{timeline-definition-24CTP7MA-DFmXXUuU.js → timeline-definition-24CTP7MA-CtdHmPoC.js} +1 -1
  229. package/dist/client/assets/timeline-definition-24CTP7MA-CtdHmPoC.js.br +0 -0
  230. package/dist/client/assets/timeline-definition-24CTP7MA-CtdHmPoC.js.gz +0 -0
  231. package/dist/client/assets/{triangle-alert-DgGU_xB4.js → triangle-alert-D-tt7pA2.js} +1 -1
  232. package/dist/client/assets/{unplug-CnZtWzVW.js → unplug-BQxOculv.js} +1 -1
  233. package/dist/client/assets/{use-gesture-react.esm-DHU0wi7Q.js → use-gesture-react.esm-CM42s15B.js} +1 -1
  234. package/dist/client/assets/use-gesture-react.esm-CM42s15B.js.br +0 -0
  235. package/dist/client/assets/use-gesture-react.esm-CM42s15B.js.gz +0 -0
  236. package/dist/client/assets/{vennDiagram-4TSXK5OY-DgR4zroQ.js → vennDiagram-4TSXK5OY-DhwCFaVe.js} +1 -1
  237. package/dist/client/assets/vennDiagram-4TSXK5OY-DhwCFaVe.js.br +0 -0
  238. package/dist/client/assets/vennDiagram-4TSXK5OY-DhwCFaVe.js.gz +0 -0
  239. package/dist/client/assets/{videoCompression-CcffRZdP.js → videoCompression-BFhMaMl7.js} +1 -1
  240. package/dist/client/assets/videoCompression-BFhMaMl7.js.br +0 -0
  241. package/dist/client/assets/videoCompression-BFhMaMl7.js.gz +0 -0
  242. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-CY4SVUkf.js → wardleyDiagram-VM6X3IG4-BP4Z-QQ4.js} +1 -1
  243. package/dist/client/assets/wardleyDiagram-VM6X3IG4-BP4Z-QQ4.js.br +0 -0
  244. package/dist/client/assets/wardleyDiagram-VM6X3IG4-BP4Z-QQ4.js.gz +0 -0
  245. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-PblQhR-b.js → xychartDiagram-S5SC5T6Z-CEPWf1tk.js} +1 -1
  246. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CEPWf1tk.js.br +0 -0
  247. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CEPWf1tk.js.gz +0 -0
  248. package/dist/client/index.html +1 -1
  249. package/dist/client/index.html.br +0 -0
  250. package/dist/client/index.html.gz +0 -0
  251. package/dist/client/sw.js +1 -1
  252. package/dist/client/sw.js.br +0 -0
  253. package/dist/client/sw.js.gz +0 -0
  254. package/package.json +2 -1
  255. package/runtime-manifest.json +2 -2
  256. package/dist/client/assets/AndroidMirrorView-BGagwKtL.js.br +0 -0
  257. package/dist/client/assets/AndroidMirrorView-BGagwKtL.js.gz +0 -0
  258. package/dist/client/assets/App-DpMhxwYW.js.br +0 -0
  259. package/dist/client/assets/App-DpMhxwYW.js.gz +0 -0
  260. package/dist/client/assets/ArchitecturePanel-Bd_l74EC.js.br +0 -0
  261. package/dist/client/assets/ArchitecturePanel-Bd_l74EC.js.gz +0 -0
  262. package/dist/client/assets/ChangeWalkthroughPanel-6DN-2BdR.js.br +0 -0
  263. package/dist/client/assets/ChangeWalkthroughPanel-6DN-2BdR.js.gz +0 -0
  264. package/dist/client/assets/ChatRichContent-DjwpmW7d.js.br +0 -0
  265. package/dist/client/assets/ChatRichContent-DjwpmW7d.js.gz +0 -0
  266. package/dist/client/assets/CollaborationMainWorkspace-DPTJ9pCt.js.br +0 -0
  267. package/dist/client/assets/CollaborationMainWorkspace-DPTJ9pCt.js.gz +0 -0
  268. package/dist/client/assets/CollaborationTaskContent-Cbu1Bjl0.js +0 -1
  269. package/dist/client/assets/ComputerControlView-CwB-wQqB.js.br +0 -0
  270. package/dist/client/assets/DagPlayground-DMn9Gyrw.js.br +0 -0
  271. package/dist/client/assets/DagPlayground-DMn9Gyrw.js.gz +0 -0
  272. package/dist/client/assets/DiffLab-YBWlCU2T.js.br +0 -0
  273. package/dist/client/assets/DiffLab-YBWlCU2T.js.gz +0 -0
  274. package/dist/client/assets/DiffReview-YOPDWqhv.js.br +0 -0
  275. package/dist/client/assets/DiffReview-YOPDWqhv.js.gz +0 -0
  276. package/dist/client/assets/DiffReviewLab-SYomq14c.js.br +0 -0
  277. package/dist/client/assets/DiffReviewLab-SYomq14c.js.gz +0 -0
  278. package/dist/client/assets/DiffViewer-mh9cBl5v.js.br +0 -0
  279. package/dist/client/assets/DiffViewer-mh9cBl5v.js.gz +0 -0
  280. package/dist/client/assets/GitLoadingSkeleton-DKRTc5sz.js.br +0 -0
  281. package/dist/client/assets/GitLoadingSkeleton-DKRTc5sz.js.gz +0 -0
  282. package/dist/client/assets/Markdown-C8OP1j-g.js.br +0 -0
  283. package/dist/client/assets/Markdown-C8OP1j-g.js.gz +0 -0
  284. package/dist/client/assets/ModelPreview-CsZry3Wd.js.br +0 -0
  285. package/dist/client/assets/ModelPreview-CsZry3Wd.js.gz +0 -0
  286. package/dist/client/assets/RecordingSaveDialog-CoRGi97z.js.br +0 -0
  287. package/dist/client/assets/RecordingSaveDialog-CoRGi97z.js.gz +0 -0
  288. package/dist/client/assets/RightSidebar-DNY2kC6B.js.br +0 -0
  289. package/dist/client/assets/RightSidebar-DNY2kC6B.js.gz +0 -0
  290. package/dist/client/assets/SessionChatView-DXNpYUrk.js +0 -13
  291. package/dist/client/assets/SessionChatView-DXNpYUrk.js.br +0 -0
  292. package/dist/client/assets/SessionChatView-DXNpYUrk.js.gz +0 -0
  293. package/dist/client/assets/SessionResourceSidebar-B_379HBJ.js.br +0 -0
  294. package/dist/client/assets/SessionResourceSidebar-B_379HBJ.js.gz +0 -0
  295. package/dist/client/assets/TodoWorkspace-DfwGOAHB.js.br +0 -0
  296. package/dist/client/assets/TodoWorkspace-DfwGOAHB.js.gz +0 -0
  297. package/dist/client/assets/abnfDiagram-VCTEODGH-C9M0gnl-.js.br +0 -0
  298. package/dist/client/assets/abnfDiagram-VCTEODGH-C9M0gnl-.js.gz +0 -0
  299. package/dist/client/assets/app-CovJYQoW.js.br +0 -0
  300. package/dist/client/assets/app-CovJYQoW.js.gz +0 -0
  301. package/dist/client/assets/arc-q4wfkQcT.js.br +0 -0
  302. package/dist/client/assets/arc-q4wfkQcT.js.gz +0 -0
  303. package/dist/client/assets/architectureDiagram-5GKGNRK7-CCuna3ab.js.br +0 -0
  304. package/dist/client/assets/architectureDiagram-5GKGNRK7-CCuna3ab.js.gz +0 -0
  305. package/dist/client/assets/blockDiagram-I7D4REHJ-BXK68Qyt.js.br +0 -0
  306. package/dist/client/assets/blockDiagram-I7D4REHJ-BXK68Qyt.js.gz +0 -0
  307. package/dist/client/assets/c4Diagram-7LVT6UL2-BqwmmVmS.js.br +0 -0
  308. package/dist/client/assets/c4Diagram-7LVT6UL2-BqwmmVmS.js.gz +0 -0
  309. package/dist/client/assets/channel-Dd6WQGB7.js +0 -1
  310. package/dist/client/assets/chunk-F27PBJKO-CjUVyF-E.js.br +0 -0
  311. package/dist/client/assets/chunk-F27PBJKO-CjUVyF-E.js.gz +0 -0
  312. package/dist/client/assets/chunk-IMKFNOWR-BR8mmBs7.js.br +0 -0
  313. package/dist/client/assets/chunk-IMKFNOWR-BR8mmBs7.js.gz +0 -0
  314. package/dist/client/assets/chunk-SVP7TREG-BdJtJSmy.js.br +0 -0
  315. package/dist/client/assets/chunk-SVP7TREG-BdJtJSmy.js.gz +0 -0
  316. package/dist/client/assets/chunk-TICWLB2K-CoevFj8I.js.br +0 -0
  317. package/dist/client/assets/chunk-TICWLB2K-CoevFj8I.js.gz +0 -0
  318. package/dist/client/assets/classDiagram-ZZMXUADV-BdIUq_D7.js +0 -1
  319. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BdIUq_D7.js +0 -1
  320. package/dist/client/assets/clipboardText-BWOwer6N.js +0 -1
  321. package/dist/client/assets/clipboardText-BWOwer6N.js.br +0 -0
  322. package/dist/client/assets/clipboardText-BWOwer6N.js.gz +0 -0
  323. package/dist/client/assets/clipboardText-vX90C7eX.css +0 -1
  324. package/dist/client/assets/clipboardText-vX90C7eX.css.br +0 -0
  325. package/dist/client/assets/clipboardText-vX90C7eX.css.gz +0 -0
  326. package/dist/client/assets/cose-bilkent-JH36ORCC-CvnsiaWP.js.br +0 -0
  327. package/dist/client/assets/cose-bilkent-JH36ORCC-CvnsiaWP.js.gz +0 -0
  328. package/dist/client/assets/cynefin-OW5HDTMX-BSGz8Olu.js.br +0 -0
  329. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DYYT0AHs.js.br +0 -0
  330. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DYYT0AHs.js.gz +0 -0
  331. package/dist/client/assets/dagre-GXQ25YYZ-BM883MN7.js.br +0 -0
  332. package/dist/client/assets/dagre-GXQ25YYZ-BM883MN7.js.gz +0 -0
  333. package/dist/client/assets/diagram-S7CK7UJ4-CYnxXy7R.js.br +0 -0
  334. package/dist/client/assets/diagram-S7CK7UJ4-CYnxXy7R.js.gz +0 -0
  335. package/dist/client/assets/diagram-UQ7AKVKN-UOIBVxRf.js.br +0 -0
  336. package/dist/client/assets/diagram-UQ7AKVKN-UOIBVxRf.js.gz +0 -0
  337. package/dist/client/assets/diagram-VSXAHHWV-CqTJzfmm.js.br +0 -0
  338. package/dist/client/assets/diagram-VSXAHHWV-CqTJzfmm.js.gz +0 -0
  339. package/dist/client/assets/diagram-VX7I27RA-T9Y88CFB.js.br +0 -0
  340. package/dist/client/assets/diagram-VX7I27RA-T9Y88CFB.js.gz +0 -0
  341. package/dist/client/assets/diagram-Z3DM3KII-kIQDy7E0.js.br +0 -0
  342. package/dist/client/assets/diagram-Z3DM3KII-kIQDy7E0.js.gz +0 -0
  343. package/dist/client/assets/ebnfDiagram-PWID7BFC-z_VqR_JE.js.br +0 -0
  344. package/dist/client/assets/ebnfDiagram-PWID7BFC-z_VqR_JE.js.gz +0 -0
  345. package/dist/client/assets/erDiagram-RLTQ6QDP-0q52Z-pm.js.br +0 -0
  346. package/dist/client/assets/erDiagram-RLTQ6QDP-0q52Z-pm.js.gz +0 -0
  347. package/dist/client/assets/flowDiagram-HODETNUW-BrGqcUWn.js.br +0 -0
  348. package/dist/client/assets/flowDiagram-HODETNUW-BrGqcUWn.js.gz +0 -0
  349. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CHAN6vQv.js.br +0 -0
  350. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CHAN6vQv.js.gz +0 -0
  351. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C0ZV4FeB.js.br +0 -0
  352. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C0ZV4FeB.js.gz +0 -0
  353. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BxGvUfLX.js.br +0 -0
  354. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BxGvUfLX.js.gz +0 -0
  355. package/dist/client/assets/journeyDiagram-3NMN7TZE-rW9xlQ8G.js.br +0 -0
  356. package/dist/client/assets/journeyDiagram-3NMN7TZE-rW9xlQ8G.js.gz +0 -0
  357. package/dist/client/assets/kanban-definition-UXKFOSKX-CFI5iv9R.js.br +0 -0
  358. package/dist/client/assets/kanban-definition-UXKFOSKX-CFI5iv9R.js.gz +0 -0
  359. package/dist/client/assets/layout-Ct_an5XT.js.br +0 -0
  360. package/dist/client/assets/layout-Ct_an5XT.js.gz +0 -0
  361. package/dist/client/assets/linear-DpEFOA9l.js.br +0 -0
  362. package/dist/client/assets/linear-DpEFOA9l.js.gz +0 -0
  363. package/dist/client/assets/link-34ChBc4F.js.br +0 -0
  364. package/dist/client/assets/link-34ChBc4F.js.gz +0 -0
  365. package/dist/client/assets/mermaid.core-DnVKnMmy.js.br +0 -0
  366. package/dist/client/assets/mermaid.core-DnVKnMmy.js.gz +0 -0
  367. package/dist/client/assets/mindmap-definition-YA3MSWOX-C6shupTY.js.br +0 -0
  368. package/dist/client/assets/mindmap-definition-YA3MSWOX-C6shupTY.js.gz +0 -0
  369. package/dist/client/assets/passwordBootstrap-Doe50DSa.js.br +0 -0
  370. package/dist/client/assets/passwordBootstrap-Doe50DSa.js.gz +0 -0
  371. package/dist/client/assets/pegDiagram-XKGWAZYB-CDcnrvKX.js.br +0 -0
  372. package/dist/client/assets/pegDiagram-XKGWAZYB-CDcnrvKX.js.gz +0 -0
  373. package/dist/client/assets/pieDiagram-E7YTZNPT-CrGc03Tg.js.br +0 -0
  374. package/dist/client/assets/pieDiagram-E7YTZNPT-CrGc03Tg.js.gz +0 -0
  375. package/dist/client/assets/quadrantDiagram-AXDQQJYC-3-aldwKj.js.gz +0 -0
  376. package/dist/client/assets/railroadDiagram-O6MQD6OU-51uKwR2_.js.br +0 -0
  377. package/dist/client/assets/railroadDiagram-O6MQD6OU-51uKwR2_.js.gz +0 -0
  378. package/dist/client/assets/rdpSession-ocpkj4XY.js.br +0 -0
  379. package/dist/client/assets/rdpSession-ocpkj4XY.js.gz +0 -0
  380. package/dist/client/assets/referenceSelection-fvfRDbgp.js.br +0 -0
  381. package/dist/client/assets/referenceSelection-fvfRDbgp.js.gz +0 -0
  382. package/dist/client/assets/requirementDiagram-BXWQKSXE-CY6kp0_Y.js.br +0 -0
  383. package/dist/client/assets/requirementDiagram-BXWQKSXE-CY6kp0_Y.js.gz +0 -0
  384. package/dist/client/assets/sankeyDiagram-P5KCCOFB-BsA0NkHG.js.br +0 -0
  385. package/dist/client/assets/sankeyDiagram-P5KCCOFB-BsA0NkHG.js.gz +0 -0
  386. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BDzn7N2D.js.br +0 -0
  387. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BDzn7N2D.js.gz +0 -0
  388. package/dist/client/assets/sizeCapture-INFHLROL-gxtam7nc.js.br +0 -0
  389. package/dist/client/assets/sizeCapture-INFHLROL-gxtam7nc.js.gz +0 -0
  390. package/dist/client/assets/stateDiagram-D77RDMKH-C4XjYLZR.js.br +0 -0
  391. package/dist/client/assets/stateDiagram-D77RDMKH-C4XjYLZR.js.gz +0 -0
  392. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BfHWFf-I.js +0 -1
  393. package/dist/client/assets/swimlanes-42K2YHIH--a1wkQO8.js.br +0 -0
  394. package/dist/client/assets/swimlanes-42K2YHIH--a1wkQO8.js.gz +0 -0
  395. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DsiDF1XD.js +0 -8
  396. package/dist/client/assets/swiper-CTPycjLq.js.br +0 -0
  397. package/dist/client/assets/swiper-CTPycjLq.js.gz +0 -0
  398. package/dist/client/assets/timeline-definition-24CTP7MA-DFmXXUuU.js.br +0 -0
  399. package/dist/client/assets/timeline-definition-24CTP7MA-DFmXXUuU.js.gz +0 -0
  400. package/dist/client/assets/use-gesture-react.esm-DHU0wi7Q.js.br +0 -0
  401. package/dist/client/assets/use-gesture-react.esm-DHU0wi7Q.js.gz +0 -0
  402. package/dist/client/assets/vennDiagram-4TSXK5OY-DgR4zroQ.js.br +0 -0
  403. package/dist/client/assets/vennDiagram-4TSXK5OY-DgR4zroQ.js.gz +0 -0
  404. package/dist/client/assets/videoCompression-CcffRZdP.js.br +0 -0
  405. package/dist/client/assets/videoCompression-CcffRZdP.js.gz +0 -0
  406. package/dist/client/assets/wardleyDiagram-VM6X3IG4-CY4SVUkf.js.br +0 -0
  407. package/dist/client/assets/wardleyDiagram-VM6X3IG4-CY4SVUkf.js.gz +0 -0
  408. package/dist/client/assets/xychartDiagram-S5SC5T6Z-PblQhR-b.js.br +0 -0
  409. package/dist/client/assets/xychartDiagram-S5SC5T6Z-PblQhR-b.js.gz +0 -0
@@ -0,0 +1,13 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatRichContent-KkN7aIGv.js","assets/app-DZ6mCJiW.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-DaiFCKy_.js","assets/index-DEAMSl55.css","assets/circle-BIJQEbCa.js","assets/search-DAQ_AOVP.js","assets/external-link-DodqgrCc.js","assets/clipboardText-DoB9NjH8.js","assets/clipboardText-C4QKbGHg.css","assets/Markdown-Ip0FYCJ1.js","assets/swiper-BaumVgFd.js","assets/swiper-C2J0D0kV.css","assets/use-gesture-react.esm-CM42s15B.js","assets/referenceSelection-0uCpJjt2.js","assets/list-tree-DxdLnXUB.js","assets/Markdown-DKQhs57e.css","assets/quote-B9G-yF_k.js","assets/arrow-down-Ty3zwcgl.js"])))=>i.map(i=>d[i]);
2
+ import{a9 as Ot,cd as Dt,cq as t,C as Xe,m as Ze,f as Mt,a8 as Pe,es as It,er as $t,be as zt,dG as et,b2 as H,bm as Se,dD as ft,eN as Pt,eE as qt,et as tt,eJ as Ft,S as rt,G as Ht,R as Wt,w as nt,Z as st,bW as at,cY as _t,ak as Kt}from"./app-DZ6mCJiW.js";import{f as Bt,d as Ut,i as Jt,e as Vt,r as je,c as it,s as Gt,w as Qt,C as Yt,P as ot,a as Xt,g as Zt}from"./clipboardText-DoB9NjH8.js";import{b as r}from"./dnd-BCFAPC0L.js";import{M as er}from"./Markdown-Ip0FYCJ1.js";import{Q as Fe}from"./quote-B9G-yF_k.js";import{A as tr}from"./arrow-down-Ty3zwcgl.js";import{A as rr}from"./use-gesture-react.esm-CM42s15B.js";function nr(s){const n=[];for(const l of s){const i=n[n.length-1];l.role==="assistant"&&i?.role==="assistant"?i.messages.push(l):n.push({id:l.id,role:l.role,messages:[l]})}return n}function sr(s){const n=s.slice().reverse().find(l=>l.role==="user");return!n||["failed","expired"].includes(n.status)?!1:!s.some(l=>l.role==="assistant"&&l.replyTo===n.id&&!["ack","progress"].includes(l.responseKind||""))}function ar(s){return{pending:"已发送",delivered:"已发送",stored:"已发送",failed:"发送失败",expired:"发送失败"}[s]||"待确认"}function ir(s,n){const l=new Map(s.map(m=>[m.id,m]));let i=!1;for(const m of n){const v=l.get(m.id);(!v||JSON.stringify(v)!==JSON.stringify(m))&&(l.set(m.id,m),i=!0)}return i?[...l.values()].sort((m,v)=>(m.sequence??m.createdAt)-(v.sequence??v.createdAt)):s}let mt;const or=()=>mt?.ChatRichContent;let ct;function lt(){return ct??=Ot(()=>import("./ChatRichContent-KkN7aIGv.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19])).then(s=>(mt=s,s)).catch(s=>{throw ct=void 0,s})}function cr(s,n,l){const[i,m]=r.useState(!1),v=r.useRef(l);v.current=l;const N=r.useRef();return r.useLayoutEffect(()=>{const h=s.current;if(!n||!h||!Dt())return;let S,T,O;const D=()=>{S!==void 0&&cancelAnimationFrame(S),T!==void 0&&clearTimeout(T),S=void 0,T=void 0,O?.(),O=void 0,m(!1)},d=()=>{O&&(S!==void 0&&cancelAnimationFrame(S),S=requestAnimationFrame(()=>{S=requestAnimationFrame(D)}))};N.current=d;const a=()=>{if(!O){const C=h.style.opacity,J=h.style.transition;O=()=>{h.style.opacity=C,h.style.transition=J}}h.style.transition="none",h.style.opacity="0",m(!0),T!==void 0&&clearTimeout(T),T=setTimeout(D,1200),v.current.isOpen&&v.current.isSettled&&d()},g=h.focus,u=Object.getOwnPropertyDescriptor(h,"focus");h.focus=C=>{a(),g.call(h,{...C,preventScroll:!0})};const w=()=>{(document.activeElement!==h||!v.current.isOpen)&&a()},j=()=>{v.current.isOpen||D()};return h.addEventListener("pointerdown",w,!0),h.addEventListener("focus",a,!0),h.addEventListener("blur",D),h.addEventListener("keydown",j),()=>{h.removeEventListener("pointerdown",w,!0),h.removeEventListener("focus",a,!0),h.removeEventListener("blur",D),h.removeEventListener("keydown",j),u?Object.defineProperty(h,"focus",u):Reflect.deleteProperty(h,"focus"),N.current=void 0,D()}},[s,n]),r.useLayoutEffect(()=>{l.isOpen&&l.isSettled&&N.current?.()},[l.isOpen,l.isSettled]),n&&i}function ut(s,n){return n?`> ${n.author.replace(/[\r\n]/g," ")} · ${n.time}
3
+ ${n.text.replace(/\r\n?/g,`
4
+ `).split(`
5
+ `).map(l=>`> ${l}`).join(`
6
+ `)}
7
+
8
+ ${s.trim()}`:s.trim()}function qe(s){const n=s.split(`
9
+ `),l=n[0].match(/^> (.+) · (\d{2}:\d{2})$/);if(!l)return{text:s,reference:null};let i=1;for(;i<n.length&&n[i].startsWith(">");)i++;return i<2||n[i]!==""?{text:s,reference:null}:{text:n.slice(i+1).join(`
10
+ `),reference:{author:l[1],time:l[2],text:n.slice(1,i).map(m=>m.replace(/^> ?/,"")).join(`
11
+ `)}}}function dt({id:s,root:n,heights:l,estimate:i,eager:m,preserve:v,nearby:N,children:h}){const[S,T]=r.useState(()=>!n||typeof IntersectionObserver>"u"||m),O=r.useRef(null),D=r.useRef(l?.get(s)??i);return r.useEffect(()=>{const d=n?.current,a=O.current;if(!d||!a||typeof IntersectionObserver>"u")return;const g=new IntersectionObserver(u=>{if(!d.clientHeight)return;const w=u.find(j=>j.target===a);if(w){if(w.isIntersecting?N?.add(s):N?.delete(s),w.isIntersecting)T(!0);else if(!v&&!a.contains(document.activeElement)){const j=window.getSelection();(!j?.toString()||!a.contains(j.anchorNode)&&!a.contains(j.focusNode))&&T(!1)}}},{root:d,rootMargin:`${d.clientHeight}px 0px`});return g.observe(a),()=>g.disconnect()},[n,v,N,s]),r.useLayoutEffect(()=>{const d=O.current;if(!S||!d)return;const a=()=>{const u=d.getBoundingClientRect().height;if(u<=0)return;const w=D.current,j=n?.current;j?.clientHeight&&d.getBoundingClientRect().top+w<=j.getBoundingClientRect().top+1&&(j.scrollTop+=u-w),D.current=u,l?.set(s,u)};if(a(),typeof ResizeObserver>"u")return;const g=new ResizeObserver(a);return g.observe(d),()=>g.disconnect()},[S,h,s,n,l]),t.jsx("div",{ref:O,"data-chat-viewport-row":s,style:S?void 0:{height:D.current},children:S?h:t.jsxs("div",{"aria-hidden":"true",className:"space-y-3 py-3",children:[t.jsx("div",{className:"chat-loading-skeleton h-3 w-3/4 rounded bg-surface-2"}),t.jsx("div",{className:"chat-loading-skeleton h-3 w-1/2 rounded bg-surface-2"})]})})}const lr=r.memo(function({content:n}){return t.jsx(er,{content:n})}),He=s=>new Date(s).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hourCycle:"h23"}),ur=new Set(["amp","claude","codex","copilot","cursor","droid","gemini","goose","grok","kimi","opencode"]);function ht({name:s,slug:n}){const l=n&&ur.has(n)?`url(/icons/agents/${n}.svg) center / contain no-repeat`:void 0;return t.jsxs("span",{className:"inline-flex items-center gap-2 font-medium text-foreground/75",children:[l?t.jsx("span",{"aria-hidden":"true",className:"h-4 w-4 shrink-0 bg-current",style:{mask:l,WebkitMask:l}}):t.jsx(Mt,{size:15,"aria-hidden":"true"}),t.jsx("span",{children:s})]})}function pt({reference:s,onRemove:n}){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(Fe,{size:12}),t.jsxs("span",{className:"min-w-0 flex-1 truncate",children:[s.author," · ",s.time]}),n&&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:l=>l.preventDefault(),onClick:n,children:t.jsx(Pe,{size:13})})]}),t.jsx("p",{className:"line-clamp-3 whitespace-pre-wrap break-words text-[13px] leading-6 text-foreground/75",title:s.text,children:s.text})]})}function dr({content:s}){const n=qe(s);return t.jsxs(t.Fragment,{children:[n.reference&&t.jsx(pt,{reference:n.reference}),t.jsx("p",{className:"whitespace-pre-wrap break-words text-[15px] leading-7 sm:text-base",children:n.text})]})}function gt({content:s,createdAt:n,status:l,messageId:i,actionsOpen:m,children:v}){return t.jsxs("article",{"data-chat-turn":"user","data-chat-message":i,"data-actions-open":m||void 0,className:"ml-auto flex w-fit max-w-[88%] flex-col items-end sm:max-w-[85%]",children:[t.jsx("div",{"data-chat-user-bubble":!0,className:"w-fit max-w-full rounded-2xl bg-surface-2 px-4 py-3",children:t.jsx(dr,{content:s})}),t.jsxs("div",{"data-chat-message-actions":!0,className:"chat-user-meta mt-1 flex min-h-8 flex-wrap items-center justify-end gap-2 text-[10px] text-muted-foreground",children:[t.jsx("span",{children:l}),t.jsx("time",{dateTime:new Date(n).toISOString(),title:new Date(n).toLocaleString(),className:"opacity-60",children:He(n)}),v]})]})}const ze="chat-message-action 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",fr=r.memo(function({messages:n,agentName:l,agentSlug:i,canWrite:m,copied:v,onCopy:N,onReference:h,sessionId:S,uiWritable:T,onAction:O,pendingMessage:D,scrollRoot:d,rowHeights:a,nearbyIds:g,initialVisibleIds:u}){const w=r.useMemo(()=>new Set([...u??[],...n.slice(-6).map(f=>f.id)]),[n,u]),j=f=>Math.min(1200,Math.max(80,Math.ceil(f.content.length/65)*28+40)),C=or(),J=r.useRef(new Map),te=r.useMemo(()=>nr(n).map(f=>{if(f.role==="user")return f;const E=f.messages.map(k=>J.current.get(k.id)).find(Boolean)||f.id;for(const k of f.messages)J.current.set(k.id,E);return{...f,id:E}}),[n]),[re,I]=r.useState(null),V=r.useRef(null),W=r.useRef("");return r.useEffect(()=>{const f=k=>{k.target instanceof Node&&!V.current?.contains(k.target)&&I(null)},E=k=>{k.key==="Escape"&&I(null)};return document.addEventListener("pointerdown",f),document.addEventListener("keydown",E),()=>{document.removeEventListener("pointerdown",f),document.removeEventListener("keydown",E)}},[]),t.jsxs("div",{ref:V,className:"space-y-6 sm:space-y-7",onPointerDownCapture:f=>{W.current=f.pointerType},onClick:f=>{if(!f.detail||W.current!=="touch"&&!window.matchMedia?.("(hover: none)").matches)return;const E=f.target instanceof Element?f.target:null;if(!E||E.closest('button, a, input, textarea, select, label, summary, [role="button"], [contenteditable="true"]')||window.getSelection()?.toString().trim())return;const k=E.closest("[data-chat-message]")?.dataset.chatMessage;I(z=>k&&z!==k?k:null)},children:[te.map(f=>{const E=f.messages[f.messages.length-1],k=f.role==="user",z=f.messages.map(y=>y.content).join(`
12
+
13
+ `),de=y=>m&&t.jsx("button",{type:"button","aria-label":"引用消息",title:"引用这条消息",className:`${ze} shrink-0`,onPointerDown:ne=>ne.preventDefault(),onClick:()=>{I(null),h(y)},children:t.jsx(Fe,{size:13})});return k?t.jsx(dt,{id:f.id,root:d,heights:a,nearby:g,estimate:j(E),eager:w.has(E.id),children:t.jsx(gt,{messageId:f.id,actionsOpen:re===f.id,content:z,createdAt:E.createdAt,status:ar(E.status),children:t.jsxs("span",{className:"chat-message-tools",children:[de(E),t.jsxs("button",{type:"button",className:ze,"aria-label":"复制消息",title:"复制",onClick:()=>N(z,f.id),children:[v===f.id?t.jsx(Xe,{size:13}):t.jsx(Ze,{size:13}),v===f.id&&t.jsx("span",{className:"text-[10px]",children:"已复制"})]})]})})},f.id):t.jsxs("article",{"data-chat-turn":"assistant",className:"w-full",children:[t.jsx("div",{className:"mb-2 flex min-h-8 items-center text-[11px] leading-4",children:t.jsx(ht,{name:l,slug:i})}),t.jsx("div",{className:"chat-replies min-w-0",children:f.messages.map((y,ne)=>t.jsx(dt,{id:y.id,root:d,heights:a,nearby:g,estimate:j(y),eager:w.has(y.id),preserve:!!y.ui,children:t.jsxs("div",{"data-chat-message":y.id,"data-actions-open":re===y.id||void 0,className:"chat-reply min-w-0",children:[t.jsx("div",{className:"session-chat-markdown min-w-0 break-words",children:y.ui&&C?t.jsx(C,{message:y,sessionId:S,canWrite:T,onAction:O},y.id):t.jsx(lr,{content:y.content})}),t.jsxs("div",{"data-chat-message-actions":!0,className:"chat-reply-meta flex items-center justify-between gap-2",children:[t.jsxs("span",{className:"chat-message-tools",children:[de(y),t.jsxs("button",{type:"button",className:ze,"aria-label":"复制回复",title:"复制",onClick:()=>N(y.content,y.id),children:[v===y.id?t.jsx(Xe,{size:13}):t.jsx(Ze,{size:13}),v===y.id&&t.jsx("span",{className:"text-[10px]",children:"已复制"})]})]}),ne<f.messages.length-1&&t.jsx("span",{"aria-hidden":"true",className:"chat-reply-divider min-w-0 flex-1"}),t.jsx("time",{className:"shrink-0 text-[11px] tabular-nums text-muted-foreground/60",dateTime:new Date(y.createdAt).toISOString(),title:new Date(y.createdAt).toLocaleString(),children:He(y.createdAt)})]})]})},y.id))})]},f.id)}),D]})});function mr(s){const n=r.useRef(s);n.current=s;const[l,i]=r.useState(null),m=r.useRef(null),v=r.useRef(!0),N=r.useCallback(()=>{m.current?.controller.abort();const d=n.current,a=et(),g=H(),u=Se(),w=document.activeElement,j=new AbortController,C={controller:j,current:()=>v.current&&!j.signal.aborted&&m.current===C&&n.current.active&&n.current.canWrite&&n.current.sessionId===d.sessionId&&et()===a&&H()===g&&!g?.closed&&Se()===u,focus:()=>document.activeElement===w||document.activeElement===d.input.current||document.activeElement===document.body};return m.current=C,C},[]);r.useEffect(()=>{const d=()=>{m.current&&!m.current.current()&&(m.current.controller.abort(),m.current=null,i(null))};d();const a=()=>{m.current?.controller.abort(),m.current=null,i(null)};return window.addEventListener("termdock:secure-state",d),window.addEventListener("auth:unauthorized",a),document.addEventListener("focusin",d),()=>{window.removeEventListener("termdock:secure-state",d),window.removeEventListener("auth:unauthorized",a),document.removeEventListener("focusin",d)}},[s.active,s.canWrite,s.sessionId]),r.useEffect(()=>(v.current=!0,()=>{v.current=!1,m.current?.controller.abort()}),[]);const h=r.useCallback(async(d,a,g=[])=>{if(d.current()){i({stage:"uploading",percent:a.length?0:void 0,files:a,paths:g}),n.current.error("");try{if(a.length&&!n.current.directory&&!n.current.sessionAttachments)throw new Error("附件上传暂不可用,请重试");const u=C=>{d.current()&&i({stage:"uploading",percent:Math.round(C),files:a,paths:g})},w=a.length?n.current.sessionAttachments?await It(n.current.sessionId,a,d.controller.signal,u,d.current):await $t(n.current.directory,a,d.controller.signal,u,d.current):{files:[]};if(!d.current())return;if(w.files.length!==a.length||w.files.some(C=>!C.path))throw new Error("部分文件未上传成功,请重试");const j=[...g,...w.files.map(C=>C.path)];if(!j.length)throw new Error("没有可添加的文件");n.current.insert(`${j.map(zt).join(" ")} `,d.focus()),i(null),m.current=null}catch(u){if(!d.current())return;i({stage:"failed",files:a,paths:g}),n.current.error(u instanceof Error?u.message:"文件上传失败,请重试")}}},[]),S=r.useCallback(d=>{!n.current.active||!n.current.canWrite||!d.length||h(N(),d)},[N,h]),T=r.useCallback(async d=>{if(!n.current.active||!n.current.canWrite)return;const a=N();i({stage:"reading"}),n.current.error("");const g=u=>{a.current()&&(n.current.insert(u,a.focus()),i(null),m.current=null)};try{const u=await Bt(d,a.current);if(u.kind==="text"){g(u.text);return}if(u.kind==="files"){const w=u.files.length===1&&u.files[0].type.startsWith("image/")?[Ut(u.files[0])]:u.files;return await h(a,w,u.paths)}throw new Error("剪贴板没有可读取的内容,请使用系统粘贴或选择文件")}catch(u){a.current()&&(i(null),n.current.error(u instanceof Error?u.message:"粘贴失败,请重试"))}},[N,h]);return{transfer:l,addFiles:S,paste:T,cancel:()=>{m.current?.controller.abort(),m.current=null,i(d=>d?{...d,stage:"cancelled"}:null)},retry:()=>{(l?.files?.length||l?.paths?.length)&&h(N(),l.files||[],l.paths)},dismiss:()=>i(null),busy:l?.stage==="reading"||l?.stage==="uploading"}}const Ne="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 hr({sessionId:s,name:n="当前会话",canWrite:l=!0,active:i=!0,terminalLink:m=!1,onKeyboardChange:v,onReadyChange:N,onTerminal:h}){const S=Pt(),T=Zt(S),O=Jt({enabled:i&&S}),D=r.useRef(v);D.current=v,r.useEffect(()=>{D.current?.(i&&O.isOpen)},[i,O.isOpen]);const d=qt(),a=l&&d.has("session.input");r.useEffect(()=>(N?.(!0),()=>N?.(!1)),[N]);const g=`termdock:chat:${ft()?.targetPeerId||location.origin}:${s}`,[u]=r.useState(()=>Vt(g)),[w,j]=r.useState(u?.hasOlder??!1),[C,J]=r.useState(!1),[te,re]=r.useState(u?.replyPending),[I,V]=r.useState(()=>{try{return sessionStorage.getItem(`${g}:draft`)||""}catch{return""}}),[W,f]=r.useState(()=>{try{const e=JSON.parse(sessionStorage.getItem(`${g}:reference`)||"null");return e&&typeof e.author=="string"&&typeof e.time=="string"&&typeof e.text=="string"?e:null}catch{return null}}),[E,k]=r.useState(null),[z,de]=r.useState(u?.agentName??"助手"),[y,ne]=r.useState(u?.agentSlug),[xt,Ee]=r.useState(!1),[R,fe]=r.useState(()=>{try{return JSON.parse(sessionStorage.getItem(`${g}:pending`)||"null")}catch{return null}}),[q,We]=r.useState(u?.messages??[]),[bt,ke]=r.useState(!u),[G,vt]=r.useState(u?.agentAvailable),[Ce,Q]=r.useState(""),[yt,Z]=r.useState(!1),[wt,_e]=r.useState(!!u);tt(i&&yt?{tone:"recovering",message:"正在恢复对话同步…"}:null),tt(i&&Ce?{message:Ce}:null);const[me,Ke]=r.useState(!1),[jt,Re]=r.useState(!1),[Nt,St]=r.useState(""),B=r.useRef(null),_=r.useRef(null),Et=cr(_,i&&S,O),K=r.useRef(u?.nearBottom??!0),Ae=r.useRef(!1),se=r.useRef(0),Le=r.useRef(0),Te=r.useRef(null),Oe=r.useRef(null),Be=r.useRef(null),ae=r.useRef(0),De=r.useRef(R);De.current=R;const Me=r.useRef(),ie=r.useRef(q);ie.current=q;const $=r.useRef({hasOlder:u?.hasOlder??!1,hasNewer:u?.hasNewer??!1}),he=r.useRef(!1),ee=r.useRef(),pe=r.useRef(0),Ie=r.useRef(0),Ue=r.useRef(null),[ge]=r.useState(()=>new Set(u?.visibleMessageIds)),[Je]=r.useState(()=>new Map(u?.rowHeights)),oe=r.useRef(u?.scrollTop??0),ce=r.useRef(),F=r.useRef({active:i,canWrite:a,sessionId:s});F.current={active:i,canWrite:a,sessionId:s};const $e=Ft(),X=r.useCallback((e,c=!0)=>{const o=_.current,b=o?.selectionStart,p=o?.selectionEnd,L=F.current,M=H(),x=Se();V(U=>{const Y=Math.min(b??U.length,U.length),ye=Math.min(p??Y,U.length),we=U.slice(0,Y)+e+U.slice(ye);return requestAnimationFrame(()=>{o?.isConnected&&o.value===we&&F.current.active&&F.current.canWrite&&F.current.sessionId===L.sessionId&&H()===M&&Se()===x&&(c&&o.focus({preventScroll:!0}),o.setSelectionRange(Y+e.length,Y+e.length))}),we})},[]),A=mr({sessionId:s,active:i,canWrite:a,input:_,insert:X,error:Q,sessionAttachments:!!$e,directory:$e?$e.directories?.find(e=>e.access==="write")?.path:"/tmp"}),Ve=r.useCallback((e,c)=>{if(!i||!a)return;const o=c||qe(e.content).text;if(new TextEncoder().encode(o).byteLength>8e3){Q("这条消息较长,请选中需要引用的内容。");return}k(null),f({author:e.role==="user"?"用户":z,time:He(e.createdAt),text:o}),Q(""),window.getSelection()?.removeAllRanges(),_.current?.focus({preventScroll:!0})},[i,a,z]);r.useEffect(()=>{if(!i||!a){k(null);return}const e=()=>{const c=window.getSelection(),o=c?.toString().trim(),b=x=>x instanceof Element?x:x?.parentElement,p=b(c?.anchorNode)?.closest("[data-chat-message]"),L=b(c?.focusNode)?.closest("[data-chat-message]"),M=o&&p===L&&p&&Oe.current?.contains(p)?{id:p.dataset.chatMessage,text:o}:null;k(x=>x?.id===M?.id&&x?.text===M?.text?x:M)};return document.addEventListener("selectionchange",e),()=>document.removeEventListener("selectionchange",e)},[i,a]),r.useEffect(()=>{try{W?sessionStorage.setItem(`${g}:reference`,JSON.stringify(W)):sessionStorage.removeItem(`${g}:reference`)}catch{}},[g,W]);const kt=`/api/terminal/${encodeURIComponent(s)}/chat`,xe=r.useCallback((e,c=!1)=>{const o=ir(c?[]:ie.current,e);ie.current=o,We(o)},[]),be=r.useCallback(async(e,c=!1)=>{e=AbortSignal.any([...e?[e]:[],AbortSignal.timeout(15e3)]);const o=++Le.current,b=H(),p=ie.current,L=c?void 0:p[p.length-1]?.id,M=De.current?{requestId:De.current.requestId}:{};let x;try{x=await je(s,e,c?void 0:Me.current,{...L?{after:L}:{},...M})}catch(P){if(!L||P.status!==404)throw P;x=await je(s,e,void 0,M),c=!0}if(e.aborted||o!==Le.current||H()!==b)return;if(x.unchanged&&x.revision&&x.revision===Me.current){ke(!1),Z(!1),_e(!0);return}x.page?.hasNewer&&K.current&&!$.current.hasNewer&&(x=await je(s,e,void 0,M),c=!0);const U=x.messages;if(!Array.isArray(U)||x.updates!==void 0&&!Array.isArray(x.updates))throw new Error("暂时无法读取对话,请重试");const Y=[...x.updates??[],...U];if(Y.some(P=>P.ui)&&await lt(),e.aborted||o!==Le.current||H()!==b)return;vt(x.agentAvailable===!0),de(typeof x.agent?.displayName=="string"&&x.agent.displayName.trim()?x.agent.displayName:"助手"),ne(typeof x.agent?.slug=="string"?x.agent.slug:void 0),Me.current=typeof x.revision=="string"?x.revision:void 0;const ye=c||p.length===0;ye&&(ge.clear(),Ie.current++,ee.current?.abort(),$.current.hasOlder=x.page?.hasOlder===!0,j($.current.hasOlder)),re(x.replyPending),$.current.hasNewer=x.page?.hasNewer===!0;const we=new Set(p.map(P=>P.id));($.current.hasNewer||p.length&&!K.current&&U.some(P=>!we.has(P.id)))&&Re(!0),xe(Y,ye),fe(P=>P&&(x.confirmedRequestId===P.requestId||Y.some(Tt=>Tt.requestId===P.requestId))?null:P),ke(!1),Z(!1),_e(!0)},[s,xe,ge]),ve=r.useCallback(async()=>{const e=ie.current[0]?.id;if(!F.current.active||!$.current.hasOlder||!e||he.current||Date.now()<pe.current)return;const c=new AbortController,o=H(),b=Ie.current;ee.current=c,he.current=!0,J(!0);try{const p=await je(s,c.signal,void 0,{before:e});if(!Array.isArray(p.messages))throw new Error("对话分页无效");if(p.messages.some(M=>M.ui)&&await lt(),c.signal.aborted||H()!==o||b!==Ie.current||!F.current.active)return;const L=B.current;L&&(ce.current={top:L.scrollTop,height:L.scrollHeight}),$.current.hasOlder=p.page?.hasOlder===!0,j($.current.hasOlder),xe(p.messages),pe.current=0}catch(p){c.signal.aborted||(p.status===404?($.current.hasOlder=!1,j(!1)):(pe.current=Date.now()+5e3,Z(!0)))}finally{ee.current===c&&(he.current=!1,ee.current=void 0,F.current.active&&J(!1))}},[s,xe]);r.useEffect(()=>{const e=Ue.current,c=B.current;if(!i||!w||!e||!c)return;const o=()=>{pe.current=0,c.scrollTop<c.clientHeight&&ve()};window.addEventListener("online",o);const b=typeof IntersectionObserver>"u"?void 0:new IntersectionObserver(p=>{p.some(L=>L.isIntersecting)&&ve()},{root:c,rootMargin:`${c.clientHeight}px 0px`});return b?.observe(e),()=>{b?.disconnect(),window.removeEventListener("online",o)}},[i,w,q.length,ve]),r.useEffect(()=>(i||J(!1),()=>{ee.current?.abort(),ee.current=void 0,he.current=!1}),[i]),r.useEffect(()=>{if(!i)return;const e=new AbortController;let c=!1,o=0,b;const p=async()=>{if(!(c||document.visibilityState==="hidden")){clearTimeout(b),c=!0;try{await be(e.signal),o=0}catch{e.signal.aborted||(o++,Z(!0),ke(!1))}finally{c=!1,e.signal.aborted||(b=setTimeout(()=>{p()},Math.min(3e4,2500*2**o)))}}};return p(),window.addEventListener("online",p),window.addEventListener(rt,p),document.addEventListener("visibilitychange",p),()=>{e.abort(),clearTimeout(b),window.removeEventListener("online",p),window.removeEventListener(rt,p),document.removeEventListener("visibilitychange",p)}},[i,be]),r.useEffect(()=>()=>{se.current++},[]),r.useEffect(()=>{try{sessionStorage.setItem(`${g}:draft`,I)}catch{}},[g,I]),r.useEffect(()=>{try{R?sessionStorage.setItem(`${g}:pending`,JSON.stringify(R)):sessionStorage.removeItem(`${g}:pending`)}catch{}},[g,R]);const le=r.useCallback(()=>{const e=B.current;e&&e.clientHeight&&(e.scrollTop=e.scrollHeight,oe.current=e.scrollTop,K.current=!0,$.current.hasNewer||Re(!1))},[]);r.useEffect(()=>{if(!Te.current||typeof ResizeObserver>"u")return;const e=new ResizeObserver(()=>{F.current.active&&K.current&&le()});return e.observe(Te.current),B.current&&e.observe(B.current),()=>e.disconnect()},[le]),r.useLayoutEffect(()=>{const e=B.current;!i||!e||(ce.current?(e.scrollTop=ce.current.top+e.scrollHeight-ce.current.height,oe.current=e.scrollTop,ce.current=void 0):K.current?le():e.scrollTop=oe.current)},[q,R,i,w,le]);const Ge=r.useRef({messages:q,agentName:z,agentSlug:y,agentAvailable:G,replyPending:te,hasOlder:w,hasNewer:$.current.hasNewer});Ge.current={messages:q,agentName:z,agentSlug:y,agentAvailable:G,replyPending:te,hasOlder:w,hasNewer:$.current.hasNewer},r.useEffect(()=>{const e=H(),c=it();return()=>{const o=Ge.current;o.agentAvailable!==void 0&&H()===e&&c===it()&&Gt(g,{...o,agentAvailable:o.agentAvailable,scrollTop:oe.current,nearBottom:K.current,rowHeights:[...Je],visibleMessageIds:[...ge]})}},[g]),r.useLayoutEffect(()=>{const e=_.current;e&&(e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,176)}px`)},[I,i]),r.useEffect(()=>{const e=_.current;if(!e||typeof ResizeObserver>"u")return;let c=0;const o=new ResizeObserver(()=>{e.clientWidth!==c&&(c=e.clientWidth,e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,176)}px`)});return o.observe(e),()=>o.disconnect()},[]);const ue=async(e,c)=>{if(Ae.current||A.busy||!F.current.active||!F.current.canWrite||G!==!0)return!1;const o=e||{content:c??ut(I,W),requestId:crypto.randomUUID(),createdAt:Date.now()};if(!o.content||new TextEncoder().encode(o.content).byteLength>32e3)return!1;Ae.current=!0,Ke(!0),Q(""),re(void 0),fe(o),K.current=!0,!e&&c===void 0&&(V(""),f(null));const b=se.current;try{const p=await fetch(kt,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:o.content,requestId:o.requestId}),signal:AbortSignal.timeout(2e4)}),L=await p.json();if(!p.ok)throw new Error("发送失败,请重试。");if(b!==se.current)return!1;fe(null),We(M=>M.some(x=>x.id===L.id)?M:[...M,{...o,id:L.id,role:"user",status:L.status}]);try{await be()}catch{Z(!0)}return!0}catch(p){return b===se.current&&Q(p instanceof Error&&p.name==="TimeoutError"?"发送状态待确认,请重试。":"发送失败,请重试。"),!1}finally{Ae.current=!1,b===se.current&&Ke(!1)}};r.useEffect(()=>{const e=c=>{const o=c.detail;i&&a&&o.sessionId===s&&X(o.text)};return window.addEventListener("termdock:chat-insert",e),()=>window.removeEventListener("termdock:chat-insert",e)},[s,i,a,X]),r.useEffect(()=>{if(!i)return;const e=c=>{const o=c.detail;if(!o?.text||o.sessionId!==s)return;c.stopImmediatePropagation();const b=a&&(!o.ownedPaste||!!Kt(o,s));b&&X(o.text,o.focus!==!1),o.nonce&&window.dispatchEvent(new CustomEvent("termdock-insert-reference-ack",{detail:{nonce:o.nonce,ok:b}}))};return window.addEventListener("termdock-insert-reference",e,!0),()=>window.removeEventListener("termdock-insert-reference",e,!0)},[s,i,a,X]);const Qe=r.useRef(ue);Qe.current=ue;const Ct=r.useCallback(e=>Qe.current(void 0,e),[]),Rt=r.useCallback((e,c)=>{Qt(e,()=>Oe.current?.isConnected===!0).then(o=>{o?St(c):Q("复制失败,请选择正文复制")})},[]),At=async()=>{if($.current.hasNewer){K.current=!0;try{await be(void 0,!0)}catch{Z(!0)}}le()},Lt=G===!0&&!R&&(te??sr(q)),Ye=new TextEncoder().encode(ut(I,W)).byteLength>32e3;return t.jsxs("section",{ref:Oe,style:T.rootStyle,"data-session-chat":!0,onDragEnter:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),ae.current++,a&&Ee(!0))},onDragOver:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),e.dataTransfer.dropEffect=a?"copy":"none")},onDragLeave:e=>{e.dataTransfer.types.includes("Files")&&(ae.current=Math.max(0,ae.current-1),ae.current||Ee(!1))},onDrop:e=>{let c;try{c=_t(e.dataTransfer)}catch(b){e.preventDefault(),Q(b instanceof Error?b.message:"文件引用无效");return}if(c&&a){e.preventDefault(),e.stopPropagation(),X(c);return}const o=Array.from(e.dataTransfer.files);if(o.length)e.preventDefault(),e.stopPropagation(),Ee(!1),ae.current=0,A.addFiles(o);else if(a&&e.target.closest("[data-chat-composer]")){const b=e.dataTransfer.getData("text/plain");b&&(e.preventDefault(),X(b))}},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":`${n}对话`,children:[t.jsx("div",{ref:B,style:T.contentStyle,className:"session-chat-scroll min-h-0 flex-1 overflow-y-auto overscroll-contain px-4 [overflow-anchor:none] sm:px-8",onScroll:()=>{const e=B.current;!i||!e.clientHeight||(oe.current=e.scrollTop,K.current=e.scrollHeight-e.scrollTop-e.clientHeight<96,K.current&&!$.current.hasNewer&&Re(!1),e.scrollTop<e.clientHeight&&ve())},children:t.jsxs("div",{ref:Te,className:"mx-auto flex min-h-full w-full max-w-screen-2xl flex-col py-5 sm:py-8",children:[w&&t.jsx("div",{ref:Ue,"data-chat-older-edge":!0,"aria-hidden":"true",className:"h-12 shrink-0",children:C&&t.jsxs("div",{className:"space-y-2 py-2",children:[t.jsx("div",{className:"chat-loading-skeleton h-3 w-3/4 rounded bg-surface-2"}),t.jsx("div",{className:"chat-loading-skeleton h-3 w-1/2 rounded bg-surface-2"})]})}),(bt||!wt)&&!q.length&&!R?t.jsx(Yt,{}):!q.length&&!R?t.jsxs("div",{className:"session-chat-welcome my-auto py-6",children:[t.jsx(Ht,{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:"直接描述你的目标,或从一个问题开始。"}),t.jsx("div",{className:"mt-5 flex flex-wrap gap-2",children:["帮我梳理一下当前工作","请解释一下刚才的结果","我们继续下一步"].map(e=>t.jsx("button",{type:"button",className:`${Ne} border border-border/60 text-left text-xs text-muted-foreground`,disabled:!a,onClick:()=>{V(e),_.current?.focus({preventScroll:!0})},children:e},e))})]}):t.jsx(fr,{pendingMessage:R&&t.jsx(gt,{content:R.content,createdAt:R.createdAt,status:me?"发送中…":"待重试",children:!me&&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=qe(R.content);V(e.text),f(e.reference),fe(null),Q(""),_.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:!a||G!==!0,onClick:()=>{ue(R)},children:[t.jsx(Wt,{size:12}),"重试发送"]})]})}),sessionId:s,uiWritable:i&&a&&!R&&!me&&G===!0,onAction:Ct,messages:q,scrollRoot:B,rowHeights:Je,nearbyIds:ge,initialVisibleIds:u?.visibleMessageIds,agentName:z,agentSlug:y,canWrite:a,copied:Nt,onReference:Ve,onCopy:Rt}),Lt&&!Ce&&t.jsxs("div",{"data-chat-reply-status":!0,role:"status","aria-label":`${z}工作中`,"aria-live":"polite",className:"mt-6 inline-flex w-fit max-w-full items-center gap-3 self-start rounded-lg border border-border/50 bg-[color-mix(in_srgb,var(--surface)_35%,var(--chrome-bg))] px-3 py-2 text-xs text-muted-foreground",children:[t.jsx(ht,{name:z,slug:y}),t.jsxs("span",{className:"inline-flex shrink-0 items-center gap-1.5",children:[t.jsx(nt,{size:14,className:"animate-spin text-primary motion-reduce:animate-none"}),t.jsx("span",{children:"工作中…"})]})]})]})}),xt&&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(ot,{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:[jt&&t.jsx("div",{className:"flex justify-center pb-2",children:t.jsxs("button",{type:"button",className:`${Ne} rounded-full border border-border bg-surface text-xs shadow-lg`,onClick:()=>{At()},children:[t.jsx(tr,{size:14}),"查看新消息"]})}),t.jsxs("div",{className:"relative mx-auto max-w-screen-2xl",children:[G===!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:Ne,onClick:h,children:[t.jsx(st,{size:14}),"打开终端"]})]}),E&&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=q.find(c=>c.id===E.id);e&&Ve(e,E.text)},children:[t.jsx(Fe,{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:E.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:()=>{k(null),window.getSelection()?.removeAllRanges()},children:t.jsx(Pe,{size:13})})]})}),A.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:[A.busy&&t.jsx(nt,{size:13,className:"animate-spin text-primary"}),t.jsx("span",{className:"min-w-0 flex-1",children:A.transfer.stage==="reading"?"正在读取剪贴板…":A.transfer.stage==="uploading"?`正在上传文件${A.transfer.percent===void 0?"…":` · ${A.transfer.percent}%`}`:A.transfer.stage==="cancelled"?"已取消上传":"上传未完成,文件尚未添加"}),A.busy?t.jsx("button",{type:"button",className:"min-h-9 px-2",onClick:A.cancel,children:"取消"}):t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"min-h-9 px-2 text-primary",onClick:A.retry,children:"重试上传"}),t.jsx("button",{type:"button","aria-label":"关闭上传提示",className:"min-h-9 px-2",onClick:A.dismiss,children:t.jsx(Pe,{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(),R||ue()},children:[W&&t.jsx(pt,{reference:W,onRemove:()=>f(null)}),t.jsxs("div",{className:"flex items-end gap-2",children:[t.jsx("input",{ref:Be,type:"file",multiple:!0,tabIndex:-1,className:"hidden","aria-label":"选择附件",onChange:e=>{A.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:!a||A.busy,onPointerDown:e=>e.preventDefault(),onClick:()=>Be.current?.click(),children:t.jsx(ot,{size:18})}),t.jsxs("div",{className:"relative min-w-0 flex-1",children:[Et&&t.jsx("div",{"aria-hidden":"true",className:`pointer-events-none absolute inset-0 overflow-hidden whitespace-pre-wrap break-words px-1 py-2 text-base leading-7 ${I?"":"text-muted-foreground/60"}`,children:I||(a?"输入消息…":"此会话仅允许查看")}),t.jsx("textarea",{ref:_,onFocus:()=>k(null),onPaste:e=>{const{files:c,text:o}=Xt(e.clipboardData);(c.length||at()?.readClipboardFiles||!o&&(at()||typeof navigator.clipboard?.read=="function"))&&(e.preventDefault(),A.paste({files:c,text:o}))},rows:1,autoComplete:"off",className:"session-chat-input block w-full min-w-0 resize-none bg-transparent px-1 py-2 text-base leading-7 outline-none placeholder:text-muted-foreground/60","aria-label":`给${z}的消息`,placeholder:a?"输入消息…":"此会话仅允许查看",value:I,disabled:!a,onChange:e=>V(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key==="Enter"&&!e.shiftKey&&!e.altKey&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&(e.preventDefault(),R||ue())}})]}),t.jsx("button",{type:"submit","aria-label":"发送消息",onPointerDown:e=>{document.activeElement===_.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:me||A.busy||!!R||!I.trim()||Ye||!a||G!==!0,children:t.jsx(rr,{size:19})})]})]}),Ye?t.jsx("p",{className:"mt-2 px-1 text-xs text-destructive",children:"消息过长,请缩短后发送。"}):a?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:`${Ne} min-h-9 px-2 text-xs text-muted-foreground`,onClick:h,children:[t.jsx(st,{size:13}),"查看终端"]})})]})]})]})}function pr(s){return t.jsx(hr,{...s},`${ft()?.targetPeerId||location.origin}:${s.sessionId}`)}const Nr=Object.freeze(Object.defineProperty({__proto__:null,SessionChatView:pr},Symbol.toStringTag,{value:"Module"}));export{lr as C,Nr as S};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AndroidMirrorView-BGagwKtL.js","assets/app-CovJYQoW.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-DaiFCKy_.js","assets/index-DEAMSl55.css","assets/v4-EwEgHOG0.js","assets/RecordingSaveDialog-CoRGi97z.js","assets/use-gesture-react.esm-DHU0wi7Q.js","assets/gestureArbiter-DszagC-d.js","assets/unplug-CnZtWzVW.js","assets/circle-xgKDXpwG.js","assets/ComputerControlView-CwB-wQqB.js","assets/chevron-left-CxeWIsDK.js","assets/clipboard-DeK6pJD3.js","assets/maximize-2-CbvSsu7O.js","assets/RightSidebar-DNY2kC6B.js","assets/swiper-CTPycjLq.js","assets/swiper-C2J0D0kV.css","assets/Markdown-C8OP1j-g.js","assets/referenceSelection-fvfRDbgp.js","assets/list-tree-48dzbuUh.js","assets/Markdown-DKQhs57e.css","assets/GitLoadingSkeleton-DKRTc5sz.js","assets/DiffReview-YOPDWqhv.js","assets/DiffViewer-mh9cBl5v.js","assets/git-compare-BmKAtQTt.js","assets/DiffViewer-T3uj2-aP.css","assets/triangle-alert-DgGU_xB4.js","assets/ChangeWalkthroughPanel-6DN-2BdR.js","assets/search-CbpNLSpd.js","assets/arrow-down-WyzmLXwQ.js","assets/RightSidebar-DW-JEgm2.css"])))=>i.map(i=>d[i]);
2
- import{e0 as L,cq as e,W as A,X as $,H as O,t as D,a8 as V,aQ as M,as as _,a9 as k,eK as F,c as I,J as U,cX as J,er as K,s as X,es as B,ax as W}from"./app-CovJYQoW.js";import{b as s}from"./dnd-BCFAPC0L.js";import{S as q,R as H,U as Q}from"./RecordingSaveDialog-CoRGi97z.js";import"./react-XDCjal2T.js";import"./terminal-DaiFCKy_.js";import"./use-gesture-react.esm-DHU0wi7Q.js";import"./gestureArbiter-DszagC-d.js";const G=s.lazy(()=>k(()=>import("./AndroidMirrorView-BGagwKtL.js").then(n=>n.c),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(n=>({default:n.AndroidMirrorView}))),Y=s.lazy(()=>k(()=>import("./ComputerControlView-CwB-wQqB.js").then(n=>n.a),__vite__mapDeps([12,1,2,3,4,5,13,10,14,15]))),Z=s.lazy(()=>k(()=>import("./RightSidebar-DNY2kC6B.js").then(n=>n.R),__vite__mapDeps([16,1,2,3,4,5,17,18,19,8,20,21,22,23,7,9,24,25,26,27,28,29,13,15,0,6,10,11,30,31,32])).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 ee({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 x=async(u,r)=>{const o=W(r),g=n,c=()=>a.current&&o()&&d.current.sessionId===g&&d.current.canWrite;if(!g||!c())throw new Error("此会话当前无法添加附件");const h=(await B(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?x: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(H,{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 te({directories:n,onInsert:f,onDirty:m}){const[l,b]=s.useState(n[0]?.path||""),[a,d]=s.useState(null),[x,u]=s.useState(null),[r,o]=s.useState(),[g,c]=s.useState(""),[p,h]=s.useState(!1),[R,N]=s.useState(0),[E,i]=s.useState(!1),y=s.useRef(null),w=s.useRef(!0);s.useEffect(()=>()=>{w.current=!1},[]),s.useEffect(()=>{n.some(t=>t.path===l)||(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)),T=async()=>{if(r){h(!0),c("");try{const t=await fetch(`/api/terminal/fs/write?${new URLSearchParams({path:r.path})}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:r.content,original:r.original})}),j=await t.json();if(!t.ok)throw new Error(j.error);w.current&&(o(void 0),N(S=>S+1))}catch(t){w.current&&c(t instanceof Error?t.message:"保存失败,编辑内容已保留")}finally{w.current&&h(!1)}}};s.useEffect(()=>{const t=!!r&&r.content!==r.original;m(t);const j=S=>{t&&(S.preventDefault(),S.returnValue="")};return window.addEventListener("beforeunload",j),()=>{window.removeEventListener("beforeunload",j),m(!1)}},[r,m]);const z=()=>{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||p,onClick:()=>{d(null),c("")},children:[e.jsx(I,{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:p,onClick:()=>{h(!0),c(""),J(a).then(t=>{if(t.binary||t.truncated||t.size>1024*1024)throw new Error("仅支持编辑 1 MB 以内的完整文本");w.current&&o({path:a,content:t.content,original:t.content})}).catch(t=>c(t.message)).finally(()=>h(!1))},children:[e.jsx(U,{size:14}),"编辑"]})]}):e.jsxs(e.Fragment,{children:[e.jsx("select",{"aria-label":"共享目录",className:"min-h-11 min-w-0 flex-1 rounded-lg bg-surface px-2 text-xs",value:l,onChange:t=>{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:p,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 S=l;h(!0),c(""),K(S,j).then(()=>{F.getState().invalidateDirectoryCache(S),N(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:p,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:p,onClick:z,children:"取消编辑"}),e.jsx("button",{type:"button",className:`${v} bg-primary text-primary-foreground`,disabled:p,onClick:()=>{T()},children:p?"正在保存…":"保存修改"})]})})]}):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(Z,{filePath:a,onInsertReference:t=>f(t),onInsertText:f,onReferenceCopied:()=>{},isMobile:!0,markdownOutlineOpen:!1,markdownImageLightboxOpen:!1,lineRange:x,onLineRangeChange:u,insertedReferenceKey:null,copiedReferenceKey:null},`${a}:${R}`)})}):e.jsx("div",{className:"min-h-0 flex-1 overflow-auto",children:e.jsx(X,{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 x=L(n),[u,r]=s.useState(x[0]),o=x.includes(u)?u:x[0],g=s.useRef(!1),c=s.useRef(i=>{g.current=i}).current,p=async i=>{i!==u&&(g.current&&!await M({title:"放弃文件修改?",message:"当前文件有未保存的修改。",confirmLabel:"放弃修改",cancelLabel:"继续编辑"})||r(i))},[h,R]=s.useState(0),N=n.computers?.[h]??n.computers?.[0],E=o==="computer"?{...n,computers:N?[N]:[]}:n;return x.length?e.jsx(A.Provider,{value:E,children:e.jsx(q,{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:x.length>1?"tablist":void 0,"aria-label":"侧栏功能",className:"flex min-w-0 flex-1 gap-1",children:x.map(i=>{const[y,w]=i==="android"?["手机",$]:i==="computer"?["电脑",O]:["文件",D];return x.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:()=>{p(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(V,{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(ee,{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(Y,{active:b},JSON.stringify(N))]}),o==="files"&&e.jsx(te,{directories:n.directories,onInsert:d,onDirty:c})]})]})})}):null}export{ce as SessionResourceSidebar};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/AndroidMirrorView-COoPljXi.js","assets/app-DZ6mCJiW.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-DaiFCKy_.js","assets/index-DEAMSl55.css","assets/v4-EwEgHOG0.js","assets/RecordingSaveDialog-Czkjuaeu.js","assets/use-gesture-react.esm-CM42s15B.js","assets/gestureArbiter-DszagC-d.js","assets/unplug-BQxOculv.js","assets/circle-BIJQEbCa.js","assets/ComputerControlView-CnaeZBuh.js","assets/chevron-left-CVjGQZf0.js","assets/clipboard-DV8t7tww.js","assets/maximize-2-Clx4ktqB.js","assets/RightSidebar-BvYh2_n2.js","assets/swiper-BaumVgFd.js","assets/swiper-C2J0D0kV.css","assets/Markdown-Ip0FYCJ1.js","assets/referenceSelection-0uCpJjt2.js","assets/list-tree-DxdLnXUB.js","assets/Markdown-DKQhs57e.css","assets/GitLoadingSkeleton-RRbTeMuA.js","assets/DiffReview-DHi_V-SX.js","assets/DiffViewer-CyDc8WOB.js","assets/git-compare-KkbucDhN.js","assets/DiffViewer-T3uj2-aP.css","assets/triangle-alert-D-tt7pA2.js","assets/ChangeWalkthroughPanel-ZGMybE0m.js","assets/search-DAQ_AOVP.js","assets/arrow-down-Ty3zwcgl.js","assets/RightSidebar-DW-JEgm2.css"])))=>i.map(i=>d[i]);
2
+ import{e0 as L,cq as e,W as A,X as $,H as O,t as D,a8 as V,aQ as M,as as _,a9 as k,eK as F,c as I,J as U,cX as J,er as K,s as X,es as B,ax as W}from"./app-DZ6mCJiW.js";import{b as s}from"./dnd-BCFAPC0L.js";import{S as q,R as H,U as Q}from"./RecordingSaveDialog-Czkjuaeu.js";import"./react-XDCjal2T.js";import"./terminal-DaiFCKy_.js";import"./use-gesture-react.esm-CM42s15B.js";import"./gestureArbiter-DszagC-d.js";const G=s.lazy(()=>k(()=>import("./AndroidMirrorView-COoPljXi.js").then(n=>n.c),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11])).then(n=>({default:n.AndroidMirrorView}))),Y=s.lazy(()=>k(()=>import("./ComputerControlView-CnaeZBuh.js").then(n=>n.a),__vite__mapDeps([12,1,2,3,4,5,13,10,14,15]))),Z=s.lazy(()=>k(()=>import("./RightSidebar-BvYh2_n2.js").then(n=>n.R),__vite__mapDeps([16,1,2,3,4,5,17,18,19,8,20,21,22,23,7,9,24,25,26,27,28,29,13,15,0,6,10,11,30,31,32])).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 ee({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 x=async(u,r)=>{const o=W(r),g=n,c=()=>a.current&&o()&&d.current.sessionId===g&&d.current.canWrite;if(!g||!c())throw new Error("此会话当前无法添加附件");const h=(await B(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?x: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(H,{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 te({directories:n,onInsert:f,onDirty:m}){const[l,b]=s.useState(n[0]?.path||""),[a,d]=s.useState(null),[x,u]=s.useState(null),[r,o]=s.useState(),[g,c]=s.useState(""),[p,h]=s.useState(!1),[R,N]=s.useState(0),[E,i]=s.useState(!1),y=s.useRef(null),w=s.useRef(!0);s.useEffect(()=>()=>{w.current=!1},[]),s.useEffect(()=>{n.some(t=>t.path===l)||(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)),T=async()=>{if(r){h(!0),c("");try{const t=await fetch(`/api/terminal/fs/write?${new URLSearchParams({path:r.path})}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:r.content,original:r.original})}),j=await t.json();if(!t.ok)throw new Error(j.error);w.current&&(o(void 0),N(S=>S+1))}catch(t){w.current&&c(t instanceof Error?t.message:"保存失败,编辑内容已保留")}finally{w.current&&h(!1)}}};s.useEffect(()=>{const t=!!r&&r.content!==r.original;m(t);const j=S=>{t&&(S.preventDefault(),S.returnValue="")};return window.addEventListener("beforeunload",j),()=>{window.removeEventListener("beforeunload",j),m(!1)}},[r,m]);const z=()=>{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||p,onClick:()=>{d(null),c("")},children:[e.jsx(I,{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:p,onClick:()=>{h(!0),c(""),J(a).then(t=>{if(t.binary||t.truncated||t.size>1024*1024)throw new Error("仅支持编辑 1 MB 以内的完整文本");w.current&&o({path:a,content:t.content,original:t.content})}).catch(t=>c(t.message)).finally(()=>h(!1))},children:[e.jsx(U,{size:14}),"编辑"]})]}):e.jsxs(e.Fragment,{children:[e.jsx("select",{"aria-label":"共享目录",className:"min-h-11 min-w-0 flex-1 rounded-lg bg-surface px-2 text-xs",value:l,onChange:t=>{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:p,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 S=l;h(!0),c(""),K(S,j).then(()=>{F.getState().invalidateDirectoryCache(S),N(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:p,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:p,onClick:z,children:"取消编辑"}),e.jsx("button",{type:"button",className:`${v} bg-primary text-primary-foreground`,disabled:p,onClick:()=>{T()},children:p?"正在保存…":"保存修改"})]})})]}):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(Z,{filePath:a,onInsertReference:t=>f(t),onInsertText:f,onReferenceCopied:()=>{},isMobile:!0,markdownOutlineOpen:!1,markdownImageLightboxOpen:!1,lineRange:x,onLineRangeChange:u,insertedReferenceKey:null,copiedReferenceKey:null},`${a}:${R}`)})}):e.jsx("div",{className:"min-h-0 flex-1 overflow-auto",children:e.jsx(X,{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 x=L(n),[u,r]=s.useState(x[0]),o=x.includes(u)?u:x[0],g=s.useRef(!1),c=s.useRef(i=>{g.current=i}).current,p=async i=>{i!==u&&(g.current&&!await M({title:"放弃文件修改?",message:"当前文件有未保存的修改。",confirmLabel:"放弃修改",cancelLabel:"继续编辑"})||r(i))},[h,R]=s.useState(0),N=n.computers?.[h]??n.computers?.[0],E=o==="computer"?{...n,computers:N?[N]:[]}:n;return x.length?e.jsx(A.Provider,{value:E,children:e.jsx(q,{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:x.length>1?"tablist":void 0,"aria-label":"侧栏功能",className:"flex min-w-0 flex-1 gap-1",children:x.map(i=>{const[y,w]=i==="android"?["手机",$]:i==="computer"?["电脑",O]:["文件",D];return x.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:()=>{p(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(V,{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(ee,{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(Y,{active:b},JSON.stringify(N))]}),o==="files"&&e.jsx(te,{directories:n.directories,onInsert:d,onDirty:c})]})]})})}):null}export{ce as SessionResourceSidebar};
@@ -1 +1 @@
1
- import{a$ as jt,aW as vt,eA as We,cq as e,a8 as Ye,u as Ge,$ as Qe,p as wt,e as Nt,C as yt,eF as kt,dD as R,bo as Ct,bR as St,bN as Ue,T as Ke,S as Ce,c as Se,O as He,Y as Xe,k as It,bQ as $t,J as At,a2 as Et}from"./app-CovJYQoW.js";import{b as j,r as Dt}from"./dnd-BCFAPC0L.js";import{g as me,A as Ze,l as Je,r as Tt,j as zt,e as qt,P as Pt,k as Be,u as Ie,i as Rt,d as Lt,s as Ot,b as Ft,h as _t}from"./App-DpMhxwYW.js";import{D as et}from"./RecordingSaveDialog-CoRGi97z.js";import{d as Ut}from"./GitLoadingSkeleton-DKRTc5sz.js";import{S as tt}from"./AndroidMirrorView-BGagwKtL.js";import{S as Kt}from"./search-CbpNLSpd.js";import{C as Ht}from"./circle-xgKDXpwG.js";import"./react-XDCjal2T.js";import"./terminal-DaiFCKy_.js";import"./link-34ChBc4F.js";import"./clipboardText-BWOwer6N.js";import"./swiper-CTPycjLq.js";import"./clipboard-DeK6pJD3.js";import"./v4-EwEgHOG0.js";import"./triangle-alert-DgGU_xB4.js";import"./external-link-CsydVmO1.js";import"./maximize-2-CbvSsu7O.js";import"./git-compare-BmKAtQTt.js";import"./use-gesture-react.esm-DHU0wi7Q.js";import"./arrow-down-WyzmLXwQ.js";import"./sun-CMXn_ntS.js";import"./unplug-CnZtWzVW.js";import"./gestureArbiter-DszagC-d.js";const Jt=[["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"}]],Bt=jt("inbox",Jt),V={tab:"todos",filter:"open",source:"",query:"",selectedId:null,mobileDetail:!1,selecting:!1,checked:[],toolsOpen:!1,modal:null,drafts:{},requests:{}},A=vt((s,a)=>({views:{},snapshots:{},options:{},cache:(n,c)=>s(l=>({snapshots:{...l.snapshots,[n]:c}})),cacheOptions:(n,c)=>s(l=>({options:{...l.options,[n]:c}})),patch:(n,c)=>s(l=>({views:{...l.views,[n]:{...l.views[n]??V,...c}}})),draft:(n,c,l)=>{const r=a().views[n]??V;a().patch(n,{drafts:{...r.drafts,[c]:l}})},clearDraft:(n,c)=>{const l={...(a().views[n]??V).drafts};delete l[c],a().patch(n,{drafts:l})},requestKey:(n,c)=>{const l=JSON.stringify(c),r=a().views[n]??V;if(r.requests[l])return r.requests[l];const d=crypto.randomUUID();return a().patch(n,{requests:{...r.requests,[l]:d}}),d},finishRequest:(n,c)=>{const l={...(a().views[n]??V).requests};delete l[JSON.stringify(c)],a().patch(n,{requests:l})}}));function Ee(s,a,n){return[A(l=>l.views[s]?.drafts[a])??n,l=>A.getState().draft(s,a,l)]}function de(s,a){return s.runs.filter(n=>n.todoId===a||n.handoff?.todoIds.includes(a)).at(-1)}function Mt(s,a,n){return n==="review"?a.status==="open"&&de(s,a.id)?.status==="complete":a.status===(n==="completed"?"completed":n==="ignored"?"ignored":"open")}const st=s=>`termdock:todo-preferences:v1:${s}`,ue=s=>s.replace(/\/+$/,"").split("/").pop()||s;function xe(s){return[...new Set(s.filter(a=>typeof a=="string"&&!!a.trim()).map(a=>a.trim().replace(/\/+$/,"")||"/"))]}function De(s){try{const a=JSON.parse(localStorage.getItem(st(s))||"{}"),n=a?.choice;return{choice:n&&["agentSlug","command","cwd"].every(c=>typeof n[c]=="string")?n:void 0,directories:xe(Array.isArray(a?.directories)?a.directories:[]).slice(0,8)}}catch{return{directories:[]}}}function Me(s,a){try{const n=De(s);localStorage.setItem(st(s),JSON.stringify({choice:{agentSlug:a.agentSlug,command:a.command,cwd:a.cwd},directories:xe([a.cwd,...n.directories]).slice(0,8)}))}catch{}}function Vt(s,a,n,c){return xe([s,...De(c).directories,n?.defaults.cwd,...n?.runs.slice().reverse().map(l=>l.config.cwd)??[],...a,...n?.collectors.map(l=>l.config.cwd)??[]]).slice(0,8)}const Te="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",H=`${Te} bg-primary text-primary-foreground hover:opacity-90`,F=`${Te} bg-surface-2 text-foreground hover:bg-surface-elevated`,k=`${Te} text-muted-foreground hover:bg-surface-2 hover:text-foreground`,L="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",O="block space-y-2 text-sm text-muted-foreground";function Wt({title:s,busy:a,error:n,onClose:c,children:l,compact:r=!1}){const d=j.useRef(null),i=j.useId();return We(d,!0,()=>{a||c()}),Dt.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:c}),e.jsxs("section",{ref:d,role:"dialog","aria-modal":"true","aria-labelledby":i,"aria-busy":a,tabIndex:-1,className:r?"fixed bottom-[max(0.75rem,env(safe-area-inset-bottom,0px))] left-3 right-3 z-drawer-panel flex max-h-[calc(100svh-2rem)] min-w-0 flex-col overflow-hidden rounded-2xl border border-border/30 bg-surface text-foreground shadow-xl sm:bottom-auto sm:left-1/2 sm:right-auto sm:top-1/2 sm:w-[28rem] sm:max-w-[90vw] sm:-translate-x-1/2 sm:-translate-y-1/2":"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:i,className:"flex-1 text-base font-semibold",children:s}),e.jsx("button",{type:"button",className:k,"aria-label":"关闭",disabled:a,onClick:c,children:e.jsx(Ye,{size:18})})]}),n&&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:n}),e.jsx("div",{className:"flex min-h-0 flex-1 flex-col",children:l})]})]}),document.body)}function ze({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 at({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 Yt({workspace:s,todo:a,busy:n,onSave:c,onCancel:l}){const[r,d]=Ee(s,`todo:${a?.id??"new"}`,{title:a?.title??"",description:a?.description??""}),i=p=>{!n&&r.title.trim()&&c({...r,title:r.title.trim()},p)};return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col",onSubmit:p=>{p.preventDefault(),i(!a)},children:[e.jsxs(ze,{children:[e.jsxs("label",{className:O,children:["要做什么",e.jsx("input",{autoFocus:!0,required:!0,maxLength:200,className:L,value:r.title,onChange:p=>d({...r,title:p.target.value}),placeholder:"一句话描述这件事"})]}),e.jsxs("label",{className:O,children:["背景和处理要求",e.jsx("textarea",{className:`${L} min-h-44 resize-y`,maxLength:4e4,value:r.description,onChange:p=>d({...r,description:p.target.value}),placeholder:"为什么要做、参考资料、希望得到什么结果…"})]}),!a&&e.jsx("p",{className:"text-xs leading-6 text-muted-foreground",children:"可以先存进清单,也可以选一个会话交出去。"})]}),e.jsxs(at,{children:[e.jsx("button",{type:"button",className:k,disabled:n,onClick:l,children:"取消"}),!a&&e.jsx("button",{type:"button",className:F,disabled:n||!r.title.trim(),onClick:()=>i(!1),children:"仅保存"}),e.jsx("button",{className:H,disabled:n||!r.title.trim(),children:n?"正在保存…":a?"保存修改":"保存并交给会话"})]})]})}function nt(s,a,n,c){const l=a.find(r=>r.slug===(s.agentSlug||n))??(s.agentSlug?void 0:a[0]);return{...s,agentSlug:s.agentSlug||l?.slug||"",command:s.command||(l?me(l.slug,l.command):""),cwd:s.cwd||c||""}}function Gt({config:s,agents:a,loading:n,service:c,directories:l,currentCwd:r,onChange:d,collect:i=!1}){const[p,m]=j.useState(!1),N=j.useId(),f=j.useId();return e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:["运行于 ",c]}),e.jsxs("div",{className:O,children:[e.jsx("label",{htmlFor:N,children:"Agent"}),e.jsxs("select",{id:N,className:L,required:!0,disabled:n,value:s.agentSlug,onChange:x=>{const y=a.find(E=>E.slug===x.target.value);d({...s,agentSlug:x.target.value,command:y?me(y.slug,y.command):""})},children:[e.jsx("option",{value:"",disabled:a.length>0,children:n?"正在加载 Agent…":"选择 Agent"}),a.map(x=>e.jsx("option",{value:x.slug,children:x.displayName},x.slug)),s.agentSlug&&!a.some(x=>x.slug===s.agentSlug)&&e.jsxs("option",{value:s.agentSlug,children:[s.agentSlug,"(当前不可用)"]})]})]}),a.find(x=>x.slug===s.agentSlug)&&e.jsx(Ze,{agent:a.find(x=>x.slug===s.agentSlug),value:s.command,onChange:x=>d({...s,command:x})},s.agentSlug),!n&&a.length===0&&e.jsx("p",{className:"text-sm text-destructive",children:"未找到可启动的 Agent,请检查该服务的 Agent 配置。"}),e.jsxs("div",{className:O,children:[e.jsx("label",{htmlFor:f,children:"工作目录"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{id:f,className:L,value:s.cwd,autoCapitalize:"none",autoCorrect:"off",spellCheck:!1,onChange:x=>d({...s,cwd:x.target.value}),placeholder:"选择这件事所在的项目或目录"}),e.jsx("button",{type:"button",className:F,"aria-label":"选择工作目录",onClick:()=>m(!0),children:e.jsx(Ge,{size:17})})]}),!!l.length&&e.jsx("div",{className:"flex gap-1.5 overflow-x-auto pb-1","aria-label":"快捷选择工作目录",children:l.map(x=>{const y=ue(x),g=l.some(h=>h!==x&&ue(h)===y)?x.split("/").filter(Boolean).slice(-2).join("/"):y;return e.jsx("button",{type:"button","aria-label":`使用目录 ${x}`,"aria-pressed":s.cwd===x,title:x,className:`min-h-10 max-w-48 shrink-0 truncate rounded-lg border px-2.5 text-xs ${s.cwd===x?"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:()=>d({...s,cwd:x}),children:x===r?`当前 · ${g}`:g},x)})})]}),e.jsxs("label",{className:O,children:[i?"收集要求":"处理要求",e.jsx("textarea",{required:i,className:`${L} min-h-32 resize-y`,maxLength:2e4,value:s.prompt,onChange:x=>d({...s,prompt:x.target.value}),placeholder:i?"从哪里收集、筛选哪些事项、需要哪些背景与来源…":"补充 Agent 应该遵守的要求,可留空"})]}),e.jsx(et,{open:p,initialPath:s.cwd||"/",title:"选择工作目录",labels:{hint:"选择 Agent 运行的目录",cancel:"取消",confirm:"使用此目录",close:"关闭",parent:"上级目录"},onCancel:()=>m(!1),onConfirm:x=>{d({...s,cwd:x}),m(!1)}})]})}const Qt=[{name:"项目巡检",prompt:"检查工作目录中的项目,找出值得处理的问题。每条待办写清问题、依据和建议,避免重复。只收集待办,不修改项目。"},{name:"技术动态",prompt:"收集我关注方向的技术动态,筛选值得进一步调研或尝试的事项。每条待办附来源和后续建议,避免重复。"}];function Xt({workspace:s,collector:a,config:n,agents:c,loading:l,service:r,directories:d,currentCwd:i,busy:p,onSave:m,onCancel:N}){const[f,x]=Ee(s,`collector:${a?.id??"new"}`,{name:a?.name??"",config:a?.config??{...n,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"}),y=f.config.agentSlug?f.config:{...nt(f.config,c,n.agentSlug,n.cwd),prompt:f.config.prompt},E=f.name.trim()&&y.prompt.trim()&&!l&&c.some(h=>h.slug===y.agentSlug),g=h=>{p||!E||m({id:a?.id,revision:a?.revision,name:f.name.trim(),config:y,enabled:f.enabled,schedule:f.schedule==="manual"?null:f.schedule==="interval"?{kind:"interval",everyMinutes:f.minutes}:{kind:"daily",time:f.daily,weekdays:a?.schedule?.kind==="daily"?a.schedule.weekdays:[0,1,2,3,4,5,6]}},h)};return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col",onSubmit:h=>{h.preventDefault(),g(!0)},children:[e.jsx(ze,{children:e.jsxs("fieldset",{disabled:p,className:"min-w-0 space-y-5",children:[!a&&e.jsx("div",{className:"flex flex-wrap gap-2",children:Qt.map(h=>e.jsx("button",{type:"button",className:F,onClick:()=>x({...f,name:h.name,config:{...f.config,prompt:h.prompt}}),children:h.name},h.name))}),e.jsxs("label",{className:O,children:["收集方向",e.jsx("input",{required:!0,className:L,maxLength:200,value:f.name,onChange:h=>x({...f,name:h.target.value}),placeholder:"例如:项目巡检、技术动态"})]}),e.jsx(Gt,{collect:!0,config:y,agents:c,loading:l,service:r,directories:d,currentCwd:i,onChange:h=>x({...f,config:h})}),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:["定时与启用 · ",f.schedule==="manual"?"手动运行":f.schedule==="interval"?`每 ${f.minutes} 分钟`:`每天 ${f.daily}`]}),e.jsxs("div",{className:"space-y-4 pb-3",children:[e.jsxs("label",{className:O,children:["运行频率",e.jsxs("select",{className:L,value:f.schedule,onChange:h=>x({...f,schedule:h.target.value}),children:[e.jsx("option",{value:"manual",children:"手动运行"}),e.jsx("option",{value:"interval",children:"按间隔运行"}),e.jsx("option",{value:"daily",children:"每天定时"})]})]}),f.schedule==="interval"&&e.jsxs("label",{className:O,children:["间隔(分钟)",e.jsx("input",{className:L,required:!0,type:"number",min:1,max:43200,step:1,value:f.minutes,onChange:h=>x({...f,minutes:Number(h.target.value)})})]}),f.schedule==="daily"&&e.jsxs("label",{className:O,children:["时间(服务所在时区)",e.jsx("input",{className:L,required:!0,type:"time",value:f.daily,onChange:h=>x({...f,daily:h.target.value})})]}),e.jsxs("label",{className:"flex items-center gap-3 text-sm",children:[e.jsx("input",{type:"checkbox",checked:f.enabled,onChange:h=>x({...f,enabled:h.target.checked})}),"启用此方向,参与全部收集和定时运行"]})]})]})]})}),e.jsxs(at,{children:[e.jsx("button",{type:"button",className:k,disabled:p,onClick:N,children:"取消"}),e.jsx("button",{type:"button",className:F,disabled:p||!E,onClick:()=>g(!1),children:"仅保存"}),e.jsxs("button",{className:H,disabled:p||!E,children:[e.jsx(Ut,{size:16}),p?"正在保存…":"保存并收集"]})]})]})}function Zt(){const[s,a]=j.useState(!1),n='td todo add --title "检查项目依赖" --description "核实升级影响" --source "项目巡检" --external-id "deps-review"';return e.jsxs(ze,{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:n})}),e.jsx("button",{className:F,onClick:()=>{navigator.clipboard.writeText(n).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 es=s=>{const a=new Date(s),n=new Date,c=a.toDateString()===n.toDateString();return new Intl.DateTimeFormat("zh-CN",{...c?{}:{month:"short",day:"numeric",...a.getFullYear()===n.getFullYear()?{}:{year:"numeric"}},hour:"2-digit",minute:"2-digit",hour12:!1}).format(a)},lt={launching:"正在准备终端",delivered:"任务已发送到终端",complete:"已收到结果,待你确认",blocked:"Agent 需要你协助",failed:"启动或处理失败"};function ts({run:s,onOpen:a,busy:n}){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"?"已收到结果报告":lt[s.status]}),s.sessionId&&e.jsxs("button",{type:"button",className:F,disabled:n,onClick:a,children:[e.jsx(Qe,{size:15}),"打开终端"]})]}),e.jsxs("p",{className:"mt-1 text-xs leading-6 text-muted-foreground",children:[s.config.agentSlug," · ",es(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 Ae({label:s="更多操作",items:a,disabled:n}){const[c,l]=j.useState(!1),r=j.useRef(null),d=j.useRef(null),i=j.useId();return We(d,c,()=>l(!1)),j.useEffect(()=>{if(!c)return;const p=m=>{m.target instanceof Node&&!r.current?.contains(m.target)&&l(!1)};return document.addEventListener("pointerdown",p,!0),()=>document.removeEventListener("pointerdown",p,!0)},[c]),e.jsxs("div",{ref:r,className:"relative z-20 shrink-0",children:[e.jsx("button",{type:"button","aria-label":s,title:s,"aria-haspopup":"menu","aria-expanded":c,"aria-controls":c?i:void 0,disabled:n,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:()=>l(p=>!p),children:e.jsx(wt,{size:20})}),c&&e.jsx("div",{ref:d,id:i,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:p=>{if(!["ArrowDown","ArrowUp","Home","End"].includes(p.key))return;p.preventDefault();const m=Array.from(d.current?.querySelectorAll('[role="menuitem"]:not(:disabled)')??[]),N=m.indexOf(document.activeElement);m[p.key==="Home"?0:p.key==="End"?m.length-1:(N+(p.key==="ArrowDown"?1:-1)+m.length)%m.length]?.focus()},children:a.map(p=>e.jsx("button",{type:"button",role:"menuitem",disabled:p.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 ${p.danger?"text-destructive":"text-foreground"}`,onClick:()=>{l(!1),p.action()},children:p.label},p.label))})]})}function ss({todo:s,runs:a,busy:n,wide:c,menu:l,onLaunch:r,onOpen:d,onStatus:i,sessionName:p}){const m=a.at(-1),N=!!m?.sessionId&&m.status!=="failed";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}),c&&e.jsx(Ae,{label:"待办操作",items:l,disabled:n})]}),e.jsxs("p",{className:"mt-2 text-xs leading-6 text-muted-foreground",children:[s.source,m?.status==="launching"?" · 正在发送":N?` · 已交给 ${p||"会话"}`:""]}),s.description&&e.jsx("p",{className:"termdock-native-select mt-5 whitespace-pre-wrap break-words text-[15px] leading-8",children:s.description}),m?.handoff?.note&&e.jsxs("div",{className:"mt-6 text-sm leading-7",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"发送时的补充"}),e.jsx("p",{className:"mt-1 whitespace-pre-wrap break-words",children:m.handoff.note})]}),m?.error&&e.jsx("p",{role:"alert",className:"mt-5 break-words text-sm leading-7 text-destructive",children:m.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(Nt,{size:14})]}),a.some(f=>f.result)&&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:"此前的处理记录"}),a.filter(f=>f.result).slice().reverse().map(f=>e.jsx("p",{className:"mt-3 whitespace-pre-wrap break-words leading-7",children:f.result},f.id))]})]}),e.jsx("footer",{className:"flex shrink-0 flex-wrap items-center gap-2 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"?e.jsxs(e.Fragment,{children:[e.jsxs("button",{type:"button",className:`${H} flex-1 sm:flex-none`,disabled:n||m?.status==="launching",onClick:()=>N?d(m):r(),children:[N?e.jsx(Qe,{size:16}):e.jsx(tt,{size:16}),N?"去会话":m?.status==="launching"?"正在发送…":"交给会话"]}),N&&e.jsx("button",{type:"button",className:k,disabled:n,onClick:r,children:"再次交给"}),e.jsxs("button",{type:"button",className:k,disabled:n,onClick:()=>i("completed"),children:[e.jsx(yt,{size:16}),"完成"]})]}):e.jsx("button",{type:"button",className:H,disabled:n,onClick:()=>i("open"),children:"重新打开"})})]})}const ce="min-h-11 w-full 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",rt=s=>`termdock:todo-recipient:v1:${s}`;function as(s,a){try{localStorage.setItem(rt(s),a)}catch{}}function ns(s){try{return localStorage.getItem(rt(s))}catch{return null}}function ls({workspace:s,ids:a,config:n,agents:c,sessions:l,currentSessionId:r,directories:d,busy:i,loading:p,title:m,onSend:N,onCancel:f}){const x=l.filter(u=>u.agent?.slug).sort((u,q)=>+(q.sessionId===r)-+(u.sessionId===r)||q.lastActivity-u.lastActivity),y=ns(s),E=x.find(u=>u.sessionId===r)?.sessionId??x.find(u=>u.sessionId===y)?.sessionId??x[0]?.sessionId??"__new__",[g,h]=Ee(s,`handoff:${JSON.stringify(a.slice().sort())}`,{target:E,note:"",config:{...n,prompt:""}}),[J,D]=j.useState(!1),C=g.target==="__new__",_=c.find(u=>u.slug===g.config.agentSlug),B=!p&&(C?!!_:x.some(u=>u.sessionId===g.target));return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col",onSubmit:u=>{u.preventDefault(),!i&&B&&N({note:g.note,...C?{config:g.config}:{sessionId:g.target}})},children:[e.jsxs("div",{className:"min-h-0 flex-1 space-y-5 overflow-y-auto overscroll-contain px-5 py-5",children:[e.jsx("p",{className:"truncate text-sm text-muted-foreground",title:m,children:a.length>1?`${a.length} 条待办,一起发送`:m}),e.jsxs("fieldset",{disabled:i,className:"min-w-0 space-y-5",children:[e.jsxs("label",{className:"block space-y-2 text-sm text-muted-foreground",children:["交给谁",e.jsxs("select",{className:ce,disabled:p,value:g.target,onChange:u=>h({...g,target:u.target.value}),children:[x.map(u=>e.jsxs("option",{value:u.sessionId,children:[u.sessionId===r?"当前 · ":u.sessionId===y?"上次 · ":"",u.displayName," · ",u.agent?.displayName||u.agent?.slug]},u.sessionId)),!C&&!x.some(u=>u.sessionId===g.target)&&e.jsx("option",{value:g.target,disabled:!0,children:"原会话已不可用,请重新选择"}),e.jsx("option",{value:"__new__",children:"+ 新建会话"})]})]}),C&&e.jsxs("details",{className:"rounded-lg border border-border/20 px-3 text-sm text-muted-foreground",children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3",children:[_?.displayName||"选择 Agent"," · ",ue(g.config.cwd)||"服务默认目录"," · 更改"]}),e.jsxs("div",{className:"space-y-4 pb-3",children:[e.jsxs("label",{className:"block space-y-2",children:["Agent",e.jsxs("select",{className:ce,value:g.config.agentSlug,onChange:u=>{const q=c.find(fe=>fe.slug===u.target.value);h({...g,config:{...g.config,agentSlug:u.target.value,command:q?me(q.slug,q.command):""}})},children:[e.jsx("option",{value:"",disabled:!0,children:"选择 Agent"}),c.map(u=>e.jsx("option",{value:u.slug,children:u.displayName},u.slug))]})]}),_&&e.jsx(Ze,{agent:_,value:g.config.command,onChange:u=>h({...g,config:{...g.config,command:u}})},_.slug),e.jsxs("label",{className:"block space-y-2",children:["工作目录",e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{className:ce,value:g.config.cwd,placeholder:"服务默认目录",onChange:u=>h({...g,config:{...g.config,cwd:u.target.value}})}),e.jsx("button",{type:"button",className:F,"aria-label":"选择工作目录",onClick:()=>D(!0),children:e.jsx(Ge,{size:16})})]})]}),!!d.length&&e.jsx("div",{className:"flex gap-2 overflow-x-auto",children:d.map(u=>e.jsx("button",{type:"button",className:"min-h-10 shrink-0 rounded-md bg-surface-2 px-2 text-xs",title:u,onClick:()=>h({...g,config:{...g.config,cwd:u}}),children:ue(u)},u))})]})]}),e.jsxs("label",{className:"block space-y-2 text-sm text-muted-foreground",children:["补充一句话",e.jsx("span",{className:"ml-2 text-xs",children:"选填"}),e.jsx("textarea",{className:`${ce} min-h-28 resize-y`,maxLength:4e3,value:g.note,onChange:u=>h({...g,note:u.target.value}),placeholder:"例如:先分析不要改代码,和之前那个问题一起处理…"})]})]})]}),e.jsxs("footer",{className:"flex shrink-0 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:[e.jsx("button",{type:"button",className:k,disabled:i,onClick:f,children:"取消"}),e.jsxs("button",{className:H,disabled:i||!B,children:[e.jsx(tt,{size:16}),i?"正在发送…":"发送并进入会话"]})]}),e.jsx(et,{open:J,title:"选择工作目录",initialPath:g.config.cwd||"/",onCancel:()=>D(!1),onConfirm:u=>{h({...g,config:{...g.config,cwd:u}}),D(!1)}})]})}const Ve={agentSlug:"",command:"",cwd:"",prompt:""};function Ds({onOpenSidebar:s,leftSidebarVisible:a,activeSessionId:n}){const c=kt(),[l]=j.useState(()=>R()?.targetPeerId??location.origin),r=A(t=>t.views[l]??V),d=t=>A.getState().patch(l,t),[i,p]=j.useState(()=>A.getState().snapshots[l]??null),[m,N]=j.useState(()=>A.getState().options[l]??{agents:[],preferred:null,cwd:"",directories:[]}),[f,x]=j.useState(!A.getState().options[l]),[y,E]=j.useState(""),[g,h]=j.useState(""),[J,D]=j.useState(""),[C,_]=j.useState(!1),[B,u]=j.useState(null),q=j.useRef(null),[fe,it]=j.useState(0),M=fe>=900,K=j.useRef(!0),pe=j.useRef(!1),he=j.useRef(!1),ge=j.useRef(0),qe=j.useRef(R()?.targetPeerId),T=()=>K.current&&qe.current===R()?.targetPeerId,X=j.useCallback(async(t=!1)=>{if(he.current&&!t)return;he.current=!0;const o=++ge.current,v=R()?.targetPeerId;try{const b=await Je();K.current&&o===ge.current&&v===R()?.targetPeerId&&(p(b),A.getState().cache(l,b),E(""))}catch(b){K.current&&v===R()?.targetPeerId&&E(b instanceof Error?b.message:"待办加载失败")}finally{o===ge.current&&(he.current=!1)}},[l]),W=j.useCallback(async()=>{const t=R()?.targetPeerId;x(!0);const[o,v]=await Promise.allSettled([Ct(),St()]);if(!K.current||R()?.targetPeerId!==t)return;const b=A.getState().options[l],w=Ue().slice().sort(($,bt)=>bt.lastActivity-$.lastActivity),U={agents:o.status==="fulfilled"?o.value:b?.agents??[],preferred:v.status==="fulfilled"?v.value.newSessionAgentSlug:b?.preferred??Tt()?.slug??null,cwd:w.find($=>$.sessionId===n)?.cwd??b?.cwd??w[0]?.cwd??"",directories:xe(w.map($=>$.cwd).concat(b?.directories??[]))};N(U),A.getState().cacheOptions(l,U),x(!1),o.status==="rejected"&&h("会话选项加载失败,打开交接面板可重试。")},[l,n]);j.useEffect(()=>{K.current=!0;const t=q.current,o=()=>it(t?.clientWidth??0);o();const v=new ResizeObserver(o);t&&v.observe(t),W();const b=()=>{qe.current!==R()?.targetPeerId&&Be.getState().terminal()};window.addEventListener(Ke,b),window.addEventListener(Ce,W);const w=zt(()=>{navigator.onLine!==!1&&X()},1200,[Ce]);return()=>{K.current=!1,v.disconnect(),w(),window.removeEventListener(Ke,b),window.removeEventListener(Ce,W)}},[X,W]),j.useEffect(()=>{if(!J)return;const t=window.setTimeout(()=>{D(""),u(null)},5e3);return()=>window.clearTimeout(t)},[J]);const be=t=>A.getState().requestKey(l,t),Z=t=>A.getState().finishRequest(l,t),je=t=>A.getState().clearDraft(l,t),S=r.modal,z=t=>{h(""),d({modal:t})},P=async t=>{if(!pe.current){pe.current=!0,_(!0),h(""),D(""),u(null);try{await t(),T()&&(await X(!0),window.dispatchEvent(new Event("termdock:todos-changed")))}catch(o){T()&&h(o instanceof Error?o.message:"操作失败,请重试")}finally{pe.current=!1,K.current&&_(!1)}}},ot=t=>d({selectedId:t.id,mobileDetail:!0}),ee=t=>{P(async()=>{if(T()){if(!Ue().some(o=>o.sessionId===t.sessionId)){if(t.kind==="execute"&&t.todoId){Y(t.handoff?.todoIds??[t.todoId]),D("原会话已关闭,请重新选择会话。");return}throw new Error("收集会话已关闭,可以重新发起收集。")}d({modal:null}),window.dispatchEvent(new CustomEvent("switch-terminal-session",{detail:t.sessionId}))}})},ct=(t,o)=>{const v=i?.todos.find(w=>w.id===t)?.collectorId,b=i?.collectors.find(w=>w.id===v);return b?{...o,cwd:b.config.cwd}:o},Y=t=>{W(),z({kind:"handoff",ids:t})},dt=async(t,o)=>{const v=["handoff",t,o];let b=(await _t({todoIds:t,...o,idempotencyKey:be(v)})).run;for(let w=0;b.status==="launching"&&w<180;w++){if(!T())return;await new Promise($=>window.setTimeout($,500));const U=await Je();if(!T())return;b=U.runs.find($=>$.id===b.id)??b}if(T()){if(b.status==="failed")throw Z(v),new Error(b.error||"发送失败,请检查会话后重试");if(b.status==="launching"||!b.sessionId)throw new Error("仍在确认发送,请稍后重试;同一次请求不会重复发送。");Z(v),je(`handoff:${JSON.stringify(t.slice().sort())}`),as(l,b.sessionId),o.config&&Me(l,o.config),d({modal:null,selecting:!1,checked:[]}),window.dispatchEvent(new CustomEvent("switch-terminal-session",{detail:b.sessionId}))}},te=async t=>{const o=await Promise.allSettled(t.map(w=>Ft(w.id,be(["collect",w.id,w.config]))));if(!T())return;let v=0;const b=[];if(o.forEach((w,U)=>{const $=t[U];w.status==="fulfilled"?(v++,Z(["collect",$.id,$.config])):b.push(`${$.name}:${w.reason instanceof Error?w.reason.message:String(w.reason)}`)}),d({modal:null}),v&&D(`已发起 ${v} 个收集任务`),b.length)throw new Error(b.join(";"))},se=(t,o)=>{P(async()=>{const v=await Ie(t,{status:o});T()&&(o!=="open"&&(u({todo:v.todo,previous:t.status}),r.selectedId===t.id&&d({selectedId:null,mobileDetail:!1})),D(o==="completed"?"已完成":o==="ignored"?"已忽略":"已重新打开"))})},I=i?.todos.find(t=>t.id===r.selectedId),G=I&&i?de(i,I.id):void 0,Pe=t=>c.find(o=>o.sessionId===t.sessionId)?.displayName??$t({name:t.handoff?.sessionName||"",agent:{displayName:t.config.agentSlug||"会话"}}).displayName,ae=i?.todos.filter(t=>Mt(i,t,r.filter)&&(!r.source||t.source===r.source)&&`${t.title} ${t.description} ${t.source}`.toLowerCase().includes(r.query.toLowerCase()))??[],ne=t=>{const o=i&&de(i,t.id);return t.status==="open"&&o?.status!=="launching"},ve=ae.filter(t=>r.checked.includes(t.id)&&ne(t)),le=i?.collectors.filter(t=>t.enabled)??[],we=De(l),re=i?.collectors.slice().sort((t,o)=>o.updatedAt-t.updatedAt).find(t=>m.agents.some(o=>o.slug===t.config.agentSlug))?.config,ie=we.choice&&m.agents.some(t=>t.slug===we.choice?.agentSlug)?we.choice:re?{agentSlug:re.agentSlug,command:re.command,cwd:re.cwd}:void 0,oe=m.agents.find(t=>t.slug===ie?.agentSlug),Ne=ie&&oe&&qt(oe.slug)?{...ie,command:me(oe.slug,oe.command)}:ie,ut=nt(i?.defaults.agentSlug?i.defaults:{...Ve,...Ne},m.agents,m.preferred,m.cwd),Re=Ne?{...Ve,...Ne}:ut,Le=Vt(m.cwd,m.directories??[],i,l),mt=R()?.serviceName||"当前服务",ye=S?.kind==="collector"?i?.collectors.find(t=>t.id===S.id):void 0,Q=S?.kind==="edit"?S.todo:void 0,xt=S?.kind==="edit"?Q?"编辑待办":"新增待办":S?.kind==="handoff"?"交给会话":S?.kind==="collector"?ye?"编辑收集方向":"添加收集方向":"外部接入",ke=r.tab==="todos"&&!M&&r.mobileDetail&&!!I,ft=r.toolsOpen||r.filter!=="open"||!!r.query||!!r.source,pt=r.tab==="todos"&&!ke,Oe=()=>d({tab:"todos",mobileDetail:!1,selecting:!1,checked:[]}),Fe=I?[{label:"编辑待办",action:()=>z({kind:"edit",todo:I})},...G?.sessionId?[{label:"打开终端",action:()=>ee(G)}]:[],...I.status==="open"?[{label:"交给其他会话",action:()=>Y([I.id]),disabled:G?.status==="launching"},{label:"标记完成",action:()=>se(I,"completed")},{label:"忽略这条待办",action:()=>se(I,"ignored"),danger:!0}]:[]]:[],ht=[{label:"搜索和筛选",action:()=>{d({toolsOpen:!0}),window.setTimeout(()=>{T()&&q.current?.querySelector('[aria-label="搜索待办"]')?.focus()},0)}},{label:"多选待办",action:()=>d({selecting:!0,mobileDetail:!1,checked:[]}),disabled:!ae.some(ne)},{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:()=>z({kind:"integration"})}],gt=()=>{i&&(le.length?P(()=>te(le)):i.collectors.length?d({tab:"collectors",mobileDetail:!1}):z({kind:"collector"}))},_e=i?.collectors.filter(t=>{const o=i.runs.filter(v=>v.collectorId===t.id).at(-1);return o&&(o.status==="launching"||o.status==="delivered")}).length??0;return e.jsxs("section",{ref:q,"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:ke?e.jsxs(e.Fragment,{children:[e.jsxs("button",{type:"button",className:k,"aria-label":"返回清单",onClick:Oe,children:[e.jsx(Se,{size:18}),e.jsx("span",{children:"待办"})]}),e.jsx("h1",{className:"sr-only",children:"待办详情"}),e.jsx("div",{className:"flex-1"}),e.jsx(Ae,{label:"待办操作",items:Fe,disabled:C})]}):r.tab==="collectors"?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:k,"aria-label":"返回清单",onClick:Oe,children:e.jsx(Se,{size:18})}),e.jsx("h1",{className:"min-w-0 flex-1 text-base font-semibold",children:"收集方向"}),e.jsxs("button",{type:"button",className:k,"aria-label":"添加方向",title:"添加方向",disabled:!i,onClick:()=>z({kind:"collector"}),children:[e.jsx(He,{size:20}),e.jsx("span",{className:"hidden sm:inline",children:"添加方向"})]})]}):r.selecting?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:k,onClick:()=>d({selecting:!1,checked:[]}),children:"取消"}),e.jsxs("h1",{className:"min-w-0 flex-1 text-sm",children:["已选 ",ve.length," 项"]}),e.jsx("button",{type:"button",className:H,disabled:C||!ve.length,onClick:()=>Y(ve.map(t=>t.id)),children:"交给会话"})]}):e.jsxs(e.Fragment,{children:[!a&&e.jsx("button",{type:"button",className:`${k} hidden sm:inline-flex`,"aria-label":"打开会话侧栏",onClick:s,children:e.jsx(Pt,{size:18})}),e.jsx("button",{type:"button",className:`${k} px-2`,"aria-label":"返回终端",title:"返回终端",onClick:()=>Be.getState().terminal(),children:e.jsx(Se,{size:18})}),e.jsxs("h1",{className:"min-w-0 flex-1 text-base font-semibold",children:["待办",i&&e.jsx("span",{className:"ml-2 text-xs font-normal tabular-nums text-muted-foreground",children:i.todos.filter(t=>t.status==="open").length})]}),e.jsxs("button",{type:"button",className:`${k} px-2 text-primary`,"aria-label":"收集待办",disabled:!i||C,onClick:gt,children:[e.jsx(Xe,{size:16}),e.jsx("span",{children:"收集"})]}),e.jsx("button",{type:"button",className:`${k} px-2`,"aria-label":"新增待办",title:"新增待办",disabled:!i,onClick:()=>z({kind:"edit"}),children:e.jsx(He,{size:21})}),e.jsx(Ae,{label:"待办菜单",items:ht,disabled:!i||C})]})}),(y||g&&!S)&&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:g||y}),y&&e.jsx("button",{type:"button",className:"shrink-0 underline",onClick:()=>{X(!0)},children:"重试"}),e.jsx("button",{type:"button","aria-label":"关闭提示",onClick:()=>{h(""),E("")},children:"×"})]}),J&&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:J}),B&&e.jsx("button",{type:"button",className:"min-h-9 shrink-0 text-primary",onClick:()=>{P(async()=>{await Ie(B.todo,{status:B.previous}),T()&&D("已撤销")})},children:"撤销"})]}),i?r.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:"配置一次,之后从清单一键收集。"}),le.length>1&&e.jsx("button",{type:"button",className:F,disabled:C,onClick:()=>{P(()=>te(le))},children:"全部收集"})]}),i.collectors.length?e.jsx("div",{className:`grid items-start gap-4 ${M?"grid-cols-2":""}`,children:i.collectors.map(t=>e.jsx(rs,{collector:t,runs:i.runs.filter(o=>o.collectorId===t.id),busy:C,onRun:()=>{P(()=>te([t]))},onEdit:()=>z({kind:"collector",id:t.id}),onOpen:ee,onRemove:()=>{P(async()=>{await Rt(t)})}},t.id))}):e.jsx($e,{title:"让 Agent 帮你发现下一件事",text:"添加一个收集方向,写下关注的内容和筛选要求。"})]}):e.jsxs("div",{className:"flex min-h-0 flex-1",children:[e.jsxs("div",{className:`${M?"flex w-[42%] shrink-0 border-r border-border/30":pt?"flex flex-1":"hidden"} min-h-0 min-w-0 flex-col`,children:[ft&&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(Kt,{size:15,className:"pointer-events-none absolute left-3 top-3.5 text-muted-foreground"}),e.jsx("input",{autoFocus:r.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:r.query,onChange:t=>d({query:t.target.value})})]}),e.jsx("button",{type:"button",className:k,"aria-label":"清除筛选",onClick:()=>d({query:"",source:"",filter:"open",toolsOpen:!1,checked:[]}),children:e.jsx(Ye,{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:r.filter,onChange:t=>d({filter:t.target.value,checked:[]}),children:[e.jsx("option",{value:"open",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:r.source,onChange:t=>d({source:t.target.value,checked:[]}),children:[e.jsx("option",{value:"",children:"全部来源"}),[...new Set(i.todos.map(t=>t.source))].map(t=>e.jsx("option",{children:t},t))]})]})]}),!!_e&&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:["已发起 ",_e," 个收集任务"]}),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:ae.length?ae.map(t=>{const o=de(i,t.id),v=!!o?.sessionId&&o.status!=="failed",b=v?"去会话":o?.status==="launching"?"发送中…":"交给会话",w=[o?.status==="failed"?"发送未完成":o?.status==="launching"?"正在发送":o?.sessionId?`已交给 ${Pe(o)}`:"",t.source==="手动添加"?"":t.source].filter(Boolean).join(" · ");return e.jsxs("article",{className:`flex items-start gap-1 border-b border-border/30 px-1 py-4 ${r.selectedId===t.id&&M?"bg-surface":"hover:bg-surface"}`,children:[r.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:ne(t)&&r.checked.includes(t.id),disabled:!ne(t),onChange:U=>d({checked:U.target.checked?[...r.checked,t.id]:r.checked.filter($=>$!==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:C||t.status==="ignored","aria-label":`${t.status==="completed"?"重新打开":"完成"} ${t.title}`,onClick:()=>se(t,t.status==="completed"?"open":"completed"),children:t.status==="completed"?e.jsx(It,{size:19,className:"text-primary"}):e.jsx(Ht,{size:19})}),e.jsxs("button",{type:"button",className:"min-w-0 flex-1 py-2 text-left",onClick:()=>ot(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.jsx("span",{className:"mt-1.5 block truncate text-xs leading-5 text-muted-foreground",children:t.status==="completed"?"已完成":t.status==="ignored"?"已忽略":w})]}),t.status==="open"&&!r.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:C||o?.status==="launching"&&!o.sessionId,"aria-label":`${v?"去会话":"交给会话"} ${t.title}`,onClick:()=>v?ee(o):Y([t.id]),children:e.jsx("span",{children:b})})]},t.id)}):e.jsx($e,{title:r.query||r.source?"没有匹配的待办":r.filter==="completed"?"还没有已完成的待办":r.filter==="review"?"暂时没有待确认的结果":r.filter==="ignored"?"没有已忽略的待办":i.todos.length?"清单已清空":"还没有待办",text:r.query||r.source?"换个关键词,或清除筛选。":r.filter==="open"?"点 + 记下一件事,或让 Agent 帮你收集。":"清除筛选可回到当前待办。"})})]}),(M||ke)&&e.jsx("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col",children:I?e.jsx(ss,{todo:I,sessionName:G?Pe(G):void 0,runs:i.runs.filter(t=>t.todoId===I.id||t.handoff?.todoIds.includes(I.id)),busy:C,wide:M,menu:Fe,onLaunch:()=>Y([I.id]),onOpen:ee,onStatus:t=>se(I,t)},I.id):e.jsx($e,{title:"从清单开始",text:"选择一条待办,查看内容或处理结果。"})})]}):e.jsx("div",{className:"flex flex-1 items-center justify-center text-sm text-muted-foreground",children:y?"加载失败,请重试":"正在加载待办…"}),S&&e.jsxs(Wt,{compact:S.kind==="handoff",title:xt,busy:C,error:g,onClose:()=>z(null),children:[S.kind==="edit"&&e.jsx(Yt,{workspace:l,todo:Q,busy:C,onCancel:()=>z(null),onSave:(t,o)=>{P(async()=>{const v=Q?await Ie(Q,t):await Lt({...t,idempotencyKey:be(["create",t])});T()&&(Z(["create",t]),je(`todo:${Q?.id??"new"}`),d({tab:"todos",filter:"open",source:"",query:"",selectedId:v.todo.id,mobileDetail:!1,modal:o?{kind:"handoff",ids:[v.todo.id]}:null}),o||D("待办已保存。"))})}}),S.kind==="handoff"&&(f?e.jsx("div",{className:"p-5 text-sm text-muted-foreground",children:"正在读取会话…"}):e.jsx(ls,{workspace:l,ids:S.ids,config:ct(S.ids[0],Re),agents:m.agents,sessions:c,currentSessionId:n,directories:Le,busy:C,loading:f,title:i?.todos.find(t=>t.id===S.ids[0])?.title??"",onCancel:()=>z(null),onSend:t=>{P(()=>dt(S.ids,t))}})),S.kind==="collector"&&e.jsx(Xt,{workspace:l,collector:ye,config:Re,agents:m.agents,loading:f,service:mt,directories:Le,currentCwd:m.cwd,busy:C,onCancel:()=>z(null),onSave:(t,o)=>{P(async()=>{const v=await Ot(t);T()&&(Me(l,t.config),je(`collector:${ye?.id??"new"}`),d({tab:o&&r.tab!=="collectors"?"todos":"collectors",modal:null}),o?await te([v.collector]):D("收集方向已保存,可以随时开始。"))})}}),S.kind==="integration"&&e.jsx(Zt,{})]})]})}function $e({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(Bt,{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 rs({collector:s,runs:a,busy:n,onRun:c,onEdit:l,onRemove:r,onOpen:d}){const[i,p]=j.useState(!1),m=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:k,"aria-label":`编辑 ${s.name}`,disabled:n,onClick:l,children:e.jsx(At,{size:16})}),e.jsx("button",{type:"button",className:k,"aria-label":`移除 ${s.name}`,disabled:n,onClick:()=>p(!0),children:e.jsx(Et,{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}),i?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:k,onClick:()=>p(!1),children:"取消"}),e.jsx("button",{type:"button",className:`${F} text-destructive`,disabled:n,onClick:r,children:"确认移除"})]})]}):e.jsx("div",{className:"flex flex-wrap gap-2",children:e.jsxs("button",{type:"button",className:H,disabled:n||m?.status==="launching",onClick:c,children:[e.jsx(Xe,{size:16}),m?"再次收集":"开始收集"]})}),m&&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:m.status==="complete"?"已收到收集结果":lt[m.status]}),m.sessionId&&m.status!=="complete"&&e.jsx("button",{type:"button",className:k,disabled:n,onClick:()=>d(m),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(ts,{run:N,onOpen:()=>d(N),busy:n},N.id))})]})]})]})}export{Ds as default};
1
+ import{a$ as jt,aW as vt,eA as We,cq as e,a8 as Ye,u as Ge,$ as Qe,p as wt,e as Nt,C as yt,eF as kt,dD as R,bo as Ct,bR as St,bN as Ue,T as Ke,S as Ce,c as Se,O as He,Y as Xe,k as It,bQ as $t,J as At,a2 as Et}from"./app-DZ6mCJiW.js";import{b as j,r as Dt}from"./dnd-BCFAPC0L.js";import{g as me,A as Ze,l as Je,r as Tt,j as zt,e as qt,P as Pt,k as Be,u as Ie,i as Rt,d as Lt,s as Ot,b as Ft,h as _t}from"./App-7BA7Jt-V.js";import{D as et}from"./RecordingSaveDialog-Czkjuaeu.js";import{d as Ut}from"./GitLoadingSkeleton-RRbTeMuA.js";import{S as tt}from"./AndroidMirrorView-COoPljXi.js";import{S as Kt}from"./search-DAQ_AOVP.js";import{C as Ht}from"./circle-BIJQEbCa.js";import"./react-XDCjal2T.js";import"./terminal-DaiFCKy_.js";import"./link-DWUQqMDL.js";import"./clipboardText-DoB9NjH8.js";import"./swiper-BaumVgFd.js";import"./clipboard-DV8t7tww.js";import"./v4-EwEgHOG0.js";import"./triangle-alert-D-tt7pA2.js";import"./external-link-DodqgrCc.js";import"./maximize-2-Clx4ktqB.js";import"./git-compare-KkbucDhN.js";import"./use-gesture-react.esm-CM42s15B.js";import"./arrow-down-Ty3zwcgl.js";import"./sun-DvwMJkda.js";import"./unplug-BQxOculv.js";import"./gestureArbiter-DszagC-d.js";const Jt=[["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"}]],Bt=jt("inbox",Jt),V={tab:"todos",filter:"open",source:"",query:"",selectedId:null,mobileDetail:!1,selecting:!1,checked:[],toolsOpen:!1,modal:null,drafts:{},requests:{}},A=vt((s,a)=>({views:{},snapshots:{},options:{},cache:(n,c)=>s(l=>({snapshots:{...l.snapshots,[n]:c}})),cacheOptions:(n,c)=>s(l=>({options:{...l.options,[n]:c}})),patch:(n,c)=>s(l=>({views:{...l.views,[n]:{...l.views[n]??V,...c}}})),draft:(n,c,l)=>{const r=a().views[n]??V;a().patch(n,{drafts:{...r.drafts,[c]:l}})},clearDraft:(n,c)=>{const l={...(a().views[n]??V).drafts};delete l[c],a().patch(n,{drafts:l})},requestKey:(n,c)=>{const l=JSON.stringify(c),r=a().views[n]??V;if(r.requests[l])return r.requests[l];const d=crypto.randomUUID();return a().patch(n,{requests:{...r.requests,[l]:d}}),d},finishRequest:(n,c)=>{const l={...(a().views[n]??V).requests};delete l[JSON.stringify(c)],a().patch(n,{requests:l})}}));function Ee(s,a,n){return[A(l=>l.views[s]?.drafts[a])??n,l=>A.getState().draft(s,a,l)]}function de(s,a){return s.runs.filter(n=>n.todoId===a||n.handoff?.todoIds.includes(a)).at(-1)}function Mt(s,a,n){return n==="review"?a.status==="open"&&de(s,a.id)?.status==="complete":a.status===(n==="completed"?"completed":n==="ignored"?"ignored":"open")}const st=s=>`termdock:todo-preferences:v1:${s}`,ue=s=>s.replace(/\/+$/,"").split("/").pop()||s;function xe(s){return[...new Set(s.filter(a=>typeof a=="string"&&!!a.trim()).map(a=>a.trim().replace(/\/+$/,"")||"/"))]}function De(s){try{const a=JSON.parse(localStorage.getItem(st(s))||"{}"),n=a?.choice;return{choice:n&&["agentSlug","command","cwd"].every(c=>typeof n[c]=="string")?n:void 0,directories:xe(Array.isArray(a?.directories)?a.directories:[]).slice(0,8)}}catch{return{directories:[]}}}function Me(s,a){try{const n=De(s);localStorage.setItem(st(s),JSON.stringify({choice:{agentSlug:a.agentSlug,command:a.command,cwd:a.cwd},directories:xe([a.cwd,...n.directories]).slice(0,8)}))}catch{}}function Vt(s,a,n,c){return xe([s,...De(c).directories,n?.defaults.cwd,...n?.runs.slice().reverse().map(l=>l.config.cwd)??[],...a,...n?.collectors.map(l=>l.config.cwd)??[]]).slice(0,8)}const Te="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",H=`${Te} bg-primary text-primary-foreground hover:opacity-90`,F=`${Te} bg-surface-2 text-foreground hover:bg-surface-elevated`,k=`${Te} text-muted-foreground hover:bg-surface-2 hover:text-foreground`,L="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",O="block space-y-2 text-sm text-muted-foreground";function Wt({title:s,busy:a,error:n,onClose:c,children:l,compact:r=!1}){const d=j.useRef(null),i=j.useId();return We(d,!0,()=>{a||c()}),Dt.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:c}),e.jsxs("section",{ref:d,role:"dialog","aria-modal":"true","aria-labelledby":i,"aria-busy":a,tabIndex:-1,className:r?"fixed bottom-[max(0.75rem,env(safe-area-inset-bottom,0px))] left-3 right-3 z-drawer-panel flex max-h-[calc(100svh-2rem)] min-w-0 flex-col overflow-hidden rounded-2xl border border-border/30 bg-surface text-foreground shadow-xl sm:bottom-auto sm:left-1/2 sm:right-auto sm:top-1/2 sm:w-[28rem] sm:max-w-[90vw] sm:-translate-x-1/2 sm:-translate-y-1/2":"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:i,className:"flex-1 text-base font-semibold",children:s}),e.jsx("button",{type:"button",className:k,"aria-label":"关闭",disabled:a,onClick:c,children:e.jsx(Ye,{size:18})})]}),n&&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:n}),e.jsx("div",{className:"flex min-h-0 flex-1 flex-col",children:l})]})]}),document.body)}function ze({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 at({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 Yt({workspace:s,todo:a,busy:n,onSave:c,onCancel:l}){const[r,d]=Ee(s,`todo:${a?.id??"new"}`,{title:a?.title??"",description:a?.description??""}),i=p=>{!n&&r.title.trim()&&c({...r,title:r.title.trim()},p)};return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col",onSubmit:p=>{p.preventDefault(),i(!a)},children:[e.jsxs(ze,{children:[e.jsxs("label",{className:O,children:["要做什么",e.jsx("input",{autoFocus:!0,required:!0,maxLength:200,className:L,value:r.title,onChange:p=>d({...r,title:p.target.value}),placeholder:"一句话描述这件事"})]}),e.jsxs("label",{className:O,children:["背景和处理要求",e.jsx("textarea",{className:`${L} min-h-44 resize-y`,maxLength:4e4,value:r.description,onChange:p=>d({...r,description:p.target.value}),placeholder:"为什么要做、参考资料、希望得到什么结果…"})]}),!a&&e.jsx("p",{className:"text-xs leading-6 text-muted-foreground",children:"可以先存进清单,也可以选一个会话交出去。"})]}),e.jsxs(at,{children:[e.jsx("button",{type:"button",className:k,disabled:n,onClick:l,children:"取消"}),!a&&e.jsx("button",{type:"button",className:F,disabled:n||!r.title.trim(),onClick:()=>i(!1),children:"仅保存"}),e.jsx("button",{className:H,disabled:n||!r.title.trim(),children:n?"正在保存…":a?"保存修改":"保存并交给会话"})]})]})}function nt(s,a,n,c){const l=a.find(r=>r.slug===(s.agentSlug||n))??(s.agentSlug?void 0:a[0]);return{...s,agentSlug:s.agentSlug||l?.slug||"",command:s.command||(l?me(l.slug,l.command):""),cwd:s.cwd||c||""}}function Gt({config:s,agents:a,loading:n,service:c,directories:l,currentCwd:r,onChange:d,collect:i=!1}){const[p,m]=j.useState(!1),N=j.useId(),f=j.useId();return e.jsxs(e.Fragment,{children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:["运行于 ",c]}),e.jsxs("div",{className:O,children:[e.jsx("label",{htmlFor:N,children:"Agent"}),e.jsxs("select",{id:N,className:L,required:!0,disabled:n,value:s.agentSlug,onChange:x=>{const y=a.find(E=>E.slug===x.target.value);d({...s,agentSlug:x.target.value,command:y?me(y.slug,y.command):""})},children:[e.jsx("option",{value:"",disabled:a.length>0,children:n?"正在加载 Agent…":"选择 Agent"}),a.map(x=>e.jsx("option",{value:x.slug,children:x.displayName},x.slug)),s.agentSlug&&!a.some(x=>x.slug===s.agentSlug)&&e.jsxs("option",{value:s.agentSlug,children:[s.agentSlug,"(当前不可用)"]})]})]}),a.find(x=>x.slug===s.agentSlug)&&e.jsx(Ze,{agent:a.find(x=>x.slug===s.agentSlug),value:s.command,onChange:x=>d({...s,command:x})},s.agentSlug),!n&&a.length===0&&e.jsx("p",{className:"text-sm text-destructive",children:"未找到可启动的 Agent,请检查该服务的 Agent 配置。"}),e.jsxs("div",{className:O,children:[e.jsx("label",{htmlFor:f,children:"工作目录"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{id:f,className:L,value:s.cwd,autoCapitalize:"none",autoCorrect:"off",spellCheck:!1,onChange:x=>d({...s,cwd:x.target.value}),placeholder:"选择这件事所在的项目或目录"}),e.jsx("button",{type:"button",className:F,"aria-label":"选择工作目录",onClick:()=>m(!0),children:e.jsx(Ge,{size:17})})]}),!!l.length&&e.jsx("div",{className:"flex gap-1.5 overflow-x-auto pb-1","aria-label":"快捷选择工作目录",children:l.map(x=>{const y=ue(x),g=l.some(h=>h!==x&&ue(h)===y)?x.split("/").filter(Boolean).slice(-2).join("/"):y;return e.jsx("button",{type:"button","aria-label":`使用目录 ${x}`,"aria-pressed":s.cwd===x,title:x,className:`min-h-10 max-w-48 shrink-0 truncate rounded-lg border px-2.5 text-xs ${s.cwd===x?"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:()=>d({...s,cwd:x}),children:x===r?`当前 · ${g}`:g},x)})})]}),e.jsxs("label",{className:O,children:[i?"收集要求":"处理要求",e.jsx("textarea",{required:i,className:`${L} min-h-32 resize-y`,maxLength:2e4,value:s.prompt,onChange:x=>d({...s,prompt:x.target.value}),placeholder:i?"从哪里收集、筛选哪些事项、需要哪些背景与来源…":"补充 Agent 应该遵守的要求,可留空"})]}),e.jsx(et,{open:p,initialPath:s.cwd||"/",title:"选择工作目录",labels:{hint:"选择 Agent 运行的目录",cancel:"取消",confirm:"使用此目录",close:"关闭",parent:"上级目录"},onCancel:()=>m(!1),onConfirm:x=>{d({...s,cwd:x}),m(!1)}})]})}const Qt=[{name:"项目巡检",prompt:"检查工作目录中的项目,找出值得处理的问题。每条待办写清问题、依据和建议,避免重复。只收集待办,不修改项目。"},{name:"技术动态",prompt:"收集我关注方向的技术动态,筛选值得进一步调研或尝试的事项。每条待办附来源和后续建议,避免重复。"}];function Xt({workspace:s,collector:a,config:n,agents:c,loading:l,service:r,directories:d,currentCwd:i,busy:p,onSave:m,onCancel:N}){const[f,x]=Ee(s,`collector:${a?.id??"new"}`,{name:a?.name??"",config:a?.config??{...n,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"}),y=f.config.agentSlug?f.config:{...nt(f.config,c,n.agentSlug,n.cwd),prompt:f.config.prompt},E=f.name.trim()&&y.prompt.trim()&&!l&&c.some(h=>h.slug===y.agentSlug),g=h=>{p||!E||m({id:a?.id,revision:a?.revision,name:f.name.trim(),config:y,enabled:f.enabled,schedule:f.schedule==="manual"?null:f.schedule==="interval"?{kind:"interval",everyMinutes:f.minutes}:{kind:"daily",time:f.daily,weekdays:a?.schedule?.kind==="daily"?a.schedule.weekdays:[0,1,2,3,4,5,6]}},h)};return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col",onSubmit:h=>{h.preventDefault(),g(!0)},children:[e.jsx(ze,{children:e.jsxs("fieldset",{disabled:p,className:"min-w-0 space-y-5",children:[!a&&e.jsx("div",{className:"flex flex-wrap gap-2",children:Qt.map(h=>e.jsx("button",{type:"button",className:F,onClick:()=>x({...f,name:h.name,config:{...f.config,prompt:h.prompt}}),children:h.name},h.name))}),e.jsxs("label",{className:O,children:["收集方向",e.jsx("input",{required:!0,className:L,maxLength:200,value:f.name,onChange:h=>x({...f,name:h.target.value}),placeholder:"例如:项目巡检、技术动态"})]}),e.jsx(Gt,{collect:!0,config:y,agents:c,loading:l,service:r,directories:d,currentCwd:i,onChange:h=>x({...f,config:h})}),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:["定时与启用 · ",f.schedule==="manual"?"手动运行":f.schedule==="interval"?`每 ${f.minutes} 分钟`:`每天 ${f.daily}`]}),e.jsxs("div",{className:"space-y-4 pb-3",children:[e.jsxs("label",{className:O,children:["运行频率",e.jsxs("select",{className:L,value:f.schedule,onChange:h=>x({...f,schedule:h.target.value}),children:[e.jsx("option",{value:"manual",children:"手动运行"}),e.jsx("option",{value:"interval",children:"按间隔运行"}),e.jsx("option",{value:"daily",children:"每天定时"})]})]}),f.schedule==="interval"&&e.jsxs("label",{className:O,children:["间隔(分钟)",e.jsx("input",{className:L,required:!0,type:"number",min:1,max:43200,step:1,value:f.minutes,onChange:h=>x({...f,minutes:Number(h.target.value)})})]}),f.schedule==="daily"&&e.jsxs("label",{className:O,children:["时间(服务所在时区)",e.jsx("input",{className:L,required:!0,type:"time",value:f.daily,onChange:h=>x({...f,daily:h.target.value})})]}),e.jsxs("label",{className:"flex items-center gap-3 text-sm",children:[e.jsx("input",{type:"checkbox",checked:f.enabled,onChange:h=>x({...f,enabled:h.target.checked})}),"启用此方向,参与全部收集和定时运行"]})]})]})]})}),e.jsxs(at,{children:[e.jsx("button",{type:"button",className:k,disabled:p,onClick:N,children:"取消"}),e.jsx("button",{type:"button",className:F,disabled:p||!E,onClick:()=>g(!1),children:"仅保存"}),e.jsxs("button",{className:H,disabled:p||!E,children:[e.jsx(Ut,{size:16}),p?"正在保存…":"保存并收集"]})]})]})}function Zt(){const[s,a]=j.useState(!1),n='td todo add --title "检查项目依赖" --description "核实升级影响" --source "项目巡检" --external-id "deps-review"';return e.jsxs(ze,{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:n})}),e.jsx("button",{className:F,onClick:()=>{navigator.clipboard.writeText(n).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 es=s=>{const a=new Date(s),n=new Date,c=a.toDateString()===n.toDateString();return new Intl.DateTimeFormat("zh-CN",{...c?{}:{month:"short",day:"numeric",...a.getFullYear()===n.getFullYear()?{}:{year:"numeric"}},hour:"2-digit",minute:"2-digit",hour12:!1}).format(a)},lt={launching:"正在准备终端",delivered:"任务已发送到终端",complete:"已收到结果,待你确认",blocked:"Agent 需要你协助",failed:"启动或处理失败"};function ts({run:s,onOpen:a,busy:n}){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"?"已收到结果报告":lt[s.status]}),s.sessionId&&e.jsxs("button",{type:"button",className:F,disabled:n,onClick:a,children:[e.jsx(Qe,{size:15}),"打开终端"]})]}),e.jsxs("p",{className:"mt-1 text-xs leading-6 text-muted-foreground",children:[s.config.agentSlug," · ",es(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 Ae({label:s="更多操作",items:a,disabled:n}){const[c,l]=j.useState(!1),r=j.useRef(null),d=j.useRef(null),i=j.useId();return We(d,c,()=>l(!1)),j.useEffect(()=>{if(!c)return;const p=m=>{m.target instanceof Node&&!r.current?.contains(m.target)&&l(!1)};return document.addEventListener("pointerdown",p,!0),()=>document.removeEventListener("pointerdown",p,!0)},[c]),e.jsxs("div",{ref:r,className:"relative z-20 shrink-0",children:[e.jsx("button",{type:"button","aria-label":s,title:s,"aria-haspopup":"menu","aria-expanded":c,"aria-controls":c?i:void 0,disabled:n,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:()=>l(p=>!p),children:e.jsx(wt,{size:20})}),c&&e.jsx("div",{ref:d,id:i,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:p=>{if(!["ArrowDown","ArrowUp","Home","End"].includes(p.key))return;p.preventDefault();const m=Array.from(d.current?.querySelectorAll('[role="menuitem"]:not(:disabled)')??[]),N=m.indexOf(document.activeElement);m[p.key==="Home"?0:p.key==="End"?m.length-1:(N+(p.key==="ArrowDown"?1:-1)+m.length)%m.length]?.focus()},children:a.map(p=>e.jsx("button",{type:"button",role:"menuitem",disabled:p.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 ${p.danger?"text-destructive":"text-foreground"}`,onClick:()=>{l(!1),p.action()},children:p.label},p.label))})]})}function ss({todo:s,runs:a,busy:n,wide:c,menu:l,onLaunch:r,onOpen:d,onStatus:i,sessionName:p}){const m=a.at(-1),N=!!m?.sessionId&&m.status!=="failed";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}),c&&e.jsx(Ae,{label:"待办操作",items:l,disabled:n})]}),e.jsxs("p",{className:"mt-2 text-xs leading-6 text-muted-foreground",children:[s.source,m?.status==="launching"?" · 正在发送":N?` · 已交给 ${p||"会话"}`:""]}),s.description&&e.jsx("p",{className:"termdock-native-select mt-5 whitespace-pre-wrap break-words text-[15px] leading-8",children:s.description}),m?.handoff?.note&&e.jsxs("div",{className:"mt-6 text-sm leading-7",children:[e.jsx("p",{className:"text-xs text-muted-foreground",children:"发送时的补充"}),e.jsx("p",{className:"mt-1 whitespace-pre-wrap break-words",children:m.handoff.note})]}),m?.error&&e.jsx("p",{role:"alert",className:"mt-5 break-words text-sm leading-7 text-destructive",children:m.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(Nt,{size:14})]}),a.some(f=>f.result)&&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:"此前的处理记录"}),a.filter(f=>f.result).slice().reverse().map(f=>e.jsx("p",{className:"mt-3 whitespace-pre-wrap break-words leading-7",children:f.result},f.id))]})]}),e.jsx("footer",{className:"flex shrink-0 flex-wrap items-center gap-2 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"?e.jsxs(e.Fragment,{children:[e.jsxs("button",{type:"button",className:`${H} flex-1 sm:flex-none`,disabled:n||m?.status==="launching",onClick:()=>N?d(m):r(),children:[N?e.jsx(Qe,{size:16}):e.jsx(tt,{size:16}),N?"去会话":m?.status==="launching"?"正在发送…":"交给会话"]}),N&&e.jsx("button",{type:"button",className:k,disabled:n,onClick:r,children:"再次交给"}),e.jsxs("button",{type:"button",className:k,disabled:n,onClick:()=>i("completed"),children:[e.jsx(yt,{size:16}),"完成"]})]}):e.jsx("button",{type:"button",className:H,disabled:n,onClick:()=>i("open"),children:"重新打开"})})]})}const ce="min-h-11 w-full 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",rt=s=>`termdock:todo-recipient:v1:${s}`;function as(s,a){try{localStorage.setItem(rt(s),a)}catch{}}function ns(s){try{return localStorage.getItem(rt(s))}catch{return null}}function ls({workspace:s,ids:a,config:n,agents:c,sessions:l,currentSessionId:r,directories:d,busy:i,loading:p,title:m,onSend:N,onCancel:f}){const x=l.filter(u=>u.agent?.slug).sort((u,q)=>+(q.sessionId===r)-+(u.sessionId===r)||q.lastActivity-u.lastActivity),y=ns(s),E=x.find(u=>u.sessionId===r)?.sessionId??x.find(u=>u.sessionId===y)?.sessionId??x[0]?.sessionId??"__new__",[g,h]=Ee(s,`handoff:${JSON.stringify(a.slice().sort())}`,{target:E,note:"",config:{...n,prompt:""}}),[J,D]=j.useState(!1),C=g.target==="__new__",_=c.find(u=>u.slug===g.config.agentSlug),B=!p&&(C?!!_:x.some(u=>u.sessionId===g.target));return e.jsxs("form",{className:"flex min-h-0 flex-1 flex-col",onSubmit:u=>{u.preventDefault(),!i&&B&&N({note:g.note,...C?{config:g.config}:{sessionId:g.target}})},children:[e.jsxs("div",{className:"min-h-0 flex-1 space-y-5 overflow-y-auto overscroll-contain px-5 py-5",children:[e.jsx("p",{className:"truncate text-sm text-muted-foreground",title:m,children:a.length>1?`${a.length} 条待办,一起发送`:m}),e.jsxs("fieldset",{disabled:i,className:"min-w-0 space-y-5",children:[e.jsxs("label",{className:"block space-y-2 text-sm text-muted-foreground",children:["交给谁",e.jsxs("select",{className:ce,disabled:p,value:g.target,onChange:u=>h({...g,target:u.target.value}),children:[x.map(u=>e.jsxs("option",{value:u.sessionId,children:[u.sessionId===r?"当前 · ":u.sessionId===y?"上次 · ":"",u.displayName," · ",u.agent?.displayName||u.agent?.slug]},u.sessionId)),!C&&!x.some(u=>u.sessionId===g.target)&&e.jsx("option",{value:g.target,disabled:!0,children:"原会话已不可用,请重新选择"}),e.jsx("option",{value:"__new__",children:"+ 新建会话"})]})]}),C&&e.jsxs("details",{className:"rounded-lg border border-border/20 px-3 text-sm text-muted-foreground",children:[e.jsxs("summary",{className:"min-h-11 cursor-pointer py-3",children:[_?.displayName||"选择 Agent"," · ",ue(g.config.cwd)||"服务默认目录"," · 更改"]}),e.jsxs("div",{className:"space-y-4 pb-3",children:[e.jsxs("label",{className:"block space-y-2",children:["Agent",e.jsxs("select",{className:ce,value:g.config.agentSlug,onChange:u=>{const q=c.find(fe=>fe.slug===u.target.value);h({...g,config:{...g.config,agentSlug:u.target.value,command:q?me(q.slug,q.command):""}})},children:[e.jsx("option",{value:"",disabled:!0,children:"选择 Agent"}),c.map(u=>e.jsx("option",{value:u.slug,children:u.displayName},u.slug))]})]}),_&&e.jsx(Ze,{agent:_,value:g.config.command,onChange:u=>h({...g,config:{...g.config,command:u}})},_.slug),e.jsxs("label",{className:"block space-y-2",children:["工作目录",e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{className:ce,value:g.config.cwd,placeholder:"服务默认目录",onChange:u=>h({...g,config:{...g.config,cwd:u.target.value}})}),e.jsx("button",{type:"button",className:F,"aria-label":"选择工作目录",onClick:()=>D(!0),children:e.jsx(Ge,{size:16})})]})]}),!!d.length&&e.jsx("div",{className:"flex gap-2 overflow-x-auto",children:d.map(u=>e.jsx("button",{type:"button",className:"min-h-10 shrink-0 rounded-md bg-surface-2 px-2 text-xs",title:u,onClick:()=>h({...g,config:{...g.config,cwd:u}}),children:ue(u)},u))})]})]}),e.jsxs("label",{className:"block space-y-2 text-sm text-muted-foreground",children:["补充一句话",e.jsx("span",{className:"ml-2 text-xs",children:"选填"}),e.jsx("textarea",{className:`${ce} min-h-28 resize-y`,maxLength:4e3,value:g.note,onChange:u=>h({...g,note:u.target.value}),placeholder:"例如:先分析不要改代码,和之前那个问题一起处理…"})]})]})]}),e.jsxs("footer",{className:"flex shrink-0 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:[e.jsx("button",{type:"button",className:k,disabled:i,onClick:f,children:"取消"}),e.jsxs("button",{className:H,disabled:i||!B,children:[e.jsx(tt,{size:16}),i?"正在发送…":"发送并进入会话"]})]}),e.jsx(et,{open:J,title:"选择工作目录",initialPath:g.config.cwd||"/",onCancel:()=>D(!1),onConfirm:u=>{h({...g,config:{...g.config,cwd:u}}),D(!1)}})]})}const Ve={agentSlug:"",command:"",cwd:"",prompt:""};function Ds({onOpenSidebar:s,leftSidebarVisible:a,activeSessionId:n}){const c=kt(),[l]=j.useState(()=>R()?.targetPeerId??location.origin),r=A(t=>t.views[l]??V),d=t=>A.getState().patch(l,t),[i,p]=j.useState(()=>A.getState().snapshots[l]??null),[m,N]=j.useState(()=>A.getState().options[l]??{agents:[],preferred:null,cwd:"",directories:[]}),[f,x]=j.useState(!A.getState().options[l]),[y,E]=j.useState(""),[g,h]=j.useState(""),[J,D]=j.useState(""),[C,_]=j.useState(!1),[B,u]=j.useState(null),q=j.useRef(null),[fe,it]=j.useState(0),M=fe>=900,K=j.useRef(!0),pe=j.useRef(!1),he=j.useRef(!1),ge=j.useRef(0),qe=j.useRef(R()?.targetPeerId),T=()=>K.current&&qe.current===R()?.targetPeerId,X=j.useCallback(async(t=!1)=>{if(he.current&&!t)return;he.current=!0;const o=++ge.current,v=R()?.targetPeerId;try{const b=await Je();K.current&&o===ge.current&&v===R()?.targetPeerId&&(p(b),A.getState().cache(l,b),E(""))}catch(b){K.current&&v===R()?.targetPeerId&&E(b instanceof Error?b.message:"待办加载失败")}finally{o===ge.current&&(he.current=!1)}},[l]),W=j.useCallback(async()=>{const t=R()?.targetPeerId;x(!0);const[o,v]=await Promise.allSettled([Ct(),St()]);if(!K.current||R()?.targetPeerId!==t)return;const b=A.getState().options[l],w=Ue().slice().sort(($,bt)=>bt.lastActivity-$.lastActivity),U={agents:o.status==="fulfilled"?o.value:b?.agents??[],preferred:v.status==="fulfilled"?v.value.newSessionAgentSlug:b?.preferred??Tt()?.slug??null,cwd:w.find($=>$.sessionId===n)?.cwd??b?.cwd??w[0]?.cwd??"",directories:xe(w.map($=>$.cwd).concat(b?.directories??[]))};N(U),A.getState().cacheOptions(l,U),x(!1),o.status==="rejected"&&h("会话选项加载失败,打开交接面板可重试。")},[l,n]);j.useEffect(()=>{K.current=!0;const t=q.current,o=()=>it(t?.clientWidth??0);o();const v=new ResizeObserver(o);t&&v.observe(t),W();const b=()=>{qe.current!==R()?.targetPeerId&&Be.getState().terminal()};window.addEventListener(Ke,b),window.addEventListener(Ce,W);const w=zt(()=>{navigator.onLine!==!1&&X()},1200,[Ce]);return()=>{K.current=!1,v.disconnect(),w(),window.removeEventListener(Ke,b),window.removeEventListener(Ce,W)}},[X,W]),j.useEffect(()=>{if(!J)return;const t=window.setTimeout(()=>{D(""),u(null)},5e3);return()=>window.clearTimeout(t)},[J]);const be=t=>A.getState().requestKey(l,t),Z=t=>A.getState().finishRequest(l,t),je=t=>A.getState().clearDraft(l,t),S=r.modal,z=t=>{h(""),d({modal:t})},P=async t=>{if(!pe.current){pe.current=!0,_(!0),h(""),D(""),u(null);try{await t(),T()&&(await X(!0),window.dispatchEvent(new Event("termdock:todos-changed")))}catch(o){T()&&h(o instanceof Error?o.message:"操作失败,请重试")}finally{pe.current=!1,K.current&&_(!1)}}},ot=t=>d({selectedId:t.id,mobileDetail:!0}),ee=t=>{P(async()=>{if(T()){if(!Ue().some(o=>o.sessionId===t.sessionId)){if(t.kind==="execute"&&t.todoId){Y(t.handoff?.todoIds??[t.todoId]),D("原会话已关闭,请重新选择会话。");return}throw new Error("收集会话已关闭,可以重新发起收集。")}d({modal:null}),window.dispatchEvent(new CustomEvent("switch-terminal-session",{detail:t.sessionId}))}})},ct=(t,o)=>{const v=i?.todos.find(w=>w.id===t)?.collectorId,b=i?.collectors.find(w=>w.id===v);return b?{...o,cwd:b.config.cwd}:o},Y=t=>{W(),z({kind:"handoff",ids:t})},dt=async(t,o)=>{const v=["handoff",t,o];let b=(await _t({todoIds:t,...o,idempotencyKey:be(v)})).run;for(let w=0;b.status==="launching"&&w<180;w++){if(!T())return;await new Promise($=>window.setTimeout($,500));const U=await Je();if(!T())return;b=U.runs.find($=>$.id===b.id)??b}if(T()){if(b.status==="failed")throw Z(v),new Error(b.error||"发送失败,请检查会话后重试");if(b.status==="launching"||!b.sessionId)throw new Error("仍在确认发送,请稍后重试;同一次请求不会重复发送。");Z(v),je(`handoff:${JSON.stringify(t.slice().sort())}`),as(l,b.sessionId),o.config&&Me(l,o.config),d({modal:null,selecting:!1,checked:[]}),window.dispatchEvent(new CustomEvent("switch-terminal-session",{detail:b.sessionId}))}},te=async t=>{const o=await Promise.allSettled(t.map(w=>Ft(w.id,be(["collect",w.id,w.config]))));if(!T())return;let v=0;const b=[];if(o.forEach((w,U)=>{const $=t[U];w.status==="fulfilled"?(v++,Z(["collect",$.id,$.config])):b.push(`${$.name}:${w.reason instanceof Error?w.reason.message:String(w.reason)}`)}),d({modal:null}),v&&D(`已发起 ${v} 个收集任务`),b.length)throw new Error(b.join(";"))},se=(t,o)=>{P(async()=>{const v=await Ie(t,{status:o});T()&&(o!=="open"&&(u({todo:v.todo,previous:t.status}),r.selectedId===t.id&&d({selectedId:null,mobileDetail:!1})),D(o==="completed"?"已完成":o==="ignored"?"已忽略":"已重新打开"))})},I=i?.todos.find(t=>t.id===r.selectedId),G=I&&i?de(i,I.id):void 0,Pe=t=>c.find(o=>o.sessionId===t.sessionId)?.displayName??$t({name:t.handoff?.sessionName||"",agent:{displayName:t.config.agentSlug||"会话"}}).displayName,ae=i?.todos.filter(t=>Mt(i,t,r.filter)&&(!r.source||t.source===r.source)&&`${t.title} ${t.description} ${t.source}`.toLowerCase().includes(r.query.toLowerCase()))??[],ne=t=>{const o=i&&de(i,t.id);return t.status==="open"&&o?.status!=="launching"},ve=ae.filter(t=>r.checked.includes(t.id)&&ne(t)),le=i?.collectors.filter(t=>t.enabled)??[],we=De(l),re=i?.collectors.slice().sort((t,o)=>o.updatedAt-t.updatedAt).find(t=>m.agents.some(o=>o.slug===t.config.agentSlug))?.config,ie=we.choice&&m.agents.some(t=>t.slug===we.choice?.agentSlug)?we.choice:re?{agentSlug:re.agentSlug,command:re.command,cwd:re.cwd}:void 0,oe=m.agents.find(t=>t.slug===ie?.agentSlug),Ne=ie&&oe&&qt(oe.slug)?{...ie,command:me(oe.slug,oe.command)}:ie,ut=nt(i?.defaults.agentSlug?i.defaults:{...Ve,...Ne},m.agents,m.preferred,m.cwd),Re=Ne?{...Ve,...Ne}:ut,Le=Vt(m.cwd,m.directories??[],i,l),mt=R()?.serviceName||"当前服务",ye=S?.kind==="collector"?i?.collectors.find(t=>t.id===S.id):void 0,Q=S?.kind==="edit"?S.todo:void 0,xt=S?.kind==="edit"?Q?"编辑待办":"新增待办":S?.kind==="handoff"?"交给会话":S?.kind==="collector"?ye?"编辑收集方向":"添加收集方向":"外部接入",ke=r.tab==="todos"&&!M&&r.mobileDetail&&!!I,ft=r.toolsOpen||r.filter!=="open"||!!r.query||!!r.source,pt=r.tab==="todos"&&!ke,Oe=()=>d({tab:"todos",mobileDetail:!1,selecting:!1,checked:[]}),Fe=I?[{label:"编辑待办",action:()=>z({kind:"edit",todo:I})},...G?.sessionId?[{label:"打开终端",action:()=>ee(G)}]:[],...I.status==="open"?[{label:"交给其他会话",action:()=>Y([I.id]),disabled:G?.status==="launching"},{label:"标记完成",action:()=>se(I,"completed")},{label:"忽略这条待办",action:()=>se(I,"ignored"),danger:!0}]:[]]:[],ht=[{label:"搜索和筛选",action:()=>{d({toolsOpen:!0}),window.setTimeout(()=>{T()&&q.current?.querySelector('[aria-label="搜索待办"]')?.focus()},0)}},{label:"多选待办",action:()=>d({selecting:!0,mobileDetail:!1,checked:[]}),disabled:!ae.some(ne)},{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:()=>z({kind:"integration"})}],gt=()=>{i&&(le.length?P(()=>te(le)):i.collectors.length?d({tab:"collectors",mobileDetail:!1}):z({kind:"collector"}))},_e=i?.collectors.filter(t=>{const o=i.runs.filter(v=>v.collectorId===t.id).at(-1);return o&&(o.status==="launching"||o.status==="delivered")}).length??0;return e.jsxs("section",{ref:q,"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:ke?e.jsxs(e.Fragment,{children:[e.jsxs("button",{type:"button",className:k,"aria-label":"返回清单",onClick:Oe,children:[e.jsx(Se,{size:18}),e.jsx("span",{children:"待办"})]}),e.jsx("h1",{className:"sr-only",children:"待办详情"}),e.jsx("div",{className:"flex-1"}),e.jsx(Ae,{label:"待办操作",items:Fe,disabled:C})]}):r.tab==="collectors"?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:k,"aria-label":"返回清单",onClick:Oe,children:e.jsx(Se,{size:18})}),e.jsx("h1",{className:"min-w-0 flex-1 text-base font-semibold",children:"收集方向"}),e.jsxs("button",{type:"button",className:k,"aria-label":"添加方向",title:"添加方向",disabled:!i,onClick:()=>z({kind:"collector"}),children:[e.jsx(He,{size:20}),e.jsx("span",{className:"hidden sm:inline",children:"添加方向"})]})]}):r.selecting?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",className:k,onClick:()=>d({selecting:!1,checked:[]}),children:"取消"}),e.jsxs("h1",{className:"min-w-0 flex-1 text-sm",children:["已选 ",ve.length," 项"]}),e.jsx("button",{type:"button",className:H,disabled:C||!ve.length,onClick:()=>Y(ve.map(t=>t.id)),children:"交给会话"})]}):e.jsxs(e.Fragment,{children:[!a&&e.jsx("button",{type:"button",className:`${k} hidden sm:inline-flex`,"aria-label":"打开会话侧栏",onClick:s,children:e.jsx(Pt,{size:18})}),e.jsx("button",{type:"button",className:`${k} px-2`,"aria-label":"返回终端",title:"返回终端",onClick:()=>Be.getState().terminal(),children:e.jsx(Se,{size:18})}),e.jsxs("h1",{className:"min-w-0 flex-1 text-base font-semibold",children:["待办",i&&e.jsx("span",{className:"ml-2 text-xs font-normal tabular-nums text-muted-foreground",children:i.todos.filter(t=>t.status==="open").length})]}),e.jsxs("button",{type:"button",className:`${k} px-2 text-primary`,"aria-label":"收集待办",disabled:!i||C,onClick:gt,children:[e.jsx(Xe,{size:16}),e.jsx("span",{children:"收集"})]}),e.jsx("button",{type:"button",className:`${k} px-2`,"aria-label":"新增待办",title:"新增待办",disabled:!i,onClick:()=>z({kind:"edit"}),children:e.jsx(He,{size:21})}),e.jsx(Ae,{label:"待办菜单",items:ht,disabled:!i||C})]})}),(y||g&&!S)&&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:g||y}),y&&e.jsx("button",{type:"button",className:"shrink-0 underline",onClick:()=>{X(!0)},children:"重试"}),e.jsx("button",{type:"button","aria-label":"关闭提示",onClick:()=>{h(""),E("")},children:"×"})]}),J&&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:J}),B&&e.jsx("button",{type:"button",className:"min-h-9 shrink-0 text-primary",onClick:()=>{P(async()=>{await Ie(B.todo,{status:B.previous}),T()&&D("已撤销")})},children:"撤销"})]}),i?r.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:"配置一次,之后从清单一键收集。"}),le.length>1&&e.jsx("button",{type:"button",className:F,disabled:C,onClick:()=>{P(()=>te(le))},children:"全部收集"})]}),i.collectors.length?e.jsx("div",{className:`grid items-start gap-4 ${M?"grid-cols-2":""}`,children:i.collectors.map(t=>e.jsx(rs,{collector:t,runs:i.runs.filter(o=>o.collectorId===t.id),busy:C,onRun:()=>{P(()=>te([t]))},onEdit:()=>z({kind:"collector",id:t.id}),onOpen:ee,onRemove:()=>{P(async()=>{await Rt(t)})}},t.id))}):e.jsx($e,{title:"让 Agent 帮你发现下一件事",text:"添加一个收集方向,写下关注的内容和筛选要求。"})]}):e.jsxs("div",{className:"flex min-h-0 flex-1",children:[e.jsxs("div",{className:`${M?"flex w-[42%] shrink-0 border-r border-border/30":pt?"flex flex-1":"hidden"} min-h-0 min-w-0 flex-col`,children:[ft&&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(Kt,{size:15,className:"pointer-events-none absolute left-3 top-3.5 text-muted-foreground"}),e.jsx("input",{autoFocus:r.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:r.query,onChange:t=>d({query:t.target.value})})]}),e.jsx("button",{type:"button",className:k,"aria-label":"清除筛选",onClick:()=>d({query:"",source:"",filter:"open",toolsOpen:!1,checked:[]}),children:e.jsx(Ye,{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:r.filter,onChange:t=>d({filter:t.target.value,checked:[]}),children:[e.jsx("option",{value:"open",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:r.source,onChange:t=>d({source:t.target.value,checked:[]}),children:[e.jsx("option",{value:"",children:"全部来源"}),[...new Set(i.todos.map(t=>t.source))].map(t=>e.jsx("option",{children:t},t))]})]})]}),!!_e&&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:["已发起 ",_e," 个收集任务"]}),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:ae.length?ae.map(t=>{const o=de(i,t.id),v=!!o?.sessionId&&o.status!=="failed",b=v?"去会话":o?.status==="launching"?"发送中…":"交给会话",w=[o?.status==="failed"?"发送未完成":o?.status==="launching"?"正在发送":o?.sessionId?`已交给 ${Pe(o)}`:"",t.source==="手动添加"?"":t.source].filter(Boolean).join(" · ");return e.jsxs("article",{className:`flex items-start gap-1 border-b border-border/30 px-1 py-4 ${r.selectedId===t.id&&M?"bg-surface":"hover:bg-surface"}`,children:[r.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:ne(t)&&r.checked.includes(t.id),disabled:!ne(t),onChange:U=>d({checked:U.target.checked?[...r.checked,t.id]:r.checked.filter($=>$!==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:C||t.status==="ignored","aria-label":`${t.status==="completed"?"重新打开":"完成"} ${t.title}`,onClick:()=>se(t,t.status==="completed"?"open":"completed"),children:t.status==="completed"?e.jsx(It,{size:19,className:"text-primary"}):e.jsx(Ht,{size:19})}),e.jsxs("button",{type:"button",className:"min-w-0 flex-1 py-2 text-left",onClick:()=>ot(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.jsx("span",{className:"mt-1.5 block truncate text-xs leading-5 text-muted-foreground",children:t.status==="completed"?"已完成":t.status==="ignored"?"已忽略":w})]}),t.status==="open"&&!r.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:C||o?.status==="launching"&&!o.sessionId,"aria-label":`${v?"去会话":"交给会话"} ${t.title}`,onClick:()=>v?ee(o):Y([t.id]),children:e.jsx("span",{children:b})})]},t.id)}):e.jsx($e,{title:r.query||r.source?"没有匹配的待办":r.filter==="completed"?"还没有已完成的待办":r.filter==="review"?"暂时没有待确认的结果":r.filter==="ignored"?"没有已忽略的待办":i.todos.length?"清单已清空":"还没有待办",text:r.query||r.source?"换个关键词,或清除筛选。":r.filter==="open"?"点 + 记下一件事,或让 Agent 帮你收集。":"清除筛选可回到当前待办。"})})]}),(M||ke)&&e.jsx("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col",children:I?e.jsx(ss,{todo:I,sessionName:G?Pe(G):void 0,runs:i.runs.filter(t=>t.todoId===I.id||t.handoff?.todoIds.includes(I.id)),busy:C,wide:M,menu:Fe,onLaunch:()=>Y([I.id]),onOpen:ee,onStatus:t=>se(I,t)},I.id):e.jsx($e,{title:"从清单开始",text:"选择一条待办,查看内容或处理结果。"})})]}):e.jsx("div",{className:"flex flex-1 items-center justify-center text-sm text-muted-foreground",children:y?"加载失败,请重试":"正在加载待办…"}),S&&e.jsxs(Wt,{compact:S.kind==="handoff",title:xt,busy:C,error:g,onClose:()=>z(null),children:[S.kind==="edit"&&e.jsx(Yt,{workspace:l,todo:Q,busy:C,onCancel:()=>z(null),onSave:(t,o)=>{P(async()=>{const v=Q?await Ie(Q,t):await Lt({...t,idempotencyKey:be(["create",t])});T()&&(Z(["create",t]),je(`todo:${Q?.id??"new"}`),d({tab:"todos",filter:"open",source:"",query:"",selectedId:v.todo.id,mobileDetail:!1,modal:o?{kind:"handoff",ids:[v.todo.id]}:null}),o||D("待办已保存。"))})}}),S.kind==="handoff"&&(f?e.jsx("div",{className:"p-5 text-sm text-muted-foreground",children:"正在读取会话…"}):e.jsx(ls,{workspace:l,ids:S.ids,config:ct(S.ids[0],Re),agents:m.agents,sessions:c,currentSessionId:n,directories:Le,busy:C,loading:f,title:i?.todos.find(t=>t.id===S.ids[0])?.title??"",onCancel:()=>z(null),onSend:t=>{P(()=>dt(S.ids,t))}})),S.kind==="collector"&&e.jsx(Xt,{workspace:l,collector:ye,config:Re,agents:m.agents,loading:f,service:mt,directories:Le,currentCwd:m.cwd,busy:C,onCancel:()=>z(null),onSave:(t,o)=>{P(async()=>{const v=await Ot(t);T()&&(Me(l,t.config),je(`collector:${ye?.id??"new"}`),d({tab:o&&r.tab!=="collectors"?"todos":"collectors",modal:null}),o?await te([v.collector]):D("收集方向已保存,可以随时开始。"))})}}),S.kind==="integration"&&e.jsx(Zt,{})]})]})}function $e({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(Bt,{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 rs({collector:s,runs:a,busy:n,onRun:c,onEdit:l,onRemove:r,onOpen:d}){const[i,p]=j.useState(!1),m=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:k,"aria-label":`编辑 ${s.name}`,disabled:n,onClick:l,children:e.jsx(At,{size:16})}),e.jsx("button",{type:"button",className:k,"aria-label":`移除 ${s.name}`,disabled:n,onClick:()=>p(!0),children:e.jsx(Et,{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}),i?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:k,onClick:()=>p(!1),children:"取消"}),e.jsx("button",{type:"button",className:`${F} text-destructive`,disabled:n,onClick:r,children:"确认移除"})]})]}):e.jsx("div",{className:"flex flex-wrap gap-2",children:e.jsxs("button",{type:"button",className:H,disabled:n||m?.status==="launching",onClick:c,children:[e.jsx(Xe,{size:16}),m?"再次收集":"开始收集"]})}),m&&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:m.status==="complete"?"已收到收集结果":lt[m.status]}),m.sessionId&&m.status!=="complete"&&e.jsx("button",{type:"button",className:k,disabled:n,onClick:()=>d(m),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(ts,{run:N,onOpen:()=>d(N),busy:n},N.id))})]})]})]})}export{Ds as default};
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-SVP7TREG-BdJtJSmy.js";import{p as f}from"./chunk-JWPE2WC7-CplXNOA7.js";import{d as n,bg as o}from"./mermaid.core-DnVKnMmy.js";import{M as c,c as d}from"./cynefin-OW5HDTMX-BSGz8Olu.js";import"./app-CovJYQoW.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-DaiFCKy_.js";import"./purify.es-4eNOHKSq.js";var g=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(v);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),v=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),m=t?parseInt(t,10):0,l=s?parseInt(s,10):1/0;return{min:m,max:l}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=g.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},D={parser:R,db:a,renderer:u,styles:p};export{D as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-SVP7TREG-DNK10F6v.js";import{p as f}from"./chunk-JWPE2WC7-B7O1zrh6.js";import{d as n,bg as o}from"./mermaid.core-DWoaNsig.js";import{M as c,c as d}from"./cynefin-OW5HDTMX-DAtjde93.js";import"./app-DZ6mCJiW.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-DaiFCKy_.js";import"./purify.es-4eNOHKSq.js";var g=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(v);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),v=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),m=t?parseInt(t,10):0,l=s?parseInt(s,10):1/0;return{min:m,max:l}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=g.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},D={parser:R,db:a,renderer:u,styles:p};export{D as diagram};