termdock 1.4.356 → 1.4.357

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (489) hide show
  1. package/README.md +22 -4
  2. package/dist/client/assets/AndroidMirrorView-BGagwKtL.js +3 -0
  3. package/dist/client/assets/AndroidMirrorView-BGagwKtL.js.br +0 -0
  4. package/dist/client/assets/AndroidMirrorView-BGagwKtL.js.gz +0 -0
  5. package/dist/client/assets/App-DpMhxwYW.js +178 -0
  6. package/dist/client/assets/App-DpMhxwYW.js.br +0 -0
  7. package/dist/client/assets/App-DpMhxwYW.js.gz +0 -0
  8. package/dist/client/assets/ArchitecturePanel-Bd_l74EC.js +9 -0
  9. package/dist/client/assets/ArchitecturePanel-Bd_l74EC.js.br +0 -0
  10. package/dist/client/assets/ArchitecturePanel-Bd_l74EC.js.gz +0 -0
  11. package/dist/client/assets/{ChangeWalkthroughPanel-DO_zJfZr.js → ChangeWalkthroughPanel-6DN-2BdR.js} +2 -2
  12. package/dist/client/assets/ChangeWalkthroughPanel-6DN-2BdR.js.br +0 -0
  13. package/dist/client/assets/ChangeWalkthroughPanel-6DN-2BdR.js.gz +0 -0
  14. package/dist/client/assets/{ChatRichContent-Cu1E1cJ8.js → ChatRichContent-DjwpmW7d.js} +29 -29
  15. package/dist/client/assets/ChatRichContent-DjwpmW7d.js.br +0 -0
  16. package/dist/client/assets/ChatRichContent-DjwpmW7d.js.gz +0 -0
  17. package/dist/client/assets/CollaborationMainWorkspace-DPTJ9pCt.js +1 -0
  18. package/dist/client/assets/CollaborationMainWorkspace-DPTJ9pCt.js.br +0 -0
  19. package/dist/client/assets/CollaborationMainWorkspace-DPTJ9pCt.js.gz +0 -0
  20. package/dist/client/assets/CollaborationTaskContent-Cbu1Bjl0.js +1 -0
  21. package/dist/client/assets/ComputerControlView-CwB-wQqB.js +6 -0
  22. package/dist/client/assets/ComputerControlView-CwB-wQqB.js.br +0 -0
  23. package/dist/client/assets/ComputerControlView-CwB-wQqB.js.gz +0 -0
  24. package/dist/client/assets/{DagPlayground-CPYwfryM.js → DagPlayground-DMn9Gyrw.js} +1 -1
  25. package/dist/client/assets/DagPlayground-DMn9Gyrw.js.br +0 -0
  26. package/dist/client/assets/DagPlayground-DMn9Gyrw.js.gz +0 -0
  27. package/dist/client/assets/{DiffLab-ptw96Q_4.js → DiffLab-YBWlCU2T.js} +1 -1
  28. package/dist/client/assets/DiffLab-YBWlCU2T.js.br +0 -0
  29. package/dist/client/assets/DiffLab-YBWlCU2T.js.gz +0 -0
  30. package/dist/client/assets/DiffReview-YOPDWqhv.js +1 -0
  31. package/dist/client/assets/DiffReview-YOPDWqhv.js.br +0 -0
  32. package/dist/client/assets/DiffReview-YOPDWqhv.js.gz +0 -0
  33. package/dist/client/assets/{DiffReviewLab-eEi3y-0G.js → DiffReviewLab-SYomq14c.js} +1 -1
  34. package/dist/client/assets/DiffReviewLab-SYomq14c.js.br +0 -0
  35. package/dist/client/assets/DiffReviewLab-SYomq14c.js.gz +0 -0
  36. package/dist/client/assets/{DiffViewer-DqcQxp4Q.js → DiffViewer-mh9cBl5v.js} +1 -1
  37. package/dist/client/assets/DiffViewer-mh9cBl5v.js.br +0 -0
  38. package/dist/client/assets/DiffViewer-mh9cBl5v.js.gz +0 -0
  39. package/dist/client/assets/{GitLoadingSkeleton-DYrDIDF1.js → GitLoadingSkeleton-DKRTc5sz.js} +1 -1
  40. package/dist/client/assets/GitLoadingSkeleton-DKRTc5sz.js.br +0 -0
  41. package/dist/client/assets/GitLoadingSkeleton-DKRTc5sz.js.gz +0 -0
  42. package/dist/client/assets/Markdown-C8OP1j-g.js +23 -0
  43. package/dist/client/assets/Markdown-C8OP1j-g.js.br +0 -0
  44. package/dist/client/assets/Markdown-C8OP1j-g.js.gz +0 -0
  45. package/dist/client/assets/Markdown-DKQhs57e.css +1 -0
  46. package/dist/client/assets/Markdown-DKQhs57e.css.br +0 -0
  47. package/dist/client/assets/Markdown-DKQhs57e.css.gz +0 -0
  48. package/dist/client/assets/{ModelPreview-DjtHLlqP.js → ModelPreview-CsZry3Wd.js} +3 -3
  49. package/dist/client/assets/ModelPreview-CsZry3Wd.js.br +0 -0
  50. package/dist/client/assets/ModelPreview-CsZry3Wd.js.gz +0 -0
  51. package/dist/client/assets/RecordingSaveDialog-CoRGi97z.js +1 -0
  52. package/dist/client/assets/RecordingSaveDialog-CoRGi97z.js.br +0 -0
  53. package/dist/client/assets/RecordingSaveDialog-CoRGi97z.js.gz +0 -0
  54. package/dist/client/assets/RightSidebar-DNY2kC6B.js +1662 -0
  55. package/dist/client/assets/RightSidebar-DNY2kC6B.js.br +0 -0
  56. package/dist/client/assets/RightSidebar-DNY2kC6B.js.gz +0 -0
  57. package/dist/client/assets/SessionChatView-DXNpYUrk.js +13 -0
  58. package/dist/client/assets/SessionChatView-DXNpYUrk.js.br +0 -0
  59. package/dist/client/assets/SessionChatView-DXNpYUrk.js.gz +0 -0
  60. package/dist/client/assets/SessionResourceSidebar-B_379HBJ.js +2 -0
  61. package/dist/client/assets/SessionResourceSidebar-B_379HBJ.js.br +0 -0
  62. package/dist/client/assets/SessionResourceSidebar-B_379HBJ.js.gz +0 -0
  63. package/dist/client/assets/TodoWorkspace-DfwGOAHB.js +1 -0
  64. package/dist/client/assets/TodoWorkspace-DfwGOAHB.js.br +0 -0
  65. package/dist/client/assets/TodoWorkspace-DfwGOAHB.js.gz +0 -0
  66. package/dist/client/assets/{abnfDiagram-VCTEODGH-Cvf_KWZ0.js → abnfDiagram-VCTEODGH-C9M0gnl-.js} +1 -1
  67. package/dist/client/assets/abnfDiagram-VCTEODGH-C9M0gnl-.js.br +0 -0
  68. package/dist/client/assets/abnfDiagram-VCTEODGH-C9M0gnl-.js.gz +0 -0
  69. package/dist/client/assets/app-CovJYQoW.js +37 -0
  70. package/dist/client/assets/app-CovJYQoW.js.br +0 -0
  71. package/dist/client/assets/app-CovJYQoW.js.gz +0 -0
  72. package/dist/client/assets/{arc-UvdowQOf.js → arc-q4wfkQcT.js} +1 -1
  73. package/dist/client/assets/arc-q4wfkQcT.js.br +0 -0
  74. package/dist/client/assets/arc-q4wfkQcT.js.gz +0 -0
  75. package/dist/client/assets/{architectureDiagram-5GKGNRK7-DotsbCCA.js → architectureDiagram-5GKGNRK7-CCuna3ab.js} +1 -1
  76. package/dist/client/assets/architectureDiagram-5GKGNRK7-CCuna3ab.js.br +0 -0
  77. package/dist/client/assets/architectureDiagram-5GKGNRK7-CCuna3ab.js.gz +0 -0
  78. package/dist/client/assets/{arrow-down-FGzRy9D-.js → arrow-down-WyzmLXwQ.js} +1 -1
  79. package/dist/client/assets/{blockDiagram-I7D4REHJ-CoOfSG4k.js → blockDiagram-I7D4REHJ-BXK68Qyt.js} +1 -1
  80. package/dist/client/assets/blockDiagram-I7D4REHJ-BXK68Qyt.js.br +0 -0
  81. package/dist/client/assets/blockDiagram-I7D4REHJ-BXK68Qyt.js.gz +0 -0
  82. package/dist/client/assets/{c4Diagram-7LVT6UL2-BAfjgs8B.js → c4Diagram-7LVT6UL2-BqwmmVmS.js} +1 -1
  83. package/dist/client/assets/c4Diagram-7LVT6UL2-BqwmmVmS.js.br +0 -0
  84. package/dist/client/assets/c4Diagram-7LVT6UL2-BqwmmVmS.js.gz +0 -0
  85. package/dist/client/assets/channel-Dd6WQGB7.js +1 -0
  86. package/dist/client/assets/{chevron-left-xqARwD-7.js → chevron-left-CxeWIsDK.js} +1 -1
  87. package/dist/client/assets/{chunk-2Q5K7J3B-DiiQ7BvG.js → chunk-2Q5K7J3B-esKGR38U.js} +1 -1
  88. package/dist/client/assets/{chunk-5VM5RSS4-CczSK8wW.js → chunk-5VM5RSS4-B3InxqDA.js} +1 -1
  89. package/dist/client/assets/{chunk-F27PBJKO-BI3Di4Ve.js → chunk-F27PBJKO-CjUVyF-E.js} +1 -1
  90. package/dist/client/assets/chunk-F27PBJKO-CjUVyF-E.js.br +0 -0
  91. package/dist/client/assets/chunk-F27PBJKO-CjUVyF-E.js.gz +0 -0
  92. package/dist/client/assets/{chunk-IMKFNOWR-Cvvs1wmn.js → chunk-IMKFNOWR-BR8mmBs7.js} +1 -1
  93. package/dist/client/assets/chunk-IMKFNOWR-BR8mmBs7.js.br +0 -0
  94. package/dist/client/assets/chunk-IMKFNOWR-BR8mmBs7.js.gz +0 -0
  95. package/dist/client/assets/{chunk-JWPE2WC7-lrJRD9WA.js → chunk-JWPE2WC7-CplXNOA7.js} +1 -1
  96. package/dist/client/assets/{chunk-POPQ4Y6H-CnPC9D8B.js → chunk-POPQ4Y6H-D0JWCGnb.js} +1 -1
  97. package/dist/client/assets/{chunk-SVP7TREG-BZfMhm64.js → chunk-SVP7TREG-BdJtJSmy.js} +1 -1
  98. package/dist/client/assets/chunk-SVP7TREG-BdJtJSmy.js.br +0 -0
  99. package/dist/client/assets/chunk-SVP7TREG-BdJtJSmy.js.gz +0 -0
  100. package/dist/client/assets/{chunk-TICWLB2K-DmkEaRK3.js → chunk-TICWLB2K-CoevFj8I.js} +1 -1
  101. package/dist/client/assets/chunk-TICWLB2K-CoevFj8I.js.br +0 -0
  102. package/dist/client/assets/chunk-TICWLB2K-CoevFj8I.js.gz +0 -0
  103. package/dist/client/assets/{chunk-XXDRQBXY-BP9Lccpe.js → chunk-XXDRQBXY-D7qYRhMH.js} +1 -1
  104. package/dist/client/assets/{circle-DGZOpG8V.js → circle-xgKDXpwG.js} +1 -1
  105. package/dist/client/assets/classDiagram-ZZMXUADV-BdIUq_D7.js +1 -0
  106. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BdIUq_D7.js +1 -0
  107. package/dist/client/assets/{clipboard-rLx5CzbY.js → clipboard-DeK6pJD3.js} +1 -1
  108. package/dist/client/assets/clipboardText-BWOwer6N.js +1 -0
  109. package/dist/client/assets/clipboardText-BWOwer6N.js.br +0 -0
  110. package/dist/client/assets/clipboardText-BWOwer6N.js.gz +0 -0
  111. package/dist/client/assets/clipboardText-vX90C7eX.css +1 -0
  112. package/dist/client/assets/clipboardText-vX90C7eX.css.br +0 -0
  113. package/dist/client/assets/clipboardText-vX90C7eX.css.gz +0 -0
  114. package/dist/client/assets/{cose-bilkent-JH36ORCC-0xPYMc2z.js → cose-bilkent-JH36ORCC-CvnsiaWP.js} +1 -1
  115. package/dist/client/assets/cose-bilkent-JH36ORCC-CvnsiaWP.js.br +0 -0
  116. package/dist/client/assets/cose-bilkent-JH36ORCC-CvnsiaWP.js.gz +0 -0
  117. package/dist/client/assets/{cynefin-OW5HDTMX-BQ7-lCHm.js → cynefin-OW5HDTMX-BSGz8Olu.js} +1 -1
  118. package/dist/client/assets/cynefin-OW5HDTMX-BSGz8Olu.js.br +0 -0
  119. package/dist/client/assets/cynefin-OW5HDTMX-BSGz8Olu.js.gz +0 -0
  120. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-CazHuSj1.js → cynefinDiagram-5FMLGOSQ-DYYT0AHs.js} +1 -1
  121. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DYYT0AHs.js.br +0 -0
  122. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DYYT0AHs.js.gz +0 -0
  123. package/dist/client/assets/{dagre-GXQ25YYZ-CJNgsyHQ.js → dagre-GXQ25YYZ-BM883MN7.js} +1 -1
  124. package/dist/client/assets/dagre-GXQ25YYZ-BM883MN7.js.br +0 -0
  125. package/dist/client/assets/dagre-GXQ25YYZ-BM883MN7.js.gz +0 -0
  126. package/dist/client/assets/{diagram-S7CK7UJ4-D4xXIj1P.js → diagram-S7CK7UJ4-CYnxXy7R.js} +1 -1
  127. package/dist/client/assets/diagram-S7CK7UJ4-CYnxXy7R.js.br +0 -0
  128. package/dist/client/assets/diagram-S7CK7UJ4-CYnxXy7R.js.gz +0 -0
  129. package/dist/client/assets/{diagram-UQ7AKVKN-BWhpL-35.js → diagram-UQ7AKVKN-UOIBVxRf.js} +1 -1
  130. package/dist/client/assets/diagram-UQ7AKVKN-UOIBVxRf.js.br +0 -0
  131. package/dist/client/assets/diagram-UQ7AKVKN-UOIBVxRf.js.gz +0 -0
  132. package/dist/client/assets/{diagram-VSXAHHWV-DG9A7EgJ.js → diagram-VSXAHHWV-CqTJzfmm.js} +1 -1
  133. package/dist/client/assets/diagram-VSXAHHWV-CqTJzfmm.js.br +0 -0
  134. package/dist/client/assets/diagram-VSXAHHWV-CqTJzfmm.js.gz +0 -0
  135. package/dist/client/assets/{diagram-VX7I27RA-L5PSvynM.js → diagram-VX7I27RA-T9Y88CFB.js} +1 -1
  136. package/dist/client/assets/diagram-VX7I27RA-T9Y88CFB.js.br +0 -0
  137. package/dist/client/assets/diagram-VX7I27RA-T9Y88CFB.js.gz +0 -0
  138. package/dist/client/assets/{diagram-Z3DM3KII-moBH7ruR.js → diagram-Z3DM3KII-kIQDy7E0.js} +1 -1
  139. package/dist/client/assets/diagram-Z3DM3KII-kIQDy7E0.js.br +0 -0
  140. package/dist/client/assets/diagram-Z3DM3KII-kIQDy7E0.js.gz +0 -0
  141. package/dist/client/assets/{ebnfDiagram-PWID7BFC-DEiGgcRP.js → ebnfDiagram-PWID7BFC-z_VqR_JE.js} +1 -1
  142. package/dist/client/assets/ebnfDiagram-PWID7BFC-z_VqR_JE.js.br +0 -0
  143. package/dist/client/assets/ebnfDiagram-PWID7BFC-z_VqR_JE.js.gz +0 -0
  144. package/dist/client/assets/{erDiagram-RLTQ6QDP-BboIleYi.js → erDiagram-RLTQ6QDP-0q52Z-pm.js} +1 -1
  145. package/dist/client/assets/erDiagram-RLTQ6QDP-0q52Z-pm.js.br +0 -0
  146. package/dist/client/assets/erDiagram-RLTQ6QDP-0q52Z-pm.js.gz +0 -0
  147. package/dist/client/assets/{external-link-AZ3wjUg5.js → external-link-CsydVmO1.js} +1 -1
  148. package/dist/client/assets/{flowDiagram-HODETNUW-COxz7Rda.js → flowDiagram-HODETNUW-BrGqcUWn.js} +1 -1
  149. package/dist/client/assets/flowDiagram-HODETNUW-BrGqcUWn.js.br +0 -0
  150. package/dist/client/assets/flowDiagram-HODETNUW-BrGqcUWn.js.gz +0 -0
  151. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-_XdRvgyZ.js → ganttDiagram-EL5Y4UJY-CHAN6vQv.js} +1 -1
  152. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CHAN6vQv.js.br +0 -0
  153. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CHAN6vQv.js.gz +0 -0
  154. package/dist/client/assets/{git-compare-90v75Jal.js → git-compare-BmKAtQTt.js} +1 -1
  155. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-CBb9xBNW.js → gitGraphDiagram-WWUBYQGX-C0ZV4FeB.js} +1 -1
  156. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C0ZV4FeB.js.br +0 -0
  157. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C0ZV4FeB.js.gz +0 -0
  158. package/dist/client/assets/index-DEAMSl55.css +1 -0
  159. package/dist/client/assets/index-DEAMSl55.css.br +0 -0
  160. package/dist/client/assets/index-DEAMSl55.css.gz +0 -0
  161. package/dist/client/assets/{infoDiagram-27XIBGKW-DjLdeNZi.js → infoDiagram-27XIBGKW-CrLj9y1o.js} +1 -1
  162. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-Bcr-lhIE.js → ishikawaDiagram-5VMMS53U-BxGvUfLX.js} +1 -1
  163. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BxGvUfLX.js.br +0 -0
  164. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BxGvUfLX.js.gz +0 -0
  165. package/dist/client/assets/{journeyDiagram-3NMN7TZE-3vK6s9Pq.js → journeyDiagram-3NMN7TZE-rW9xlQ8G.js} +1 -1
  166. package/dist/client/assets/journeyDiagram-3NMN7TZE-rW9xlQ8G.js.br +0 -0
  167. package/dist/client/assets/journeyDiagram-3NMN7TZE-rW9xlQ8G.js.gz +0 -0
  168. package/dist/client/assets/{kanban-definition-UXKFOSKX-DqDYDca0.js → kanban-definition-UXKFOSKX-CFI5iv9R.js} +1 -1
  169. package/dist/client/assets/kanban-definition-UXKFOSKX-CFI5iv9R.js.br +0 -0
  170. package/dist/client/assets/kanban-definition-UXKFOSKX-CFI5iv9R.js.gz +0 -0
  171. package/dist/client/assets/{layout-C7_WwzCP.js → layout-Ct_an5XT.js} +1 -1
  172. package/dist/client/assets/layout-Ct_an5XT.js.br +0 -0
  173. package/dist/client/assets/layout-Ct_an5XT.js.gz +0 -0
  174. package/dist/client/assets/{linear-BQCRhl6P.js → linear-DpEFOA9l.js} +1 -1
  175. package/dist/client/assets/linear-DpEFOA9l.js.br +0 -0
  176. package/dist/client/assets/linear-DpEFOA9l.js.gz +0 -0
  177. package/dist/client/assets/{link-Cq14tNBm.js → link-34ChBc4F.js} +3 -3
  178. package/dist/client/assets/{link-Cq14tNBm.js.br → link-34ChBc4F.js.br} +0 -0
  179. package/dist/client/assets/link-34ChBc4F.js.gz +0 -0
  180. package/dist/client/assets/{list-tree-C281zrdg.js → list-tree-48dzbuUh.js} +1 -1
  181. package/dist/client/assets/{maximize-2-CovPxWdw.js → maximize-2-CbvSsu7O.js} +1 -1
  182. package/dist/client/assets/{mermaid.core-DGsccxt-.js → mermaid.core-DnVKnMmy.js} +5 -5
  183. package/dist/client/assets/mermaid.core-DnVKnMmy.js.br +0 -0
  184. package/dist/client/assets/mermaid.core-DnVKnMmy.js.gz +0 -0
  185. package/dist/client/assets/{mindmap-definition-YA3MSWOX-l0eF1PQE.js → mindmap-definition-YA3MSWOX-C6shupTY.js} +1 -1
  186. package/dist/client/assets/mindmap-definition-YA3MSWOX-C6shupTY.js.br +0 -0
  187. package/dist/client/assets/mindmap-definition-YA3MSWOX-C6shupTY.js.gz +0 -0
  188. package/dist/client/assets/{passwordBootstrap-B5VzheZz.js → passwordBootstrap-Doe50DSa.js} +1 -1
  189. package/dist/client/assets/{passwordBootstrap-B5VzheZz.js.br → passwordBootstrap-Doe50DSa.js.br} +0 -0
  190. package/dist/client/assets/passwordBootstrap-Doe50DSa.js.gz +0 -0
  191. package/dist/client/assets/{pegDiagram-XKGWAZYB-fRrxGIDM.js → pegDiagram-XKGWAZYB-CDcnrvKX.js} +1 -1
  192. package/dist/client/assets/pegDiagram-XKGWAZYB-CDcnrvKX.js.br +0 -0
  193. package/dist/client/assets/pegDiagram-XKGWAZYB-CDcnrvKX.js.gz +0 -0
  194. package/dist/client/assets/{pieDiagram-E7YTZNPT-B-EBa3qN.js → pieDiagram-E7YTZNPT-CrGc03Tg.js} +1 -1
  195. package/dist/client/assets/pieDiagram-E7YTZNPT-CrGc03Tg.js.br +0 -0
  196. package/dist/client/assets/pieDiagram-E7YTZNPT-CrGc03Tg.js.gz +0 -0
  197. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-Dj4e6f4h.js → quadrantDiagram-AXDQQJYC-3-aldwKj.js} +1 -1
  198. package/dist/client/assets/quadrantDiagram-AXDQQJYC-3-aldwKj.js.br +0 -0
  199. package/dist/client/assets/quadrantDiagram-AXDQQJYC-3-aldwKj.js.gz +0 -0
  200. package/dist/client/assets/{quote-COQfrXhi.js → quote-B5GeKEq1.js} +1 -1
  201. package/dist/client/assets/{railroadDiagram-O6MQD6OU-CEMppxTC.js → railroadDiagram-O6MQD6OU-51uKwR2_.js} +1 -1
  202. package/dist/client/assets/railroadDiagram-O6MQD6OU-51uKwR2_.js.br +0 -0
  203. package/dist/client/assets/railroadDiagram-O6MQD6OU-51uKwR2_.js.gz +0 -0
  204. package/dist/client/assets/rdpSession-ocpkj4XY.js +1 -0
  205. package/dist/client/assets/rdpSession-ocpkj4XY.js.br +0 -0
  206. package/dist/client/assets/rdpSession-ocpkj4XY.js.gz +0 -0
  207. package/dist/client/assets/referenceSelection-fvfRDbgp.js +4 -0
  208. package/dist/client/assets/referenceSelection-fvfRDbgp.js.br +0 -0
  209. package/dist/client/assets/referenceSelection-fvfRDbgp.js.gz +0 -0
  210. package/dist/client/assets/{requirementDiagram-BXWQKSXE-Dri1k4_x.js → requirementDiagram-BXWQKSXE-CY6kp0_Y.js} +1 -1
  211. package/dist/client/assets/requirementDiagram-BXWQKSXE-CY6kp0_Y.js.br +0 -0
  212. package/dist/client/assets/requirementDiagram-BXWQKSXE-CY6kp0_Y.js.gz +0 -0
  213. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CMsL_tYL.js → sankeyDiagram-P5KCCOFB-BsA0NkHG.js} +1 -1
  214. package/dist/client/assets/sankeyDiagram-P5KCCOFB-BsA0NkHG.js.br +0 -0
  215. package/dist/client/assets/sankeyDiagram-P5KCCOFB-BsA0NkHG.js.gz +0 -0
  216. package/dist/client/assets/{search-Dg6HWygj.js → search-CbpNLSpd.js} +1 -1
  217. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-4_4hZtOd.js → sequenceDiagram-WJ2MYXX4-BDzn7N2D.js} +1 -1
  218. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-4_4hZtOd.js.br → sequenceDiagram-WJ2MYXX4-BDzn7N2D.js.br} +0 -0
  219. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BDzn7N2D.js.gz +0 -0
  220. package/dist/client/assets/{sizeCapture-INFHLROL-3QA6qj2j.js → sizeCapture-INFHLROL-gxtam7nc.js} +1 -1
  221. package/dist/client/assets/sizeCapture-INFHLROL-gxtam7nc.js.br +0 -0
  222. package/dist/client/assets/sizeCapture-INFHLROL-gxtam7nc.js.gz +0 -0
  223. package/dist/client/assets/{stateDiagram-D77RDMKH-90IFPhD9.js → stateDiagram-D77RDMKH-C4XjYLZR.js} +1 -1
  224. package/dist/client/assets/stateDiagram-D77RDMKH-C4XjYLZR.js.br +0 -0
  225. package/dist/client/assets/stateDiagram-D77RDMKH-C4XjYLZR.js.gz +0 -0
  226. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BfHWFf-I.js +1 -0
  227. package/dist/client/assets/{sun-BAMMjiA8.js → sun-CMXn_ntS.js} +1 -1
  228. package/dist/client/assets/{swimlanes-42K2YHIH-BuHieVWC.js → swimlanes-42K2YHIH--a1wkQO8.js} +1 -1
  229. package/dist/client/assets/swimlanes-42K2YHIH--a1wkQO8.js.br +0 -0
  230. package/dist/client/assets/swimlanes-42K2YHIH--a1wkQO8.js.gz +0 -0
  231. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DsiDF1XD.js +8 -0
  232. package/dist/client/assets/swiper-CTPycjLq.js +1 -0
  233. package/dist/client/assets/swiper-CTPycjLq.js.br +0 -0
  234. package/dist/client/assets/swiper-CTPycjLq.js.gz +0 -0
  235. package/dist/client/assets/{terminal-Dea8wJF3.js → terminal-DaiFCKy_.js} +7 -7
  236. package/dist/client/assets/terminal-DaiFCKy_.js.br +0 -0
  237. package/dist/client/assets/terminal-DaiFCKy_.js.gz +0 -0
  238. package/dist/client/assets/{timeline-definition-24CTP7MA-C7FpaNwf.js → timeline-definition-24CTP7MA-DFmXXUuU.js} +1 -1
  239. package/dist/client/assets/timeline-definition-24CTP7MA-DFmXXUuU.js.br +0 -0
  240. package/dist/client/assets/timeline-definition-24CTP7MA-DFmXXUuU.js.gz +0 -0
  241. package/dist/client/assets/triangle-alert-DgGU_xB4.js +1 -0
  242. package/dist/client/assets/{unplug-DN2SNXUL.js → unplug-CnZtWzVW.js} +1 -1
  243. package/dist/client/assets/use-gesture-react.esm-DHU0wi7Q.js +1 -0
  244. package/dist/client/assets/use-gesture-react.esm-DHU0wi7Q.js.br +0 -0
  245. package/dist/client/assets/use-gesture-react.esm-DHU0wi7Q.js.gz +0 -0
  246. package/dist/client/assets/{vennDiagram-4TSXK5OY-CxoHHVcs.js → vennDiagram-4TSXK5OY-DgR4zroQ.js} +1 -1
  247. package/dist/client/assets/vennDiagram-4TSXK5OY-DgR4zroQ.js.br +0 -0
  248. package/dist/client/assets/vennDiagram-4TSXK5OY-DgR4zroQ.js.gz +0 -0
  249. package/dist/client/assets/{videoCompression-rr2lu3uy.js → videoCompression-CcffRZdP.js} +1 -1
  250. package/dist/client/assets/videoCompression-CcffRZdP.js.br +0 -0
  251. package/dist/client/assets/videoCompression-CcffRZdP.js.gz +0 -0
  252. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-B4Hsh-Ad.js → wardleyDiagram-VM6X3IG4-CY4SVUkf.js} +1 -1
  253. package/dist/client/assets/wardleyDiagram-VM6X3IG4-CY4SVUkf.js.br +0 -0
  254. package/dist/client/assets/wardleyDiagram-VM6X3IG4-CY4SVUkf.js.gz +0 -0
  255. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-CghzsxQv.js → xychartDiagram-S5SC5T6Z-PblQhR-b.js} +1 -1
  256. package/dist/client/assets/xychartDiagram-S5SC5T6Z-PblQhR-b.js.br +0 -0
  257. package/dist/client/assets/xychartDiagram-S5SC5T6Z-PblQhR-b.js.gz +0 -0
  258. package/dist/client/index.html +3 -3
  259. package/dist/client/index.html.br +0 -0
  260. package/dist/client/index.html.gz +0 -0
  261. package/dist/client/sw-encrypted-background.js +1 -1
  262. package/dist/client/sw-encrypted-background.js.br +0 -0
  263. package/dist/client/sw-encrypted-background.js.gz +0 -0
  264. package/dist/client/sw.js +1 -1
  265. package/dist/client/sw.js.br +0 -0
  266. package/dist/client/sw.js.gz +0 -0
  267. package/dist/server/agent/collaborationPeerTransport.js +14 -69
  268. package/dist/server/agent/collaborationStore.js +5 -0
  269. package/dist/server/agent/installers.js +89 -33
  270. package/dist/server/agent/integrationServer.js +31 -2
  271. package/dist/server/agent/pluginPackages.js +51 -22
  272. package/dist/server/agent/sessionChatRoutes.js +45 -7
  273. package/dist/server/agentHook.js +56 -12
  274. package/dist/server/android/adb.js +24 -31
  275. package/dist/server/cli.js +52 -110
  276. package/dist/server/entry.js +17 -23
  277. package/dist/server/federation/cli.js +13 -47
  278. package/dist/server/federation/connectionErrors.js +37 -0
  279. package/dist/server/federation/connectionModel.js +83 -0
  280. package/dist/server/federation/desktopTargets.js +35 -13
  281. package/dist/server/federation/directRoutes.js +28 -36
  282. package/dist/server/federation/directTargetRegistry.js +106 -0
  283. package/dist/server/federation/httpUploadLimit.js +8 -0
  284. package/dist/server/federation/relay.js +13 -6
  285. package/dist/server/federation/relayTransport.js +147 -0
  286. package/dist/server/federation/routeAccess.js +5 -3
  287. package/dist/server/federation/runtime.js +4 -2
  288. package/dist/server/federation/selfRelay.js +10 -59
  289. package/dist/server/federation/serviceTransport.js +123 -0
  290. package/dist/server/federation/streamLimits.js +3 -0
  291. package/dist/server/federation/trustedCa.js +61 -0
  292. package/dist/server/routes/android.js +5 -7
  293. package/dist/server/routes/terminal.js +149 -111
  294. package/dist/server/shared/androidDevices.js +64 -0
  295. package/dist/server/shared/programStatus.js +174 -0
  296. package/dist/server/shared/shareResources.js +3 -2
  297. package/dist/server/todos/routes.js +36 -0
  298. package/dist/server/todos/store.js +31 -1
  299. package/dist/server/utils/bootCheck.js +41 -271
  300. package/dist/server/utils/localHttpsSetup.js +257 -0
  301. package/dist/server/utils/oscBuffer.js +9 -0
  302. package/dist/server/utils/sessionDisplayName.js +11 -9
  303. package/dist/server/utils/settings.js +6 -3
  304. package/dist/server/utils/tmuxDisplayGeometry.js +54 -0
  305. package/dist/server/utils/tmuxObserverSize.js +26 -0
  306. package/docs/integrations.md +2 -1
  307. package/package.json +5 -1
  308. package/runtime-manifest.json +3 -3
  309. package/scripts/install-utils.cjs +81 -0
  310. package/scripts/postinstall.mjs +19 -106
  311. package/dist/client/assets/AndroidMirrorView-DW9oRr0w.js +0 -3
  312. package/dist/client/assets/AndroidMirrorView-DW9oRr0w.js.br +0 -0
  313. package/dist/client/assets/AndroidMirrorView-DW9oRr0w.js.gz +0 -0
  314. package/dist/client/assets/App-DEZ2i9ZZ.js +0 -178
  315. package/dist/client/assets/App-DEZ2i9ZZ.js.br +0 -0
  316. package/dist/client/assets/App-DEZ2i9ZZ.js.gz +0 -0
  317. package/dist/client/assets/ArchitecturePanel-Bf4b-6An.js +0 -9
  318. package/dist/client/assets/ArchitecturePanel-Bf4b-6An.js.br +0 -0
  319. package/dist/client/assets/ArchitecturePanel-Bf4b-6An.js.gz +0 -0
  320. package/dist/client/assets/ChangeWalkthroughPanel-DO_zJfZr.js.br +0 -0
  321. package/dist/client/assets/ChangeWalkthroughPanel-DO_zJfZr.js.gz +0 -0
  322. package/dist/client/assets/ChatRichContent-Cu1E1cJ8.js.br +0 -0
  323. package/dist/client/assets/ChatRichContent-Cu1E1cJ8.js.gz +0 -0
  324. package/dist/client/assets/CollaborationMainWorkspace-BhmpSEbf.js +0 -1
  325. package/dist/client/assets/CollaborationMainWorkspace-BhmpSEbf.js.br +0 -0
  326. package/dist/client/assets/CollaborationMainWorkspace-BhmpSEbf.js.gz +0 -0
  327. package/dist/client/assets/CollaborationTaskContent-CX0Aqdi2.js +0 -2
  328. package/dist/client/assets/ComputerControlView-DjQLzn10.js +0 -6
  329. package/dist/client/assets/ComputerControlView-DjQLzn10.js.br +0 -0
  330. package/dist/client/assets/ComputerControlView-DjQLzn10.js.gz +0 -0
  331. package/dist/client/assets/DagPlayground-CPYwfryM.js.br +0 -0
  332. package/dist/client/assets/DagPlayground-CPYwfryM.js.gz +0 -0
  333. package/dist/client/assets/DiffLab-ptw96Q_4.js.br +0 -0
  334. package/dist/client/assets/DiffLab-ptw96Q_4.js.gz +0 -0
  335. package/dist/client/assets/DiffReview-12E2zWyL.js +0 -1
  336. package/dist/client/assets/DiffReview-12E2zWyL.js.br +0 -0
  337. package/dist/client/assets/DiffReview-12E2zWyL.js.gz +0 -0
  338. package/dist/client/assets/DiffReviewLab-eEi3y-0G.js.br +0 -0
  339. package/dist/client/assets/DiffReviewLab-eEi3y-0G.js.gz +0 -0
  340. package/dist/client/assets/DiffViewer-DqcQxp4Q.js.br +0 -0
  341. package/dist/client/assets/DiffViewer-DqcQxp4Q.js.gz +0 -0
  342. package/dist/client/assets/GitLoadingSkeleton-DYrDIDF1.js.br +0 -0
  343. package/dist/client/assets/GitLoadingSkeleton-DYrDIDF1.js.gz +0 -0
  344. package/dist/client/assets/MarkdownPreview-CsJGsDRL.js +0 -19
  345. package/dist/client/assets/MarkdownPreview-CsJGsDRL.js.br +0 -0
  346. package/dist/client/assets/MarkdownPreview-CsJGsDRL.js.gz +0 -0
  347. package/dist/client/assets/ModelPreview-DjtHLlqP.js.br +0 -0
  348. package/dist/client/assets/ModelPreview-DjtHLlqP.js.gz +0 -0
  349. package/dist/client/assets/RecordingSaveDialog-DUtwgIME.js +0 -1
  350. package/dist/client/assets/RecordingSaveDialog-DUtwgIME.js.br +0 -0
  351. package/dist/client/assets/RecordingSaveDialog-DUtwgIME.js.gz +0 -0
  352. package/dist/client/assets/RightSidebar-BltjUFwI.js +0 -1662
  353. package/dist/client/assets/RightSidebar-BltjUFwI.js.br +0 -0
  354. package/dist/client/assets/RightSidebar-BltjUFwI.js.gz +0 -0
  355. package/dist/client/assets/SessionChatView-CdKfHRp8.js +0 -13
  356. package/dist/client/assets/SessionChatView-CdKfHRp8.js.br +0 -0
  357. package/dist/client/assets/SessionChatView-CdKfHRp8.js.gz +0 -0
  358. package/dist/client/assets/SessionChatView-D8GoESjb.css +0 -1
  359. package/dist/client/assets/SessionChatView-D8GoESjb.css.br +0 -0
  360. package/dist/client/assets/SessionChatView-D8GoESjb.css.gz +0 -0
  361. package/dist/client/assets/SessionResourceSidebar-DmQOydhf.js +0 -2
  362. package/dist/client/assets/SessionResourceSidebar-DmQOydhf.js.br +0 -0
  363. package/dist/client/assets/SessionResourceSidebar-DmQOydhf.js.gz +0 -0
  364. package/dist/client/assets/TodoWorkspace-Bh1C035B.js +0 -1
  365. package/dist/client/assets/TodoWorkspace-Bh1C035B.js.br +0 -0
  366. package/dist/client/assets/TodoWorkspace-Bh1C035B.js.gz +0 -0
  367. package/dist/client/assets/abnfDiagram-VCTEODGH-Cvf_KWZ0.js.br +0 -0
  368. package/dist/client/assets/abnfDiagram-VCTEODGH-Cvf_KWZ0.js.gz +0 -0
  369. package/dist/client/assets/app-DuUnqxq-.js +0 -37
  370. package/dist/client/assets/app-DuUnqxq-.js.br +0 -0
  371. package/dist/client/assets/app-DuUnqxq-.js.gz +0 -0
  372. package/dist/client/assets/arc-UvdowQOf.js.br +0 -0
  373. package/dist/client/assets/arc-UvdowQOf.js.gz +0 -0
  374. package/dist/client/assets/architectureDiagram-5GKGNRK7-DotsbCCA.js.br +0 -0
  375. package/dist/client/assets/architectureDiagram-5GKGNRK7-DotsbCCA.js.gz +0 -0
  376. package/dist/client/assets/arrow-up-DNkfesW0.js +0 -1
  377. package/dist/client/assets/blockDiagram-I7D4REHJ-CoOfSG4k.js.br +0 -0
  378. package/dist/client/assets/blockDiagram-I7D4REHJ-CoOfSG4k.js.gz +0 -0
  379. package/dist/client/assets/c4Diagram-7LVT6UL2-BAfjgs8B.js.br +0 -0
  380. package/dist/client/assets/c4Diagram-7LVT6UL2-BAfjgs8B.js.gz +0 -0
  381. package/dist/client/assets/channel-BzMU9Wks.js +0 -1
  382. package/dist/client/assets/chunk-F27PBJKO-BI3Di4Ve.js.br +0 -0
  383. package/dist/client/assets/chunk-F27PBJKO-BI3Di4Ve.js.gz +0 -0
  384. package/dist/client/assets/chunk-IMKFNOWR-Cvvs1wmn.js.br +0 -0
  385. package/dist/client/assets/chunk-IMKFNOWR-Cvvs1wmn.js.gz +0 -0
  386. package/dist/client/assets/chunk-SVP7TREG-BZfMhm64.js.br +0 -0
  387. package/dist/client/assets/chunk-SVP7TREG-BZfMhm64.js.gz +0 -0
  388. package/dist/client/assets/chunk-TICWLB2K-DmkEaRK3.js.br +0 -0
  389. package/dist/client/assets/chunk-TICWLB2K-DmkEaRK3.js.gz +0 -0
  390. package/dist/client/assets/classDiagram-ZZMXUADV-DtAtEoWU.js +0 -1
  391. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DtAtEoWU.js +0 -1
  392. package/dist/client/assets/clipboardText-cZXParp1.js +0 -1
  393. package/dist/client/assets/clipboardText-cZXParp1.js.br +0 -0
  394. package/dist/client/assets/clipboardText-cZXParp1.js.gz +0 -0
  395. package/dist/client/assets/cose-bilkent-JH36ORCC-0xPYMc2z.js.br +0 -0
  396. package/dist/client/assets/cose-bilkent-JH36ORCC-0xPYMc2z.js.gz +0 -0
  397. package/dist/client/assets/cynefin-OW5HDTMX-BQ7-lCHm.js.br +0 -0
  398. package/dist/client/assets/cynefin-OW5HDTMX-BQ7-lCHm.js.gz +0 -0
  399. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CazHuSj1.js.br +0 -0
  400. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CazHuSj1.js.gz +0 -0
  401. package/dist/client/assets/dagre-GXQ25YYZ-CJNgsyHQ.js.br +0 -0
  402. package/dist/client/assets/dagre-GXQ25YYZ-CJNgsyHQ.js.gz +0 -0
  403. package/dist/client/assets/diagram-S7CK7UJ4-D4xXIj1P.js.br +0 -0
  404. package/dist/client/assets/diagram-S7CK7UJ4-D4xXIj1P.js.gz +0 -0
  405. package/dist/client/assets/diagram-UQ7AKVKN-BWhpL-35.js.br +0 -0
  406. package/dist/client/assets/diagram-UQ7AKVKN-BWhpL-35.js.gz +0 -0
  407. package/dist/client/assets/diagram-VSXAHHWV-DG9A7EgJ.js.br +0 -0
  408. package/dist/client/assets/diagram-VSXAHHWV-DG9A7EgJ.js.gz +0 -0
  409. package/dist/client/assets/diagram-VX7I27RA-L5PSvynM.js.br +0 -0
  410. package/dist/client/assets/diagram-VX7I27RA-L5PSvynM.js.gz +0 -0
  411. package/dist/client/assets/diagram-Z3DM3KII-moBH7ruR.js.br +0 -0
  412. package/dist/client/assets/diagram-Z3DM3KII-moBH7ruR.js.gz +0 -0
  413. package/dist/client/assets/ebnfDiagram-PWID7BFC-DEiGgcRP.js.br +0 -0
  414. package/dist/client/assets/ebnfDiagram-PWID7BFC-DEiGgcRP.js.gz +0 -0
  415. package/dist/client/assets/erDiagram-RLTQ6QDP-BboIleYi.js.br +0 -0
  416. package/dist/client/assets/erDiagram-RLTQ6QDP-BboIleYi.js.gz +0 -0
  417. package/dist/client/assets/flowDiagram-HODETNUW-COxz7Rda.js.br +0 -0
  418. package/dist/client/assets/flowDiagram-HODETNUW-COxz7Rda.js.gz +0 -0
  419. package/dist/client/assets/ganttDiagram-EL5Y4UJY-_XdRvgyZ.js.br +0 -0
  420. package/dist/client/assets/ganttDiagram-EL5Y4UJY-_XdRvgyZ.js.gz +0 -0
  421. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-CBb9xBNW.js.br +0 -0
  422. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-CBb9xBNW.js.gz +0 -0
  423. package/dist/client/assets/index-nIgxJ6I3.css +0 -1
  424. package/dist/client/assets/index-nIgxJ6I3.css.br +0 -0
  425. package/dist/client/assets/index-nIgxJ6I3.css.gz +0 -0
  426. package/dist/client/assets/ishikawaDiagram-5VMMS53U-Bcr-lhIE.js.br +0 -0
  427. package/dist/client/assets/ishikawaDiagram-5VMMS53U-Bcr-lhIE.js.gz +0 -0
  428. package/dist/client/assets/journeyDiagram-3NMN7TZE-3vK6s9Pq.js.br +0 -0
  429. package/dist/client/assets/journeyDiagram-3NMN7TZE-3vK6s9Pq.js.gz +0 -0
  430. package/dist/client/assets/kanban-definition-UXKFOSKX-DqDYDca0.js.br +0 -0
  431. package/dist/client/assets/kanban-definition-UXKFOSKX-DqDYDca0.js.gz +0 -0
  432. package/dist/client/assets/layout-C7_WwzCP.js.br +0 -0
  433. package/dist/client/assets/layout-C7_WwzCP.js.gz +0 -0
  434. package/dist/client/assets/linear-BQCRhl6P.js.br +0 -0
  435. package/dist/client/assets/linear-BQCRhl6P.js.gz +0 -0
  436. package/dist/client/assets/link-Cq14tNBm.js.gz +0 -0
  437. package/dist/client/assets/loader-circle-Df0zpx5N.js +0 -1
  438. package/dist/client/assets/mermaid.core-DGsccxt-.js.br +0 -0
  439. package/dist/client/assets/mermaid.core-DGsccxt-.js.gz +0 -0
  440. package/dist/client/assets/mindmap-definition-YA3MSWOX-l0eF1PQE.js.br +0 -0
  441. package/dist/client/assets/mindmap-definition-YA3MSWOX-l0eF1PQE.js.gz +0 -0
  442. package/dist/client/assets/passwordBootstrap-B5VzheZz.js.gz +0 -0
  443. package/dist/client/assets/pegDiagram-XKGWAZYB-fRrxGIDM.js.br +0 -0
  444. package/dist/client/assets/pegDiagram-XKGWAZYB-fRrxGIDM.js.gz +0 -0
  445. package/dist/client/assets/pieDiagram-E7YTZNPT-B-EBa3qN.js.br +0 -0
  446. package/dist/client/assets/pieDiagram-E7YTZNPT-B-EBa3qN.js.gz +0 -0
  447. package/dist/client/assets/quadrantDiagram-AXDQQJYC-Dj4e6f4h.js.br +0 -0
  448. package/dist/client/assets/quadrantDiagram-AXDQQJYC-Dj4e6f4h.js.gz +0 -0
  449. package/dist/client/assets/railroadDiagram-O6MQD6OU-CEMppxTC.js.br +0 -0
  450. package/dist/client/assets/railroadDiagram-O6MQD6OU-CEMppxTC.js.gz +0 -0
  451. package/dist/client/assets/rdpSession-C5rS-ImV.js +0 -1
  452. package/dist/client/assets/rdpSession-C5rS-ImV.js.br +0 -0
  453. package/dist/client/assets/rdpSession-C5rS-ImV.js.gz +0 -0
  454. package/dist/client/assets/requirementDiagram-BXWQKSXE-Dri1k4_x.js.br +0 -0
  455. package/dist/client/assets/requirementDiagram-BXWQKSXE-Dri1k4_x.js.gz +0 -0
  456. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CMsL_tYL.js.br +0 -0
  457. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CMsL_tYL.js.gz +0 -0
  458. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-4_4hZtOd.js.gz +0 -0
  459. package/dist/client/assets/settings-2-iGqzPez0.js +0 -1
  460. package/dist/client/assets/sizeCapture-INFHLROL-3QA6qj2j.js.br +0 -0
  461. package/dist/client/assets/sizeCapture-INFHLROL-3QA6qj2j.js.gz +0 -0
  462. package/dist/client/assets/stateDiagram-D77RDMKH-90IFPhD9.js.br +0 -0
  463. package/dist/client/assets/stateDiagram-D77RDMKH-90IFPhD9.js.gz +0 -0
  464. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CH-yvmL4.js +0 -1
  465. package/dist/client/assets/swimlanes-42K2YHIH-BuHieVWC.js.br +0 -0
  466. package/dist/client/assets/swimlanes-42K2YHIH-BuHieVWC.js.gz +0 -0
  467. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-P_rDqbtg.js +0 -8
  468. package/dist/client/assets/swiper-DJjq1TYT.js +0 -1
  469. package/dist/client/assets/swiper-DJjq1TYT.js.br +0 -0
  470. package/dist/client/assets/swiper-DJjq1TYT.js.gz +0 -0
  471. package/dist/client/assets/syntaxHighlight-Cz6TPDW9.js +0 -4
  472. package/dist/client/assets/syntaxHighlight-Cz6TPDW9.js.br +0 -0
  473. package/dist/client/assets/syntaxHighlight-Cz6TPDW9.js.gz +0 -0
  474. package/dist/client/assets/terminal-Dea8wJF3.js.br +0 -0
  475. package/dist/client/assets/terminal-Dea8wJF3.js.gz +0 -0
  476. package/dist/client/assets/timeline-definition-24CTP7MA-C7FpaNwf.js.br +0 -0
  477. package/dist/client/assets/timeline-definition-24CTP7MA-C7FpaNwf.js.gz +0 -0
  478. package/dist/client/assets/triangle-alert-Oj-OsZDw.js +0 -1
  479. package/dist/client/assets/use-gesture-react.esm-DYpdiE_k.js +0 -1
  480. package/dist/client/assets/use-gesture-react.esm-DYpdiE_k.js.br +0 -0
  481. package/dist/client/assets/use-gesture-react.esm-DYpdiE_k.js.gz +0 -0
  482. package/dist/client/assets/vennDiagram-4TSXK5OY-CxoHHVcs.js.br +0 -0
  483. package/dist/client/assets/vennDiagram-4TSXK5OY-CxoHHVcs.js.gz +0 -0
  484. package/dist/client/assets/videoCompression-rr2lu3uy.js.br +0 -0
  485. package/dist/client/assets/videoCompression-rr2lu3uy.js.gz +0 -0
  486. package/dist/client/assets/wardleyDiagram-VM6X3IG4-B4Hsh-Ad.js.br +0 -0
  487. package/dist/client/assets/wardleyDiagram-VM6X3IG4-B4Hsh-Ad.js.gz +0 -0
  488. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CghzsxQv.js.br +0 -0
  489. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CghzsxQv.js.gz +0 -0
