termdock 1.4.317 → 1.4.319

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 (347) hide show
  1. package/dist/client/assets/App-9yy2aYiT.js +186 -0
  2. package/dist/client/assets/App-9yy2aYiT.js.br +0 -0
  3. package/dist/client/assets/App-9yy2aYiT.js.gz +0 -0
  4. package/dist/client/assets/{ArchitecturePanel-CdgUQsVD.js → ArchitecturePanel-CHMjbrPM.js} +2 -2
  5. package/dist/client/assets/ArchitecturePanel-CHMjbrPM.js.br +0 -0
  6. package/dist/client/assets/ArchitecturePanel-CHMjbrPM.js.gz +0 -0
  7. package/dist/client/assets/{ChangeWalkthroughPanel-DHp5r1k9.js → ChangeWalkthroughPanel-B0JYVVwB.js} +1 -1
  8. package/dist/client/assets/ChangeWalkthroughPanel-B0JYVVwB.js.br +0 -0
  9. package/dist/client/assets/ChangeWalkthroughPanel-B0JYVVwB.js.gz +0 -0
  10. package/dist/client/assets/{CollaborationMainWorkspace-P_jXjsT-.js → CollaborationMainWorkspace-BJzMdyZc.js} +1 -1
  11. package/dist/client/assets/CollaborationMainWorkspace-BJzMdyZc.js.br +0 -0
  12. package/dist/client/assets/CollaborationMainWorkspace-BJzMdyZc.js.gz +0 -0
  13. package/dist/client/assets/CollaborationTaskContent-BwHxwcOP.js +2 -0
  14. package/dist/client/assets/{ComputerControlView-B5Yng8Dt.js → ComputerControlView-CdMNRZsH.js} +2 -2
  15. package/dist/client/assets/ComputerControlView-CdMNRZsH.js.br +0 -0
  16. package/dist/client/assets/ComputerControlView-CdMNRZsH.js.gz +0 -0
  17. package/dist/client/assets/{DagPlayground-rZE40fcL.js → DagPlayground-C1xEyYVK.js} +1 -1
  18. package/dist/client/assets/DagPlayground-C1xEyYVK.js.br +0 -0
  19. package/dist/client/assets/DagPlayground-C1xEyYVK.js.gz +0 -0
  20. package/dist/client/assets/{DiffLab-3sIn0W3p.js → DiffLab-DcCKWB7G.js} +1 -1
  21. package/dist/client/assets/DiffLab-DcCKWB7G.js.br +0 -0
  22. package/dist/client/assets/DiffLab-DcCKWB7G.js.gz +0 -0
  23. package/dist/client/assets/{DiffReview-CBf8-Tli.js → DiffReview-C1TyvrA9.js} +1 -1
  24. package/dist/client/assets/DiffReview-C1TyvrA9.js.br +0 -0
  25. package/dist/client/assets/DiffReview-C1TyvrA9.js.gz +0 -0
  26. package/dist/client/assets/{DiffReviewLab-BXhskTlx.js → DiffReviewLab-D784yT2y.js} +1 -1
  27. package/dist/client/assets/DiffReviewLab-D784yT2y.js.br +0 -0
  28. package/dist/client/assets/DiffReviewLab-D784yT2y.js.gz +0 -0
  29. package/dist/client/assets/{DiffViewer-DZfgjOBh.js → DiffViewer-ByAlz2NG.js} +1 -1
  30. package/dist/client/assets/DiffViewer-ByAlz2NG.js.br +0 -0
  31. package/dist/client/assets/DiffViewer-ByAlz2NG.js.gz +0 -0
  32. package/dist/client/assets/{ModelPreview-Bzdi_sPh.js → ModelPreview-DxMcmJZy.js} +1 -1
  33. package/dist/client/assets/ModelPreview-DxMcmJZy.js.br +0 -0
  34. package/dist/client/assets/ModelPreview-DxMcmJZy.js.gz +0 -0
  35. package/dist/client/assets/{RightSidebar-DaRdlJzn.js → RightSidebar-CXykcIPb.js} +3 -3
  36. package/dist/client/assets/RightSidebar-CXykcIPb.js.br +0 -0
  37. package/dist/client/assets/RightSidebar-CXykcIPb.js.gz +0 -0
  38. package/dist/client/assets/{abnfDiagram-VCTEODGH-CarKrfAf.js → abnfDiagram-VCTEODGH-DZZIayJV.js} +1 -1
  39. package/dist/client/assets/abnfDiagram-VCTEODGH-DZZIayJV.js.br +0 -0
  40. package/dist/client/assets/abnfDiagram-VCTEODGH-DZZIayJV.js.gz +0 -0
  41. package/dist/client/assets/{app-BCTEfclM.js → app-CI3Oh-41.js} +3 -3
  42. package/dist/client/assets/app-CI3Oh-41.js.br +0 -0
  43. package/dist/client/assets/app-CI3Oh-41.js.gz +0 -0
  44. package/dist/client/assets/{arc-B6Qdq2Vw.js → arc-CjpEX_Ug.js} +1 -1
  45. package/dist/client/assets/arc-CjpEX_Ug.js.br +0 -0
  46. package/dist/client/assets/arc-CjpEX_Ug.js.gz +0 -0
  47. package/dist/client/assets/{architectureDiagram-5GKGNRK7-DgPJ0l9i.js → architectureDiagram-5GKGNRK7-DUx2_xyE.js} +1 -1
  48. package/dist/client/assets/architectureDiagram-5GKGNRK7-DUx2_xyE.js.br +0 -0
  49. package/dist/client/assets/architectureDiagram-5GKGNRK7-DUx2_xyE.js.gz +0 -0
  50. package/dist/client/assets/{blockDiagram-I7D4REHJ-BsorvNo4.js → blockDiagram-I7D4REHJ-DP-lXaM3.js} +1 -1
  51. package/dist/client/assets/blockDiagram-I7D4REHJ-DP-lXaM3.js.br +0 -0
  52. package/dist/client/assets/blockDiagram-I7D4REHJ-DP-lXaM3.js.gz +0 -0
  53. package/dist/client/assets/{c4Diagram-7LVT6UL2-Bbpi62ab.js → c4Diagram-7LVT6UL2-DomY5VR-.js} +1 -1
  54. package/dist/client/assets/c4Diagram-7LVT6UL2-DomY5VR-.js.br +0 -0
  55. package/dist/client/assets/c4Diagram-7LVT6UL2-DomY5VR-.js.gz +0 -0
  56. package/dist/client/assets/channel-DIO7oiN5.js +1 -0
  57. package/dist/client/assets/{chunk-2Q5K7J3B-Cm7mDz66.js → chunk-2Q5K7J3B-BPtKxDa8.js} +1 -1
  58. package/dist/client/assets/{chunk-5VM5RSS4-BMERXU_m.js → chunk-5VM5RSS4-CRCqW368.js} +1 -1
  59. package/dist/client/assets/{chunk-F27PBJKO-fe9Yw7OI.js → chunk-F27PBJKO-Bs1ITIOZ.js} +1 -1
  60. package/dist/client/assets/chunk-F27PBJKO-Bs1ITIOZ.js.br +0 -0
  61. package/dist/client/assets/chunk-F27PBJKO-Bs1ITIOZ.js.gz +0 -0
  62. package/dist/client/assets/{chunk-IMKFNOWR-QquKV9k-.js → chunk-IMKFNOWR-Cw7kOnvo.js} +1 -1
  63. package/dist/client/assets/chunk-IMKFNOWR-Cw7kOnvo.js.br +0 -0
  64. package/dist/client/assets/chunk-IMKFNOWR-Cw7kOnvo.js.gz +0 -0
  65. package/dist/client/assets/{chunk-JWPE2WC7-CVe8_YO4.js → chunk-JWPE2WC7-DBNaGHE2.js} +1 -1
  66. package/dist/client/assets/{chunk-POPQ4Y6H-DT8PalJ4.js → chunk-POPQ4Y6H-B_OEr0FR.js} +1 -1
  67. package/dist/client/assets/{chunk-SVP7TREG-BUQulipE.js → chunk-SVP7TREG-Ct25uRBl.js} +1 -1
  68. package/dist/client/assets/chunk-SVP7TREG-Ct25uRBl.js.br +0 -0
  69. package/dist/client/assets/chunk-SVP7TREG-Ct25uRBl.js.gz +0 -0
  70. package/dist/client/assets/{chunk-TICWLB2K-fubKwUCg.js → chunk-TICWLB2K-BVxQwSUB.js} +1 -1
  71. package/dist/client/assets/chunk-TICWLB2K-BVxQwSUB.js.br +0 -0
  72. package/dist/client/assets/chunk-TICWLB2K-BVxQwSUB.js.gz +0 -0
  73. package/dist/client/assets/{chunk-XXDRQBXY-CdwTi82y.js → chunk-XXDRQBXY-B6PLILau.js} +1 -1
  74. package/dist/client/assets/classDiagram-ZZMXUADV-DukHh254.js +1 -0
  75. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DukHh254.js +1 -0
  76. package/dist/client/assets/{cose-bilkent-JH36ORCC-DmEDc2ee.js → cose-bilkent-JH36ORCC-Df23Xlgg.js} +1 -1
  77. package/dist/client/assets/cose-bilkent-JH36ORCC-Df23Xlgg.js.br +0 -0
  78. package/dist/client/assets/cose-bilkent-JH36ORCC-Df23Xlgg.js.gz +0 -0
  79. package/dist/client/assets/{cynefin-OW5HDTMX-C-mfarRX.js → cynefin-OW5HDTMX-Dxy4auKS.js} +1 -1
  80. package/dist/client/assets/cynefin-OW5HDTMX-Dxy4auKS.js.br +0 -0
  81. package/dist/client/assets/cynefin-OW5HDTMX-Dxy4auKS.js.gz +0 -0
  82. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-CgVmp8od.js → cynefinDiagram-5FMLGOSQ-CRypsJyP.js} +1 -1
  83. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CRypsJyP.js.br +0 -0
  84. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CRypsJyP.js.gz +0 -0
  85. package/dist/client/assets/{dagre-GXQ25YYZ-WU_d2fSU.js → dagre-GXQ25YYZ-B2XmJ6IF.js} +1 -1
  86. package/dist/client/assets/dagre-GXQ25YYZ-B2XmJ6IF.js.br +0 -0
  87. package/dist/client/assets/dagre-GXQ25YYZ-B2XmJ6IF.js.gz +0 -0
  88. package/dist/client/assets/{diagram-S7CK7UJ4-Dtikk80Z.js → diagram-S7CK7UJ4-BQcwNDWz.js} +1 -1
  89. package/dist/client/assets/diagram-S7CK7UJ4-BQcwNDWz.js.br +0 -0
  90. package/dist/client/assets/diagram-S7CK7UJ4-BQcwNDWz.js.gz +0 -0
  91. package/dist/client/assets/{diagram-UQ7AKVKN-DuTCB36P.js → diagram-UQ7AKVKN-B6LD6n6P.js} +1 -1
  92. package/dist/client/assets/diagram-UQ7AKVKN-B6LD6n6P.js.br +0 -0
  93. package/dist/client/assets/diagram-UQ7AKVKN-B6LD6n6P.js.gz +0 -0
  94. package/dist/client/assets/{diagram-VSXAHHWV-DSLAcWi6.js → diagram-VSXAHHWV-DDI4SMid.js} +1 -1
  95. package/dist/client/assets/diagram-VSXAHHWV-DDI4SMid.js.br +0 -0
  96. package/dist/client/assets/diagram-VSXAHHWV-DDI4SMid.js.gz +0 -0
  97. package/dist/client/assets/{diagram-VX7I27RA-DyQOu10m.js → diagram-VX7I27RA-CRq35BVZ.js} +1 -1
  98. package/dist/client/assets/diagram-VX7I27RA-CRq35BVZ.js.br +0 -0
  99. package/dist/client/assets/diagram-VX7I27RA-CRq35BVZ.js.gz +0 -0
  100. package/dist/client/assets/{diagram-Z3DM3KII-CuMI1k1t.js → diagram-Z3DM3KII-Br2tE-aw.js} +1 -1
  101. package/dist/client/assets/diagram-Z3DM3KII-Br2tE-aw.js.br +0 -0
  102. package/dist/client/assets/diagram-Z3DM3KII-Br2tE-aw.js.gz +0 -0
  103. package/dist/client/assets/{ebnfDiagram-PWID7BFC-Di8RxhNL.js → ebnfDiagram-PWID7BFC-CLERVjPA.js} +1 -1
  104. package/dist/client/assets/ebnfDiagram-PWID7BFC-CLERVjPA.js.br +0 -0
  105. package/dist/client/assets/ebnfDiagram-PWID7BFC-CLERVjPA.js.gz +0 -0
  106. package/dist/client/assets/{erDiagram-RLTQ6QDP-C1wPuBtH.js → erDiagram-RLTQ6QDP-CdjRSsSD.js} +1 -1
  107. package/dist/client/assets/erDiagram-RLTQ6QDP-CdjRSsSD.js.br +0 -0
  108. package/dist/client/assets/erDiagram-RLTQ6QDP-CdjRSsSD.js.gz +0 -0
  109. package/dist/client/assets/{flowDiagram-HODETNUW-D0SIEpUy.js → flowDiagram-HODETNUW-CJcQ479Z.js} +1 -1
  110. package/dist/client/assets/flowDiagram-HODETNUW-CJcQ479Z.js.br +0 -0
  111. package/dist/client/assets/flowDiagram-HODETNUW-CJcQ479Z.js.gz +0 -0
  112. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-DgeD2fKd.js → ganttDiagram-EL5Y4UJY-CdDCSJ3h.js} +1 -1
  113. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CdDCSJ3h.js.br +0 -0
  114. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CdDCSJ3h.js.gz +0 -0
  115. package/dist/client/assets/{gestureArbiter-Xl7awIrX.js → gestureArbiter-D6uN_O0i.js} +1 -1
  116. package/dist/client/assets/gestureArbiter-D6uN_O0i.js.br +0 -0
  117. package/dist/client/assets/gestureArbiter-D6uN_O0i.js.gz +0 -0
  118. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-CzFKSKK_.js → gitGraphDiagram-WWUBYQGX-tcLWvosg.js} +1 -1
  119. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-tcLWvosg.js.br +0 -0
  120. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-tcLWvosg.js.gz +0 -0
  121. package/dist/client/assets/index-_7yzQpVq.css +1 -0
  122. package/dist/client/assets/index-_7yzQpVq.css.br +0 -0
  123. package/dist/client/assets/{index-BObjbh2R.css.gz → index-_7yzQpVq.css.gz} +0 -0
  124. package/dist/client/assets/{infoDiagram-27XIBGKW-C9mmJGhv.js → infoDiagram-27XIBGKW-D7ze39D4.js} +1 -1
  125. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-D9uVb4Og.js → ishikawaDiagram-5VMMS53U-BmvDG55X.js} +1 -1
  126. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BmvDG55X.js.br +0 -0
  127. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BmvDG55X.js.gz +0 -0
  128. package/dist/client/assets/{journeyDiagram-3NMN7TZE-BMKNUyUx.js → journeyDiagram-3NMN7TZE-Ba2oQRdr.js} +1 -1
  129. package/dist/client/assets/journeyDiagram-3NMN7TZE-Ba2oQRdr.js.br +0 -0
  130. package/dist/client/assets/journeyDiagram-3NMN7TZE-Ba2oQRdr.js.gz +0 -0
  131. package/dist/client/assets/{kanban-definition-UXKFOSKX-8i7nyqix.js → kanban-definition-UXKFOSKX-BGrEtfSU.js} +1 -1
  132. package/dist/client/assets/{kanban-definition-UXKFOSKX-8i7nyqix.js.br → kanban-definition-UXKFOSKX-BGrEtfSU.js.br} +0 -0
  133. package/dist/client/assets/kanban-definition-UXKFOSKX-BGrEtfSU.js.gz +0 -0
  134. package/dist/client/assets/{layout-BS5SCHbc.js → layout-Df_WxQ7_.js} +1 -1
  135. package/dist/client/assets/layout-Df_WxQ7_.js.br +0 -0
  136. package/dist/client/assets/layout-Df_WxQ7_.js.gz +0 -0
  137. package/dist/client/assets/{linear-fo2zkK6T.js → linear-yjCZ1UPt.js} +1 -1
  138. package/dist/client/assets/{linear-fo2zkK6T.js.br → linear-yjCZ1UPt.js.br} +0 -0
  139. package/dist/client/assets/linear-yjCZ1UPt.js.gz +0 -0
  140. package/dist/client/assets/{mermaid.core-B8k3pAmc.js → mermaid.core-wqB76PXA.js} +5 -5
  141. package/dist/client/assets/mermaid.core-wqB76PXA.js.br +0 -0
  142. package/dist/client/assets/mermaid.core-wqB76PXA.js.gz +0 -0
  143. package/dist/client/assets/{mindmap-definition-YA3MSWOX-BwgQTj2Q.js → mindmap-definition-YA3MSWOX-BvFfuDI9.js} +1 -1
  144. package/dist/client/assets/mindmap-definition-YA3MSWOX-BvFfuDI9.js.br +0 -0
  145. package/dist/client/assets/mindmap-definition-YA3MSWOX-BvFfuDI9.js.gz +0 -0
  146. package/dist/client/assets/{passwordBootstrap-DvQk0qYt.js → passwordBootstrap-CeMHRTET.js} +1 -1
  147. package/dist/client/assets/passwordBootstrap-CeMHRTET.js.br +0 -0
  148. package/dist/client/assets/passwordBootstrap-CeMHRTET.js.gz +0 -0
  149. package/dist/client/assets/{pegDiagram-XKGWAZYB-CumSoxLr.js → pegDiagram-XKGWAZYB-GFNFRFcn.js} +1 -1
  150. package/dist/client/assets/pegDiagram-XKGWAZYB-GFNFRFcn.js.br +0 -0
  151. package/dist/client/assets/pegDiagram-XKGWAZYB-GFNFRFcn.js.gz +0 -0
  152. package/dist/client/assets/{pieDiagram-E7YTZNPT-Dc3txkBL.js → pieDiagram-E7YTZNPT-i_OnIQ5S.js} +1 -1
  153. package/dist/client/assets/pieDiagram-E7YTZNPT-i_OnIQ5S.js.br +0 -0
  154. package/dist/client/assets/pieDiagram-E7YTZNPT-i_OnIQ5S.js.gz +0 -0
  155. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-D92mwZnT.js → quadrantDiagram-AXDQQJYC-DgclfhW2.js} +1 -1
  156. package/dist/client/assets/quadrantDiagram-AXDQQJYC-DgclfhW2.js.br +0 -0
  157. package/dist/client/assets/quadrantDiagram-AXDQQJYC-DgclfhW2.js.gz +0 -0
  158. package/dist/client/assets/{railroadDiagram-O6MQD6OU-O1UOZ30Y.js → railroadDiagram-O6MQD6OU-Bta7NOF1.js} +1 -1
  159. package/dist/client/assets/railroadDiagram-O6MQD6OU-Bta7NOF1.js.br +0 -0
  160. package/dist/client/assets/railroadDiagram-O6MQD6OU-Bta7NOF1.js.gz +0 -0
  161. package/dist/client/assets/{rdpSession-Dr_tPwzx.js → rdpSession-CVTDBhDb.js} +1 -1
  162. package/dist/client/assets/rdpSession-CVTDBhDb.js.br +0 -0
  163. package/dist/client/assets/rdpSession-CVTDBhDb.js.gz +0 -0
  164. package/dist/client/assets/{referenceLongPress-YuGU-PYw.js → referenceLongPress-C91ZK5h8.js} +1 -1
  165. package/dist/client/assets/referenceLongPress-C91ZK5h8.js.br +0 -0
  166. package/dist/client/assets/referenceLongPress-C91ZK5h8.js.gz +0 -0
  167. package/dist/client/assets/{requirementDiagram-BXWQKSXE-uD1cgrxA.js → requirementDiagram-BXWQKSXE-CjVvykFZ.js} +1 -1
  168. package/dist/client/assets/requirementDiagram-BXWQKSXE-CjVvykFZ.js.br +0 -0
  169. package/dist/client/assets/requirementDiagram-BXWQKSXE-CjVvykFZ.js.gz +0 -0
  170. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CIJE4-pc.js → sankeyDiagram-P5KCCOFB-DkRiE5xj.js} +1 -1
  171. package/dist/client/assets/sankeyDiagram-P5KCCOFB-DkRiE5xj.js.br +0 -0
  172. package/dist/client/assets/sankeyDiagram-P5KCCOFB-DkRiE5xj.js.gz +0 -0
  173. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BT6LG37W.js → sequenceDiagram-WJ2MYXX4-BW-TiTTz.js} +1 -1
  174. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BW-TiTTz.js.br +0 -0
  175. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BW-TiTTz.js.gz +0 -0
  176. package/dist/client/assets/{sizeCapture-INFHLROL-DoYY94Rj.js → sizeCapture-INFHLROL-CknYHWYz.js} +1 -1
  177. package/dist/client/assets/sizeCapture-INFHLROL-CknYHWYz.js.br +0 -0
  178. package/dist/client/assets/sizeCapture-INFHLROL-CknYHWYz.js.gz +0 -0
  179. package/dist/client/assets/{sparkles-DFYGpezN.js → sparkles-BhmNaa1u.js} +1 -1
  180. package/dist/client/assets/{stateDiagram-D77RDMKH-C4xmgR_-.js → stateDiagram-D77RDMKH-do6p3u1y.js} +1 -1
  181. package/dist/client/assets/stateDiagram-D77RDMKH-do6p3u1y.js.br +0 -0
  182. package/dist/client/assets/stateDiagram-D77RDMKH-do6p3u1y.js.gz +0 -0
  183. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CBBKJJkB.js +1 -0
  184. package/dist/client/assets/{swimlanes-42K2YHIH-mRdmZmAA.js → swimlanes-42K2YHIH-BloliwwH.js} +1 -1
  185. package/dist/client/assets/swimlanes-42K2YHIH-BloliwwH.js.br +0 -0
  186. package/dist/client/assets/swimlanes-42K2YHIH-BloliwwH.js.gz +0 -0
  187. package/dist/client/assets/swimlanesDiagram-VR7AAH4N--bexkZyM.js +8 -0
  188. package/dist/client/assets/{timeline-definition-24CTP7MA-BFFrD5kR.js → timeline-definition-24CTP7MA-DelADR0N.js} +1 -1
  189. package/dist/client/assets/timeline-definition-24CTP7MA-DelADR0N.js.br +0 -0
  190. package/dist/client/assets/timeline-definition-24CTP7MA-DelADR0N.js.gz +0 -0
  191. package/dist/client/assets/{triangle-alert-BwJ6Q_Y0.js → triangle-alert-B5d_l343.js} +1 -1
  192. package/dist/client/assets/{vennDiagram-4TSXK5OY-Dy59OxIM.js → vennDiagram-4TSXK5OY-BJhlRAwF.js} +1 -1
  193. package/dist/client/assets/{vennDiagram-4TSXK5OY-Dy59OxIM.js.br → vennDiagram-4TSXK5OY-BJhlRAwF.js.br} +0 -0
  194. package/dist/client/assets/vennDiagram-4TSXK5OY-BJhlRAwF.js.gz +0 -0
  195. package/dist/client/assets/{videoCompression-DrQ47oZA.js → videoCompression-CuDMhYU3.js} +1 -1
  196. package/dist/client/assets/videoCompression-CuDMhYU3.js.br +0 -0
  197. package/dist/client/assets/videoCompression-CuDMhYU3.js.gz +0 -0
  198. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-B-BKlX7o.js → wardleyDiagram-VM6X3IG4-3MDCa0Rt.js} +1 -1
  199. package/dist/client/assets/wardleyDiagram-VM6X3IG4-3MDCa0Rt.js.br +0 -0
  200. package/dist/client/assets/wardleyDiagram-VM6X3IG4-3MDCa0Rt.js.gz +0 -0
  201. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-79qktI_4.js → xychartDiagram-S5SC5T6Z-LWuDetCo.js} +1 -1
  202. package/dist/client/assets/xychartDiagram-S5SC5T6Z-LWuDetCo.js.br +0 -0
  203. package/dist/client/assets/xychartDiagram-S5SC5T6Z-LWuDetCo.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.js +1 -1
  208. package/dist/client/sw.js.br +0 -0
  209. package/dist/client/sw.js.gz +0 -0
  210. package/dist/server/agent/collaborationStore.js +83 -7
  211. package/dist/server/agent/collaborationTeam.js +11 -4
  212. package/dist/server/agent/integrationCli.js +49 -4
  213. package/dist/server/agent/integrationServer.js +14 -2
  214. package/dist/server/routes/terminal.js +12 -6
  215. package/docs/integrations.md +80 -4
  216. package/package.json +1 -1
  217. package/runtime-manifest.json +3 -3
  218. package/dist/client/assets/App-BF_s1-_u.js +0 -186
  219. package/dist/client/assets/App-BF_s1-_u.js.br +0 -0
  220. package/dist/client/assets/App-BF_s1-_u.js.gz +0 -0
  221. package/dist/client/assets/ArchitecturePanel-CdgUQsVD.js.br +0 -0
  222. package/dist/client/assets/ArchitecturePanel-CdgUQsVD.js.gz +0 -0
  223. package/dist/client/assets/ChangeWalkthroughPanel-DHp5r1k9.js.br +0 -0
  224. package/dist/client/assets/ChangeWalkthroughPanel-DHp5r1k9.js.gz +0 -0
  225. package/dist/client/assets/CollaborationMainWorkspace-P_jXjsT-.js.br +0 -0
  226. package/dist/client/assets/CollaborationMainWorkspace-P_jXjsT-.js.gz +0 -0
  227. package/dist/client/assets/CollaborationTaskContent-DSkxOlKQ.js +0 -2
  228. package/dist/client/assets/ComputerControlView-B5Yng8Dt.js.br +0 -0
  229. package/dist/client/assets/ComputerControlView-B5Yng8Dt.js.gz +0 -0
  230. package/dist/client/assets/DagPlayground-rZE40fcL.js.br +0 -0
  231. package/dist/client/assets/DagPlayground-rZE40fcL.js.gz +0 -0
  232. package/dist/client/assets/DiffLab-3sIn0W3p.js.br +0 -0
  233. package/dist/client/assets/DiffLab-3sIn0W3p.js.gz +0 -0
  234. package/dist/client/assets/DiffReview-CBf8-Tli.js.br +0 -0
  235. package/dist/client/assets/DiffReview-CBf8-Tli.js.gz +0 -0
  236. package/dist/client/assets/DiffReviewLab-BXhskTlx.js.br +0 -0
  237. package/dist/client/assets/DiffReviewLab-BXhskTlx.js.gz +0 -0
  238. package/dist/client/assets/DiffViewer-DZfgjOBh.js.br +0 -0
  239. package/dist/client/assets/DiffViewer-DZfgjOBh.js.gz +0 -0
  240. package/dist/client/assets/ModelPreview-Bzdi_sPh.js.br +0 -0
  241. package/dist/client/assets/ModelPreview-Bzdi_sPh.js.gz +0 -0
  242. package/dist/client/assets/RightSidebar-DaRdlJzn.js.br +0 -0
  243. package/dist/client/assets/RightSidebar-DaRdlJzn.js.gz +0 -0
  244. package/dist/client/assets/abnfDiagram-VCTEODGH-CarKrfAf.js.br +0 -0
  245. package/dist/client/assets/abnfDiagram-VCTEODGH-CarKrfAf.js.gz +0 -0
  246. package/dist/client/assets/app-BCTEfclM.js.br +0 -0
  247. package/dist/client/assets/app-BCTEfclM.js.gz +0 -0
  248. package/dist/client/assets/arc-B6Qdq2Vw.js.br +0 -0
  249. package/dist/client/assets/arc-B6Qdq2Vw.js.gz +0 -0
  250. package/dist/client/assets/architectureDiagram-5GKGNRK7-DgPJ0l9i.js.br +0 -0
  251. package/dist/client/assets/architectureDiagram-5GKGNRK7-DgPJ0l9i.js.gz +0 -0
  252. package/dist/client/assets/blockDiagram-I7D4REHJ-BsorvNo4.js.br +0 -0
  253. package/dist/client/assets/blockDiagram-I7D4REHJ-BsorvNo4.js.gz +0 -0
  254. package/dist/client/assets/c4Diagram-7LVT6UL2-Bbpi62ab.js.br +0 -0
  255. package/dist/client/assets/c4Diagram-7LVT6UL2-Bbpi62ab.js.gz +0 -0
  256. package/dist/client/assets/channel-uZtI4GD8.js +0 -1
  257. package/dist/client/assets/chunk-F27PBJKO-fe9Yw7OI.js.br +0 -0
  258. package/dist/client/assets/chunk-F27PBJKO-fe9Yw7OI.js.gz +0 -0
  259. package/dist/client/assets/chunk-IMKFNOWR-QquKV9k-.js.br +0 -0
  260. package/dist/client/assets/chunk-IMKFNOWR-QquKV9k-.js.gz +0 -0
  261. package/dist/client/assets/chunk-SVP7TREG-BUQulipE.js.br +0 -0
  262. package/dist/client/assets/chunk-SVP7TREG-BUQulipE.js.gz +0 -0
  263. package/dist/client/assets/chunk-TICWLB2K-fubKwUCg.js.br +0 -0
  264. package/dist/client/assets/chunk-TICWLB2K-fubKwUCg.js.gz +0 -0
  265. package/dist/client/assets/classDiagram-ZZMXUADV-CgJJ1J4J.js +0 -1
  266. package/dist/client/assets/classDiagram-v2-VYDZK3BY-CgJJ1J4J.js +0 -1
  267. package/dist/client/assets/cose-bilkent-JH36ORCC-DmEDc2ee.js.br +0 -0
  268. package/dist/client/assets/cose-bilkent-JH36ORCC-DmEDc2ee.js.gz +0 -0
  269. package/dist/client/assets/cynefin-OW5HDTMX-C-mfarRX.js.br +0 -0
  270. package/dist/client/assets/cynefin-OW5HDTMX-C-mfarRX.js.gz +0 -0
  271. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CgVmp8od.js.br +0 -0
  272. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CgVmp8od.js.gz +0 -0
  273. package/dist/client/assets/dagre-GXQ25YYZ-WU_d2fSU.js.br +0 -0
  274. package/dist/client/assets/dagre-GXQ25YYZ-WU_d2fSU.js.gz +0 -0
  275. package/dist/client/assets/diagram-S7CK7UJ4-Dtikk80Z.js.br +0 -0
  276. package/dist/client/assets/diagram-S7CK7UJ4-Dtikk80Z.js.gz +0 -0
  277. package/dist/client/assets/diagram-UQ7AKVKN-DuTCB36P.js.br +0 -0
  278. package/dist/client/assets/diagram-UQ7AKVKN-DuTCB36P.js.gz +0 -0
  279. package/dist/client/assets/diagram-VSXAHHWV-DSLAcWi6.js.br +0 -0
  280. package/dist/client/assets/diagram-VSXAHHWV-DSLAcWi6.js.gz +0 -0
  281. package/dist/client/assets/diagram-VX7I27RA-DyQOu10m.js.br +0 -0
  282. package/dist/client/assets/diagram-VX7I27RA-DyQOu10m.js.gz +0 -0
  283. package/dist/client/assets/diagram-Z3DM3KII-CuMI1k1t.js.br +0 -0
  284. package/dist/client/assets/diagram-Z3DM3KII-CuMI1k1t.js.gz +0 -0
  285. package/dist/client/assets/ebnfDiagram-PWID7BFC-Di8RxhNL.js.br +0 -0
  286. package/dist/client/assets/ebnfDiagram-PWID7BFC-Di8RxhNL.js.gz +0 -0
  287. package/dist/client/assets/erDiagram-RLTQ6QDP-C1wPuBtH.js.br +0 -0
  288. package/dist/client/assets/erDiagram-RLTQ6QDP-C1wPuBtH.js.gz +0 -0
  289. package/dist/client/assets/flowDiagram-HODETNUW-D0SIEpUy.js.br +0 -0
  290. package/dist/client/assets/flowDiagram-HODETNUW-D0SIEpUy.js.gz +0 -0
  291. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DgeD2fKd.js.br +0 -0
  292. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DgeD2fKd.js.gz +0 -0
  293. package/dist/client/assets/gestureArbiter-Xl7awIrX.js.br +0 -0
  294. package/dist/client/assets/gestureArbiter-Xl7awIrX.js.gz +0 -0
  295. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-CzFKSKK_.js.br +0 -0
  296. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-CzFKSKK_.js.gz +0 -0
  297. package/dist/client/assets/index-BObjbh2R.css +0 -1
  298. package/dist/client/assets/index-BObjbh2R.css.br +0 -0
  299. package/dist/client/assets/ishikawaDiagram-5VMMS53U-D9uVb4Og.js.br +0 -0
  300. package/dist/client/assets/ishikawaDiagram-5VMMS53U-D9uVb4Og.js.gz +0 -0
  301. package/dist/client/assets/journeyDiagram-3NMN7TZE-BMKNUyUx.js.br +0 -0
  302. package/dist/client/assets/journeyDiagram-3NMN7TZE-BMKNUyUx.js.gz +0 -0
  303. package/dist/client/assets/kanban-definition-UXKFOSKX-8i7nyqix.js.gz +0 -0
  304. package/dist/client/assets/layout-BS5SCHbc.js.br +0 -0
  305. package/dist/client/assets/layout-BS5SCHbc.js.gz +0 -0
  306. package/dist/client/assets/linear-fo2zkK6T.js.gz +0 -0
  307. package/dist/client/assets/mermaid.core-B8k3pAmc.js.br +0 -0
  308. package/dist/client/assets/mermaid.core-B8k3pAmc.js.gz +0 -0
  309. package/dist/client/assets/mindmap-definition-YA3MSWOX-BwgQTj2Q.js.br +0 -0
  310. package/dist/client/assets/mindmap-definition-YA3MSWOX-BwgQTj2Q.js.gz +0 -0
  311. package/dist/client/assets/passwordBootstrap-DvQk0qYt.js.br +0 -0
  312. package/dist/client/assets/passwordBootstrap-DvQk0qYt.js.gz +0 -0
  313. package/dist/client/assets/pegDiagram-XKGWAZYB-CumSoxLr.js.br +0 -0
  314. package/dist/client/assets/pegDiagram-XKGWAZYB-CumSoxLr.js.gz +0 -0
  315. package/dist/client/assets/pieDiagram-E7YTZNPT-Dc3txkBL.js.br +0 -0
  316. package/dist/client/assets/pieDiagram-E7YTZNPT-Dc3txkBL.js.gz +0 -0
  317. package/dist/client/assets/quadrantDiagram-AXDQQJYC-D92mwZnT.js.br +0 -0
  318. package/dist/client/assets/quadrantDiagram-AXDQQJYC-D92mwZnT.js.gz +0 -0
  319. package/dist/client/assets/railroadDiagram-O6MQD6OU-O1UOZ30Y.js.br +0 -0
  320. package/dist/client/assets/railroadDiagram-O6MQD6OU-O1UOZ30Y.js.gz +0 -0
  321. package/dist/client/assets/rdpSession-Dr_tPwzx.js.br +0 -0
  322. package/dist/client/assets/rdpSession-Dr_tPwzx.js.gz +0 -0
  323. package/dist/client/assets/referenceLongPress-YuGU-PYw.js.br +0 -0
  324. package/dist/client/assets/referenceLongPress-YuGU-PYw.js.gz +0 -0
  325. package/dist/client/assets/requirementDiagram-BXWQKSXE-uD1cgrxA.js.br +0 -0
  326. package/dist/client/assets/requirementDiagram-BXWQKSXE-uD1cgrxA.js.gz +0 -0
  327. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CIJE4-pc.js.br +0 -0
  328. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CIJE4-pc.js.gz +0 -0
  329. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BT6LG37W.js.br +0 -0
  330. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BT6LG37W.js.gz +0 -0
  331. package/dist/client/assets/sizeCapture-INFHLROL-DoYY94Rj.js.br +0 -0
  332. package/dist/client/assets/sizeCapture-INFHLROL-DoYY94Rj.js.gz +0 -0
  333. package/dist/client/assets/stateDiagram-D77RDMKH-C4xmgR_-.js.br +0 -0
  334. package/dist/client/assets/stateDiagram-D77RDMKH-C4xmgR_-.js.gz +0 -0
  335. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BLHH60cg.js +0 -1
  336. package/dist/client/assets/swimlanes-42K2YHIH-mRdmZmAA.js.br +0 -0
  337. package/dist/client/assets/swimlanes-42K2YHIH-mRdmZmAA.js.gz +0 -0
  338. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-D-lNPW5d.js +0 -8
  339. package/dist/client/assets/timeline-definition-24CTP7MA-BFFrD5kR.js.br +0 -0
  340. package/dist/client/assets/timeline-definition-24CTP7MA-BFFrD5kR.js.gz +0 -0
  341. package/dist/client/assets/vennDiagram-4TSXK5OY-Dy59OxIM.js.gz +0 -0
  342. package/dist/client/assets/videoCompression-DrQ47oZA.js.br +0 -0
  343. package/dist/client/assets/videoCompression-DrQ47oZA.js.gz +0 -0
  344. package/dist/client/assets/wardleyDiagram-VM6X3IG4-B-BKlX7o.js.br +0 -0
  345. package/dist/client/assets/wardleyDiagram-VM6X3IG4-B-BKlX7o.js.gz +0 -0
  346. package/dist/client/assets/xychartDiagram-S5SC5T6Z-79qktI_4.js.br +0 -0
  347. package/dist/client/assets/xychartDiagram-S5SC5T6Z-79qktI_4.js.gz +0 -0
