termdock 1.4.321 → 1.4.324

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 (375) hide show
  1. package/dist/client/assets/App-7IUcmCLC.js +186 -0
  2. package/dist/client/assets/App-7IUcmCLC.js.br +0 -0
  3. package/dist/client/assets/App-7IUcmCLC.js.gz +0 -0
  4. package/dist/client/assets/{ArchitecturePanel-BIlIOGx7.js → ArchitecturePanel-CUAB0wFe.js} +6 -6
  5. package/dist/client/assets/ArchitecturePanel-CUAB0wFe.js.br +0 -0
  6. package/dist/client/assets/ArchitecturePanel-CUAB0wFe.js.gz +0 -0
  7. package/dist/client/assets/{ChangeWalkthroughPanel-BtXqyUzD.js → ChangeWalkthroughPanel-CKIG8diY.js} +2 -2
  8. package/dist/client/assets/ChangeWalkthroughPanel-CKIG8diY.js.br +0 -0
  9. package/dist/client/assets/ChangeWalkthroughPanel-CKIG8diY.js.gz +0 -0
  10. package/dist/client/assets/CollaborationMainWorkspace-CIq-JAbF.js +1 -0
  11. package/dist/client/assets/CollaborationMainWorkspace-CIq-JAbF.js.br +0 -0
  12. package/dist/client/assets/CollaborationMainWorkspace-CIq-JAbF.js.gz +0 -0
  13. package/dist/client/assets/CollaborationTaskContent-7vWDzH-d.js +2 -0
  14. package/dist/client/assets/{ComputerControlView-D81udDZO.js → ComputerControlView-CPSI-M86.js} +2 -2
  15. package/dist/client/assets/ComputerControlView-CPSI-M86.js.br +0 -0
  16. package/dist/client/assets/ComputerControlView-CPSI-M86.js.gz +0 -0
  17. package/dist/client/assets/{DagPlayground-B3hTlIFu.js → DagPlayground-BxocNRPm.js} +1 -1
  18. package/dist/client/assets/DagPlayground-BxocNRPm.js.br +0 -0
  19. package/dist/client/assets/DagPlayground-BxocNRPm.js.gz +0 -0
  20. package/dist/client/assets/{DiffLab-C5sDPAZ5.js → DiffLab-COGOFO0s.js} +2 -2
  21. package/dist/client/assets/DiffLab-COGOFO0s.js.br +0 -0
  22. package/dist/client/assets/DiffLab-COGOFO0s.js.gz +0 -0
  23. package/dist/client/assets/{DiffReview-DQFgOJPF.js → DiffReview-5ERdwz1C.js} +1 -1
  24. package/dist/client/assets/DiffReview-5ERdwz1C.js.br +0 -0
  25. package/dist/client/assets/DiffReview-5ERdwz1C.js.gz +0 -0
  26. package/dist/client/assets/{DiffReviewLab-CZvBmujD.js → DiffReviewLab-BSz9IND6.js} +1 -1
  27. package/dist/client/assets/DiffReviewLab-BSz9IND6.js.br +0 -0
  28. package/dist/client/assets/DiffReviewLab-BSz9IND6.js.gz +0 -0
  29. package/dist/client/assets/{DiffViewer-DOvGC9bh.js → DiffViewer-RT-p-ZBo.js} +8 -8
  30. package/dist/client/assets/DiffViewer-RT-p-ZBo.js.br +0 -0
  31. package/dist/client/assets/DiffViewer-RT-p-ZBo.js.gz +0 -0
  32. package/dist/client/assets/{ModelPreview-ClKH4BQ7.js → ModelPreview-DI9anVWA.js} +1 -1
  33. package/dist/client/assets/ModelPreview-DI9anVWA.js.br +0 -0
  34. package/dist/client/assets/ModelPreview-DI9anVWA.js.gz +0 -0
  35. package/dist/client/assets/{RightSidebar-BeegDfBO.js → RightSidebar-DOLn8R7c.js} +36 -36
  36. package/dist/client/assets/RightSidebar-DOLn8R7c.js.br +0 -0
  37. package/dist/client/assets/RightSidebar-DOLn8R7c.js.gz +0 -0
  38. package/dist/client/assets/{abnfDiagram-VCTEODGH-CHUZIHQo.js → abnfDiagram-VCTEODGH-CXd0unH5.js} +1 -1
  39. package/dist/client/assets/abnfDiagram-VCTEODGH-CXd0unH5.js.br +0 -0
  40. package/dist/client/assets/abnfDiagram-VCTEODGH-CXd0unH5.js.gz +0 -0
  41. package/dist/client/assets/app-DCFOZi_L.js +35 -0
  42. package/dist/client/assets/app-DCFOZi_L.js.br +0 -0
  43. package/dist/client/assets/app-DCFOZi_L.js.gz +0 -0
  44. package/dist/client/assets/{arc-CIJEXYV7.js → arc-DCqJmX8M.js} +1 -1
  45. package/dist/client/assets/arc-DCqJmX8M.js.br +0 -0
  46. package/dist/client/assets/arc-DCqJmX8M.js.gz +0 -0
  47. package/dist/client/assets/{architectureDiagram-5GKGNRK7-CcX1UBXG.js → architectureDiagram-5GKGNRK7-DGu_m54H.js} +1 -1
  48. package/dist/client/assets/architectureDiagram-5GKGNRK7-DGu_m54H.js.br +0 -0
  49. package/dist/client/assets/architectureDiagram-5GKGNRK7-DGu_m54H.js.gz +0 -0
  50. package/dist/client/assets/{blockDiagram-I7D4REHJ-gDLrIBDk.js → blockDiagram-I7D4REHJ-BI0gsxDN.js} +1 -1
  51. package/dist/client/assets/blockDiagram-I7D4REHJ-BI0gsxDN.js.br +0 -0
  52. package/dist/client/assets/blockDiagram-I7D4REHJ-BI0gsxDN.js.gz +0 -0
  53. package/dist/client/assets/{c4Diagram-7LVT6UL2-BQA7WLEL.js → c4Diagram-7LVT6UL2-Ct3xzGtD.js} +1 -1
  54. package/dist/client/assets/c4Diagram-7LVT6UL2-Ct3xzGtD.js.br +0 -0
  55. package/dist/client/assets/c4Diagram-7LVT6UL2-Ct3xzGtD.js.gz +0 -0
  56. package/dist/client/assets/channel-BLSCUksA.js +1 -0
  57. package/dist/client/assets/{chunk-2Q5K7J3B-CPCY618J.js → chunk-2Q5K7J3B-BPd2UShA.js} +1 -1
  58. package/dist/client/assets/{chunk-5VM5RSS4-Cc3Czx6A.js → chunk-5VM5RSS4-CoFZ5Fo3.js} +1 -1
  59. package/dist/client/assets/{chunk-F27PBJKO-3scxqZTK.js → chunk-F27PBJKO-C5gZrGp4.js} +1 -1
  60. package/dist/client/assets/chunk-F27PBJKO-C5gZrGp4.js.br +0 -0
  61. package/dist/client/assets/chunk-F27PBJKO-C5gZrGp4.js.gz +0 -0
  62. package/dist/client/assets/{chunk-IMKFNOWR-BOCOE1VY.js → chunk-IMKFNOWR-GW8b9ya-.js} +1 -1
  63. package/dist/client/assets/chunk-IMKFNOWR-GW8b9ya-.js.br +0 -0
  64. package/dist/client/assets/chunk-IMKFNOWR-GW8b9ya-.js.gz +0 -0
  65. package/dist/client/assets/{chunk-JWPE2WC7-DX2Onu68.js → chunk-JWPE2WC7-GpMoViQf.js} +1 -1
  66. package/dist/client/assets/{chunk-POPQ4Y6H-C4MN3QRd.js → chunk-POPQ4Y6H-C_vgVPaw.js} +1 -1
  67. package/dist/client/assets/{chunk-SVP7TREG-DOKo3BNt.js → chunk-SVP7TREG-bA7RXwWn.js} +1 -1
  68. package/dist/client/assets/chunk-SVP7TREG-bA7RXwWn.js.br +0 -0
  69. package/dist/client/assets/chunk-SVP7TREG-bA7RXwWn.js.gz +0 -0
  70. package/dist/client/assets/{chunk-TICWLB2K-CPpFFmO9.js → chunk-TICWLB2K-BG8DAtll.js} +1 -1
  71. package/dist/client/assets/chunk-TICWLB2K-BG8DAtll.js.br +0 -0
  72. package/dist/client/assets/chunk-TICWLB2K-BG8DAtll.js.gz +0 -0
  73. package/dist/client/assets/{chunk-XXDRQBXY-Zp_XOFU2.js → chunk-XXDRQBXY-Ces56sud.js} +1 -1
  74. package/dist/client/assets/classDiagram-ZZMXUADV-DkVIqOvw.js +1 -0
  75. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DkVIqOvw.js +1 -0
  76. package/dist/client/assets/{cose-bilkent-JH36ORCC-iYXdWZMG.js → cose-bilkent-JH36ORCC-Bwch0qL5.js} +1 -1
  77. package/dist/client/assets/cose-bilkent-JH36ORCC-Bwch0qL5.js.br +0 -0
  78. package/dist/client/assets/cose-bilkent-JH36ORCC-Bwch0qL5.js.gz +0 -0
  79. package/dist/client/assets/{cynefin-OW5HDTMX-CXRpxmcA.js → cynefin-OW5HDTMX-CrAXyA2Z.js} +1 -1
  80. package/dist/client/assets/cynefin-OW5HDTMX-CrAXyA2Z.js.br +0 -0
  81. package/dist/client/assets/cynefin-OW5HDTMX-CrAXyA2Z.js.gz +0 -0
  82. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-CH1TQhgO.js → cynefinDiagram-5FMLGOSQ-YlP0Q93l.js} +1 -1
  83. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-YlP0Q93l.js.br +0 -0
  84. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-YlP0Q93l.js.gz +0 -0
  85. package/dist/client/assets/{dagre-GXQ25YYZ-BdshuKJr.js → dagre-GXQ25YYZ-CZ4XcPK9.js} +1 -1
  86. package/dist/client/assets/dagre-GXQ25YYZ-CZ4XcPK9.js.br +0 -0
  87. package/dist/client/assets/dagre-GXQ25YYZ-CZ4XcPK9.js.gz +0 -0
  88. package/dist/client/assets/{diagram-S7CK7UJ4-VbNBimIR.js → diagram-S7CK7UJ4-c_8HfHGA.js} +1 -1
  89. package/dist/client/assets/diagram-S7CK7UJ4-c_8HfHGA.js.br +0 -0
  90. package/dist/client/assets/diagram-S7CK7UJ4-c_8HfHGA.js.gz +0 -0
  91. package/dist/client/assets/{diagram-UQ7AKVKN-D_NUFcq3.js → diagram-UQ7AKVKN-BGtRfxMR.js} +1 -1
  92. package/dist/client/assets/diagram-UQ7AKVKN-BGtRfxMR.js.br +0 -0
  93. package/dist/client/assets/diagram-UQ7AKVKN-BGtRfxMR.js.gz +0 -0
  94. package/dist/client/assets/{diagram-VSXAHHWV-CfYRQ4mq.js → diagram-VSXAHHWV-_9yZnhuv.js} +1 -1
  95. package/dist/client/assets/diagram-VSXAHHWV-_9yZnhuv.js.br +0 -0
  96. package/dist/client/assets/diagram-VSXAHHWV-_9yZnhuv.js.gz +0 -0
  97. package/dist/client/assets/{diagram-VX7I27RA-YHy6vMjY.js → diagram-VX7I27RA-C_mnc4_u.js} +1 -1
  98. package/dist/client/assets/diagram-VX7I27RA-C_mnc4_u.js.br +0 -0
  99. package/dist/client/assets/diagram-VX7I27RA-C_mnc4_u.js.gz +0 -0
  100. package/dist/client/assets/{diagram-Z3DM3KII-DvHqYL0O.js → diagram-Z3DM3KII-sZ_AiSpj.js} +1 -1
  101. package/dist/client/assets/diagram-Z3DM3KII-sZ_AiSpj.js.br +0 -0
  102. package/dist/client/assets/diagram-Z3DM3KII-sZ_AiSpj.js.gz +0 -0
  103. package/dist/client/assets/{ebnfDiagram-PWID7BFC-Bl9bDxAP.js → ebnfDiagram-PWID7BFC-Dm-BXeqS.js} +1 -1
  104. package/dist/client/assets/ebnfDiagram-PWID7BFC-Dm-BXeqS.js.br +0 -0
  105. package/dist/client/assets/ebnfDiagram-PWID7BFC-Dm-BXeqS.js.gz +0 -0
  106. package/dist/client/assets/{erDiagram-RLTQ6QDP-DauNoBZZ.js → erDiagram-RLTQ6QDP-Dz4cBepd.js} +1 -1
  107. package/dist/client/assets/erDiagram-RLTQ6QDP-Dz4cBepd.js.br +0 -0
  108. package/dist/client/assets/erDiagram-RLTQ6QDP-Dz4cBepd.js.gz +0 -0
  109. package/dist/client/assets/{flowDiagram-HODETNUW-D6eDWfJY.js → flowDiagram-HODETNUW-CbRG8-WW.js} +1 -1
  110. package/dist/client/assets/flowDiagram-HODETNUW-CbRG8-WW.js.br +0 -0
  111. package/dist/client/assets/flowDiagram-HODETNUW-CbRG8-WW.js.gz +0 -0
  112. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CWHSwTR6.js → ganttDiagram-EL5Y4UJY-CmBXWlr0.js} +1 -1
  113. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CmBXWlr0.js.br +0 -0
  114. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CmBXWlr0.js.gz +0 -0
  115. package/dist/client/assets/{gestureArbiter-nU4jhK3S.js → gestureArbiter-B26W6rS7.js} +1 -1
  116. package/dist/client/assets/gestureArbiter-B26W6rS7.js.br +0 -0
  117. package/dist/client/assets/gestureArbiter-B26W6rS7.js.gz +0 -0
  118. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-BHYt5-_X.js → gitGraphDiagram-WWUBYQGX-JW5QMYEk.js} +1 -1
  119. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-JW5QMYEk.js.br +0 -0
  120. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-JW5QMYEk.js.gz +0 -0
  121. package/dist/client/assets/index-Ctz-IDjR.css +1 -0
  122. package/dist/client/assets/index-Ctz-IDjR.css.br +0 -0
  123. package/dist/client/assets/{index-B4bEMUyn.css.gz → index-Ctz-IDjR.css.gz} +0 -0
  124. package/dist/client/assets/{infoDiagram-27XIBGKW-DPmlcUaZ.js → infoDiagram-27XIBGKW-CsA6WdPn.js} +1 -1
  125. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DAn65XKZ.js → ishikawaDiagram-5VMMS53U-CsKPUwTw.js} +1 -1
  126. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DAn65XKZ.js.br → ishikawaDiagram-5VMMS53U-CsKPUwTw.js.br} +0 -0
  127. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CsKPUwTw.js.gz +0 -0
  128. package/dist/client/assets/{journeyDiagram-3NMN7TZE-B2c5x9jb.js → journeyDiagram-3NMN7TZE-DpN98gN0.js} +1 -1
  129. package/dist/client/assets/journeyDiagram-3NMN7TZE-DpN98gN0.js.br +0 -0
  130. package/dist/client/assets/journeyDiagram-3NMN7TZE-DpN98gN0.js.gz +0 -0
  131. package/dist/client/assets/{kanban-definition-UXKFOSKX-CMeEp_9r.js → kanban-definition-UXKFOSKX-RHO--43O.js} +1 -1
  132. package/dist/client/assets/kanban-definition-UXKFOSKX-RHO--43O.js.br +0 -0
  133. package/dist/client/assets/kanban-definition-UXKFOSKX-RHO--43O.js.gz +0 -0
  134. package/dist/client/assets/{layout-Db99ysGT.js → layout-Cm_prknW.js} +1 -1
  135. package/dist/client/assets/layout-Cm_prknW.js.br +0 -0
  136. package/dist/client/assets/layout-Cm_prknW.js.gz +0 -0
  137. package/dist/client/assets/{linear-B6mREmTG.js → linear-BVAsPkvS.js} +1 -1
  138. package/dist/client/assets/linear-BVAsPkvS.js.br +0 -0
  139. package/dist/client/assets/linear-BVAsPkvS.js.gz +0 -0
  140. package/dist/client/assets/{mermaid.core-DndzUmju.js → mermaid.core-ufe77Xaz.js} +5 -5
  141. package/dist/client/assets/mermaid.core-ufe77Xaz.js.br +0 -0
  142. package/dist/client/assets/mermaid.core-ufe77Xaz.js.gz +0 -0
  143. package/dist/client/assets/{mindmap-definition-YA3MSWOX-qYAlDvc4.js → mindmap-definition-YA3MSWOX-CRyy1U2d.js} +1 -1
  144. package/dist/client/assets/mindmap-definition-YA3MSWOX-CRyy1U2d.js.br +0 -0
  145. package/dist/client/assets/mindmap-definition-YA3MSWOX-CRyy1U2d.js.gz +0 -0
  146. package/dist/client/assets/passwordBootstrap-3_SIzSH7.js +2 -0
  147. package/dist/client/assets/passwordBootstrap-3_SIzSH7.js.br +0 -0
  148. package/dist/client/assets/passwordBootstrap-3_SIzSH7.js.gz +0 -0
  149. package/dist/client/assets/{pegDiagram-XKGWAZYB-Dg5DCFIn.js → pegDiagram-XKGWAZYB-DSHgdU9q.js} +1 -1
  150. package/dist/client/assets/pegDiagram-XKGWAZYB-DSHgdU9q.js.br +0 -0
  151. package/dist/client/assets/pegDiagram-XKGWAZYB-DSHgdU9q.js.gz +0 -0
  152. package/dist/client/assets/{pieDiagram-E7YTZNPT-dje1AAFI.js → pieDiagram-E7YTZNPT-lIUeAuhN.js} +1 -1
  153. package/dist/client/assets/pieDiagram-E7YTZNPT-lIUeAuhN.js.br +0 -0
  154. package/dist/client/assets/pieDiagram-E7YTZNPT-lIUeAuhN.js.gz +0 -0
  155. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-DLXI6hrS.js → quadrantDiagram-AXDQQJYC-CIgG9vBX.js} +1 -1
  156. package/dist/client/assets/quadrantDiagram-AXDQQJYC-CIgG9vBX.js.br +0 -0
  157. package/dist/client/assets/quadrantDiagram-AXDQQJYC-CIgG9vBX.js.gz +0 -0
  158. package/dist/client/assets/{railroadDiagram-O6MQD6OU-DcY-P8Q_.js → railroadDiagram-O6MQD6OU-DjP8oesA.js} +1 -1
  159. package/dist/client/assets/railroadDiagram-O6MQD6OU-DjP8oesA.js.br +0 -0
  160. package/dist/client/assets/railroadDiagram-O6MQD6OU-DjP8oesA.js.gz +0 -0
  161. package/dist/client/assets/{rdpSession-JkZuPKb3.js → rdpSession-BshIobdj.js} +1 -1
  162. package/dist/client/assets/rdpSession-BshIobdj.js.br +0 -0
  163. package/dist/client/assets/rdpSession-BshIobdj.js.gz +0 -0
  164. package/dist/client/assets/{referenceLongPress-CR3uo3V0.js → referenceLongPress-DBJnfFHa.js} +1 -1
  165. package/dist/client/assets/referenceLongPress-DBJnfFHa.js.br +0 -0
  166. package/dist/client/assets/referenceLongPress-DBJnfFHa.js.gz +0 -0
  167. package/dist/client/assets/{requirementDiagram-BXWQKSXE-B-GLzS7h.js → requirementDiagram-BXWQKSXE-Dbvu6IC_.js} +1 -1
  168. package/dist/client/assets/requirementDiagram-BXWQKSXE-Dbvu6IC_.js.br +0 -0
  169. package/dist/client/assets/requirementDiagram-BXWQKSXE-Dbvu6IC_.js.gz +0 -0
  170. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CINtGjgu.js → sankeyDiagram-P5KCCOFB-1mZ4s-lv.js} +1 -1
  171. package/dist/client/assets/sankeyDiagram-P5KCCOFB-1mZ4s-lv.js.br +0 -0
  172. package/dist/client/assets/sankeyDiagram-P5KCCOFB-1mZ4s-lv.js.gz +0 -0
  173. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BRE-_raI.js → sequenceDiagram-WJ2MYXX4-Cu3hhzlV.js} +1 -1
  174. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-Cu3hhzlV.js.br +0 -0
  175. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-Cu3hhzlV.js.gz +0 -0
  176. package/dist/client/assets/{sizeCapture-INFHLROL-v2bGYNk3.js → sizeCapture-INFHLROL-xfm69HlR.js} +1 -1
  177. package/dist/client/assets/sizeCapture-INFHLROL-xfm69HlR.js.br +0 -0
  178. package/dist/client/assets/sizeCapture-INFHLROL-xfm69HlR.js.gz +0 -0
  179. package/dist/client/assets/{sparkles-Dx518Xui.js → sparkles-CDonlwGu.js} +1 -1
  180. package/dist/client/assets/{stateDiagram-D77RDMKH-CIQ1zGkb.js → stateDiagram-D77RDMKH-u-bh6mDK.js} +1 -1
  181. package/dist/client/assets/stateDiagram-D77RDMKH-u-bh6mDK.js.br +0 -0
  182. package/dist/client/assets/stateDiagram-D77RDMKH-u-bh6mDK.js.gz +0 -0
  183. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BQ_m8Gzd.js +1 -0
  184. package/dist/client/assets/{swimlanes-42K2YHIH-DEjGaJr6.js → swimlanes-42K2YHIH-U8WN__SO.js} +1 -1
  185. package/dist/client/assets/swimlanes-42K2YHIH-U8WN__SO.js.br +0 -0
  186. package/dist/client/assets/swimlanes-42K2YHIH-U8WN__SO.js.gz +0 -0
  187. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-FDEo3QWw.js +8 -0
  188. package/dist/client/assets/{timeline-definition-24CTP7MA-BPbZrudq.js → timeline-definition-24CTP7MA-CMsoNo4F.js} +1 -1
  189. package/dist/client/assets/timeline-definition-24CTP7MA-CMsoNo4F.js.br +0 -0
  190. package/dist/client/assets/timeline-definition-24CTP7MA-CMsoNo4F.js.gz +0 -0
  191. package/dist/client/assets/{triangle-alert-CVm2qdGE.js → triangle-alert-BgErMO2V.js} +1 -1
  192. package/dist/client/assets/{vennDiagram-4TSXK5OY-CAsKNSfN.js → vennDiagram-4TSXK5OY-CPE6pVwh.js} +1 -1
  193. package/dist/client/assets/vennDiagram-4TSXK5OY-CPE6pVwh.js.br +0 -0
  194. package/dist/client/assets/vennDiagram-4TSXK5OY-CPE6pVwh.js.gz +0 -0
  195. package/dist/client/assets/{videoCompression-CCOgxfhm.js → videoCompression-BWkZvEjM.js} +1 -1
  196. package/dist/client/assets/videoCompression-BWkZvEjM.js.br +0 -0
  197. package/dist/client/assets/videoCompression-BWkZvEjM.js.gz +0 -0
  198. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-EeabO9yU.js → wardleyDiagram-VM6X3IG4-4lWd-R4N.js} +1 -1
  199. package/dist/client/assets/wardleyDiagram-VM6X3IG4-4lWd-R4N.js.br +0 -0
  200. package/dist/client/assets/wardleyDiagram-VM6X3IG4-4lWd-R4N.js.gz +0 -0
  201. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-MSUoQl2z.js → xychartDiagram-S5SC5T6Z-CpKJMCWV.js} +1 -1
  202. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CpKJMCWV.js.br +0 -0
  203. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CpKJMCWV.js.gz +0 -0
  204. package/dist/client/index.html +2 -2
  205. package/dist/client/index.html.br +0 -0
  206. package/dist/client/index.html.gz +0 -0
  207. package/dist/client/sw-encrypted-background.js +1 -1
  208. package/dist/client/sw-encrypted-background.js.br +0 -0
  209. package/dist/client/sw-encrypted-background.js.gz +0 -0
  210. package/dist/client/sw.js +1 -1
  211. package/dist/client/sw.js.br +0 -0
  212. package/dist/client/sw.js.gz +0 -0
  213. package/dist/server/agent/collaborationCli.js +5 -1
  214. package/dist/server/agent/collaborationGroupRoutes.js +15 -0
  215. package/dist/server/agent/collaborationRoutes.js +2 -0
  216. package/dist/server/agent/collaborationStore.js +63 -2
  217. package/dist/server/agent/collaborationTaskCli.js +1 -1
  218. package/dist/server/agent/collaborationTaskGuidance.js +2 -0
  219. package/dist/server/agent/collaborationTaskRoutes.js +5 -1
  220. package/dist/server/agent/collaborationTaskStore.js +18 -11
  221. package/dist/server/agent/collaborationTmuxDelivery.js +3 -2
  222. package/dist/server/agent/integrationCli.js +44 -20
  223. package/dist/server/agent/integrationServer.js +20 -1
  224. package/dist/server/agent/promptDelivery.js +2 -2
  225. package/dist/server/agent/sessionLaunchState.js +20 -0
  226. package/dist/server/agent/terminalInput.js +17 -0
  227. package/dist/server/federation/packets.js +179 -28
  228. package/dist/server/federation/requestContext.js +6 -1
  229. package/dist/server/federation/runtime.js +19 -8
  230. package/dist/server/routes/terminal.js +108 -57
  231. package/dist/server/utils/autoUpdate.js +55 -8
  232. package/dist/server/utils/npmUpdate.js +84 -8
  233. package/dist/server/utils/terminalPasteBuffer.js +66 -0
  234. package/dist/server/utils/tmuxClientCapabilities.js +4 -0
  235. package/dist/server/utils/tmuxCopySelection.js +94 -0
  236. package/dist/server/utils/tmuxEmptyServerProbe.js +15 -0
  237. package/docs/integrations.md +85 -0
  238. package/package.json +5 -2
  239. package/runtime-manifest.json +3 -3
  240. package/.desktop-dist/main.js +0 -1989
  241. package/dist/client/assets/App-VAvoVlm2.js +0 -186
  242. package/dist/client/assets/App-VAvoVlm2.js.br +0 -0
  243. package/dist/client/assets/App-VAvoVlm2.js.gz +0 -0
  244. package/dist/client/assets/ArchitecturePanel-BIlIOGx7.js.br +0 -0
  245. package/dist/client/assets/ArchitecturePanel-BIlIOGx7.js.gz +0 -0
  246. package/dist/client/assets/ChangeWalkthroughPanel-BtXqyUzD.js.br +0 -0
  247. package/dist/client/assets/ChangeWalkthroughPanel-BtXqyUzD.js.gz +0 -0
  248. package/dist/client/assets/CollaborationMainWorkspace-DUw3cqW-.js +0 -1
  249. package/dist/client/assets/CollaborationMainWorkspace-DUw3cqW-.js.br +0 -0
  250. package/dist/client/assets/CollaborationMainWorkspace-DUw3cqW-.js.gz +0 -0
  251. package/dist/client/assets/CollaborationTaskContent-C2sQQp6K.js +0 -2
  252. package/dist/client/assets/ComputerControlView-D81udDZO.js.br +0 -0
  253. package/dist/client/assets/ComputerControlView-D81udDZO.js.gz +0 -0
  254. package/dist/client/assets/DagPlayground-B3hTlIFu.js.br +0 -0
  255. package/dist/client/assets/DagPlayground-B3hTlIFu.js.gz +0 -0
  256. package/dist/client/assets/DiffLab-C5sDPAZ5.js.br +0 -0
  257. package/dist/client/assets/DiffLab-C5sDPAZ5.js.gz +0 -0
  258. package/dist/client/assets/DiffReview-DQFgOJPF.js.br +0 -0
  259. package/dist/client/assets/DiffReview-DQFgOJPF.js.gz +0 -0
  260. package/dist/client/assets/DiffReviewLab-CZvBmujD.js.br +0 -0
  261. package/dist/client/assets/DiffReviewLab-CZvBmujD.js.gz +0 -0
  262. package/dist/client/assets/DiffViewer-DOvGC9bh.js.br +0 -0
  263. package/dist/client/assets/DiffViewer-DOvGC9bh.js.gz +0 -0
  264. package/dist/client/assets/ModelPreview-ClKH4BQ7.js.br +0 -0
  265. package/dist/client/assets/ModelPreview-ClKH4BQ7.js.gz +0 -0
  266. package/dist/client/assets/RightSidebar-BeegDfBO.js.br +0 -0
  267. package/dist/client/assets/RightSidebar-BeegDfBO.js.gz +0 -0
  268. package/dist/client/assets/abnfDiagram-VCTEODGH-CHUZIHQo.js.br +0 -0
  269. package/dist/client/assets/abnfDiagram-VCTEODGH-CHUZIHQo.js.gz +0 -0
  270. package/dist/client/assets/app-Bj0N393t.js +0 -35
  271. package/dist/client/assets/app-Bj0N393t.js.br +0 -0
  272. package/dist/client/assets/app-Bj0N393t.js.gz +0 -0
  273. package/dist/client/assets/arc-CIJEXYV7.js.br +0 -0
  274. package/dist/client/assets/arc-CIJEXYV7.js.gz +0 -0
  275. package/dist/client/assets/architectureDiagram-5GKGNRK7-CcX1UBXG.js.br +0 -0
  276. package/dist/client/assets/architectureDiagram-5GKGNRK7-CcX1UBXG.js.gz +0 -0
  277. package/dist/client/assets/blockDiagram-I7D4REHJ-gDLrIBDk.js.br +0 -0
  278. package/dist/client/assets/blockDiagram-I7D4REHJ-gDLrIBDk.js.gz +0 -0
  279. package/dist/client/assets/c4Diagram-7LVT6UL2-BQA7WLEL.js.br +0 -0
  280. package/dist/client/assets/c4Diagram-7LVT6UL2-BQA7WLEL.js.gz +0 -0
  281. package/dist/client/assets/channel-OHMJip5O.js +0 -1
  282. package/dist/client/assets/chunk-F27PBJKO-3scxqZTK.js.br +0 -0
  283. package/dist/client/assets/chunk-F27PBJKO-3scxqZTK.js.gz +0 -0
  284. package/dist/client/assets/chunk-IMKFNOWR-BOCOE1VY.js.br +0 -0
  285. package/dist/client/assets/chunk-IMKFNOWR-BOCOE1VY.js.gz +0 -0
  286. package/dist/client/assets/chunk-SVP7TREG-DOKo3BNt.js.br +0 -0
  287. package/dist/client/assets/chunk-SVP7TREG-DOKo3BNt.js.gz +0 -0
  288. package/dist/client/assets/chunk-TICWLB2K-CPpFFmO9.js.br +0 -0
  289. package/dist/client/assets/chunk-TICWLB2K-CPpFFmO9.js.gz +0 -0
  290. package/dist/client/assets/classDiagram-ZZMXUADV-DwA5mGyC.js +0 -1
  291. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DwA5mGyC.js +0 -1
  292. package/dist/client/assets/cose-bilkent-JH36ORCC-iYXdWZMG.js.br +0 -0
  293. package/dist/client/assets/cose-bilkent-JH36ORCC-iYXdWZMG.js.gz +0 -0
  294. package/dist/client/assets/cynefin-OW5HDTMX-CXRpxmcA.js.br +0 -0
  295. package/dist/client/assets/cynefin-OW5HDTMX-CXRpxmcA.js.gz +0 -0
  296. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CH1TQhgO.js.br +0 -0
  297. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CH1TQhgO.js.gz +0 -0
  298. package/dist/client/assets/dagre-GXQ25YYZ-BdshuKJr.js.br +0 -0
  299. package/dist/client/assets/dagre-GXQ25YYZ-BdshuKJr.js.gz +0 -0
  300. package/dist/client/assets/diagram-S7CK7UJ4-VbNBimIR.js.br +0 -0
  301. package/dist/client/assets/diagram-S7CK7UJ4-VbNBimIR.js.gz +0 -0
  302. package/dist/client/assets/diagram-UQ7AKVKN-D_NUFcq3.js.br +0 -0
  303. package/dist/client/assets/diagram-UQ7AKVKN-D_NUFcq3.js.gz +0 -0
  304. package/dist/client/assets/diagram-VSXAHHWV-CfYRQ4mq.js.br +0 -0
  305. package/dist/client/assets/diagram-VSXAHHWV-CfYRQ4mq.js.gz +0 -0
  306. package/dist/client/assets/diagram-VX7I27RA-YHy6vMjY.js.br +0 -0
  307. package/dist/client/assets/diagram-VX7I27RA-YHy6vMjY.js.gz +0 -0
  308. package/dist/client/assets/diagram-Z3DM3KII-DvHqYL0O.js.br +0 -0
  309. package/dist/client/assets/diagram-Z3DM3KII-DvHqYL0O.js.gz +0 -0
  310. package/dist/client/assets/ebnfDiagram-PWID7BFC-Bl9bDxAP.js.br +0 -0
  311. package/dist/client/assets/ebnfDiagram-PWID7BFC-Bl9bDxAP.js.gz +0 -0
  312. package/dist/client/assets/erDiagram-RLTQ6QDP-DauNoBZZ.js.br +0 -0
  313. package/dist/client/assets/erDiagram-RLTQ6QDP-DauNoBZZ.js.gz +0 -0
  314. package/dist/client/assets/flowDiagram-HODETNUW-D6eDWfJY.js.br +0 -0
  315. package/dist/client/assets/flowDiagram-HODETNUW-D6eDWfJY.js.gz +0 -0
  316. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CWHSwTR6.js.br +0 -0
  317. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CWHSwTR6.js.gz +0 -0
  318. package/dist/client/assets/gestureArbiter-nU4jhK3S.js.br +0 -0
  319. package/dist/client/assets/gestureArbiter-nU4jhK3S.js.gz +0 -0
  320. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BHYt5-_X.js.br +0 -0
  321. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BHYt5-_X.js.gz +0 -0
  322. package/dist/client/assets/index-B4bEMUyn.css +0 -1
  323. package/dist/client/assets/index-B4bEMUyn.css.br +0 -0
  324. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DAn65XKZ.js.gz +0 -0
  325. package/dist/client/assets/journeyDiagram-3NMN7TZE-B2c5x9jb.js.br +0 -0
  326. package/dist/client/assets/journeyDiagram-3NMN7TZE-B2c5x9jb.js.gz +0 -0
  327. package/dist/client/assets/kanban-definition-UXKFOSKX-CMeEp_9r.js.br +0 -0
  328. package/dist/client/assets/kanban-definition-UXKFOSKX-CMeEp_9r.js.gz +0 -0
  329. package/dist/client/assets/layout-Db99ysGT.js.br +0 -0
  330. package/dist/client/assets/layout-Db99ysGT.js.gz +0 -0
  331. package/dist/client/assets/linear-B6mREmTG.js.br +0 -0
  332. package/dist/client/assets/linear-B6mREmTG.js.gz +0 -0
  333. package/dist/client/assets/mermaid.core-DndzUmju.js.br +0 -0
  334. package/dist/client/assets/mermaid.core-DndzUmju.js.gz +0 -0
  335. package/dist/client/assets/mindmap-definition-YA3MSWOX-qYAlDvc4.js.br +0 -0
  336. package/dist/client/assets/mindmap-definition-YA3MSWOX-qYAlDvc4.js.gz +0 -0
  337. package/dist/client/assets/passwordBootstrap-DaJXVcdB.js +0 -2
  338. package/dist/client/assets/passwordBootstrap-DaJXVcdB.js.br +0 -0
  339. package/dist/client/assets/passwordBootstrap-DaJXVcdB.js.gz +0 -0
  340. package/dist/client/assets/pegDiagram-XKGWAZYB-Dg5DCFIn.js.br +0 -0
  341. package/dist/client/assets/pegDiagram-XKGWAZYB-Dg5DCFIn.js.gz +0 -0
  342. package/dist/client/assets/pieDiagram-E7YTZNPT-dje1AAFI.js.br +0 -0
  343. package/dist/client/assets/pieDiagram-E7YTZNPT-dje1AAFI.js.gz +0 -0
  344. package/dist/client/assets/quadrantDiagram-AXDQQJYC-DLXI6hrS.js.br +0 -0
  345. package/dist/client/assets/quadrantDiagram-AXDQQJYC-DLXI6hrS.js.gz +0 -0
  346. package/dist/client/assets/railroadDiagram-O6MQD6OU-DcY-P8Q_.js.br +0 -0
  347. package/dist/client/assets/railroadDiagram-O6MQD6OU-DcY-P8Q_.js.gz +0 -0
  348. package/dist/client/assets/rdpSession-JkZuPKb3.js.br +0 -0
  349. package/dist/client/assets/rdpSession-JkZuPKb3.js.gz +0 -0
  350. package/dist/client/assets/referenceLongPress-CR3uo3V0.js.br +0 -0
  351. package/dist/client/assets/referenceLongPress-CR3uo3V0.js.gz +0 -0
  352. package/dist/client/assets/requirementDiagram-BXWQKSXE-B-GLzS7h.js.br +0 -0
  353. package/dist/client/assets/requirementDiagram-BXWQKSXE-B-GLzS7h.js.gz +0 -0
  354. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CINtGjgu.js.br +0 -0
  355. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CINtGjgu.js.gz +0 -0
  356. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BRE-_raI.js.br +0 -0
  357. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BRE-_raI.js.gz +0 -0
  358. package/dist/client/assets/sizeCapture-INFHLROL-v2bGYNk3.js.br +0 -0
  359. package/dist/client/assets/sizeCapture-INFHLROL-v2bGYNk3.js.gz +0 -0
  360. package/dist/client/assets/stateDiagram-D77RDMKH-CIQ1zGkb.js.br +0 -0
  361. package/dist/client/assets/stateDiagram-D77RDMKH-CIQ1zGkb.js.gz +0 -0
  362. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-DCGuhzdh.js +0 -1
  363. package/dist/client/assets/swimlanes-42K2YHIH-DEjGaJr6.js.br +0 -0
  364. package/dist/client/assets/swimlanes-42K2YHIH-DEjGaJr6.js.gz +0 -0
  365. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-Bj14fTzZ.js +0 -8
  366. package/dist/client/assets/timeline-definition-24CTP7MA-BPbZrudq.js.br +0 -0
  367. package/dist/client/assets/timeline-definition-24CTP7MA-BPbZrudq.js.gz +0 -0
  368. package/dist/client/assets/vennDiagram-4TSXK5OY-CAsKNSfN.js.br +0 -0
  369. package/dist/client/assets/vennDiagram-4TSXK5OY-CAsKNSfN.js.gz +0 -0
  370. package/dist/client/assets/videoCompression-CCOgxfhm.js.br +0 -0
  371. package/dist/client/assets/videoCompression-CCOgxfhm.js.gz +0 -0
  372. package/dist/client/assets/wardleyDiagram-VM6X3IG4-EeabO9yU.js.br +0 -0
  373. package/dist/client/assets/wardleyDiagram-VM6X3IG4-EeabO9yU.js.gz +0 -0
  374. package/dist/client/assets/xychartDiagram-S5SC5T6Z-MSUoQl2z.js.br +0 -0
  375. package/dist/client/assets/xychartDiagram-S5SC5T6Z-MSUoQl2z.js.gz +0 -0