@@ -0,0 +1,13 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ChatRichContent-DjwpmW7d.js","assets/app-CovJYQoW.js","assets/react-XDCjal2T.js","assets/dnd-BCFAPC0L.js","assets/terminal-DaiFCKy_.js","assets/index-DEAMSl55.css","assets/circle-xgKDXpwG.js","assets/search-CbpNLSpd.js","assets/external-link-CsydVmO1.js","assets/clipboardText-BWOwer6N.js","assets/clipboardText-vX90C7eX.css","assets/Markdown-C8OP1j-g.js","assets/swiper-CTPycjLq.js","assets/swiper-C2J0D0kV.css","assets/use-gesture-react.esm-DHU0wi7Q.js","assets/referenceSelection-fvfRDbgp.js","assets/list-tree-48dzbuUh.js","assets/Markdown-DKQhs57e.css","assets/quote-B5GeKEq1.js","assets/arrow-down-WyzmLXwQ.js"])))=>i.map(i=>d[i]);
2
+ import{a9 as Tt,a4 as Xe,cd as Ot,cq as t,C as Ze,m as et,f as Dt,a8 as $e,es as It,er as Mt,be as zt,dG as tt,b2 as $,bm as Ee,dD as mt,eE as Pt,et as rt,eJ as $t,S as nt,G as Ft,R as qt,w as st,Z as at,bW as it,cY as Ht,ak as Wt}from"./app-CovJYQoW.js";import{f as _t,d as Vt,e as Ut,r as je,c as ot,s as Bt,w as Kt,C as Jt,P as ct,a as Gt}from"./clipboardText-BWOwer6N.js";import{b as r}from"./dnd-BCFAPC0L.js";import{M as Yt}from"./Markdown-C8OP1j-g.js";import{Q as qe}from"./quote-B5GeKEq1.js";import{A as Qt}from"./arrow-down-WyzmLXwQ.js";import{A as Xt}from"./use-gesture-react.esm-DHU0wi7Q.js";function Zt(s){const n=[];for(const i of s){const a=n[n.length-1];i.role==="assistant"&&a?.role==="assistant"?a.messages.push(i):n.push({id:i.id,role:i.role,messages:[i]})}return n}function er(s){const n=s.slice().reverse().find(i=>i.role==="user");return!n||["failed","expired"].includes(n.status)?!1:!s.some(i=>i.role==="assistant"&&i.replyTo===n.id&&!["ack","progress"].includes(i.responseKind||""))}function tr(s){return{pending:"已发送",delivered:"已发送",stored:"已发送",failed:"发送失败",expired:"发送失败"}[s]||"待确认"}function rr(s,n){const i=new Map(s.map(d=>[d.id,d]));let a=!1;for(const d of n){const g=i.get(d.id);(!g||JSON.stringify(g)!==JSON.stringify(d))&&(i.set(d.id,d),a=!0)}return a?[...i.values()].sort((d,g)=>(d.sequence??d.createdAt)-(g.sequence??g.createdAt)):s}let ht;const nr=()=>ht?.ChatRichContent;let lt;function ut(){return lt??=Tt(()=>import("./ChatRichContent-DjwpmW7d.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=>(ht=s,s)).catch(s=>{throw lt=void 0,s})}const ze=new Set;function sr(s){const[n,i]=r.useState(!1);return r.useLayoutEffect(()=>{if(!s){i(!1);return}const a=Symbol("chat-viewport");ze.add(a);const d=document.documentElement,g=()=>{const j=Number.parseFloat(d.style.getPropertyValue("--kb-height"))>=80;d.dataset.termdockChatViewport="true",d.dataset.termdockChatKeyboard=String(j),i(E=>E===j?E:j)};return g(),document.addEventListener(Xe,g),document.addEventListener("termdock:viewport-keyboard-change",g),()=>{document.removeEventListener(Xe,g),document.removeEventListener("termdock:viewport-keyboard-change",g),ze.delete(a),ze.size||(delete d.dataset.termdockChatViewport,delete d.dataset.termdockChatKeyboard)}},[s]),n}function ar(s,n){r.useLayoutEffect(()=>{const i=s.current;if(!n||!i||!Ot())return;let a,d;const g=()=>{if(a!==void 0&&cancelAnimationFrame(a),!d){const O=i.style.opacity,x=i.style.transition;d=()=>{i.style.opacity=O,i.style.transition=x,d=void 0}}i.style.transition="none",i.style.opacity="0",a=requestAnimationFrame(()=>{a=void 0,d?.()})},j=i.focus,E=Object.getOwnPropertyDescriptor(i,"focus");return i.focus=O=>{g(),j.call(i,{...O,preventScroll:!0})},i.addEventListener("pointerdown",g,!0),i.addEventListener("focus",g,!0),()=>{E?Object.defineProperty(i,"focus",E):Reflect.deleteProperty(i,"focus"),i.removeEventListener("pointerdown",g,!0),i.removeEventListener("focus",g,!0),a!==void 0&&cancelAnimationFrame(a),d?.()}},[s,n])}function dt(s,n){return n?`> ${n.author.replace(/[\r\n]/g," ")} · ${n.time}
3
+ ${n.text.replace(/\r\n?/g,`
4
+ `).split(`
5
+ `).map(i=>`> ${i}`).join(`
6
+ `)}
7
+
8
+ ${s.trim()}`:s.trim()}function Fe(s){const n=s.split(`
9
+ `),i=n[0].match(/^> (.+) · (\d{2}:\d{2})$/);if(!i)return{text:s,reference:null};let a=1;for(;a<n.length&&n[a].startsWith(">");)a++;return a<2||n[a]!==""?{text:s,reference:null}:{text:n.slice(a+1).join(`
10
+ `),reference:{author:i[1],time:i[2],text:n.slice(1,a).map(d=>d.replace(/^> ?/,"")).join(`
11
+ `)}}}function ft({id:s,root:n,heights:i,estimate:a,eager:d,preserve:g,nearby:j,children:E}){const[O,x]=r.useState(()=>!n||typeof IntersectionObserver>"u"||d),F=r.useRef(null),W=r.useRef(i?.get(s)??a);return r.useEffect(()=>{const l=n?.current,u=F.current;if(!l||!u||typeof IntersectionObserver>"u")return;const y=new IntersectionObserver(h=>{if(!l.clientHeight)return;const S=h.find(N=>N.target===u);if(S){if(S.isIntersecting?j?.add(s):j?.delete(s),S.isIntersecting)x(!0);else if(!g&&!u.contains(document.activeElement)){const N=window.getSelection();(!N?.toString()||!u.contains(N.anchorNode)&&!u.contains(N.focusNode))&&x(!1)}}},{root:l,rootMargin:`${l.clientHeight}px 0px`});return y.observe(u),()=>y.disconnect()},[n,g,j,s]),r.useLayoutEffect(()=>{const l=F.current;if(!O||!l)return;const u=()=>{const h=l.getBoundingClientRect().height;if(h<=0)return;const S=W.current,N=n?.current;N?.clientHeight&&l.getBoundingClientRect().top+S<=N.getBoundingClientRect().top+1&&(N.scrollTop+=h-S),W.current=h,i?.set(s,h)};if(u(),typeof ResizeObserver>"u")return;const y=new ResizeObserver(u);return y.observe(l),()=>y.disconnect()},[O,E,s,n,i]),t.jsx("div",{ref:F,"data-chat-viewport-row":s,style:O?void 0:{height:W.current},children:O?E: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 ir=r.memo(function({content:n}){return t.jsx(Yt,{content:n})}),He=s=>new Date(s).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",hourCycle:"h23"}),or=new Set(["amp","claude","codex","copilot","cursor","droid","gemini","goose","grok","kimi","opencode"]);function pt({name:s,slug:n}){const i=n&&or.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:[i?t.jsx("span",{"aria-hidden":"true",className:"h-4 w-4 shrink-0 bg-current",style:{mask:i,WebkitMask:i}}):t.jsx(Dt,{size:15,"aria-hidden":"true"}),t.jsx("span",{children:s})]})}function gt({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(qe,{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:i=>i.preventDefault(),onClick:n,children:t.jsx($e,{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 cr({content:s}){const n=Fe(s);return t.jsxs(t.Fragment,{children:[n.reference&&t.jsx(gt,{reference:n.reference}),t.jsx("p",{className:"whitespace-pre-wrap break-words text-[15px] leading-7 sm:text-base",children:n.text})]})}function xt({content:s,createdAt:n,status:i,messageId:a,actionsOpen:d,children:g}){return t.jsxs("article",{"data-chat-turn":"user","data-chat-message":a,"data-actions-open":d||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(cr,{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:i}),t.jsx("time",{dateTime:new Date(n).toISOString(),title:new Date(n).toLocaleString(),className:"opacity-60",children:He(n)}),g]})]})}const Pe="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",lr=r.memo(function({messages:n,agentName:i,agentSlug:a,canWrite:d,copied:g,onCopy:j,onReference:E,sessionId:O,uiWritable:x,onAction:F,pendingMessage:W,scrollRoot:l,rowHeights:u,nearbyIds:y,initialVisibleIds:h}){const S=r.useMemo(()=>new Set([...h??[],...n.slice(-6).map(f=>f.id)]),[n,h]),N=f=>Math.min(1200,Math.max(80,Math.ceil(f.content.length/65)*28+40)),A=nr(),ne=r.useRef(new Map),_=r.useMemo(()=>Zt(n).map(f=>{if(f.role==="user")return f;const w=f.messages.map(L=>ne.current.get(L.id)).find(Boolean)||f.id;for(const L of f.messages)ne.current.set(L.id,w);return{...f,id:w}}),[n]),[K,M]=r.useState(null),Q=r.useRef(null),X=r.useRef("");return r.useEffect(()=>{const f=L=>{L.target instanceof Node&&!Q.current?.contains(L.target)&&M(null)},w=L=>{L.key==="Escape"&&M(null)};return document.addEventListener("pointerdown",f),document.addEventListener("keydown",w),()=>{document.removeEventListener("pointerdown",f),document.removeEventListener("keydown",w)}},[]),t.jsxs("div",{ref:Q,className:"space-y-6 sm:space-y-7",onPointerDownCapture:f=>{X.current=f.pointerType},onClick:f=>{if(!f.detail||X.current!=="touch"&&!window.matchMedia?.("(hover: none)").matches)return;const w=f.target instanceof Element?f.target:null;if(!w||w.closest('button, a, input, textarea, select, label, summary, [role="button"], [contenteditable="true"]')||window.getSelection()?.toString().trim())return;const L=w.closest("[data-chat-message]")?.dataset.chatMessage;M(V=>L&&V!==L?L:null)},children:[_.map(f=>{const w=f.messages[f.messages.length-1],L=f.role==="user",V=f.messages.map(v=>v.content).join(`
12
+
13
+ `),de=v=>d&&t.jsx("button",{type:"button","aria-label":"引用消息",title:"引用这条消息",className:`${Pe} shrink-0`,onPointerDown:Z=>Z.preventDefault(),onClick:()=>{M(null),E(v)},children:t.jsx(qe,{size:13})});return L?t.jsx(ft,{id:f.id,root:l,heights:u,nearby:y,estimate:N(w),eager:S.has(w.id),children:t.jsx(xt,{messageId:f.id,actionsOpen:K===f.id,content:V,createdAt:w.createdAt,status:tr(w.status),children:t.jsxs("span",{className:"chat-message-tools",children:[de(w),t.jsxs("button",{type:"button",className:Pe,"aria-label":"复制消息",title:"复制",onClick:()=>j(V,f.id),children:[g===f.id?t.jsx(Ze,{size:13}):t.jsx(et,{size:13}),g===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(pt,{name:i,slug:a})}),t.jsx("div",{className:"chat-replies min-w-0",children:f.messages.map((v,Z)=>t.jsx(ft,{id:v.id,root:l,heights:u,nearby:y,estimate:N(v),eager:S.has(v.id),preserve:!!v.ui,children:t.jsxs("div",{"data-chat-message":v.id,"data-actions-open":K===v.id||void 0,className:"chat-reply min-w-0",children:[t.jsx("div",{className:"session-chat-markdown min-w-0 break-words",children:v.ui&&A?t.jsx(A,{message:v,sessionId:O,canWrite:x,onAction:F},v.id):t.jsx(ir,{content:v.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(v),t.jsxs("button",{type:"button",className:Pe,"aria-label":"复制回复",title:"复制",onClick:()=>j(v.content,v.id),children:[g===v.id?t.jsx(Ze,{size:13}):t.jsx(et,{size:13}),g===v.id&&t.jsx("span",{className:"text-[10px]",children:"已复制"})]})]}),Z<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(v.createdAt).toISOString(),title:new Date(v.createdAt).toLocaleString(),children:He(v.createdAt)})]})]})},v.id))})]},f.id)}),W]})});function ur(s){const n=r.useRef(s);n.current=s;const[i,a]=r.useState(null),d=r.useRef(null),g=r.useRef(!0),j=r.useCallback(()=>{d.current?.controller.abort();const l=n.current,u=tt(),y=$(),h=Ee(),S=document.activeElement,N=new AbortController,A={controller:N,current:()=>g.current&&!N.signal.aborted&&d.current===A&&n.current.active&&n.current.canWrite&&n.current.sessionId===l.sessionId&&tt()===u&&$()===y&&!y?.closed&&Ee()===h,focus:()=>document.activeElement===S||document.activeElement===l.input.current||document.activeElement===document.body};return d.current=A,A},[]);r.useEffect(()=>{const l=()=>{d.current&&!d.current.current()&&(d.current.controller.abort(),d.current=null,a(null))};l();const u=()=>{d.current?.controller.abort(),d.current=null,a(null)};return window.addEventListener("termdock:secure-state",l),window.addEventListener("auth:unauthorized",u),document.addEventListener("focusin",l),()=>{window.removeEventListener("termdock:secure-state",l),window.removeEventListener("auth:unauthorized",u),document.removeEventListener("focusin",l)}},[s.active,s.canWrite,s.sessionId]),r.useEffect(()=>(g.current=!0,()=>{g.current=!1,d.current?.controller.abort()}),[]);const E=r.useCallback(async(l,u,y=[])=>{if(l.current()){a({stage:"uploading",percent:u.length?0:void 0,files:u,paths:y}),n.current.error("");try{if(u.length&&!n.current.directory&&!n.current.sessionAttachments)throw new Error("附件上传暂不可用,请重试");const h=A=>{l.current()&&a({stage:"uploading",percent:Math.round(A),files:u,paths:y})},S=u.length?n.current.sessionAttachments?await It(n.current.sessionId,u,l.controller.signal,h,l.current):await Mt(n.current.directory,u,l.controller.signal,h,l.current):{files:[]};if(!l.current())return;if(S.files.length!==u.length||S.files.some(A=>!A.path))throw new Error("部分文件未上传成功,请重试");const N=[...y,...S.files.map(A=>A.path)];if(!N.length)throw new Error("没有可添加的文件");n.current.insert(`${N.map(zt).join(" ")} `,l.focus()),a(null),d.current=null}catch(h){if(!l.current())return;a({stage:"failed",files:u,paths:y}),n.current.error(h instanceof Error?h.message:"文件上传失败,请重试")}}},[]),O=r.useCallback(l=>{!n.current.active||!n.current.canWrite||!l.length||E(j(),l)},[j,E]),x=r.useCallback(async l=>{if(!n.current.active||!n.current.canWrite)return;const u=j();a({stage:"reading"}),n.current.error("");const y=h=>{u.current()&&(n.current.insert(h,u.focus()),a(null),d.current=null)};try{const h=await _t(l,u.current);if(h.kind==="text"){y(h.text);return}if(h.kind==="files"){const S=h.files.length===1&&h.files[0].type.startsWith("image/")?[Vt(h.files[0])]:h.files;return await E(u,S,h.paths)}throw new Error("剪贴板没有可读取的内容,请使用系统粘贴或选择文件")}catch(h){u.current()&&(a(null),n.current.error(h instanceof Error?h.message:"粘贴失败,请重试"))}},[j,E]);return{transfer:i,addFiles:O,paste:x,cancel:()=>{d.current?.controller.abort(),d.current=null,a(l=>l?{...l,stage:"cancelled"}:null)},retry:()=>{(i?.files?.length||i?.paths?.length)&&E(j(),i.files||[],i.paths)},dismiss:()=>a(null),busy:i?.stage==="reading"||i?.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 dr({sessionId:s,name:n="当前会话",canWrite:i=!0,active:a=!0,terminalLink:d=!1,onKeyboardChange:g,onReadyChange:j,onTerminal:E}){const O=Pt(),x=i&&O.has("session.input");r.useEffect(()=>(j?.(!0),()=>j?.(!1)),[j]);const F=sr(a),W=r.useRef(g);W.current=g,r.useEffect(()=>{W.current?.(a&&F)},[a,F]);const l=`termdock:chat:${mt()?.targetPeerId||location.origin}:${s}`,[u]=r.useState(()=>Ut(l)),[y,h]=r.useState(u?.hasOlder??!1),[S,N]=r.useState(!1),[A,ne]=r.useState(u?.replyPending),[_,K]=r.useState(()=>{try{return sessionStorage.getItem(`${l}:draft`)||""}catch{return""}}),[M,Q]=r.useState(()=>{try{const e=JSON.parse(sessionStorage.getItem(`${l}:reference`)||"null");return e&&typeof e.author=="string"&&typeof e.time=="string"&&typeof e.text=="string"?e:null}catch{return null}}),[X,f]=r.useState(null),[w,L]=r.useState(u?.agentName??"助手"),[V,de]=r.useState(u?.agentSlug),[v,Z]=r.useState(!1),[k,fe]=r.useState(()=>{try{return JSON.parse(sessionStorage.getItem(`${l}:pending`)||"null")}catch{return null}}),[z,We]=r.useState(u?.messages??[]),[bt,Se]=r.useState(!u),[J,yt]=r.useState(u?.agentAvailable),[ke,G]=r.useState(""),[vt,te]=r.useState(!1),[wt,_e]=r.useState(!!u);rt(a&&vt?{tone:"recovering",message:"正在恢复对话同步…"}:null),rt(a&&ke?{message:ke}:null);const[me,Ve]=r.useState(!1),[jt,Ce]=r.useState(!1),[Nt,Et]=r.useState(""),U=r.useRef(null),q=r.useRef(null);ar(q,a);const H=r.useRef(u?.nearBottom??!0),Re=r.useRef(!1),se=r.useRef(0),Ae=r.useRef(0),Le=r.useRef(null),Te=r.useRef(null),Ue=r.useRef(null),ae=r.useRef(0),Oe=r.useRef(k);Oe.current=k;const De=r.useRef(),ie=r.useRef(z);ie.current=z;const D=r.useRef({hasOlder:u?.hasOlder??!1,hasNewer:u?.hasNewer??!1}),he=r.useRef(!1),re=r.useRef(),pe=r.useRef(0),Ie=r.useRef(0),Be=r.useRef(null),[ge]=r.useState(()=>new Set(u?.visibleMessageIds)),[Ke]=r.useState(()=>new Map(u?.rowHeights)),oe=r.useRef(u?.scrollTop??0),ce=r.useRef(),P=r.useRef({active:a,canWrite:x,sessionId:s});P.current={active:a,canWrite:x,sessionId:s};const Me=$t(),ee=r.useCallback((e,c=!0)=>{const o=q.current,b=o?.selectionStart,m=o?.selectionEnd,R=P.current,T=$(),p=Ee();K(B=>{const Y=Math.min(b??B.length,B.length),ve=Math.min(m??Y,B.length),we=B.slice(0,Y)+e+B.slice(ve);return requestAnimationFrame(()=>{o?.isConnected&&o.value===we&&P.current.active&&P.current.canWrite&&P.current.sessionId===R.sessionId&&$()===T&&Ee()===p&&(c&&o.focus({preventScroll:!0}),o.setSelectionRange(Y+e.length,Y+e.length))}),we})},[]),C=ur({sessionId:s,active:a,canWrite:x,input:q,insert:ee,error:G,sessionAttachments:!!Me,directory:Me?Me.directories?.find(e=>e.access==="write")?.path:"/tmp"}),Je=r.useCallback((e,c)=>{if(!a||!x)return;const o=c||Fe(e.content).text;if(new TextEncoder().encode(o).byteLength>8e3){G("这条消息较长,请选中需要引用的内容。");return}f(null),Q({author:e.role==="user"?"用户":w,time:He(e.createdAt),text:o}),G(""),window.getSelection()?.removeAllRanges(),q.current?.focus({preventScroll:!0})},[a,x,w]);r.useEffect(()=>{if(!a||!x){f(null);return}const e=()=>{const c=window.getSelection(),o=c?.toString().trim(),b=p=>p instanceof Element?p:p?.parentElement,m=b(c?.anchorNode)?.closest("[data-chat-message]"),R=b(c?.focusNode)?.closest("[data-chat-message]"),T=o&&m===R&&m&&Te.current?.contains(m)?{id:m.dataset.chatMessage,text:o}:null;f(p=>p?.id===T?.id&&p?.text===T?.text?p:T)};return document.addEventListener("selectionchange",e),()=>document.removeEventListener("selectionchange",e)},[a,x]),r.useEffect(()=>{try{M?sessionStorage.setItem(`${l}:reference`,JSON.stringify(M)):sessionStorage.removeItem(`${l}:reference`)}catch{}},[l,M]);const St=`/api/terminal/${encodeURIComponent(s)}/chat`,xe=r.useCallback((e,c=!1)=>{const o=rr(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=++Ae.current,b=$(),m=ie.current,R=c?void 0:m[m.length-1]?.id,T=Oe.current?{requestId:Oe.current.requestId}:{};let p;try{p=await je(s,e,c?void 0:De.current,{...R?{after:R}:{},...T})}catch(I){if(!R||I.status!==404)throw I;p=await je(s,e,void 0,T),c=!0}if(e.aborted||o!==Ae.current||$()!==b)return;if(p.unchanged&&p.revision&&p.revision===De.current){Se(!1),te(!1),_e(!0);return}p.page?.hasNewer&&H.current&&!D.current.hasNewer&&(p=await je(s,e,void 0,T),c=!0);const B=p.messages;if(!Array.isArray(B)||p.updates!==void 0&&!Array.isArray(p.updates))throw new Error("暂时无法读取对话,请重试");const Y=[...p.updates??[],...B];if(Y.some(I=>I.ui)&&await ut(),e.aborted||o!==Ae.current||$()!==b)return;yt(p.agentAvailable===!0),L(typeof p.agent?.displayName=="string"&&p.agent.displayName.trim()?p.agent.displayName:"助手"),de(typeof p.agent?.slug=="string"?p.agent.slug:void 0),De.current=typeof p.revision=="string"?p.revision:void 0;const ve=c||m.length===0;ve&&(ge.clear(),Ie.current++,re.current?.abort(),D.current.hasOlder=p.page?.hasOlder===!0,h(D.current.hasOlder)),ne(p.replyPending),D.current.hasNewer=p.page?.hasNewer===!0;const we=new Set(m.map(I=>I.id));(D.current.hasNewer||m.length&&!H.current&&B.some(I=>!we.has(I.id)))&&Ce(!0),xe(Y,ve),fe(I=>I&&(p.confirmedRequestId===I.requestId||Y.some(Lt=>Lt.requestId===I.requestId))?null:I),Se(!1),te(!1),_e(!0)},[s,xe,ge]),ye=r.useCallback(async()=>{const e=ie.current[0]?.id;if(!P.current.active||!D.current.hasOlder||!e||he.current||Date.now()<pe.current)return;const c=new AbortController,o=$(),b=Ie.current;re.current=c,he.current=!0,N(!0);try{const m=await je(s,c.signal,void 0,{before:e});if(!Array.isArray(m.messages))throw new Error("对话分页无效");if(m.messages.some(T=>T.ui)&&await ut(),c.signal.aborted||$()!==o||b!==Ie.current||!P.current.active)return;const R=U.current;R&&(ce.current={top:R.scrollTop,height:R.scrollHeight}),D.current.hasOlder=m.page?.hasOlder===!0,h(D.current.hasOlder),xe(m.messages),pe.current=0}catch(m){c.signal.aborted||(m.status===404?(D.current.hasOlder=!1,h(!1)):(pe.current=Date.now()+5e3,te(!0)))}finally{re.current===c&&(he.current=!1,re.current=void 0,P.current.active&&N(!1))}},[s,xe]);r.useEffect(()=>{const e=Be.current,c=U.current;if(!a||!y||!e||!c)return;const o=()=>{pe.current=0,c.scrollTop<c.clientHeight&&ye()};window.addEventListener("online",o);const b=typeof IntersectionObserver>"u"?void 0:new IntersectionObserver(m=>{m.some(R=>R.isIntersecting)&&ye()},{root:c,rootMargin:`${c.clientHeight}px 0px`});return b?.observe(e),()=>{b?.disconnect(),window.removeEventListener("online",o)}},[a,y,z.length,ye]),r.useEffect(()=>(a||N(!1),()=>{re.current?.abort(),re.current=void 0,he.current=!1}),[a]),r.useEffect(()=>{if(!a)return;const e=new AbortController;let c=!1,o=0,b;const m=async()=>{if(!(c||document.visibilityState==="hidden")){clearTimeout(b),c=!0;try{await be(e.signal),o=0}catch{e.signal.aborted||(o++,te(!0),Se(!1))}finally{c=!1,e.signal.aborted||(b=setTimeout(()=>{m()},Math.min(3e4,2500*2**o)))}}};return m(),window.addEventListener("online",m),window.addEventListener(nt,m),document.addEventListener("visibilitychange",m),()=>{e.abort(),clearTimeout(b),window.removeEventListener("online",m),window.removeEventListener(nt,m),document.removeEventListener("visibilitychange",m)}},[a,be]),r.useEffect(()=>()=>{se.current++},[]),r.useEffect(()=>{try{sessionStorage.setItem(`${l}:draft`,_)}catch{}},[l,_]),r.useEffect(()=>{try{k?sessionStorage.setItem(`${l}:pending`,JSON.stringify(k)):sessionStorage.removeItem(`${l}:pending`)}catch{}},[l,k]);const le=r.useCallback(()=>{const e=U.current;e&&e.clientHeight&&(e.scrollTop=e.scrollHeight,oe.current=e.scrollTop,H.current=!0,D.current.hasNewer||Ce(!1))},[]);r.useEffect(()=>{if(!Le.current||typeof ResizeObserver>"u")return;const e=new ResizeObserver(()=>{P.current.active&&H.current&&le()});return e.observe(Le.current),U.current&&e.observe(U.current),()=>e.disconnect()},[le]),r.useLayoutEffect(()=>{const e=U.current;!a||!e||(ce.current?(e.scrollTop=ce.current.top+e.scrollHeight-ce.current.height,oe.current=e.scrollTop,ce.current=void 0):H.current?le():e.scrollTop=oe.current)},[z,k,a,y,le]);const Ge=r.useRef({messages:z,agentName:w,agentSlug:V,agentAvailable:J,replyPending:A,hasOlder:y,hasNewer:D.current.hasNewer});Ge.current={messages:z,agentName:w,agentSlug:V,agentAvailable:J,replyPending:A,hasOlder:y,hasNewer:D.current.hasNewer},r.useEffect(()=>{const e=$(),c=ot();return()=>{const o=Ge.current;o.agentAvailable!==void 0&&$()===e&&c===ot()&&Bt(l,{...o,agentAvailable:o.agentAvailable,scrollTop:oe.current,nearBottom:H.current,rowHeights:[...Ke],visibleMessageIds:[...ge]})}},[l]),r.useLayoutEffect(()=>{const e=q.current;e&&(e.style.height="auto",e.style.height=`${Math.min(e.scrollHeight,176)}px`)},[_,a]),r.useEffect(()=>{const e=q.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(Re.current||C.busy||!P.current.active||!P.current.canWrite||J!==!0)return!1;const o=e||{content:c??dt(_,M),requestId:crypto.randomUUID(),createdAt:Date.now()};if(!o.content||new TextEncoder().encode(o.content).byteLength>32e3)return!1;Re.current=!0,Ve(!0),G(""),ne(void 0),fe(o),H.current=!0,!e&&c===void 0&&(K(""),Q(null));const b=se.current;try{const m=await fetch(St,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({content:o.content,requestId:o.requestId}),signal:AbortSignal.timeout(2e4)}),R=await m.json();if(!m.ok)throw new Error("发送失败,请重试。");if(b!==se.current)return!1;fe(null),We(T=>T.some(p=>p.id===R.id)?T:[...T,{...o,id:R.id,role:"user",status:R.status}]);try{await be()}catch{te(!0)}return!0}catch(m){return b===se.current&&G(m instanceof Error&&m.name==="TimeoutError"?"发送状态待确认,请重试。":"发送失败,请重试。"),!1}finally{Re.current=!1,b===se.current&&Ve(!1)}};r.useEffect(()=>{const e=c=>{const o=c.detail;a&&x&&o.sessionId===s&&ee(o.text)};return window.addEventListener("termdock:chat-insert",e),()=>window.removeEventListener("termdock:chat-insert",e)},[s,a,x,ee]),r.useEffect(()=>{if(!a)return;const e=c=>{const o=c.detail;if(!o?.text||o.sessionId!==s)return;c.stopImmediatePropagation();const b=x&&(!o.ownedPaste||!!Wt(o,s));b&&ee(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,a,x,ee]);const Ye=r.useRef(ue);Ye.current=ue;const kt=r.useCallback(e=>Ye.current(void 0,e),[]),Ct=r.useCallback((e,c)=>{Kt(e,()=>Te.current?.isConnected===!0).then(o=>{o?Et(c):G("复制失败,请选择正文复制")})},[]),Rt=async()=>{if(D.current.hasNewer){H.current=!0;try{await be(void 0,!0)}catch{te(!0)}}le()},At=J===!0&&!k&&(A??er(z)),Qe=new TextEncoder().encode(dt(_,M)).byteLength>32e3;return t.jsxs("section",{ref:Te,"data-session-chat":!0,onDragEnter:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),ae.current++,x&&Z(!0))},onDragOver:e=>{e.dataTransfer.types.includes("Files")&&(e.preventDefault(),e.dataTransfer.dropEffect=x?"copy":"none")},onDragLeave:e=>{e.dataTransfer.types.includes("Files")&&(ae.current=Math.max(0,ae.current-1),ae.current||Z(!1))},onDrop:e=>{let c;try{c=Ht(e.dataTransfer)}catch(b){e.preventDefault(),G(b instanceof Error?b.message:"文件引用无效");return}if(c&&x){e.preventDefault(),e.stopPropagation(),ee(c);return}const o=Array.from(e.dataTransfer.files);if(o.length)e.preventDefault(),e.stopPropagation(),Z(!1),ae.current=0,C.addFiles(o);else if(x&&e.target.closest("[data-chat-composer]")){const b=e.dataTransfer.getData("text/plain");b&&(e.preventDefault(),ee(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.jsxs("div",{ref:U,className:"min-h-0 flex-1 overflow-y-auto overscroll-contain px-4 [overflow-anchor:none] sm:px-8",onScroll:()=>{const e=U.current;!a||!e.clientHeight||(oe.current=e.scrollTop,H.current=e.scrollHeight-e.scrollTop-e.clientHeight<96,H.current&&!D.current.hasNewer&&Ce(!1),e.scrollTop<e.clientHeight&&ye())},children:[t.jsxs("div",{ref:Le,className:"mx-auto flex min-h-full w-full max-w-screen-2xl flex-col py-5 sm:py-8",children:[y&&t.jsx("div",{ref:Be,"data-chat-older-edge":!0,"aria-hidden":"true",className:"h-12 shrink-0",children:S&&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)&&!z.length&&!k?t.jsx(Jt,{}):!z.length&&!k?t.jsxs("div",{className:"my-auto py-6",children:[t.jsx(Ft,{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:!x,onClick:()=>{K(e),q.current?.focus({preventScroll:!0})},children:e},e))})]}):t.jsx(lr,{pendingMessage:k&&t.jsx(xt,{content:k.content,createdAt:k.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=Fe(k.content);K(e.text),Q(e.reference),fe(null),G(""),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:!x||J!==!0,onClick:()=>{ue(k)},children:[t.jsx(qt,{size:12}),"重试发送"]})]})}),sessionId:s,uiWritable:a&&x&&!k&&!me&&J===!0,onAction:kt,messages:z,scrollRoot:U,rowHeights:Ke,nearbyIds:ge,initialVisibleIds:u?.visibleMessageIds,agentName:w,agentSlug:V,canWrite:x,copied:Nt,onReference:Je,onCopy:Ct}),At&&!ke&&t.jsxs("div",{"data-chat-reply-status":!0,role:"status","aria-label":`${w}工作中`,"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(pt,{name:w,slug:V}),t.jsxs("span",{className:"inline-flex shrink-0 items-center gap-1.5",children:[t.jsx(st,{size:14,className:"animate-spin text-primary motion-reduce:animate-none"}),t.jsx("span",{children:"工作中…"})]})]})]}),(z.length>0||k)&&t.jsx("div",{"aria-hidden":"true",className:"session-chat-keyboard-spacer"})]}),v&&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(ct,{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:()=>{Rt()},children:[t.jsx(Qt,{size:14}),"查看新消息"]})}),t.jsxs("div",{className:"relative mx-auto max-w-screen-2xl",children:[J===!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:E,children:[t.jsx(at,{size:14}),"打开终端"]})]}),X&&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=z.find(c=>c.id===X.id);e&&Je(e,X.text)},children:[t.jsx(qe,{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:X.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:()=>{f(null),window.getSelection()?.removeAllRanges()},children:t.jsx($e,{size:13})})]})}),C.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:[C.busy&&t.jsx(st,{size:13,className:"animate-spin text-primary"}),t.jsx("span",{className:"min-w-0 flex-1",children:C.transfer.stage==="reading"?"正在读取剪贴板…":C.transfer.stage==="uploading"?`正在上传文件${C.transfer.percent===void 0?"…":` · ${C.transfer.percent}%`}`:C.transfer.stage==="cancelled"?"已取消上传":"上传未完成,文件尚未添加"}),C.busy?t.jsx("button",{type:"button",className:"min-h-9 px-2",onClick:C.cancel,children:"取消"}):t.jsxs(t.Fragment,{children:[t.jsx("button",{type:"button",className:"min-h-9 px-2 text-primary",onClick:C.retry,children:"重试上传"}),t.jsx("button",{type:"button","aria-label":"关闭上传提示",className:"min-h-9 px-2",onClick:C.dismiss,children:t.jsx($e,{size:13})})]})]}),t.jsxs("form",{"data-chat-composer":!0,className:"rounded-2xl border border-border bg-surface p-2.5 transition-colors focus-within:border-primary/60",onSubmit:e=>{e.preventDefault(),k||ue()},children:[M&&t.jsx(gt,{reference:M,onRemove:()=>Q(null)}),t.jsxs("div",{className:"flex items-end gap-2",children:[t.jsx("input",{ref:Ue,type:"file",multiple:!0,tabIndex:-1,className:"hidden","aria-label":"选择附件",onChange:e=>{C.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:!x||C.busy,onPointerDown:e=>e.preventDefault(),onClick:()=>Ue.current?.click(),children:t.jsx(ct,{size:18})}),t.jsx("textarea",{ref:q,onFocus:()=>f(null),onPaste:e=>{const{files:c,text:o}=Gt(e.clipboardData);(c.length||it()?.readClipboardFiles||!o&&(it()||typeof navigator.clipboard?.read=="function"))&&(e.preventDefault(),C.paste({files:c,text:o}))},rows:1,autoComplete:"off",className:"session-chat-input min-w-0 flex-1 resize-none bg-transparent px-1 py-2 text-base leading-7 outline-none placeholder:text-muted-foreground/60","aria-label":`给${w}的消息`,placeholder:x?"输入消息…":"此会话仅允许查看",value:_,disabled:!x,onChange:e=>K(e.target.value),onKeyDown:e=>{e.stopPropagation(),e.key==="Enter"&&!e.shiftKey&&!e.altKey&&!e.nativeEvent.isComposing&&e.nativeEvent.keyCode!==229&&(e.preventDefault(),k||ue())}}),t.jsx("button",{type:"submit","aria-label":"发送消息",onPointerDown:e=>{document.activeElement===q.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||C.busy||!!k||!_.trim()||Qe||!x||J!==!0,children:t.jsx(Xt,{size:19})})]})]}),Qe?t.jsx("p",{className:"mt-2 px-1 text-xs text-destructive",children:"消息过长,请缩短后发送。"}):x?!F&&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:"仅查看"}),d&&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:E,children:[t.jsx(at,{size:13}),"查看终端"]})})]})]})]})}function fr(s){return t.jsx(dr,{...s},`${mt()?.targetPeerId||location.origin}:${s.sessionId}`)}const vr=Object.freeze(Object.defineProperty({__proto__:null,SessionChatView:fr},Symbol.toStringTag,{value:"Module"}));export{ir as C,vr as S};
@@ -0,0 +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};
@@ -0,0 +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 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-SVP7TREG-BZfMhm64.js";import{p as f}from"./chunk-JWPE2WC7-lrJRD9WA.js";import{d as n,bg as o}from"./mermaid.core-DGsccxt-.js";import{M as c,c as d}from"./cynefin-OW5HDTMX-BQ7-lCHm.js";import"./app-DuUnqxq-.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-Dea8wJF3.js";import"./purify.es-4eNOHKSq.js";var g=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(v);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),v=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),m=t?parseInt(t,10):0,l=s?parseInt(s,10):1/0;return{min:m,max:l}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=g.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},D={parser:R,db:a,renderer:u,styles:p};export{D as diagram};
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};