@@ -3,14 +3,21 @@
3
3
  export async function ensureTeam(options) {
4
4
  const ids = [];
5
5
  const labels = [`自动协调者 (${options.agentSlug})`, `自动执行与评审 (${options.agentSlug})`];
6
- for (const role of labels) {
6
+ if (typeof options.coordinatorSessionId === 'string') {
7
+ const coordinator = options.members().find(member => member.id === options.coordinatorSessionId && member.agentSlug);
8
+ if (!coordinator)
9
+ throw new Error('所选协调者已离组或未运行 Agent,请重新选择');
10
+ ids.push(coordinator.id);
11
+ }
12
+ for (const role of labels.slice(ids.length)) {
7
13
  const members = options.members();
8
- const reserved = members.find(member => member.role?.startsWith(role.split(' (')[0]));
14
+ const forceNew = ids.length === 0 && options.coordinatorSessionId === null;
15
+ const reserved = members.find(member => !ids.includes(member.id) && (forceNew && options.coordinatorCreationKey ? member.creationKey === options.coordinatorCreationKey : member.role?.startsWith(role.split(' (')[0])));
9
16
  if (reserved && (reserved.role !== role || reserved.cwd !== options.cwd || (reserved.launchProfileKey ?? '') !== (options.launchProfileKey ?? ''))) {
10
17
  throw new Error('本组已有自动配置的成员,请使用原 Agent、启动方案和目录,或在成员设置中移出后重新配置');
11
18
  }
12
- const existing = reserved ?? members.find(member => !ids.includes(member.id) && member.agentSlug === options.agentSlug && member.cwd === options.cwd && (member.launchProfileKey ?? '') === (options.launchProfileKey ?? ''));
13
- ids.push(existing?.id ?? await options.spawn(role));
19
+ const existing = reserved ?? (!forceNew ? members.find(member => !ids.includes(member.id) && member.agentSlug === options.agentSlug && member.cwd === options.cwd && (member.launchProfileKey ?? '') === (options.launchProfileKey ?? '')) : undefined);
20
+ ids.push(existing?.id ?? await options.spawn(role, forceNew ? options.coordinatorCreationKey : undefined));
14
21
  }
15
22
  return { coordinatorSessionId: ids[0], reviewerSessionIds: [ids[1]] };
16
23
  }
@@ -8,9 +8,27 @@ import { COLLAB_HELP, executeCollaborationCommand, duration } from './collaborat
8
8
  import { getTermdockVersion } from '../utils/version.js';
9
9
  export const INTEGRATION_HELP = `td integration — local scoped integration administration
10
10
  groups | list
11
+ group get <exact-group-id>
12
+ group rename <exact-group-id> --name <name> --expected-updated-at <N> --idempotency-key <key>
13
+ Administrator only; minimum CLI/running service 1.4.319;
14
+ admin_local_group_rename=true covers get/rename and group revision reads.
15
+ get returns {group:{id,name,updatedAt}}; groups also returns updatedAt.
16
+ rename returns {group: current metadata, applied: original committed metadata,
17
+ replayed: boolean}. Only name/updatedAt change; no membership, principal,
18
+ terminal, launch, message, history or creation-snapshot changes.
19
+ Read the revision first. GROUP_CHANGED returns currentUpdatedAt; reread and
20
+ decide again with a new key. Retry uncertain results with the original key
21
+ and all original parameters; a later rename is never overwritten by replay.
22
+ Same normalized name is a recorded no-op. Keys are retained, capped at 2000.
23
+ No terminal source, principal grant, prefix/name lookup or federated group.
24
+ Errors: INVALID_GROUP_RENAME_REQUEST, INVALID_GROUP_ID, INVALID_GROUP,
25
+ INVALID_GROUP_VERSION, INVALID_IDEMPOTENCY_KEY, IDEMPOTENCY_CONFLICT,
26
+ GROUP_CHANGED, GROUP_NOT_FOUND, GROUP_NOT_LOCAL, GROUP_STATE_UNCONFIRMED,
27
+ GROUP_RENAME_TARGET_UNAVAILABLE, GROUP_RENAME_STATE_UNCONFIRMED,
28
+ GROUP_RENAME_LIMIT, ADMIN_LOCAL_GROUP_RENAME_UNSUPPORTED.
11
29
  group create --name <name> --idempotency-key <key>
12
30
  Administrator only; create an empty local group without a terminal source.
13
- Minimum CLI/running service 1.4.317; admin_local_group_create=true.
31
+ Minimum CLI/running service 1.4.318; admin_local_group_create=true.
14
32
  Returns {group: original creation snapshot}; same key/parameters reuse it.
15
33
  Groups may later gain members; the snapshot is not their current membership.
16
34
  No IDs, members, federation, launch profiles or principal credentials accepted.
@@ -89,7 +107,7 @@ function request(socketPath, method, route, body, requestHeaders, timeout = 3000
89
107
  function parsed(response) {
90
108
  const result = JSON.parse(response.body);
91
109
  if (response.statusCode >= 300)
92
- throw new CollaborationError(result.code ?? 'INTEGRATION_REQUEST_FAILED', result.error ?? 'Integration request failed', response.statusCode);
110
+ throw new CollaborationError(result.code ?? 'INTEGRATION_REQUEST_FAILED', result.error ?? 'Integration request failed', response.statusCode, result.code === 'GROUP_CHANGED' && Number.isSafeInteger(result.currentUpdatedAt) ? { currentUpdatedAt: result.currentUpdatedAt } : undefined);
93
111
  return result;
94
112
  }
95
113
  export async function runIntegrationAdmin(argv, port, adminToken, write) {
@@ -101,6 +119,31 @@ export async function runIntegrationAdmin(argv, port, adminToken, write) {
101
119
  return 0;
102
120
  }
103
121
  const socketPath = integrationSocketPath(port);
122
+ if (action === 'group' && ['get', 'rename'].includes(argv[1])) {
123
+ const operation = argv[1], id = argv[2], args = {};
124
+ const usage = 'Usage: td integration group get <exact-id> | group rename <exact-id> --name <name> --expected-updated-at <N> --idempotency-key <key>';
125
+ if (!id || !/^[a-zA-Z0-9._-]{1,80}$/.test(id))
126
+ throw new CollaborationError('INVALID_GROUP_ID', usage, 400);
127
+ if (operation === 'get' && argv.length !== 3)
128
+ throw new CollaborationError('INVALID_GROUP_RENAME_REQUEST', usage, 400);
129
+ if (operation === 'rename') {
130
+ for (let i = 3; i < argv.length; i += 2) {
131
+ if (!['--name', '--expected-updated-at', '--idempotency-key'].includes(argv[i]) || !argv[i + 1] || Object.hasOwn(args, argv[i]))
132
+ throw new CollaborationError('INVALID_GROUP_RENAME_REQUEST', usage, 400);
133
+ args[argv[i]] = argv[i + 1];
134
+ }
135
+ if (Object.keys(args).length !== 3 || !args['--name']?.trim() || !args['--idempotency-key']?.trim())
136
+ throw new CollaborationError('INVALID_GROUP_RENAME_REQUEST', usage, 400);
137
+ if (!/^(0|[1-9][0-9]*)$/.test(args['--expected-updated-at']) || !Number.isSafeInteger(Number(args['--expected-updated-at'])))
138
+ throw new CollaborationError('INVALID_GROUP_VERSION', usage, 400);
139
+ }
140
+ const capabilities = parsed(await request(socketPath, 'GET', '/admin/capabilities', undefined, headers(undefined, adminToken)));
141
+ if (capabilities.admin_local_group_rename !== true)
142
+ throw new CollaborationError('ADMIN_LOCAL_GROUP_RENAME_UNSUPPORTED', 'CLI and running service must support administrator group metadata operations (minimum 1.4.319)', 409);
143
+ const body = operation === 'rename' ? { name: args['--name'], expected_updated_at: Number(args['--expected-updated-at']), idempotency_key: args['--idempotency-key'] } : undefined;
144
+ write(JSON.stringify(parsed(await request(socketPath, body ? 'POST' : 'GET', `/admin/groups/${encodeURIComponent(id)}${body ? '/rename' : ''}`, body, headers(undefined, adminToken)))));
145
+ return 0;
146
+ }
104
147
  if (action === 'group') {
105
148
  const args = {};
106
149
  const usage = 'Usage: td integration group create --name <name> --idempotency-key <key>';
@@ -115,7 +158,7 @@ export async function runIntegrationAdmin(argv, port, adminToken, write) {
115
158
  throw new CollaborationError('INVALID_GROUP_CREATE_REQUEST', usage, 400);
116
159
  const capabilities = parsed(await request(socketPath, 'GET', '/admin/capabilities', undefined, headers(undefined, adminToken)));
117
160
  if (capabilities.admin_local_group_create !== true)
118
- throw new CollaborationError('ADMIN_LOCAL_GROUP_CREATE_UNSUPPORTED', 'CLI and running service must support empty local group creation (minimum 1.4.317)', 409);
161
+ throw new CollaborationError('ADMIN_LOCAL_GROUP_CREATE_UNSUPPORTED', 'CLI and running service must support empty local group creation (minimum 1.4.318)', 409);
119
162
  write(JSON.stringify(parsed(await request(socketPath, 'POST', '/admin/groups', { name: args['--name'], idempotency_key: args['--idempotency-key'] }, headers(undefined, adminToken)))));
120
163
  return 0;
121
164
  }
@@ -210,7 +253,9 @@ export async function runIntegrationAdmin(argv, port, adminToken, write) {
210
253
  catch (error) {
211
254
  if (reserved)
212
255
  fs.unlinkSync(reserved);
213
- write(JSON.stringify({ ok: false, code: error instanceof CollaborationError ? error.code : 'INTEGRATION_ADMIN_ERROR', error: error instanceof CollaborationError ? error.message : 'Integration administration failed; inspect arguments and private file paths' }));
256
+ write(JSON.stringify({ ok: false, code: error instanceof CollaborationError ? error.code : 'INTEGRATION_ADMIN_ERROR',
257
+ ...(error instanceof CollaborationError && error.code === 'GROUP_CHANGED' ? error.details : {}),
258
+ error: error instanceof CollaborationError ? error.message : 'Integration administration failed; inspect arguments and private file paths' }));
214
259
  return 1;
215
260
  }
216
261
  }
@@ -68,7 +68,16 @@ export class IntegrationRuntime {
68
68
  if (!expected.length || given.length !== expected.length || !timingSafeEqual(given, expected))
69
69
  integrationError('INTEGRATION_ADMIN_REQUIRED', 'Local administration credential is required', 401);
70
70
  };
71
- app.get('/admin/groups', run(req => { admin(req); return { groups: options.messages.list().filter(g => !g.federated).map(g => ({ id: g.id, name: g.name })) }; }));
71
+ app.get('/admin/groups', run(req => { admin(req); return { groups: options.messages.list().filter(g => !g.federated).map(g => ({ id: g.id, name: g.name, updatedAt: g.updatedAt })) }; }));
72
+ app.get('/admin/groups/:id', run(req => { admin(req); return { group: options.messages.getLocalGroupMetadata(req.params.id) }; }));
73
+ app.post('/admin/groups/:id/rename', run(req => {
74
+ admin(req);
75
+ const body = req.body;
76
+ if (!body || typeof body !== 'object' || Array.isArray(body) || Object.keys(body).some(key => !['name', 'expected_updated_at', 'idempotency_key'].includes(key))) {
77
+ integrationError('INVALID_GROUP_RENAME_REQUEST', 'Specify only name, expected_updated_at and idempotency_key');
78
+ }
79
+ return options.messages.renameLocalGroup(req.params.id, body.name, body.expected_updated_at, body.idempotency_key);
80
+ }));
72
81
  app.post('/admin/groups', run(req => {
73
82
  admin(req);
74
83
  const body = req.body;
@@ -241,7 +250,8 @@ export class IntegrationRuntime {
241
250
  session_cold_retry: true, session_cold_retry_min_version: '1.4.314',
242
251
  session_rename: true, session_rename_min_version: '1.4.315',
243
252
  session_close: true, session_close_min_version: '1.4.315',
244
- admin_local_group_create: true, admin_local_group_create_min_version: '1.4.317',
253
+ admin_local_group_create: true, admin_local_group_create_min_version: '1.4.318',
254
+ admin_local_group_rename: true, admin_local_group_rename_min_version: '1.4.319',
245
255
  integration_policy_update: true,
246
256
  session_restore_diagnostics: true,
247
257
  native_identity_linux_flock_owner: process.platform === 'linux',
@@ -251,6 +261,8 @@ export class IntegrationRuntime {
251
261
  }
252
262
  error(error) {
253
263
  return { type: 'error', ok: false, code: error instanceof CollaborationError ? error.code : 'INTEGRATION_INTERNAL_ERROR',
264
+ ...(error instanceof CollaborationError && error.code === 'GROUP_CHANGED' && Number.isSafeInteger(error.details?.currentUpdatedAt)
265
+ ? { currentUpdatedAt: error.details.currentUpdatedAt } : {}),
254
266
  error: error instanceof CollaborationError ? error.message : 'Integration operation failed', retryable: !(error instanceof CollaborationError) || error.httpStatus >= 500 };
255
267
  }
256
268
  group(id) {
@@ -1872,7 +1872,7 @@ async function refreshCollaborationAgentIdentity(backendSessionId, session, fres
1872
1872
  function deliverCollaborationInboxWhenAgentReady(frontendSessionId) {
1873
1873
  collaborationDeliveryWorker.wake(frontendSessionId);
1874
1874
  }
1875
- async function spawnCollaborationAgentSession(req, group, sourceSessionId, input, bootstrapRole) {
1875
+ async function spawnCollaborationAgentSession(req, group, sourceSessionId, input, bootstrapRole, creationKey) {
1876
1876
  const { agentSlug, profile } = resolveCollaborationLaunch(group, input);
1877
1877
  const launchers = await listDetectedAgentLaunchers();
1878
1878
  const launcher = launchers.find((candidate) => candidate.slug === agentSlug);
@@ -1924,7 +1924,7 @@ async function spawnCollaborationAgentSession(req, group, sourceSessionId, input
1924
1924
  sessionIds: [...latestGroup.sessionIds, frontendSessionId],
1925
1925
  });
1926
1926
  if (bootstrapRole)
1927
- collaborationStore.setRole({ groupId: group.id, sessionId: frontendSessionId, role: bootstrapRole });
1927
+ collaborationStore.setRole({ groupId: group.id, sessionId: frontendSessionId, role: bootstrapRole, creationKey });
1928
1928
  if (profile)
1929
1929
  collaborationStore.setMemberLaunchProfile(group.id, frontendSessionId, profile);
1930
1930
  await writeAutomaticTerminalPrompt(frontendSessionId, buildCollaborationSpawnCommand({ slug: launcher.slug, command: profile?.command ?? launcher.command }));
@@ -6409,6 +6409,12 @@ router.post('/operations/collaboration-groups/:groupId/team', async (req, res) =
6409
6409
  return res.status(404).json({ error: '协作组不存在' });
6410
6410
  if (group.federated)
6411
6411
  throw new Error('跨服务组请先从成员设置添加 Agent');
6412
+ const coordinatorSessionId = req.body?.coordinatorSessionId;
6413
+ if (coordinatorSessionId !== undefined && coordinatorSessionId !== null && (typeof coordinatorSessionId !== 'string' || !coordinatorSessionId))
6414
+ throw new Error('请选择有效的协调者');
6415
+ const coordinatorCreationKey = req.body?.coordinatorCreationKey;
6416
+ if (coordinatorCreationKey !== undefined && (typeof coordinatorCreationKey !== 'string' || !/^[a-zA-Z0-9_-]{1,100}$/.test(coordinatorCreationKey)))
6417
+ throw new Error('协调者创建请求无效');
6412
6418
  const { agentSlug, profile } = resolveCollaborationLaunch(group, req.body ?? {});
6413
6419
  if (!(await listDetectedAgentLaunchers()).some(agent => agent.slug === agentSlug))
6414
6420
  throw new Error('所选 Agent 当前不可用');
@@ -6416,7 +6422,7 @@ router.post('/operations/collaboration-groups/:groupId/team', async (req, res) =
6416
6422
  throw new Error('请选择工作目录');
6417
6423
  const cwd = await resolveWorkingDirectory(req, req.body.cwd);
6418
6424
  const previous = preparingTeams.get(group.id) ?? Promise.resolve();
6419
- const operation = previous.catch(() => { }).then(() => ensureTeam({ agentSlug, cwd, launchProfileKey: launchProfileKey(profile),
6425
+ const operation = previous.catch(() => { }).then(() => ensureTeam({ agentSlug, cwd, launchProfileKey: launchProfileKey(profile), coordinatorSessionId, coordinatorCreationKey,
6420
6426
  members: () => {
6421
6427
  const current = collaborationStore.getGroup(group.id);
6422
6428
  if (!current || current.deleted)
@@ -6424,13 +6430,13 @@ router.post('/operations/collaboration-groups/:groupId/team', async (req, res) =
6424
6430
  if (profile && launchProfileKey(current.launchProfiles?.find(p => p.id === profile.id)) !== launchProfileKey(profile))
6425
6431
  throw new Error('启动方案已变更,请重新开始协作');
6426
6432
  return globalSessionState.sessions.filter(record => current.sessionIds.includes(record.sessionId))
6427
- .map(record => ({ id: record.sessionId, cwd: record.cwd, role: current.roles?.[record.sessionId], agentSlug: orchestrationSessionSnapshot(record).agent?.slug, launchProfileKey: launchProfileKey(current.memberLaunchProfiles?.[record.sessionId]) }));
6433
+ .map(record => ({ id: record.sessionId, cwd: record.cwd, role: current.roles?.[record.sessionId], agentSlug: orchestrationSessionSnapshot(record).agent?.slug, launchProfileKey: launchProfileKey(current.memberLaunchProfiles?.[record.sessionId]), creationKey: current.memberCreationKeys?.[record.sessionId] }));
6428
6434
  },
6429
- spawn: async (role) => {
6435
+ spawn: async (role, creationKey) => {
6430
6436
  const current = collaborationStore.getGroup(group.id);
6431
6437
  if (!current || current.deleted)
6432
6438
  throw new Error('协作组已删除');
6433
- const result = await spawnCollaborationAgentSession(req, current, null, { agentSlug, launchProfileId: profile?.id ?? '', cwd, mode: 'tmux', name: role.startsWith('自动协调者') ? `协调 ${group.name}` : `执行与评审 ${group.name}` }, role);
6439
+ const result = await spawnCollaborationAgentSession(req, current, null, { agentSlug, launchProfileId: profile?.id ?? '', cwd, mode: 'tmux', name: role.startsWith('自动协调者') ? `协调 ${group.name}` : `执行与评审 ${group.name}` }, role, creationKey);
6434
6440
  return result.session.sessionId;
6435
6441
  },
6436
6442
  }));
@@ -1027,10 +1027,10 @@ TD 生命周期锁不排他控制外部 tmux 命令/手工进程替换,最终
1027
1027
  共享升级/业务适配由接入方后续验收;维护侧验证仅覆盖隔离测试的真实 tmux/Linux
1028
1028
  进程退出与源码回归。macOS 真实 close 路径尚未实机验收。
1029
1029
 
1030
- ## 1.4.317:管理员幂等创建空本机组
1030
+ ## 1.4.317 / 1.4.318:管理员幂等创建空本机组
1031
1031
 
1032
- 最低 **CLI / 实际服务均为 1.4.317**,协议仍为 1。管理员回读
1033
- `admin_local_group_create=true`、`admin_local_group_create_min_version=1.4.317`;
1032
+ 最低 **CLI / 实际服务均为 1.4.318**,协议仍为 1。管理员回读
1033
+ `admin_local_group_create=true`、`admin_local_group_create_min_version=1.4.318`;
1034
1034
  旧服务缺少能力时 CLI 返回 `ADMIN_LOCAL_GROUP_CREATE_UNSUPPORTED`,不回退到终端
1035
1035
  成员来源、网页裸 HTTP 或私有文件写入。
1036
1036
 
@@ -1060,13 +1060,15 @@ API 名称非法返回 `INVALID_GROUP`,key 非法返回 `INVALID_IDEMPOTENCY_K
1060
1060
  授权、业务调度或三模型创建。**组创建与后续 principal 授权是两步操作,不是一个事务**。
1061
1061
  后者继续遵循已有凭据落盘、唯一 principal ID、固定授权组和拒绝静默替换规则。
1062
1062
 
1063
+ key在同一服务的管理员入口范围内共享,宿主应使用稳定的业务前缀避免互相碰撞。
1063
1064
  同服务存储中,同 key 同参数(名称规范化后)返回原创建快照,包括原 ID、空成员和
1064
1065
  原时间;同 key 异参返回 `IDEMPOTENCY_CONFLICT`。之后给原组加入成员或改名,不会改变
1065
1066
  创建快照,不能把重试响应的空 `sessionIds` 当作当前成员清单;当前名称可用 groups
1066
1067
  回读,成员清单沿现有组管理读接口。HTTP 回执丢失或持久写入结果不明时,保留原 key
1067
1068
  和名称重试对账,不要换新 key “再建一个”。
1068
1069
 
1069
- 文件替换前失败不会提交半个组;替换后 fsync/回执异常可能已经创建,应同键对账。
1070
+ 1.4.318 补齐异常重试:同键回读前再次 durable 提交当前组和原创建记录;目录
1071
+ fsync 持续失败仍返回失败,不以缓存记录冒充成功。文件替换前失败不会提交半个组;替换后 fsync/回执异常可能已经创建,应同键对账。
1070
1072
  服务重启保留 key→原快照映射。原组被明确删除、变成跨服务目标或原 ID 已不存在时,
1071
1073
  同键返回 `GROUP_CREATE_TARGET_UNAVAILABLE`,不新建替代组;全局清理也保留该 key 的
1072
1074
  保留记录。创建 journal 损坏、无法可靠读取或其完整性未确认返回
@@ -1093,3 +1095,77 @@ consumer、task 或看板任务;Case/组/principal/session/message 映射由
1093
1095
  即使普通 send 早于实际订阅建立,保留期内的事实也可重放;宿主按 event_id 持久
1094
1096
  去重/连续 ACK,并按原 message ID/reply_to 用历史对账明确回复。heartbeat 仅是连接
1095
1097
  观测,不表示宿主 inbox 已落盘或业务已完成。
1098
+
1099
+ ## 1.4.319:管理员查询与改名本机组
1100
+
1101
+ 最低 **CLI / 实际服务均为 1.4.319**,协议仍为 1。回读
1102
+ `admin_local_group_rename=true`、`admin_local_group_rename_min_version=1.4.319`;
1103
+ 该能力同时覆盖精确查询、改名及管理员列表的 `updatedAt` 回读。旧服务缺少能力时
1104
+ CLI 返回 `ADMIN_LOCAL_GROUP_RENAME_UNSUPPORTED`,不回退到成员身份、网页接口或私有文件。
1105
+
1106
+ ```sh
1107
+ td integration group get <精确group-id>
1108
+ # {"group":{"id":"...","name":"原名称","updatedAt":1790000000000}}
1109
+ td integration group rename <精确group-id> --name '短标题' \
1110
+ --expected-updated-at 1790000000000 --idempotency-key stable-group-rename-key
1111
+ td integration groups # 列表保留id/name,追加updatedAt
1112
+ ```
1113
+
1114
+ 沿用本机 Unix socket 管理员鉴权,无终端来源、无新 principal 权限。管理路由:
1115
+ `GET /admin/groups/:id`;`POST /admin/groups/:id/rename`,只接受
1116
+ `{name,expected_updated_at,idempotency_key}`。不接受成员、角色、principal、指定新ID、
1117
+ federated 或启动配置。组 ID 必须精确匹配,不解析前缀/名称;仅存活本机组可用。
1118
+ GET 返回最小显示元数据 `{id,name,updatedAt}`,不导出启动配置、成员创建请求或凭据。
1119
+
1120
+ 名称与空组创建复用校验:首尾 trim、非空、最多 256 字符,禁止
1121
+ `【】「」`、`·`、C0 控制字符及 DEL。key 非空、最多 256 字符,按原字符串区分并只存
1122
+ 哈希。改名 key 在同一管理员服务的 **rename 操作范围**共享,与 create key 独立;
1123
+ 建议使用稳定业务前缀。`expected_updated_at` 必须是非负安全整数。
1124
+
1125
+ 复用现有组 `updatedAt` 作为并发版本。实际改名严格递增,只有名称相同时是持久记录的
1126
+ no-op,不推进版本。网页或成员/配置变更也可能推进组版本;新请求不匹配当前值返回
1127
+ `GROUP_CHANGED`(409)及 `currentUpdatedAt`,没有改动或成功回执。宿主重新 get、确认
1128
+ 当前内容后,再用新版本和新 key 作新的决定;不要静默覆盖刚发生的改动。
1129
+
1130
+ 返回两个独立快照,均只有 `{id,name,updatedAt}`:
1131
+
1132
+ ```json
1133
+ {
1134
+ "group": {"id":"...","name":"当前名称","updatedAt":1790000000002},
1135
+ "applied": {"id":"...","name":"原操作改成的名称","updatedAt":1790000000001},
1136
+ "replayed": true
1137
+ }
1138
+ ```
1139
+
1140
+ 首次成功 `replayed=false`,`group` 与 `applied` 相同;同 key、同精确组ID、同规范化名称、
1141
+ 同原期望版本重试,`replayed=true`,返回原 `applied` 和 **当前** `group`。以后另有网页或
1142
+ 管理员改名,旧键回读不重新执行,不撤销后来的名称/版本。原参数任意改变返回
1143
+ `IDEMPOTENCY_CONFLICT`(409)。原 create 的空组创建快照不变,也不因此创建新组。
1144
+ 回执丢失或 fsync 失败时保留原全部参数/key 重试,不换 key 掩盖不确定结果。
1145
+
1146
+ 名称/版本与幂等回执在同一个协作存储中 durable 原子提交,包含文件及父目录 fsync。
1147
+ 替换前失败回滚;替换后 fsync 失败可能已改名,但不能宣称成功。同键重试再次 durable
1148
+ 提交当前存储以确认结果,持续失败仍返回错误;不会第二次推进版本。重启保留原回执。
1149
+ rename journal 完整性不明返回 `GROUP_RENAME_STATE_UNCONFIRMED`,普通写入/全局清理不
1150
+ 解除该阻断。最多保留 2,000 条 rename 回执(删除目标的 key 也保留);达到上限新 key
1151
+ 返回 `GROUP_RENAME_LIMIT`,已有 key 可回读。没有 TTL/forget;调用者管理保留预算。
1152
+ 保证范围仍是同持久存储唯一服务写入,不提供多进程共享文件事务,也不保证旧写入器
1153
+ 降级后能保留新 journal。
1154
+
1155
+ 新请求目标不存在/删除返回 `GROUP_NOT_FOUND`(404),跨服务组 `GROUP_NOT_LOCAL`
1156
+ (409);已有成功 key 的目标删除/变跨服务后重试 `GROUP_RENAME_TARGET_UNAVAILABLE`
1157
+ (409),不复活或新建替代。非法精确 ID `INVALID_GROUP_ID`,非法名称 `INVALID_GROUP`,
1158
+ 非法版本 `INVALID_GROUP_VERSION`,非法 key `INVALID_IDEMPOTENCY_KEY`,多余/错误请求参数
1159
+ `INVALID_GROUP_RENAME_REQUEST`(以上 400)。当前组版本无法可靠读取/递增时
1160
+ `GROUP_STATE_UNCONFIRMED`(409)。存储 IO 失败为 `INTEGRATION_INTERNAL_ERROR`(500),
1161
+ 不是成功回执;沿原键对账。
1162
+
1163
+ 只修改 `name/updatedAt`;保留组 ID、成员/角色/配置、principal 归属及凭据、
1164
+ TD/native session ID、消息/reply、事件/consumer 历史。没有 Agent 启动/恢复/终端写入、
1165
+ 迁组或业务 Case/裁判逻辑。网页组列表与管理员入口读同一个 store,名称通过现有侧栏
1166
+ 刷新(定时约 10 秒及焦点刷新)显示,不承诺瞬时推送,也不把名称更新当 Agent 状态。
1167
+
1168
+ 验收包含真实临时文件原子替换、file/dir fsync 失败和同键恢复、重启、旧快照回读、
1169
+ 并发不同键竞争/同键重放、删除/跨服务、管理员 Unix 路由/CLI 权限及 JSON、网页列表
1170
+ 回读和旧网页表单版本冲突。DevBox 业务组及真实 macOS/iOS 显示尚待接入方实机验收,
1171
+ 不以源码/模拟回归代替其运行现场。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termdock",
3
- "version": "1.4.317",
3
+ "version": "1.4.319",
4
4
  "description": "A complete web-based terminal application with modern UI",
5
5
  "type": "module",
6
6
  "main": ".desktop-dist/main.js",
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "packageName": "termdock",
4
- "version": "1.4.317",
4
+ "version": "1.4.319",
5
5
  "runtimeProtocolVersion": 1,
6
6
  "minimumDesktopVersion": "1.4.46",
7
7
  "nodeMajor": 22,
8
8
  "dependencyHash": "sha256-oaGYi/P5ob8sd6VnNBOwshKozjhdV+hYiCmLAsn5x00=",
9
- "serverBundleHash": "sha256-1pRiIEg4Lpi8gtQSmaiVWgjK0PZrrA+QobxZC5+PEWc=",
10
- "clientBundleHash": "sha256-iwZyAmz8pDZptAaDUwHHnAqZlIvu6R9xpWhvQhPz3xY=",
9
+ "serverBundleHash": "sha256-aIgdB+VZkOBFzs7DT4Slt/9Rm5pdM1mMkJXe3/FZxPM=",
10
+ "clientBundleHash": "sha256-WCUoxmf/ziVtU3GXXqX1A7M84gFLPv/RWWFcBBVtcfQ=",
11
11
  "entrypoint": "dist/server/cli.js",
12
12
  "clientEntrypoint": "dist/client/index.html"
13
13
  }