@@ -0,0 +1,66 @@
1
+ const START = '\x1b[200~';
2
+ const END = '\x1b[201~';
3
+ const MAX_BYTES = 1024 * 1024;
4
+ const TIMEOUT_MS = 10_000;
5
+ const INCOMPLETE = '粘贴内容未完整送达,已取消,请重新粘贴。';
6
+ /** A socket owns its pending paste. Never expose its opening delimiter to the
7
+ * PTY until the closing delimiter has arrived, even across input records.
8
+ * Ordinary keyboard/mouse records remain synchronous and unbuffered. */
9
+ export class TerminalPasteBuffer {
10
+ onTimeout;
11
+ pending = '';
12
+ startedAt = 0;
13
+ timer;
14
+ constructor(onTimeout) {
15
+ this.onTimeout = onTimeout;
16
+ }
17
+ push(data) {
18
+ const previousStart = this.startedAt;
19
+ const continuing = this.pending.length > 0;
20
+ const input = this.pending + data;
21
+ const output = [];
22
+ this.clear();
23
+ let offset = 0;
24
+ while (offset < input.length) {
25
+ const start = input.indexOf(START, offset);
26
+ if (start < 0) {
27
+ output.push(input.slice(offset));
28
+ break;
29
+ }
30
+ if (start > offset)
31
+ output.push(input.slice(offset, start));
32
+ const end = input.indexOf(END, start + START.length);
33
+ const nested = input.indexOf(START, start + START.length);
34
+ if (nested >= 0 && (end < 0 || nested < end))
35
+ throw new Error(INCOMPLETE);
36
+ const paste = input.slice(start, end < 0 ? undefined : end + END.length);
37
+ if (Buffer.byteLength(paste) > MAX_BYTES)
38
+ throw new Error('粘贴内容超过 1 MiB,请分段粘贴。');
39
+ if (end < 0) {
40
+ this.pending = paste;
41
+ this.startedAt = continuing && start === 0 ? previousStart : Date.now();
42
+ this.timer = setTimeout(() => { this.clear(); this.onTimeout(INCOMPLETE); }, Math.max(0, this.startedAt + TIMEOUT_MS - Date.now()));
43
+ this.timer.unref();
44
+ break;
45
+ }
46
+ output.push(paste);
47
+ offset = end + END.length;
48
+ }
49
+ return output;
50
+ }
51
+ /** HTTP input has no continuation stream. Reject its entire body on failure. */
52
+ complete(data) {
53
+ const output = this.push(data);
54
+ if (this.pending) {
55
+ this.clear();
56
+ throw new Error(INCOMPLETE);
57
+ }
58
+ return output;
59
+ }
60
+ clear() {
61
+ clearTimeout(this.timer);
62
+ this.timer = undefined;
63
+ this.pending = '';
64
+ this.startedAt = 0;
65
+ }
66
+ }
@@ -15,6 +15,10 @@ export async function supportsTmuxClientFeatures(binary) {
15
15
  }
16
16
  export function buildTmuxAttachArgs(sessionName, supportsFeatures) {
17
17
  return [
18
+ // The Web/native terminal consumes UTF-8 regardless of the server launcher's
19
+ // locale. GUI-launched services may inherit C; tmux otherwise emits _ for
20
+ // non-ASCII cells before the encrypted output ever reaches the renderer.
21
+ '-u',
18
22
  ...(supportsFeatures ? ['-T', 'RGB,sync'] : []),
19
23
  'attach-session', '-t', sessionName,
20
24
  ];
@@ -0,0 +1,94 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ export const TMUX_COPY_MAX_BYTES = 256 * 1024;
3
+ const FORMAT = '#{session_id}\t#{pane_id}\t#{pane_in_mode}\t#{selection_present}';
4
+ function state(value) {
5
+ const parts = value.replace(/\r?\n$/, '').split('\t');
6
+ if (parts.length !== 4 || !/^\$\d+$/.test(parts[0]) || !/^%\d+$/.test(parts[1]) || !/^[01]$/.test(parts[2]) || !/^[01]?$/.test(parts[3]))
7
+ throw new Error('Tmux selection state was not confirmed');
8
+ return { session: parts[0], pane: parts[1], inMode: parts[2] === '1', selected: parts[3] === '1' };
9
+ }
10
+ /** Read this session's current selection through a unique, self-owned buffer.
11
+ * No global last-buffer read, shell copy command, clipboard write or mode exit. */
12
+ export async function copyTmuxSelection(target, run) {
13
+ if (!target.trim() || /[\0\r\n]/.test(target))
14
+ throw new Error('Invalid tmux selection target');
15
+ const exact = `=${target}:`;
16
+ const read = () => run(['display-message', '-t', exact, '-p', FORMAT], { maxBuffer: 1024 }).then(state);
17
+ const before = await read();
18
+ const empty = () => ({ status: 'empty', paneId: before.pane, text: '', bytes: 0 });
19
+ if (!before.inMode || !before.selected)
20
+ return empty();
21
+ const prefix = `termdock-copy-${randomUUID()}-`;
22
+ const own = new RegExp(`^${prefix}[0-9]+$`);
23
+ const buffers = [];
24
+ let failed = false;
25
+ let primaryError;
26
+ const listArgs = ['list-buffers', '-f', `#{m:${prefix}*,#{buffer_name}}`, '-F', '#{buffer_name}\t#{buffer_size}'];
27
+ try {
28
+ await run(['send-keys', '-t', before.pane, '-X', 'copy-selection-no-clear', prefix], { maxBuffer: 1024 });
29
+ const metadata = await run(listArgs, { maxBuffer: 64 * 1024 });
30
+ for (const line of metadata.split('\n').filter(Boolean)) {
31
+ const [name, count] = line.split('\t');
32
+ if (!own.test(name))
33
+ throw new Error('Tmux returned an unowned selection buffer');
34
+ buffers.push({ name, bytes: Number(count) });
35
+ if (!/^\d+$/.test(count) || !Number.isSafeInteger(Number(count)))
36
+ throw new Error('Invalid owned tmux buffer metadata');
37
+ }
38
+ if (!buffers.length)
39
+ return empty();
40
+ if (buffers.length !== 1)
41
+ throw new Error('Tmux produced ambiguous selection buffers');
42
+ const buffer = buffers[0];
43
+ if (buffer.bytes > TMUX_COPY_MAX_BYTES)
44
+ throw new Error('Tmux selection exceeds the 256 KiB copy limit');
45
+ const text = await run(['save-buffer', '-b', buffer.name, '-'], { maxBuffer: TMUX_COPY_MAX_BYTES + 1 });
46
+ const after = await read();
47
+ if (after.session !== before.session || after.pane !== before.pane || !after.inMode || !after.selected)
48
+ throw new Error('Tmux selection target changed while copying');
49
+ const bytes = Buffer.byteLength(text, 'utf8');
50
+ if (bytes !== buffer.bytes || bytes > TMUX_COPY_MAX_BYTES)
51
+ throw new Error('Tmux selection was not read completely');
52
+ return bytes ? { status: 'copied', paneId: before.pane, text, bytes } : empty();
53
+ }
54
+ catch (error) {
55
+ failed = true;
56
+ primaryError = error;
57
+ throw error;
58
+ }
59
+ finally {
60
+ // A command may create its buffer before its reply fails. Enumerate only
61
+ // this UUID prefix even after metadata failure and attempt every own delete.
62
+ const names = new Set(buffers.map(buffer => buffer.name));
63
+ const cleanupErrors = [];
64
+ try {
65
+ const remaining = await run(listArgs, { maxBuffer: 64 * 1024 });
66
+ for (const line of remaining.split('\n').filter(Boolean)) {
67
+ const name = line.split('\t')[0];
68
+ if (!own.test(name)) {
69
+ cleanupErrors.push(new Error('Tmux cleanup returned an unowned buffer'));
70
+ continue;
71
+ }
72
+ names.add(name);
73
+ }
74
+ }
75
+ catch (error) {
76
+ cleanupErrors.push(error);
77
+ }
78
+ for (const name of names) {
79
+ try {
80
+ await run(['delete-buffer', '-b', name], { maxBuffer: 1024 });
81
+ }
82
+ catch (error) {
83
+ cleanupErrors.push(error);
84
+ }
85
+ }
86
+ if (cleanupErrors.length) {
87
+ const error = new AggregateError(cleanupErrors, 'Owned tmux copy buffer cleanup failed');
88
+ if (!failed)
89
+ throw error;
90
+ if (primaryError instanceof Error)
91
+ primaryError.cause = error;
92
+ }
93
+ }
94
+ }
@@ -0,0 +1,15 @@
1
+ /** A has-session failure is not evidence that tmux itself is unavailable.
2
+ * Confirm this one empty-server case without changing generic error handling. */
3
+ export async function isConfirmedEmptyTmuxServer(error, target, run) {
4
+ if (!target.trim() || !error || typeof error !== 'object')
5
+ return false;
6
+ const value = error;
7
+ if (value.code !== 1 || typeof value.stderr !== 'string' || value.stderr.trim() !== 'no current target')
8
+ return false;
9
+ try {
10
+ return (await run(['list-sessions', '-F', '#{session_id}'])).trim() === '';
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ }
@@ -1242,3 +1242,88 @@ message/thread/幂等键或历史,不自动补 Enter、不用屏幕文字识
1242
1242
  投递、不同/缺失/弱原生证据、多匹配/归属/未知旧写入拒绝、绑定持久化和失败、
1243
1243
  只读路由权限/CLI、网页暂停提示及加密传输边界。Mac 实际现场的当前原生身份尚未独立确认,原消息尚待拥有者确认及接入方实际服务
1244
1244
  升级/回读后继续投递;不以维护机回归冒充该现场已恢复。
1245
+
1246
+
1247
+ ## 1.4.322:启动代次一致性与输入检查诊断
1248
+
1249
+ 最低实际服务 **1.4.322**,配套 CLI 也升级至 1.4.322。`capabilities` 回读:
1250
+ `agent_launch_generation_consistency=true`、
1251
+ `agent_launch_generation_consistency_min_version=1.4.322`、
1252
+ `terminal_input_check_diagnostics=true`。普通协作协议仍为 2,integration protocol 仍为 1;
1253
+ 不新增权限。只更新 CLI 不会改变正在运行的旧服务。
1254
+
1255
+ 启动代次是 TD 服务生成的 `agentLaunchGeneration`,与原生 Agent UUID、
1256
+ IntegrationSession 的数值 `generation` 分别记录。同一 backend 在启动准备时从 null
1257
+ 变为新的启动 UUID 是正常动作。名称、cwd、原生身份元数据等整记录更新过去可能
1258
+ 携带 await 之前的旧启动字段写回;本版将启动字段交由专门的比较后更新路径管理,
1259
+ 普通元数据更新继承当前启动代次与一次性检查,不能覆盖或复活旧值。
1260
+
1261
+ 启动操作在写入本次代次后、持久化之前捕获自己的输入检查令牌,并在持久化返回、
1262
+ 承载解析、获取输入队列及粘贴/提交前持续使用它。冷启动、精确恢复、显式 cold retry
1263
+ 和普通启动共用这条保护;不会为了继续输入而采纳后来出现的启动代次。启动状态
1264
+ 落盘失败时不输入。真实 backend 对象/ID、绑定版本、tmux pane 或启动代次变化仍拒绝,
1265
+ 保留 `TERMINAL_INPUT_TARGET_CHANGED` / `TMUX_PANE_CHANGED` 等错误。
1266
+
1267
+ 管理员沿现有入口读取已保存的诊断:
1268
+
1269
+ ```sh
1270
+ td integration diagnostics <TD-session-id>
1271
+ ```
1272
+
1273
+ `launch_diagnostics.steps` 追加可选阶段 `guard_captured / runtime_resolving / runtime_resolved`;
1274
+ 既有 `queue_wait / queue_acquired / paste_* / submit_*` 保留。拒绝时
1275
+ `target_change` 可含 `check_phase / guard_captured_at / checked_at`,以及
1276
+ `expected_launch_id / current_launch_id`、backend ID/实例比较、绑定版本比较。
1277
+ `check_phase` 包含 `launch_state_commit / guard_capture / launch_persisted / runtime_resolve /
1278
+ runtime_resolved / queue_acquired / before_paste / before_submit`。时间是 TD 检查时间,
1279
+ 不是内核首字节写入时间;不包含正文、argv、环境或凭据。旧记录不补造缺失的证据。
1280
+
1281
+ 这次修复不增加自动重试:原 create 同键只回读原操作。失败现场保留,先用
1282
+ `session get` 核对当前事实;明确授权后才按现有 `session retry-cold` 契约显式操作,
1283
+ 必须满足无原生 UUID、无 TD 消息历史或待投递、精确原 shell、配置指纹与代次等条件。
1284
+ 已有原生 UUID 的会话继续精确 restore,不能以 cold retry 替代。消息正文不因升级重发。
1285
+
1286
+ 升级由现场唯一维护者协调:保留现有 HTTPS/鉴权参数,仅替换并重启 TD 服务;
1287
+ 核对在跑 tmux/Agent 完整身份没有变化,再回读实际服务版本和以上能力。
1288
+ 本版不要求重启、重建或重试业务 Agent,不更改 launch profile、sandbox 或业务调度。
1289
+ 终端动作仍是粘贴一次、50ms 后发送一次回车;TD 仍不保证应用提交、消费或执行完成。
1290
+
1291
+ 确定性交错回归覆盖延迟改名/元数据回写、清除检查、持久化等待、输入队列等待、
1292
+ 真实第二次启动、backend 替换及重新绑定;发生真实换代时,旧输入及旧的延迟回车
1293
+ 仍被拒绝。测试证明 TD 一致性与终端写入边界,不代替私有 Agent 的实机消费验收。
1294
+
1295
+ ## 1.4.323:归档与恢复本机协作组显示
1296
+
1297
+ 最低 **CLI / 实际服务均为 1.4.323**,回读
1298
+ `admin_local_group_archive=true`、`admin_local_group_archive_min_version=1.4.323`。
1299
+ 本机管理员可归档/恢复精确本机组;CLI 与服务均检查能力,旧服务返回
1300
+ `ADMIN_LOCAL_GROUP_ARCHIVE_UNSUPPORTED`。
1301
+
1302
+ ```sh
1303
+ td integration group get <精确group-id>
1304
+ td integration group archive <精确group-id> \
1305
+ --expected-updated-at <当前updatedAt> --idempotency-key case-archive:v1
1306
+ td integration groups # 默认不列出归档组
1307
+ td integration groups --include-archived # 显式查看
1308
+ td integration group unarchive <精确group-id> \
1309
+ --expected-updated-at <当前updatedAt> --idempotency-key case-restore:v1
1310
+ ```
1311
+
1312
+ `group get` 对归档组仍可用,并在归档时返回 `archivedAt`。归档/恢复仅修改
1313
+ `archivedAt` 与组的 `updatedAt`,不改 `id`、名称、成员/角色、principal 固定组、
1314
+ TD/native session、运行承载、消息/reply、consumer 游标或历史;不关闭、释放、恢复
1315
+ 会话,不停止业务调度,也不重放消息。Web 侧栏默认隐藏归档组,在“已归档协作组”
1316
+ 中可查看并恢复显示;恢复组显示不会重启已关闭的 session。
1317
+
1318
+ 管理路由为 `POST /admin/groups/:id/archive` 与 `POST /admin/groups/:id/unarchive`,
1319
+ 请求仅接受 `{expected_updated_at,idempotency_key}`。`GET /admin/groups` 默认隐藏归档
1320
+ 组,传 `?include_archived=true` 显示归档组。归档/恢复 key 在同一操作范围内唯一,
1321
+ 参数改变返回 `IDEMPOTENCY_CONFLICT`。成功回执分开返回当前 `group`、本次提交的
1322
+ `applied` 和 `replayed`;旧回执重放不会覆盖后来版本。并发版本过期返回
1323
+ `GROUP_CHANGED` 与 `currentUpdatedAt`,应先重新 get,再由调用者决定是否用新 key
1324
+ 重试。同状态操作保留原 `archivedAt` 并记录幂等回执,不推进组版本。
1325
+
1326
+ 归档 journal 与组状态原子持久化,保留上限为 2000 条。状态/journal 不完整时返回
1327
+ `GROUP_ARCHIVE_STATE_UNCONFIRMED`,不会猜测或重建。只允许本机非 federated、未删除
1328
+ 组;删除组、跨服务组和不确定的目标分别返回 `GROUP_NOT_FOUND`、`GROUP_NOT_LOCAL`、
1329
+ `GROUP_ARCHIVE_TARGET_UNAVAILABLE`。归档不延长消息历史保留期。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termdock",
3
- "version": "1.4.321",
3
+ "version": "1.4.324",
4
4
  "description": "A complete web-based terminal application with modern UI",
5
5
  "type": "module",
6
6
  "main": ".desktop-dist/main.js",
@@ -43,7 +43,10 @@
43
43
  "test": "vitest --passWithNoTests",
44
44
  "test:ui": "vitest --ui",
45
45
  "prepublishOnly": "npm run build",
46
- "postinstall": "node scripts/postinstall.mjs"
46
+ "postinstall": "node scripts/postinstall.mjs",
47
+ "preview:desktop:dev": "npm --prefix desktop-rust run dev",
48
+ "preview:desktop:build": "npm --prefix desktop-rust run build",
49
+ "preview:desktop:test": "npm --prefix desktop-rust run verify"
47
50
  },
48
51
  "dependencies": {
49
52
  "@chainsafe/libp2p-noise": "17.0.0",
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "packageName": "termdock",
4
- "version": "1.4.321",
4
+ "version": "1.4.324",
5
5
  "runtimeProtocolVersion": 1,
6
6
  "minimumDesktopVersion": "1.4.46",
7
7
  "nodeMajor": 22,
8
8
  "dependencyHash": "sha256-oaGYi/P5ob8sd6VnNBOwshKozjhdV+hYiCmLAsn5x00=",
9
- "serverBundleHash": "sha256-o36V1OU5HWHaYRXX3y2vcIKrppx0O4wtdbCRN90DifI=",
10
- "clientBundleHash": "sha256-rMB/XxqqSbnbT1KeX2KqTnR82mLyuW/NFSb1X7Y6BRE=",
9
+ "serverBundleHash": "sha256-yjPt7bAXNp3KrOLjsqzi7sVLnPj/UD3Qz7jSJwgX9gU=",
10
+ "clientBundleHash": "sha256-AoWtEiTNIyzQQDP3vrVfbjymEXr6cyRy/8C++LTIBtc=",
11
11
  "entrypoint": "dist/server/cli.js",
12
12
  "clientEntrypoint": "dist/client/index.html"
13
13
  }