termdock 1.4.245 → 1.4.247

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 (490) hide show
  1. package/dist/client/apple-splash-default-1170x2532.png +0 -0
  2. package/dist/client/apple-splash-landscape-1136x640.png +0 -0
  3. package/dist/client/apple-splash-landscape-1334x750.png +0 -0
  4. package/dist/client/apple-splash-landscape-1792x828.png +0 -0
  5. package/dist/client/apple-splash-landscape-2048x1536.png +0 -0
  6. package/dist/client/apple-splash-landscape-2160x1620.png +0 -0
  7. package/dist/client/apple-splash-landscape-2208x1242.png +0 -0
  8. package/dist/client/apple-splash-landscape-2224x1668.png +0 -0
  9. package/dist/client/apple-splash-landscape-2266x1488.png +0 -0
  10. package/dist/client/apple-splash-landscape-2360x1640.png +0 -0
  11. package/dist/client/apple-splash-landscape-2388x1668.png +0 -0
  12. package/dist/client/apple-splash-landscape-2436x1125.png +0 -0
  13. package/dist/client/apple-splash-landscape-2532x1170.png +0 -0
  14. package/dist/client/apple-splash-landscape-2556x1179.png +0 -0
  15. package/dist/client/apple-splash-landscape-2622x1206.png +0 -0
  16. package/dist/client/apple-splash-landscape-2688x1242.png +0 -0
  17. package/dist/client/apple-splash-landscape-2732x2048.png +0 -0
  18. package/dist/client/apple-splash-landscape-2778x1284.png +0 -0
  19. package/dist/client/apple-splash-landscape-2796x1290.png +0 -0
  20. package/dist/client/apple-splash-landscape-2868x1320.png +0 -0
  21. package/dist/client/apple-splash-portrait-1125x2436.png +0 -0
  22. package/dist/client/apple-splash-portrait-1170x2532.png +0 -0
  23. package/dist/client/apple-splash-portrait-1179x2556.png +0 -0
  24. package/dist/client/apple-splash-portrait-1206x2622.png +0 -0
  25. package/dist/client/apple-splash-portrait-1242x2208.png +0 -0
  26. package/dist/client/apple-splash-portrait-1242x2688.png +0 -0
  27. package/dist/client/apple-splash-portrait-1284x2778.png +0 -0
  28. package/dist/client/apple-splash-portrait-1290x2796.png +0 -0
  29. package/dist/client/apple-splash-portrait-1320x2868.png +0 -0
  30. package/dist/client/apple-splash-portrait-1488x2266.png +0 -0
  31. package/dist/client/apple-splash-portrait-1536x2048.png +0 -0
  32. package/dist/client/apple-splash-portrait-1620x2160.png +0 -0
  33. package/dist/client/apple-splash-portrait-1640x2360.png +0 -0
  34. package/dist/client/apple-splash-portrait-1668x2224.png +0 -0
  35. package/dist/client/apple-splash-portrait-1668x2388.png +0 -0
  36. package/dist/client/apple-splash-portrait-2048x2732.png +0 -0
  37. package/dist/client/apple-splash-portrait-640x1136.png +0 -0
  38. package/dist/client/apple-splash-portrait-750x1334.png +0 -0
  39. package/dist/client/apple-splash-portrait-828x1792.png +0 -0
  40. package/dist/client/apple-touch-icon-180x180.png +0 -0
  41. package/dist/client/assets/{App-4yuJhk8K.js → App-BDty62Kk.js} +3 -3
  42. package/dist/client/assets/App-BDty62Kk.js.br +0 -0
  43. package/dist/client/assets/App-BDty62Kk.js.gz +0 -0
  44. package/dist/client/assets/{ChangeWalkthroughPanel-CO6hA8Zz.js → ChangeWalkthroughPanel-CxkUSDes.js} +1 -1
  45. package/dist/client/assets/ChangeWalkthroughPanel-CxkUSDes.js.br +0 -0
  46. package/dist/client/assets/ChangeWalkthroughPanel-CxkUSDes.js.gz +0 -0
  47. package/dist/client/assets/{DagPlayground-CYNBQUiS.js → DagPlayground-BhuxmcCV.js} +1 -1
  48. package/dist/client/assets/DagPlayground-BhuxmcCV.js.br +0 -0
  49. package/dist/client/assets/DagPlayground-BhuxmcCV.js.gz +0 -0
  50. package/dist/client/assets/{DiffLab-D1EGXPSO.js → DiffLab-CYgVdf6M.js} +1 -1
  51. package/dist/client/assets/DiffLab-CYgVdf6M.js.br +0 -0
  52. package/dist/client/assets/DiffLab-CYgVdf6M.js.gz +0 -0
  53. package/dist/client/assets/{DiffReview-B3l9lyZN.js → DiffReview-tZp8igpn.js} +1 -1
  54. package/dist/client/assets/DiffReview-tZp8igpn.js.br +0 -0
  55. package/dist/client/assets/DiffReview-tZp8igpn.js.gz +0 -0
  56. package/dist/client/assets/{DiffReviewLab-HnyTETr4.js → DiffReviewLab-D3DEF3Uv.js} +1 -1
  57. package/dist/client/assets/DiffReviewLab-D3DEF3Uv.js.br +0 -0
  58. package/dist/client/assets/DiffReviewLab-D3DEF3Uv.js.gz +0 -0
  59. package/dist/client/assets/{DiffViewer-Cg2L1fpw.js → DiffViewer-DvP6iXpD.js} +1 -1
  60. package/dist/client/assets/DiffViewer-DvP6iXpD.js.br +0 -0
  61. package/dist/client/assets/DiffViewer-DvP6iXpD.js.gz +0 -0
  62. package/dist/client/assets/{ModelPreview-m9zsjnCS.js → ModelPreview-2hdKSHrI.js} +1 -1
  63. package/dist/client/assets/ModelPreview-2hdKSHrI.js.br +0 -0
  64. package/dist/client/assets/ModelPreview-2hdKSHrI.js.gz +0 -0
  65. package/dist/client/assets/{RightSidebar-D8UOa663.js → RightSidebar-BPn8cO-W.js} +4 -4
  66. package/dist/client/assets/RightSidebar-BPn8cO-W.js.br +0 -0
  67. package/dist/client/assets/RightSidebar-BPn8cO-W.js.gz +0 -0
  68. package/dist/client/assets/{abnfDiagram-VCTEODGH-B6aAcqAH.js → abnfDiagram-VCTEODGH-Ci-VUnN9.js} +1 -1
  69. package/dist/client/assets/abnfDiagram-VCTEODGH-Ci-VUnN9.js.br +0 -0
  70. package/dist/client/assets/abnfDiagram-VCTEODGH-Ci-VUnN9.js.gz +0 -0
  71. package/dist/client/assets/app-Cs_Q5pAC.js +35 -0
  72. package/dist/client/assets/app-Cs_Q5pAC.js.br +0 -0
  73. package/dist/client/assets/app-Cs_Q5pAC.js.gz +0 -0
  74. package/dist/client/assets/{arc-MDwycufi.js → arc-B8fvq2_P.js} +1 -1
  75. package/dist/client/assets/arc-B8fvq2_P.js.br +0 -0
  76. package/dist/client/assets/arc-B8fvq2_P.js.gz +0 -0
  77. package/dist/client/assets/{architectureDiagram-5GKGNRK7-DpW68CEx.js → architectureDiagram-5GKGNRK7-OBeKtuBG.js} +1 -1
  78. package/dist/client/assets/architectureDiagram-5GKGNRK7-OBeKtuBG.js.br +0 -0
  79. package/dist/client/assets/architectureDiagram-5GKGNRK7-OBeKtuBG.js.gz +0 -0
  80. package/dist/client/assets/{blockDiagram-I7D4REHJ-CZQQVsmh.js → blockDiagram-I7D4REHJ-BUOU_cl8.js} +1 -1
  81. package/dist/client/assets/blockDiagram-I7D4REHJ-BUOU_cl8.js.br +0 -0
  82. package/dist/client/assets/blockDiagram-I7D4REHJ-BUOU_cl8.js.gz +0 -0
  83. package/dist/client/assets/{c4Diagram-7LVT6UL2-DjvDIEs1.js → c4Diagram-7LVT6UL2-Qpx1DCv2.js} +1 -1
  84. package/dist/client/assets/c4Diagram-7LVT6UL2-Qpx1DCv2.js.br +0 -0
  85. package/dist/client/assets/c4Diagram-7LVT6UL2-Qpx1DCv2.js.gz +0 -0
  86. package/dist/client/assets/channel-C0TVm2mO.js +1 -0
  87. package/dist/client/assets/{chunk-2Q5K7J3B-C7cBdwoS.js → chunk-2Q5K7J3B-C6tpRlFu.js} +1 -1
  88. package/dist/client/assets/{chunk-5VM5RSS4-DdwZ_Ooa.js → chunk-5VM5RSS4-C1PImfe4.js} +1 -1
  89. package/dist/client/assets/{chunk-F27PBJKO-CyDTfLmz.js → chunk-F27PBJKO-CvbHkCRN.js} +1 -1
  90. package/dist/client/assets/chunk-F27PBJKO-CvbHkCRN.js.br +0 -0
  91. package/dist/client/assets/chunk-F27PBJKO-CvbHkCRN.js.gz +0 -0
  92. package/dist/client/assets/{chunk-IMKFNOWR-BYCj4545.js → chunk-IMKFNOWR-P1FyXJXz.js} +1 -1
  93. package/dist/client/assets/chunk-IMKFNOWR-P1FyXJXz.js.br +0 -0
  94. package/dist/client/assets/chunk-IMKFNOWR-P1FyXJXz.js.gz +0 -0
  95. package/dist/client/assets/{chunk-JWPE2WC7-Buwl5THX.js → chunk-JWPE2WC7-C8mWANKk.js} +1 -1
  96. package/dist/client/assets/{chunk-POPQ4Y6H-C7p1ptYd.js → chunk-POPQ4Y6H-DDSPZulQ.js} +1 -1
  97. package/dist/client/assets/{chunk-SVP7TREG-Biy6yZrB.js → chunk-SVP7TREG-Bh9Y6Jr-.js} +1 -1
  98. package/dist/client/assets/chunk-SVP7TREG-Bh9Y6Jr-.js.br +0 -0
  99. package/dist/client/assets/chunk-SVP7TREG-Bh9Y6Jr-.js.gz +0 -0
  100. package/dist/client/assets/{chunk-TICWLB2K-8e9Sd9jU.js → chunk-TICWLB2K-DnrwzqK1.js} +1 -1
  101. package/dist/client/assets/chunk-TICWLB2K-DnrwzqK1.js.br +0 -0
  102. package/dist/client/assets/chunk-TICWLB2K-DnrwzqK1.js.gz +0 -0
  103. package/dist/client/assets/{chunk-XXDRQBXY-DECwND6H.js → chunk-XXDRQBXY-DtzSRWIw.js} +1 -1
  104. package/dist/client/assets/classDiagram-ZZMXUADV-Bzkbt-xD.js +1 -0
  105. package/dist/client/assets/classDiagram-v2-VYDZK3BY-Bzkbt-xD.js +1 -0
  106. package/dist/client/assets/{cose-bilkent-JH36ORCC-PPh2sDUy.js → cose-bilkent-JH36ORCC-BuF2HtWL.js} +1 -1
  107. package/dist/client/assets/cose-bilkent-JH36ORCC-BuF2HtWL.js.br +0 -0
  108. package/dist/client/assets/cose-bilkent-JH36ORCC-BuF2HtWL.js.gz +0 -0
  109. package/dist/client/assets/{cynefin-OW5HDTMX-B11p1v5N.js → cynefin-OW5HDTMX-DfyAdx1n.js} +1 -1
  110. package/dist/client/assets/cynefin-OW5HDTMX-DfyAdx1n.js.br +0 -0
  111. package/dist/client/assets/cynefin-OW5HDTMX-DfyAdx1n.js.gz +0 -0
  112. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-BKyWp8p1.js → cynefinDiagram-5FMLGOSQ-DC3DO7Lb.js} +1 -1
  113. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DC3DO7Lb.js.br +0 -0
  114. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-DC3DO7Lb.js.gz +0 -0
  115. package/dist/client/assets/{dagre-GXQ25YYZ-B79CVuuK.js → dagre-GXQ25YYZ-BZ2xk9c1.js} +1 -1
  116. package/dist/client/assets/dagre-GXQ25YYZ-BZ2xk9c1.js.br +0 -0
  117. package/dist/client/assets/dagre-GXQ25YYZ-BZ2xk9c1.js.gz +0 -0
  118. package/dist/client/assets/{diagram-S7CK7UJ4-BKPJHT5i.js → diagram-S7CK7UJ4-DN_5hPML.js} +1 -1
  119. package/dist/client/assets/diagram-S7CK7UJ4-DN_5hPML.js.br +0 -0
  120. package/dist/client/assets/diagram-S7CK7UJ4-DN_5hPML.js.gz +0 -0
  121. package/dist/client/assets/{diagram-UQ7AKVKN-adkntJ-H.js → diagram-UQ7AKVKN-Db8fjjXs.js} +1 -1
  122. package/dist/client/assets/diagram-UQ7AKVKN-Db8fjjXs.js.br +0 -0
  123. package/dist/client/assets/diagram-UQ7AKVKN-Db8fjjXs.js.gz +0 -0
  124. package/dist/client/assets/{diagram-VSXAHHWV-CGOHyiQX.js → diagram-VSXAHHWV-BK0r1kdu.js} +1 -1
  125. package/dist/client/assets/diagram-VSXAHHWV-BK0r1kdu.js.br +0 -0
  126. package/dist/client/assets/diagram-VSXAHHWV-BK0r1kdu.js.gz +0 -0
  127. package/dist/client/assets/{diagram-VX7I27RA-C6uqmbvW.js → diagram-VX7I27RA-CUqffHxG.js} +1 -1
  128. package/dist/client/assets/diagram-VX7I27RA-CUqffHxG.js.br +0 -0
  129. package/dist/client/assets/diagram-VX7I27RA-CUqffHxG.js.gz +0 -0
  130. package/dist/client/assets/{diagram-Z3DM3KII-DRbP0rNc.js → diagram-Z3DM3KII-D1MBNfci.js} +1 -1
  131. package/dist/client/assets/diagram-Z3DM3KII-D1MBNfci.js.br +0 -0
  132. package/dist/client/assets/diagram-Z3DM3KII-D1MBNfci.js.gz +0 -0
  133. package/dist/client/assets/{ebnfDiagram-PWID7BFC-ZH3JjPxG.js → ebnfDiagram-PWID7BFC-Dc-4AttC.js} +1 -1
  134. package/dist/client/assets/ebnfDiagram-PWID7BFC-Dc-4AttC.js.br +0 -0
  135. package/dist/client/assets/ebnfDiagram-PWID7BFC-Dc-4AttC.js.gz +0 -0
  136. package/dist/client/assets/{erDiagram-RLTQ6QDP-2pB0nAqM.js → erDiagram-RLTQ6QDP-C9IHrclR.js} +1 -1
  137. package/dist/client/assets/erDiagram-RLTQ6QDP-C9IHrclR.js.br +0 -0
  138. package/dist/client/assets/erDiagram-RLTQ6QDP-C9IHrclR.js.gz +0 -0
  139. package/dist/client/assets/{flowDiagram-HODETNUW-g-NFSGVN.js → flowDiagram-HODETNUW-DxUiy01E.js} +1 -1
  140. package/dist/client/assets/flowDiagram-HODETNUW-DxUiy01E.js.br +0 -0
  141. package/dist/client/assets/flowDiagram-HODETNUW-DxUiy01E.js.gz +0 -0
  142. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-ou0k7MyH.js → ganttDiagram-EL5Y4UJY-BGeAidmz.js} +1 -1
  143. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BGeAidmz.js.br +0 -0
  144. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BGeAidmz.js.gz +0 -0
  145. package/dist/client/assets/{gestureArbiter-BVGXbPvq.js → gestureArbiter-Bw8uUw_p.js} +1 -1
  146. package/dist/client/assets/gestureArbiter-Bw8uUw_p.js.br +0 -0
  147. package/dist/client/assets/gestureArbiter-Bw8uUw_p.js.gz +0 -0
  148. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-9FN50t1H.js → gitGraphDiagram-WWUBYQGX-553Qx0ML.js} +1 -1
  149. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-553Qx0ML.js.br +0 -0
  150. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-553Qx0ML.js.gz +0 -0
  151. package/dist/client/assets/{infoDiagram-27XIBGKW-CDTlLBns.js → infoDiagram-27XIBGKW-DDPq7KlH.js} +1 -1
  152. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DJigQx1g.js → ishikawaDiagram-5VMMS53U-DT74d8Pp.js} +1 -1
  153. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DT74d8Pp.js.br +0 -0
  154. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DT74d8Pp.js.gz +0 -0
  155. package/dist/client/assets/{journeyDiagram-3NMN7TZE-D2B7mocZ.js → journeyDiagram-3NMN7TZE-D_Wxj2Xv.js} +1 -1
  156. package/dist/client/assets/journeyDiagram-3NMN7TZE-D_Wxj2Xv.js.br +0 -0
  157. package/dist/client/assets/journeyDiagram-3NMN7TZE-D_Wxj2Xv.js.gz +0 -0
  158. package/dist/client/assets/{kanban-definition-UXKFOSKX-Dibgxrol.js → kanban-definition-UXKFOSKX-DLX35yh7.js} +1 -1
  159. package/dist/client/assets/kanban-definition-UXKFOSKX-DLX35yh7.js.br +0 -0
  160. package/dist/client/assets/kanban-definition-UXKFOSKX-DLX35yh7.js.gz +0 -0
  161. package/dist/client/assets/{layout-l7vsNiDT.js → layout-B59jVmB2.js} +1 -1
  162. package/dist/client/assets/layout-B59jVmB2.js.br +0 -0
  163. package/dist/client/assets/layout-B59jVmB2.js.gz +0 -0
  164. package/dist/client/assets/{linear-DYyWv-7A.js → linear-B9n7YHBO.js} +1 -1
  165. package/dist/client/assets/linear-B9n7YHBO.js.br +0 -0
  166. package/dist/client/assets/linear-B9n7YHBO.js.gz +0 -0
  167. package/dist/client/assets/{mermaid.core-filx9uhD.js → mermaid.core-Cv1IKi5b.js} +5 -5
  168. package/dist/client/assets/mermaid.core-Cv1IKi5b.js.br +0 -0
  169. package/dist/client/assets/mermaid.core-Cv1IKi5b.js.gz +0 -0
  170. package/dist/client/assets/{mindmap-definition-YA3MSWOX-fs33msHm.js → mindmap-definition-YA3MSWOX-CZt_3-JK.js} +1 -1
  171. package/dist/client/assets/mindmap-definition-YA3MSWOX-CZt_3-JK.js.br +0 -0
  172. package/dist/client/assets/mindmap-definition-YA3MSWOX-CZt_3-JK.js.gz +0 -0
  173. package/dist/client/assets/{passwordBootstrap-v6a4CT6d.js → passwordBootstrap-B9SjYaCE.js} +1 -1
  174. package/dist/client/assets/passwordBootstrap-B9SjYaCE.js.br +0 -0
  175. package/dist/client/assets/passwordBootstrap-B9SjYaCE.js.gz +0 -0
  176. package/dist/client/assets/{pegDiagram-XKGWAZYB-mdj0nBrT.js → pegDiagram-XKGWAZYB-Ltof8aAd.js} +1 -1
  177. package/dist/client/assets/pegDiagram-XKGWAZYB-Ltof8aAd.js.br +0 -0
  178. package/dist/client/assets/pegDiagram-XKGWAZYB-Ltof8aAd.js.gz +0 -0
  179. package/dist/client/assets/{pieDiagram-E7YTZNPT-YoRrPBgl.js → pieDiagram-E7YTZNPT-Bef0wElK.js} +1 -1
  180. package/dist/client/assets/pieDiagram-E7YTZNPT-Bef0wElK.js.br +0 -0
  181. package/dist/client/assets/pieDiagram-E7YTZNPT-Bef0wElK.js.gz +0 -0
  182. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-DgZmaoSe.js → quadrantDiagram-AXDQQJYC-ClTyow_w.js} +1 -1
  183. package/dist/client/assets/quadrantDiagram-AXDQQJYC-ClTyow_w.js.br +0 -0
  184. package/dist/client/assets/quadrantDiagram-AXDQQJYC-ClTyow_w.js.gz +0 -0
  185. package/dist/client/assets/{railroadDiagram-O6MQD6OU-CnBSlDaa.js → railroadDiagram-O6MQD6OU-BcNsQrjf.js} +1 -1
  186. package/dist/client/assets/railroadDiagram-O6MQD6OU-BcNsQrjf.js.br +0 -0
  187. package/dist/client/assets/railroadDiagram-O6MQD6OU-BcNsQrjf.js.gz +0 -0
  188. package/dist/client/assets/{referenceLongPress-DJsVBw_j.js → referenceLongPress-AOtZCb9C.js} +1 -1
  189. package/dist/client/assets/referenceLongPress-AOtZCb9C.js.br +0 -0
  190. package/dist/client/assets/referenceLongPress-AOtZCb9C.js.gz +0 -0
  191. package/dist/client/assets/{requirementDiagram-BXWQKSXE-BA9ZoM3G.js → requirementDiagram-BXWQKSXE-i9Gtousl.js} +1 -1
  192. package/dist/client/assets/requirementDiagram-BXWQKSXE-i9Gtousl.js.br +0 -0
  193. package/dist/client/assets/requirementDiagram-BXWQKSXE-i9Gtousl.js.gz +0 -0
  194. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-bcxqUb6q.js → sankeyDiagram-P5KCCOFB-Dt-wGVVq.js} +1 -1
  195. package/dist/client/assets/sankeyDiagram-P5KCCOFB-Dt-wGVVq.js.br +0 -0
  196. package/dist/client/assets/sankeyDiagram-P5KCCOFB-Dt-wGVVq.js.gz +0 -0
  197. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-TLqeD9u8.js → sequenceDiagram-WJ2MYXX4-DQWC7uut.js} +1 -1
  198. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DQWC7uut.js.br +0 -0
  199. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DQWC7uut.js.gz +0 -0
  200. package/dist/client/assets/{sizeCapture-INFHLROL-D180O8mH.js → sizeCapture-INFHLROL-j7xNWJcU.js} +1 -1
  201. package/dist/client/assets/sizeCapture-INFHLROL-j7xNWJcU.js.br +0 -0
  202. package/dist/client/assets/sizeCapture-INFHLROL-j7xNWJcU.js.gz +0 -0
  203. package/dist/client/assets/{sparkles-B2dq58Vr.js → sparkles-BRkfjZjN.js} +1 -1
  204. package/dist/client/assets/{stateDiagram-D77RDMKH-CVeaj7aj.js → stateDiagram-D77RDMKH-M3TX8Erj.js} +1 -1
  205. package/dist/client/assets/stateDiagram-D77RDMKH-M3TX8Erj.js.br +0 -0
  206. package/dist/client/assets/stateDiagram-D77RDMKH-M3TX8Erj.js.gz +0 -0
  207. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-_ulPeuS5.js +1 -0
  208. package/dist/client/assets/{swimlanes-42K2YHIH-BSfkryAI.js → swimlanes-42K2YHIH-CxGcmQrd.js} +1 -1
  209. package/dist/client/assets/swimlanes-42K2YHIH-CxGcmQrd.js.br +0 -0
  210. package/dist/client/assets/{swimlanes-42K2YHIH-BSfkryAI.js.gz → swimlanes-42K2YHIH-CxGcmQrd.js.gz} +0 -0
  211. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-BW2bKIPD.js +8 -0
  212. package/dist/client/assets/{timeline-definition-24CTP7MA-CXrJcUqt.js → timeline-definition-24CTP7MA-CUyya42z.js} +1 -1
  213. package/dist/client/assets/timeline-definition-24CTP7MA-CUyya42z.js.br +0 -0
  214. package/dist/client/assets/timeline-definition-24CTP7MA-CUyya42z.js.gz +0 -0
  215. package/dist/client/assets/{triangle-alert-DiB-zDg8.js → triangle-alert-B6SvdIgg.js} +1 -1
  216. package/dist/client/assets/{vennDiagram-4TSXK5OY-DUlZIoBs.js → vennDiagram-4TSXK5OY-Cm01D51L.js} +1 -1
  217. package/dist/client/assets/{vennDiagram-4TSXK5OY-DUlZIoBs.js.br → vennDiagram-4TSXK5OY-Cm01D51L.js.br} +0 -0
  218. package/dist/client/assets/vennDiagram-4TSXK5OY-Cm01D51L.js.gz +0 -0
  219. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-PW7fiK5-.js → wardleyDiagram-VM6X3IG4-CLA4d4s3.js} +1 -1
  220. package/dist/client/assets/wardleyDiagram-VM6X3IG4-CLA4d4s3.js.br +0 -0
  221. package/dist/client/assets/wardleyDiagram-VM6X3IG4-CLA4d4s3.js.gz +0 -0
  222. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-CGgWBXnk.js → xychartDiagram-S5SC5T6Z-Cvnk40o2.js} +1 -1
  223. package/dist/client/assets/xychartDiagram-S5SC5T6Z-Cvnk40o2.js.br +0 -0
  224. package/dist/client/assets/xychartDiagram-S5SC5T6Z-Cvnk40o2.js.gz +0 -0
  225. package/dist/client/favicon.ico +0 -0
  226. package/dist/client/fonts/JetBrainsMonoNLNerdFontMono-Bold.woff2 +0 -0
  227. package/dist/client/fonts/JetBrainsMonoNLNerdFontMono-BoldItalic.woff2 +0 -0
  228. package/dist/client/fonts/JetBrainsMonoNLNerdFontMono-Italic.woff2 +0 -0
  229. package/dist/client/fonts/JetBrainsMonoNLNerdFontMono-Regular.woff2 +0 -0
  230. package/dist/client/fonts/NotoSansMonoCJKsc-Bold-Subset.woff2 +0 -0
  231. package/dist/client/fonts/NotoSansMonoCJKsc-Subset.woff2 +0 -0
  232. package/dist/client/fonts/NotoSansSymbols2-Subset.woff2 +0 -0
  233. package/dist/client/fonts/TermdockStarSymbol-Subset.woff2 +0 -0
  234. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-38-022d7c89c800.woff2 +0 -0
  235. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-39-63f8fa5b3eba.woff2 +0 -0
  236. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3a-2d8d46cc4dca.woff2 +0 -0
  237. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3b-e75aed5d3969.woff2 +0 -0
  238. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3c-ac2534aae681.woff2 +0 -0
  239. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3c0-8c49a98e75c4.woff2 +0 -0
  240. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3c1-971c5e7a86ce.woff2 +0 -0
  241. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3c2-e5c4893acfb9.woff2 +0 -0
  242. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3c3-156f2560c871.woff2 +0 -0
  243. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3c4-49f0d18a7492.woff2 +0 -0
  244. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3c5-33d81ad28c5c.woff2 +0 -0
  245. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3c6-5c301879d053.woff2 +0 -0
  246. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-icons-3d-52c90894de44.woff2 +0 -0
  247. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Bold-text-9e8d9df2dd02.woff2 +0 -0
  248. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-38-7942d3c93afb.woff2 +0 -0
  249. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-39-19989a2be535.woff2 +0 -0
  250. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3a-7786ff4a4dd9.woff2 +0 -0
  251. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3b-a759fd623d7e.woff2 +0 -0
  252. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3c-2a1178076740.woff2 +0 -0
  253. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3c0-6f2c7518f354.woff2 +0 -0
  254. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3c1-4bf64cae9dd2.woff2 +0 -0
  255. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3c2-7f26d4c7240b.woff2 +0 -0
  256. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3c3-fc8e5a85d620.woff2 +0 -0
  257. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3c4-91819b7977d3.woff2 +0 -0
  258. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3c5-26933eec54e2.woff2 +0 -0
  259. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3c6-af186404c8af.woff2 +0 -0
  260. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-icons-3d-b004d85f5642.woff2 +0 -0
  261. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-BoldItalic-text-da002b4e56d3.woff2 +0 -0
  262. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-38-b3e69191d92f.woff2 +0 -0
  263. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-39-c4d8d66882cb.woff2 +0 -0
  264. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3a-27609324e8a3.woff2 +0 -0
  265. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3b-5e73d85d7506.woff2 +0 -0
  266. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3c-7e535d65bbdb.woff2 +0 -0
  267. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3c0-6465060a06a1.woff2 +0 -0
  268. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3c1-9fd72ccd9350.woff2 +0 -0
  269. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3c2-ea7dd77de270.woff2 +0 -0
  270. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3c3-12808f88907a.woff2 +0 -0
  271. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3c4-14b598e5e739.woff2 +0 -0
  272. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3c5-3d40530ce6c2.woff2 +0 -0
  273. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3c6-7020aec0d9e1.woff2 +0 -0
  274. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-icons-3d-19831897003a.woff2 +0 -0
  275. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Italic-text-b7a9c776b048.woff2 +0 -0
  276. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-38-a637901140d8.woff2 +0 -0
  277. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-39-838726e8eeca.woff2 +0 -0
  278. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3a-ec149087d0b9.woff2 +0 -0
  279. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3b-db8e5a24d580.woff2 +0 -0
  280. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3c-2290d2ad4621.woff2 +0 -0
  281. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3c0-3b9edaf85d65.woff2 +0 -0
  282. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3c1-5e7fb0696bbc.woff2 +0 -0
  283. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3c2-cfad2884adf5.woff2 +0 -0
  284. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3c3-d641de88278b.woff2 +0 -0
  285. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3c4-3b0227356b3b.woff2 +0 -0
  286. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3c5-9dc67c4d20b4.woff2 +0 -0
  287. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3c6-c5b444110c62.woff2 +0 -0
  288. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-icons-3d-2b19b65bb43a.woff2 +0 -0
  289. package/dist/client/fonts/terminal/JetBrainsMonoNLNerdFontMono-Regular-text-d7b9316fdf4f.woff2 +0 -0
  290. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-4e-46bdca5c323f.woff2 +0 -0
  291. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-4f-17200dc0dd0d.woff2 +0 -0
  292. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-50-370e36250c30.woff2 +0 -0
  293. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-51-66352f738581.woff2 +0 -0
  294. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-52-191f4025d2b5.woff2 +0 -0
  295. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-53-fb0a637c39bf.woff2 +0 -0
  296. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-54-66f2e72c9ca0.woff2 +0 -0
  297. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-55-54b538fd4fd8.woff2 +0 -0
  298. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-56-88f45aeb2030.woff2 +0 -0
  299. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-57-154d4324f0ce.woff2 +0 -0
  300. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-58-1660c86b8a05.woff2 +0 -0
  301. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-59-31a4c5afa3aa.woff2 +0 -0
  302. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-5a-fa1d1941710e.woff2 +0 -0
  303. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-5b-031a2b2ebeb7.woff2 +0 -0
  304. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-5c-065b634c07b3.woff2 +0 -0
  305. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-5d-71f6cd3ed180.woff2 +0 -0
  306. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-5e-f59de7a6e5c5.woff2 +0 -0
  307. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-5f-8cbe737b6011.woff2 +0 -0
  308. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-60-22913526da09.woff2 +0 -0
  309. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-61-c810c1d1a3a3.woff2 +0 -0
  310. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-62-9464d5d87d65.woff2 +0 -0
  311. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-63-79564d99f5da.woff2 +0 -0
  312. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-64-4b7cff1dae6f.woff2 +0 -0
  313. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-65-8dd48db5e297.woff2 +0 -0
  314. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-66-a808e22a3d14.woff2 +0 -0
  315. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-67-ae5f61af3f79.woff2 +0 -0
  316. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-68-a46bf47bd9ba.woff2 +0 -0
  317. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-69-28210414eafb.woff2 +0 -0
  318. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-6a-6bfb1f5e4fb7.woff2 +0 -0
  319. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-6b-39be890e04e4.woff2 +0 -0
  320. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-6c-79a4ff740d98.woff2 +0 -0
  321. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-6d-2de5a763980e.woff2 +0 -0
  322. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-6e-8e55b339244d.woff2 +0 -0
  323. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-6f-a56caf9fc7fc.woff2 +0 -0
  324. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-70-d70c6ee8e03c.woff2 +0 -0
  325. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-71-ac6f5f86dfef.woff2 +0 -0
  326. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-72-db3d346ecc61.woff2 +0 -0
  327. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-73-e7371bd71f0b.woff2 +0 -0
  328. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-74-43946d9b2f0b.woff2 +0 -0
  329. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-75-ea7cf53e31fa.woff2 +0 -0
  330. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-76-04c7fa4e0ebf.woff2 +0 -0
  331. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-77-24d70898f6b8.woff2 +0 -0
  332. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-78-c6a5d7135296.woff2 +0 -0
  333. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-79-7812cb6432aa.woff2 +0 -0
  334. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-7a-6e123be5cd36.woff2 +0 -0
  335. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-7b-a183ddc6890f.woff2 +0 -0
  336. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-7c-0895291ece9c.woff2 +0 -0
  337. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-7d-1d44252384cf.woff2 +0 -0
  338. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-7e-7be4dc6f056e.woff2 +0 -0
  339. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-7f-0d8e987db151.woff2 +0 -0
  340. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-80-c0c154bb8be0.woff2 +0 -0
  341. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-81-5343baca5ce7.woff2 +0 -0
  342. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-82-6d89af9614ce.woff2 +0 -0
  343. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-83-fa17ef529c5b.woff2 +0 -0
  344. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-84-287ecb493fad.woff2 +0 -0
  345. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-85-fea695c48165.woff2 +0 -0
  346. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-86-8bb35373cb82.woff2 +0 -0
  347. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-87-f83e9f70a6cc.woff2 +0 -0
  348. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-88-894cd19292c1.woff2 +0 -0
  349. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-89-2903a6eaf546.woff2 +0 -0
  350. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-8a-3ce275bfcf96.woff2 +0 -0
  351. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-8b-3aaeb26309a6.woff2 +0 -0
  352. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-8c-719b6608b746.woff2 +0 -0
  353. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-8d-a7f1ccd0dfb7.woff2 +0 -0
  354. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-8e-d503ad5c4958.woff2 +0 -0
  355. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-8f-18c6d04746c8.woff2 +0 -0
  356. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-90-e9d94d915dfe.woff2 +0 -0
  357. package/dist/client/fonts/terminal/NotoSansMonoCJKsc-Bold-Subset-cjk-91-c258b07ec626.woff2 +0 -0
  358. package/dist/client/index.html +1 -1
  359. package/dist/client/index.html.br +0 -0
  360. package/dist/client/index.html.gz +0 -0
  361. package/dist/client/sw.js +1 -1
  362. package/dist/client/sw.js.br +0 -0
  363. package/dist/client/sw.js.gz +0 -0
  364. package/dist/server/agent/collaborationCli.js +36 -3
  365. package/dist/server/agent/collaborationDeliveryWorker.js +5 -0
  366. package/dist/server/agent/collaborationPeerTransport.js +8 -1
  367. package/dist/server/agent/collaborationService.js +77 -11
  368. package/dist/server/entry.js +11 -1
  369. package/dist/server/federation/runtime.js +50 -3
  370. package/dist/server/routes/terminal.js +13 -0
  371. package/package.json +1 -1
  372. package/runtime-manifest.json +3 -3
  373. package/dist/client/assets/App-4yuJhk8K.js.br +0 -0
  374. package/dist/client/assets/App-4yuJhk8K.js.gz +0 -0
  375. package/dist/client/assets/ChangeWalkthroughPanel-CO6hA8Zz.js.br +0 -0
  376. package/dist/client/assets/ChangeWalkthroughPanel-CO6hA8Zz.js.gz +0 -0
  377. package/dist/client/assets/DagPlayground-CYNBQUiS.js.br +0 -0
  378. package/dist/client/assets/DagPlayground-CYNBQUiS.js.gz +0 -0
  379. package/dist/client/assets/DiffLab-D1EGXPSO.js.br +0 -0
  380. package/dist/client/assets/DiffLab-D1EGXPSO.js.gz +0 -0
  381. package/dist/client/assets/DiffReview-B3l9lyZN.js.br +0 -0
  382. package/dist/client/assets/DiffReview-B3l9lyZN.js.gz +0 -0
  383. package/dist/client/assets/DiffReviewLab-HnyTETr4.js.br +0 -0
  384. package/dist/client/assets/DiffReviewLab-HnyTETr4.js.gz +0 -0
  385. package/dist/client/assets/DiffViewer-Cg2L1fpw.js.br +0 -0
  386. package/dist/client/assets/DiffViewer-Cg2L1fpw.js.gz +0 -0
  387. package/dist/client/assets/ModelPreview-m9zsjnCS.js.br +0 -0
  388. package/dist/client/assets/ModelPreview-m9zsjnCS.js.gz +0 -0
  389. package/dist/client/assets/RightSidebar-D8UOa663.js.br +0 -0
  390. package/dist/client/assets/RightSidebar-D8UOa663.js.gz +0 -0
  391. package/dist/client/assets/abnfDiagram-VCTEODGH-B6aAcqAH.js.br +0 -0
  392. package/dist/client/assets/abnfDiagram-VCTEODGH-B6aAcqAH.js.gz +0 -0
  393. package/dist/client/assets/app-DiN3Jz4F.js +0 -35
  394. package/dist/client/assets/app-DiN3Jz4F.js.br +0 -0
  395. package/dist/client/assets/app-DiN3Jz4F.js.gz +0 -0
  396. package/dist/client/assets/arc-MDwycufi.js.br +0 -0
  397. package/dist/client/assets/arc-MDwycufi.js.gz +0 -0
  398. package/dist/client/assets/architectureDiagram-5GKGNRK7-DpW68CEx.js.br +0 -0
  399. package/dist/client/assets/architectureDiagram-5GKGNRK7-DpW68CEx.js.gz +0 -0
  400. package/dist/client/assets/blockDiagram-I7D4REHJ-CZQQVsmh.js.br +0 -0
  401. package/dist/client/assets/blockDiagram-I7D4REHJ-CZQQVsmh.js.gz +0 -0
  402. package/dist/client/assets/c4Diagram-7LVT6UL2-DjvDIEs1.js.br +0 -0
  403. package/dist/client/assets/c4Diagram-7LVT6UL2-DjvDIEs1.js.gz +0 -0
  404. package/dist/client/assets/channel-DXQeuo6Q.js +0 -1
  405. package/dist/client/assets/chunk-F27PBJKO-CyDTfLmz.js.br +0 -0
  406. package/dist/client/assets/chunk-F27PBJKO-CyDTfLmz.js.gz +0 -0
  407. package/dist/client/assets/chunk-IMKFNOWR-BYCj4545.js.br +0 -0
  408. package/dist/client/assets/chunk-IMKFNOWR-BYCj4545.js.gz +0 -0
  409. package/dist/client/assets/chunk-SVP7TREG-Biy6yZrB.js.br +0 -0
  410. package/dist/client/assets/chunk-SVP7TREG-Biy6yZrB.js.gz +0 -0
  411. package/dist/client/assets/chunk-TICWLB2K-8e9Sd9jU.js.br +0 -0
  412. package/dist/client/assets/chunk-TICWLB2K-8e9Sd9jU.js.gz +0 -0
  413. package/dist/client/assets/classDiagram-ZZMXUADV-u-fQC4d0.js +0 -1
  414. package/dist/client/assets/classDiagram-v2-VYDZK3BY-u-fQC4d0.js +0 -1
  415. package/dist/client/assets/cose-bilkent-JH36ORCC-PPh2sDUy.js.br +0 -0
  416. package/dist/client/assets/cose-bilkent-JH36ORCC-PPh2sDUy.js.gz +0 -0
  417. package/dist/client/assets/cynefin-OW5HDTMX-B11p1v5N.js.br +0 -0
  418. package/dist/client/assets/cynefin-OW5HDTMX-B11p1v5N.js.gz +0 -0
  419. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BKyWp8p1.js.br +0 -0
  420. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-BKyWp8p1.js.gz +0 -0
  421. package/dist/client/assets/dagre-GXQ25YYZ-B79CVuuK.js.br +0 -0
  422. package/dist/client/assets/dagre-GXQ25YYZ-B79CVuuK.js.gz +0 -0
  423. package/dist/client/assets/diagram-S7CK7UJ4-BKPJHT5i.js.br +0 -0
  424. package/dist/client/assets/diagram-S7CK7UJ4-BKPJHT5i.js.gz +0 -0
  425. package/dist/client/assets/diagram-UQ7AKVKN-adkntJ-H.js.br +0 -0
  426. package/dist/client/assets/diagram-UQ7AKVKN-adkntJ-H.js.gz +0 -0
  427. package/dist/client/assets/diagram-VSXAHHWV-CGOHyiQX.js.br +0 -0
  428. package/dist/client/assets/diagram-VSXAHHWV-CGOHyiQX.js.gz +0 -0
  429. package/dist/client/assets/diagram-VX7I27RA-C6uqmbvW.js.br +0 -0
  430. package/dist/client/assets/diagram-VX7I27RA-C6uqmbvW.js.gz +0 -0
  431. package/dist/client/assets/diagram-Z3DM3KII-DRbP0rNc.js.br +0 -0
  432. package/dist/client/assets/diagram-Z3DM3KII-DRbP0rNc.js.gz +0 -0
  433. package/dist/client/assets/ebnfDiagram-PWID7BFC-ZH3JjPxG.js.br +0 -0
  434. package/dist/client/assets/ebnfDiagram-PWID7BFC-ZH3JjPxG.js.gz +0 -0
  435. package/dist/client/assets/erDiagram-RLTQ6QDP-2pB0nAqM.js.br +0 -0
  436. package/dist/client/assets/erDiagram-RLTQ6QDP-2pB0nAqM.js.gz +0 -0
  437. package/dist/client/assets/flowDiagram-HODETNUW-g-NFSGVN.js.br +0 -0
  438. package/dist/client/assets/flowDiagram-HODETNUW-g-NFSGVN.js.gz +0 -0
  439. package/dist/client/assets/ganttDiagram-EL5Y4UJY-ou0k7MyH.js.br +0 -0
  440. package/dist/client/assets/ganttDiagram-EL5Y4UJY-ou0k7MyH.js.gz +0 -0
  441. package/dist/client/assets/gestureArbiter-BVGXbPvq.js.br +0 -0
  442. package/dist/client/assets/gestureArbiter-BVGXbPvq.js.gz +0 -0
  443. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-9FN50t1H.js.br +0 -0
  444. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-9FN50t1H.js.gz +0 -0
  445. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DJigQx1g.js.br +0 -0
  446. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DJigQx1g.js.gz +0 -0
  447. package/dist/client/assets/journeyDiagram-3NMN7TZE-D2B7mocZ.js.br +0 -0
  448. package/dist/client/assets/journeyDiagram-3NMN7TZE-D2B7mocZ.js.gz +0 -0
  449. package/dist/client/assets/kanban-definition-UXKFOSKX-Dibgxrol.js.br +0 -0
  450. package/dist/client/assets/kanban-definition-UXKFOSKX-Dibgxrol.js.gz +0 -0
  451. package/dist/client/assets/layout-l7vsNiDT.js.br +0 -0
  452. package/dist/client/assets/layout-l7vsNiDT.js.gz +0 -0
  453. package/dist/client/assets/linear-DYyWv-7A.js.br +0 -0
  454. package/dist/client/assets/linear-DYyWv-7A.js.gz +0 -0
  455. package/dist/client/assets/mermaid.core-filx9uhD.js.br +0 -0
  456. package/dist/client/assets/mermaid.core-filx9uhD.js.gz +0 -0
  457. package/dist/client/assets/mindmap-definition-YA3MSWOX-fs33msHm.js.br +0 -0
  458. package/dist/client/assets/mindmap-definition-YA3MSWOX-fs33msHm.js.gz +0 -0
  459. package/dist/client/assets/passwordBootstrap-v6a4CT6d.js.br +0 -0
  460. package/dist/client/assets/passwordBootstrap-v6a4CT6d.js.gz +0 -0
  461. package/dist/client/assets/pegDiagram-XKGWAZYB-mdj0nBrT.js.br +0 -0
  462. package/dist/client/assets/pegDiagram-XKGWAZYB-mdj0nBrT.js.gz +0 -0
  463. package/dist/client/assets/pieDiagram-E7YTZNPT-YoRrPBgl.js.br +0 -0
  464. package/dist/client/assets/pieDiagram-E7YTZNPT-YoRrPBgl.js.gz +0 -0
  465. package/dist/client/assets/quadrantDiagram-AXDQQJYC-DgZmaoSe.js.br +0 -0
  466. package/dist/client/assets/quadrantDiagram-AXDQQJYC-DgZmaoSe.js.gz +0 -0
  467. package/dist/client/assets/railroadDiagram-O6MQD6OU-CnBSlDaa.js.br +0 -0
  468. package/dist/client/assets/railroadDiagram-O6MQD6OU-CnBSlDaa.js.gz +0 -0
  469. package/dist/client/assets/referenceLongPress-DJsVBw_j.js.br +0 -0
  470. package/dist/client/assets/referenceLongPress-DJsVBw_j.js.gz +0 -0
  471. package/dist/client/assets/requirementDiagram-BXWQKSXE-BA9ZoM3G.js.br +0 -0
  472. package/dist/client/assets/requirementDiagram-BXWQKSXE-BA9ZoM3G.js.gz +0 -0
  473. package/dist/client/assets/sankeyDiagram-P5KCCOFB-bcxqUb6q.js.br +0 -0
  474. package/dist/client/assets/sankeyDiagram-P5KCCOFB-bcxqUb6q.js.gz +0 -0
  475. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-TLqeD9u8.js.br +0 -0
  476. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-TLqeD9u8.js.gz +0 -0
  477. package/dist/client/assets/sizeCapture-INFHLROL-D180O8mH.js.br +0 -0
  478. package/dist/client/assets/sizeCapture-INFHLROL-D180O8mH.js.gz +0 -0
  479. package/dist/client/assets/stateDiagram-D77RDMKH-CVeaj7aj.js.br +0 -0
  480. package/dist/client/assets/stateDiagram-D77RDMKH-CVeaj7aj.js.gz +0 -0
  481. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-Cja01XE6.js +0 -1
  482. package/dist/client/assets/swimlanes-42K2YHIH-BSfkryAI.js.br +0 -0
  483. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-Bt2D90qE.js +0 -8
  484. package/dist/client/assets/timeline-definition-24CTP7MA-CXrJcUqt.js.br +0 -0
  485. package/dist/client/assets/timeline-definition-24CTP7MA-CXrJcUqt.js.gz +0 -0
  486. package/dist/client/assets/vennDiagram-4TSXK5OY-DUlZIoBs.js.gz +0 -0
  487. package/dist/client/assets/wardleyDiagram-VM6X3IG4-PW7fiK5-.js.br +0 -0
  488. package/dist/client/assets/wardleyDiagram-VM6X3IG4-PW7fiK5-.js.gz +0 -0
  489. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CGgWBXnk.js.br +0 -0
  490. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CGgWBXnk.js.gz +0 -0
@@ -188,7 +188,7 @@
188
188
  里为空,不声明,避免无谓的字体回退查找。
189
189
  Regular + Bold 两种变体自托管,替代 xterm 合成 bold CJK。 */
190
190
  </style>
191
- <script type="module" crossorigin src="/assets/app-DiN3Jz4F.js"></script>
191
+ <script type="module" crossorigin src="/assets/app-Cs_Q5pAC.js"></script>
192
192
  <link rel="modulepreload" crossorigin href="/assets/react-XDCjal2T.js">
193
193
  <link rel="modulepreload" crossorigin href="/assets/dnd-BCFAPC0L.js">
194
194
  <link rel="modulepreload" crossorigin href="/assets/terminal-C7X98Amf.js">
Binary file
Binary file
package/dist/client/sw.js CHANGED
@@ -1 +1 @@
1
- if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()}).then(()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(i,o)=>{const a=e||("document"in self?document.currentScript.src:"")||location.href;if(s[a])return;let c={};const r=e=>n(e,a),d={module:{uri:a},exports:c,require:r};s[a]=Promise.all(i.map(e=>d[e]||r(e))).then(e=>(o(...e),c))}}define(["./workbox-9845bf53"],function(e){"use strict";importScripts("sw-encrypted-background.js","sw-notifications.js","sw-secure-api.js","sw-downloads.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"index.html",revision:"4201c2eac3125164637917ca18f6bcae"},{url:"assets/app-DiN3Jz4F.js",revision:null},{url:"assets/react-XDCjal2T.js",revision:null},{url:"assets/dnd-BCFAPC0L.js",revision:null},{url:"assets/terminal-C7X98Amf.js",revision:null},{url:"assets/index-fjWWhVQp.css",revision:null},{url:"icons/agents/opencode.svg",revision:"851c2931d95821ba2b39b68587b48976"},{url:"icons/agents/kimi.svg",revision:"5366c710f4f763022fe159a69cf17409"},{url:"icons/agents/grok.svg",revision:"cd745b0b964545bc7a6b4f36021c3298"},{url:"icons/agents/goose.svg",revision:"c79b927278983c19098d77b4b0c11ab3"},{url:"icons/agents/gemini.svg",revision:"7a64f6d6f80a908255e9c0256903882e"},{url:"icons/agents/droid.svg",revision:"f28723b8c5c115e0908ba3c72613e256"},{url:"icons/agents/cursor.svg",revision:"a1528f3d3cda497f75a5db28defb19de"},{url:"icons/agents/copilot.svg",revision:"dd52e96c1eac0b6ec4bedcd0ddd3b52d"},{url:"icons/agents/codex.svg",revision:"608e55babb0b217e1f2da287342b46d3"},{url:"icons/agents/claude.svg",revision:"08af0225b7acdd8e8f573f3247e5e1c3"},{url:"icons/agents/amp.svg",revision:"af12f8b33faa81e4d46ea7b93c7e43f3"},{url:"apple-touch-icon-180x180.png",revision:"628c2e2f28a9b545aa57be1352025643"},{url:"favicon.ico",revision:"2994debfa6f59a0898e24eb0c54d64b5"},{url:"maskable-icon-512x512.png",revision:"4d489331fd81f0713c400b26426442b9"},{url:"pwa-192x192.png",revision:"4d6f899888cfb8ccd7a1fd3c9e583ad2"},{url:"pwa-512x512.png",revision:"0885dd7ec8932e7f878b013d51a380a4"},{url:"robots.txt",revision:"d9339907142917dee4aac78494ac9cfe"},{url:"sw-downloads.js",revision:"48dab2e78bd93b4eee27fca487eccfde"},{url:"sw-notifications.js",revision:"fde578590ea8b0540d488ef448b48f45"},{url:"sw-secure-api.js",revision:"cf2bdbd03d41d66d60344c0b5a1075de"},{url:"manifest.webmanifest",revision:"83f9a43b74c236012adafb077fb6d774"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{denylist:[/^\/api\//,/^\/__termdock-download\//,/^\/health$/]})),e.registerRoute(/\/assets\/.*\.(?:js|css)$/,new e.CacheFirst({cacheName:"termdock-lazy-assets-v1",plugins:[new e.CacheableResponsePlugin({statuses:[0,200]}),new e.ExpirationPlugin({maxEntries:96,maxAgeSeconds:2592e3})]}),"GET"),e.registerRoute(/\/fonts\/terminal\/[^/]+-[a-f0-9]{12}\.woff2$/,new e.CacheFirst({cacheName:"termdock-fonts-v2",plugins:[new e.CacheableResponsePlugin({statuses:[0,200]}),new e.ExpirationPlugin({maxEntries:384,maxAgeSeconds:2592e3})]}),"GET"),e.registerRoute(/\/fonts\/.*\.(?:woff2|ttf)$/,new e.StaleWhileRevalidate({cacheName:"termdock-fonts-v1",plugins:[new e.ExpirationPlugin({maxEntries:24,maxAgeSeconds:2592e3})]}),"GET")});
1
+ if(!self.define){let e,s={};const n=(n,i)=>(n=new URL(n+".js",i).href,s[n]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()}).then(()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(i,o)=>{const a=e||("document"in self?document.currentScript.src:"")||location.href;if(s[a])return;let c={};const r=e=>n(e,a),d={module:{uri:a},exports:c,require:r};s[a]=Promise.all(i.map(e=>d[e]||r(e))).then(e=>(o(...e),c))}}define(["./workbox-9845bf53"],function(e){"use strict";importScripts("sw-encrypted-background.js","sw-notifications.js","sw-secure-api.js","sw-downloads.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"index.html",revision:"7a1b8ea45b07e7de857a9dc039051c63"},{url:"assets/app-Cs_Q5pAC.js",revision:null},{url:"assets/react-XDCjal2T.js",revision:null},{url:"assets/dnd-BCFAPC0L.js",revision:null},{url:"assets/terminal-C7X98Amf.js",revision:null},{url:"assets/index-fjWWhVQp.css",revision:null},{url:"icons/agents/opencode.svg",revision:"851c2931d95821ba2b39b68587b48976"},{url:"icons/agents/kimi.svg",revision:"5366c710f4f763022fe159a69cf17409"},{url:"icons/agents/grok.svg",revision:"cd745b0b964545bc7a6b4f36021c3298"},{url:"icons/agents/goose.svg",revision:"c79b927278983c19098d77b4b0c11ab3"},{url:"icons/agents/gemini.svg",revision:"7a64f6d6f80a908255e9c0256903882e"},{url:"icons/agents/droid.svg",revision:"f28723b8c5c115e0908ba3c72613e256"},{url:"icons/agents/cursor.svg",revision:"a1528f3d3cda497f75a5db28defb19de"},{url:"icons/agents/copilot.svg",revision:"dd52e96c1eac0b6ec4bedcd0ddd3b52d"},{url:"icons/agents/codex.svg",revision:"608e55babb0b217e1f2da287342b46d3"},{url:"icons/agents/claude.svg",revision:"08af0225b7acdd8e8f573f3247e5e1c3"},{url:"icons/agents/amp.svg",revision:"af12f8b33faa81e4d46ea7b93c7e43f3"},{url:"apple-touch-icon-180x180.png",revision:"628c2e2f28a9b545aa57be1352025643"},{url:"favicon.ico",revision:"2994debfa6f59a0898e24eb0c54d64b5"},{url:"maskable-icon-512x512.png",revision:"4d489331fd81f0713c400b26426442b9"},{url:"pwa-192x192.png",revision:"4d6f899888cfb8ccd7a1fd3c9e583ad2"},{url:"pwa-512x512.png",revision:"0885dd7ec8932e7f878b013d51a380a4"},{url:"robots.txt",revision:"d9339907142917dee4aac78494ac9cfe"},{url:"sw-downloads.js",revision:"48dab2e78bd93b4eee27fca487eccfde"},{url:"sw-notifications.js",revision:"fde578590ea8b0540d488ef448b48f45"},{url:"sw-secure-api.js",revision:"cf2bdbd03d41d66d60344c0b5a1075de"},{url:"manifest.webmanifest",revision:"83f9a43b74c236012adafb077fb6d774"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html"),{denylist:[/^\/api\//,/^\/__termdock-download\//,/^\/health$/]})),e.registerRoute(/\/assets\/.*\.(?:js|css)$/,new e.CacheFirst({cacheName:"termdock-lazy-assets-v1",plugins:[new e.CacheableResponsePlugin({statuses:[0,200]}),new e.ExpirationPlugin({maxEntries:96,maxAgeSeconds:2592e3})]}),"GET"),e.registerRoute(/\/fonts\/terminal\/[^/]+-[a-f0-9]{12}\.woff2$/,new e.CacheFirst({cacheName:"termdock-fonts-v2",plugins:[new e.CacheableResponsePlugin({statuses:[0,200]}),new e.ExpirationPlugin({maxEntries:384,maxAgeSeconds:2592e3})]}),"GET"),e.registerRoute(/\/fonts\/.*\.(?:woff2|ttf)$/,new e.StaleWhileRevalidate({cacheName:"termdock-fonts-v1",plugins:[new e.ExpirationPlugin({maxEntries:24,maxAgeSeconds:2592e3})]}),"GET")});
Binary file
Binary file
@@ -107,7 +107,12 @@ cleanup without --confirm prints the plan and refuses (also 1);
107
107
  Message limit: ${COLLAB_LIMITS.message_bytes} UTF-8 bytes; metadata: ${COLLAB_LIMITS.metadata_bytes} bytes.
108
108
  Idempotency retention: 7 days. Terminal delivery, ACK and result never imply each other.
109
109
  Delivery semantics: delivered = written to the terminal — never proof of
110
- reading or task completion; a timeout stops waiting, it does not cancel delivery.`;
110
+ reading or task completion; a timeout stops waiting, it does not cancel delivery.
111
+ The service cannot see whether the recipient's agent consumed a message. To
112
+ judge for yourself, use --wait-until delivered and read the recipient-screen
113
+ snapshot in the receipt: if your message is not visible on that screen, send it
114
+ again (a fresh send is a new message and will be written again); if it is
115
+ visible but unanswered, the recipient may simply not have started yet.`;
111
116
  /** One roster row: prefer the member's human name, keep the full session id
112
117
  * reachable for role set/unset targeting, mark unset members explicitly. */
113
118
  function roleLine(member, role) {
@@ -308,6 +313,25 @@ export function waitSatisfied(receipt, stage, reply) {
308
313
  const reached = stage === 'queued' || (stage === 'delivered' && ['delivered', 'read'].includes(receipt.status));
309
314
  return reached && (!reply || (reply === 'ack' ? receipt.ack_at != null : reply === 'result' ? receipt.result_ids?.length > 0 : receipt.reply_ids?.length > 0));
310
315
  }
316
+ /** Delivery diagnoses a sender can act on. `delivered` means the bytes reached
317
+ * the recipient's pty — never that anything consumed them; these map the
318
+ * machine reasons onto what the sender should do next, so a settled-but-
319
+ * unconsumed message is not mistaken for a lost one (or a good one). */
320
+ const DELIVERY_DIAGNOSTICS = {
321
+ AGENT_CONSUME_UNCONFIRMED: '消息已写入对方终端,但未确认被对方消费;它可能尚未开始处理,可用 capture 查看当前屏幕或重发',
322
+ SHELL_CONFIRMATION_REQUIRED: '目标当前是 shell,消息可能被当命令执行;确认请运行 message confirm-shell <id>',
323
+ DELIVERY_IN_PROGRESS: '投递进行中(写入前的中间标记,正常会在数秒内推进为 delivered 或带原因的重试)',
324
+ TERMINAL_WRITE_FAILED: '写入对方终端失败,会按重试间隔继续尝试',
325
+ TMUX_PANE_CHANGED: '目标面板已变化,投递已跳过,等待重新绑定',
326
+ TMUX_PANE_IN_MODE: '目标面板处于 tmux 模式(如滚动查看),按键已跳过',
327
+ };
328
+ export function deliveryDiagnosticText(lastError) {
329
+ if (typeof lastError !== 'string' || !lastError)
330
+ return '';
331
+ const code = lastError.split(':', 1)[0].trim();
332
+ const known = DELIVERY_DIAGNOSTICS[code];
333
+ return known ? `${code}:${known}` : lastError;
334
+ }
311
335
  export async function executeCollaborationCommand(command, context, io) {
312
336
  const o = command.options;
313
337
  const now = io.now ?? Date.now;
@@ -329,6 +353,7 @@ export async function executeCollaborationCommand(command, context, io) {
329
353
  };
330
354
  const output = (value) => {
331
355
  if (o.text) {
356
+ let diagnosed = false;
332
357
  if (Array.isArray(value.messages))
333
358
  for (const message of value.messages) {
334
359
  const fanIds = Array.isArray(message.fanOutIds) ? message.fanOutIds : [];
@@ -346,6 +371,14 @@ export async function executeCollaborationCommand(command, context, io) {
346
371
  if (!o['no-rules'] && value.message.instructions?.text)
347
372
  io.write(`消息附群规版本 ${value.message.instructions.version};td collab rules get <组id> --text 查看全文`);
348
373
  io.write(`[${value.status}] ${canonicalShortId(String(value.message_id ?? ''))}\n${value.message.content}`);
374
+ // A pending message keeps retrying by design (the alternative is
375
+ // dropping it); surface why and when the next attempt is so the sender
376
+ // can decide to wait or resend instead of guessing.
377
+ if (value.status === 'pending' && (value.attempt_count || value.last_error)) {
378
+ const retryIn = value.next_retry_at ? Math.max(0, Math.ceil((Number(value.next_retry_at) - now()) / 1000)) : null;
379
+ io.write(`投递中:第 ${value.attempt_count ?? 0} 次尝试${retryIn !== null ? `,下次重试约 ${retryIn} 秒后` : ''}${value.last_error ? `,最近原因 ${deliveryDiagnosticText(value.last_error)}` : ''}`);
380
+ diagnosed = true;
381
+ }
349
382
  }
350
383
  else if (value.message_id) {
351
384
  io.write(`${value.status} ${canonicalShortId(String(value.message_id))}${value.thread_id ? ` thread=${canonicalShortId(String(value.thread_id))}` : ''}${value.code ? ` ${value.code}` : ''}${value.failure_reason ? ` ${value.failure_reason}` : ''}`);
@@ -363,8 +396,8 @@ export async function executeCollaborationCommand(command, context, io) {
363
396
  }
364
397
  else
365
398
  io.write(JSON.stringify(value, null, 2));
366
- if (value.last_error)
367
- io.write(String(value.last_error));
399
+ if (value.last_error && !diagnosed)
400
+ io.write(`诊断:${deliveryDiagnosticText(value.last_error)}`);
368
401
  if (value.next_cursor)
369
402
  io.write(`next_cursor=${value.next_cursor} has_more=${value.has_more}`);
370
403
  }
@@ -176,7 +176,12 @@ export class CollaborationDeliveryWorker {
176
176
  // Capture the recipient terminal before marking delivered, so a sender
177
177
  // waiting on delivered always finds the snapshot present. The capture is
178
178
  // strictly best-effort: a failure must never block delivery completion.
179
+ // Delayed briefly so the pane shows the rendered paste rather than the
180
+ // input box mid-write.
179
181
  if (route.capture) {
182
+ const snapshotDelay = this.options.snapshotDelayMs ?? 200;
183
+ if (snapshotDelay > 0)
184
+ await new Promise((resolve) => setTimeout(resolve, snapshotDelay));
180
185
  try {
181
186
  const snapshot = await route.capture();
182
187
  if (snapshot)
@@ -302,8 +302,13 @@ export class CollaborationPeerTransport {
302
302
  || typeof message.toSessionId !== 'string' || !message.toSessionId.startsWith(`remote:${encodeURIComponent(b.localOrigin)}:`)
303
303
  || Buffer.byteLength(JSON.stringify(message)) > COLLAB_LIMITS.wire_bytes)
304
304
  throw new Error('INVALID_PEER_MESSAGE');
305
+ const localTarget = localSession(b.localOrigin, message.toSessionId);
306
+ // A session-scoped peer may only ever reach the sessions its inviter granted.
307
+ const scope = this.options.scopeFor?.(subjectId);
308
+ if (scope !== undefined && !scope.includes(localTarget))
309
+ throw new Error('SESSION_SCOPE_DENIED');
305
310
  const incoming = { ...message, fromSessionId: remoteSession(b.peer.origin, message.fromSessionId),
306
- toSessionId: localSession(b.localOrigin, message.toSessionId), status: 'pending', deliveredAt: null, readAt: null,
311
+ toSessionId: localTarget, status: 'pending', deliveredAt: null, readAt: null,
307
312
  snapshot: null, deliverySource: undefined, readSource: undefined, shellConfirmed: message.shellConfirmed === true };
308
313
  const existing = store.getMessage(message.id);
309
314
  if (existing && (existing.groupId !== incoming.groupId || existing.fromSessionId !== incoming.fromSessionId
@@ -402,7 +407,9 @@ export class CollaborationPeerTransport {
402
407
  }
403
408
  async sync(b) {
404
409
  const store = this.options.store, key = `${b.groupId}:${b.peer.serviceId}`;
410
+ const scope = this.options.scopeFor?.(b.peer.serviceId);
405
411
  const messages = store.federationSnapshot().messages.filter(m => m.groupId === b.groupId).filter(m => !m.fromSessionId?.startsWith('remote:') && m.fromSessionId !== null
412
+ && (scope === undefined || scope.includes(m.fromSessionId))
406
413
  && m.toSessionId.startsWith(`remote:${encodeURIComponent(b.peer.origin)}:`) && !['failed', 'expired'].includes(m.status)
407
414
  && (m.status === 'pending' || !m.snapshot)).sort((a, b) => Number(b.status === 'pending') - Number(a.status === 'pending'));
408
415
  const pending = messages.filter(m => m.status === 'pending');
@@ -33,6 +33,15 @@ export class CollaborationService {
33
33
  throw new Error('INVALID_DIRECTORY');
34
34
  for (const peer of data.peers)
35
35
  validateCollaborationNode(peer);
36
+ if (data.scoped !== undefined) {
37
+ if (!data.scoped || typeof data.scoped !== 'object' || Array.isArray(data.scoped))
38
+ throw new Error('INVALID_DIRECTORY');
39
+ for (const [serviceId, scope] of Object.entries(data.scoped)) {
40
+ if (!data.peers.some(peer => peer.serviceId === serviceId) || !scope || typeof scope !== 'object'
41
+ || typeof scope.device !== 'string' || !/^12D3KooW[a-zA-Z0-9]{30,60}$/.test(scope.device))
42
+ throw new Error('INVALID_DIRECTORY');
43
+ }
44
+ }
36
45
  if (data.origin)
37
46
  validateCollaborationNode({ ...options.node(), origin: data.origin });
38
47
  this.document = data;
@@ -95,6 +104,43 @@ export class CollaborationService {
95
104
  void this.refresh();
96
105
  return { ok: true, registered: this.document.peers.map(peer => peer.serviceId) };
97
106
  }
107
+ /** Effective local sessions a peer may touch. `undefined` means a fully
108
+ * authorized directory peer; an array (possibly empty) means a peer that
109
+ * exists only because a device shared a write invitation for those sessions. */
110
+ effectiveScope(serviceId) {
111
+ const scoped = this.document.scoped?.[serviceId];
112
+ if (!scoped)
113
+ return undefined;
114
+ try {
115
+ return [...new Set(this.options.deviceScope?.(scoped.device) ?? [])];
116
+ }
117
+ catch {
118
+ return [];
119
+ }
120
+ }
121
+ /** Register a peer that a device's session-scoped write grant vouches for.
122
+ * The peer never gains directory or group authority beyond those sessions,
123
+ * and the surface follows the grant: revoking or expiring it empties the scope. */
124
+ registerScopedPeer(origin, deviceSubject, node, sessions) {
125
+ if (!/^12D3KooW[a-zA-Z0-9]{30,60}$/.test(deviceSubject) || !Array.isArray(sessions) || !sessions.length || sessions.length > 64
126
+ || sessions.some(session => typeof session !== 'string' || !session) || new Set(sessions).size !== sessions.length)
127
+ throw new Error('INVALID_SCOPE');
128
+ this.setOrigin(origin);
129
+ validateCollaborationNode(node);
130
+ const existing = this.document.peers.find(peer => peer.serviceId === node.serviceId || peer.origin === node.origin);
131
+ if (existing) {
132
+ if (existing.serviceId !== node.serviceId || existing.origin !== node.origin || existing.caFingerprint256 !== node.caFingerprint256)
133
+ throw new Error('PEER_IDENTITY_CHANGED');
134
+ // An already fully authorized directory peer must not be downgraded by a device.
135
+ if (!this.document.scoped?.[existing.serviceId])
136
+ return { ok: true, peer: existing.serviceId, sessions: [] };
137
+ }
138
+ this.remember(node);
139
+ this.document.scoped = { ...this.document.scoped, [node.serviceId]: { device: deviceSubject } };
140
+ this.persist();
141
+ void this.refresh();
142
+ return { ok: true, peer: node.serviceId, sessions: this.effectiveScope(node.serviceId) ?? [] };
143
+ }
98
144
  invite(origin) {
99
145
  this.setOrigin(origin);
100
146
  const code = randomBytes(32).toString('base64url'), expiresAt = Date.now() + 10 * 60_000;
@@ -142,24 +188,31 @@ export class CollaborationService {
142
188
  if (packet.action === 'duplex')
143
189
  return { ok: true };
144
190
  if (packet.action === 'directory')
145
- return this.snapshot(peer.origin);
191
+ return this.snapshot(peer);
146
192
  if (packet.action === 'group') {
147
193
  const canonical = packet.group;
148
194
  if (!canonical?.sessionIds?.some(id => address(id)?.origin === peer.origin) && !this.document.replicas?.[canonical?.id]?.includes(peer.origin))
149
195
  throw new Error('GROUP_SENDER_NOT_MEMBER');
150
- this.merge(canonical, packet.nodes);
196
+ this.merge(canonical, packet.nodes, peer);
151
197
  return { ok: true };
152
198
  }
153
199
  throw new Error('COLLABORATION_OPERATION_UNSUPPORTED');
154
200
  }
155
201
  nodes() { return [...new Map([...this.options.transport.registeredNodes(), ...this.document.peers, this.node()].map(node => [node.origin, node])).values()]; }
156
- snapshot(peerOrigin) {
202
+ /** A scoped peer sees exactly its authorized sessions and the groups those
203
+ * sessions belong to. Other peers' identities are not exposed to it. */
204
+ snapshot(peer) {
157
205
  const origin = this.node().origin;
158
- return { sessions: this.options.sessions(), groups: this.options.store.federationSnapshot().groups
159
- .filter(group => group.federated && (group.sessionIds.some(id => address(id)?.origin === peerOrigin) || this.document.replicas?.[group.id]?.includes(peerOrigin)))
160
- .map(group => mapGroup(group, id => address(id) ? id : remoteSession(origin, id))), nodes: this.nodes() };
206
+ const scope = this.effectiveScope(peer.serviceId);
207
+ const sessions = this.options.sessions();
208
+ const groups = this.options.store.federationSnapshot().groups
209
+ .filter(group => group.federated && (group.sessionIds.some(id => address(id)?.origin === peer.origin) || this.document.replicas?.[group.id]?.includes(peer.origin)))
210
+ .filter(group => scope === undefined || group.sessionIds.every(id => address(id) ? true : scope.includes(id)))
211
+ .map(group => mapGroup(group, id => address(id) ? id : remoteSession(origin, id)));
212
+ return { sessions: scope === undefined ? sessions : sessions.filter(session => scope.includes(session.sessionId)),
213
+ groups, nodes: scope === undefined ? this.nodes() : [this.node(), peer] };
161
214
  }
162
- merge(canonical, nodes) {
215
+ merge(canonical, nodes, source) {
163
216
  if (!canonical || typeof canonical.id !== 'string' || !canonical.id.startsWith('cross-') || !Array.isArray(canonical.sessionIds)
164
217
  || canonical.sessionIds.length < 2 || canonical.sessionIds.length > 500 || typeof canonical.name !== 'string' || !canonical.name.trim() || COLLAB_NAME_FORBIDDEN.test(canonical.name)
165
218
  || !Number.isFinite(canonical.updatedAt) || canonical.updatedAt > Date.now() + 60_000 || !Array.isArray(nodes) || nodes.length > 65)
@@ -188,10 +241,19 @@ export class CollaborationService {
188
241
  this.persist();
189
242
  }
190
243
  const localIds = new Set(this.options.sessions().map(s => s.sessionId));
244
+ const scope = source ? this.effectiveScope(source.serviceId) : undefined;
191
245
  const incoming = { ...mapGroup(canonical, id => local(self.origin, id)), federated: true };
192
246
  for (const id of incoming.sessionIds) {
193
247
  const remote = address(id);
194
- if (remote ? !nodes.some(node => node.origin === remote.origin) : !localIds.has(id) && !existing?.sessionIds.includes(id))
248
+ if (remote) {
249
+ if (!nodes.some(node => node.origin === remote.origin))
250
+ throw new Error('GROUP_MEMBER_UNAVAILABLE');
251
+ continue;
252
+ }
253
+ // A scoped peer can never pull another local session into a group.
254
+ if (scope !== undefined && !scope.includes(id))
255
+ throw new Error('SESSION_SCOPE_DENIED');
256
+ if (!localIds.has(id) && !existing?.sessionIds.includes(id))
195
257
  throw new Error('GROUP_MEMBER_UNAVAILABLE');
196
258
  }
197
259
  incoming.remoteSessions = incoming.sessionIds.filter(id => address(id)).map(id => {
@@ -241,10 +303,14 @@ export class CollaborationService {
241
303
  const sessions = data.sessions.filter((s) => s && typeof s.sessionId === 'string' && !s.sessionId.startsWith('remote:'));
242
304
  this.observations.set(peer.serviceId, { sessions, checkedAt: Date.now() });
243
305
  for (const group of data.groups)
244
- this.merge(group, data.nodes);
306
+ this.merge(group, data.nodes, peer);
245
307
  for (const group of this.options.store.federationSnapshot().groups.filter(g => g.federated && (g.sessionIds.some(id => address(id)?.origin === peer.origin) || this.document.replicas?.[g.id]?.includes(peer.origin)))) {
308
+ const scope = this.effectiveScope(peer.serviceId);
309
+ // Never push a group to a scoped peer if it involves other local sessions.
310
+ if (scope !== undefined && !group.sessionIds.every(id => address(id) ? true : scope.includes(id)))
311
+ continue;
246
312
  const canonical = mapGroup(group, id => address(id) ? id : remoteSession(this.node().origin, id));
247
- const nodes = this.nodes();
313
+ const nodes = scope === undefined ? this.nodes() : [this.node(), peer];
248
314
  if (canonical.sessionIds.some(id => !nodes.some(node => node.origin === address(id)?.origin)))
249
315
  continue;
250
316
  this.merge(canonical, nodes);
@@ -264,7 +330,7 @@ export class CollaborationService {
264
330
  return { origin: peer.origin, serviceId: peer.serviceId, label: peer.origin,
265
331
  connected: !!observed && !observed.error && Date.now() - observed.checkedAt < 15_000, error: observed?.error ?? (!observed ? 'CONNECTING' : undefined) };
266
332
  });
267
- return { protocolVersion: 2, sessions: this.document.peers.flatMap(peer => (this.observations.get(peer.serviceId)?.sessions ?? []).map(session => ({ ...session,
333
+ return { protocolVersion: 2, sessions: this.document.peers.flatMap(peer => this.document.scoped?.[peer.serviceId] ? [] : (this.observations.get(peer.serviceId)?.sessions ?? []).map(session => ({ ...session,
268
334
  sessionId: remoteSession(peer.origin, session.sessionId), backendSessionId: null, agentNativeSessionId: null, serviceOrigin: peer.origin, serviceLabel: peer.origin,
269
335
  serviceConnected: services.find(s => s.origin === peer.origin).connected, serviceCheckedAt: this.observations.get(peer.serviceId)?.checkedAt }))),
270
336
  services: [...services, ...missing.map(origin => ({ origin, label: origin, connected: false, error: '服务连接授权尚未同步;在已授权服务页面连接后会自动完成' }))] };
@@ -29,7 +29,7 @@ import { homedir } from 'os';
29
29
  import cookieParser from 'cookie-parser';
30
30
  import { fileURLToPath } from 'url';
31
31
  import { WebSocketServer } from 'ws';
32
- import terminalRoutes, { handleTerminalWebSocket, handleControlWebSocket } from './routes/terminal.js';
32
+ import terminalRoutes, { handleTerminalWebSocket, handleControlWebSocket, resolveStableFederationSessionId } from './routes/terminal.js';
33
33
  import filesystemRoutes from './routes/filesystem.js';
34
34
  import authRoutes from './routes/auth.js';
35
35
  import notificationRoutes from './routes/notifications.js';
@@ -452,6 +452,7 @@ export function startServer(options = {}) {
452
452
  const federation = createFederationRuntime(app, path.join(homedir(), '.termdock', 'federation'), {
453
453
  terminal: handleTerminalWebSocket, control: handleControlWebSocket,
454
454
  }, {
455
+ resolveSessionId: resolveStableFederationSessionId,
455
456
  collaborationConnected: (subjectId, rpc) => {
456
457
  const channels = collaborationChannels.get(subjectId) ?? new Set();
457
458
  channels.add(rpc);
@@ -471,6 +472,11 @@ export function startServer(options = {}) {
471
472
  throw new Error('COLLABORATION_UNAVAILABLE');
472
473
  return collaborationService.receive(subjectId, packet);
473
474
  },
475
+ registerScopedCollaborationPeer: (deviceSubject, origin, node, sessions) => {
476
+ if (!collaborationService)
477
+ throw new Error('COLLABORATION_UNAVAILABLE');
478
+ return collaborationService.registerScopedPeer(origin, deviceSubject, node, sessions);
479
+ },
474
480
  collaborationExchange: (subjectId, packet) => {
475
481
  if (!collaborationTransport)
476
482
  throw new Error('COLLABORATION_UNAVAILABLE');
@@ -530,6 +536,7 @@ export function startServer(options = {}) {
530
536
  reverse: reverseCollaboration,
531
537
  file: path.join(homedir(), '.termdock', 'federation', 'collaboration-peers.json'), serviceId: runtime.serviceId,
532
538
  store: collaborationStore, deliver: deliverPeerCollaboration, activity: collaborationLocalActivity,
539
+ scopeFor: serviceId => collaborationService?.effectiveScope(serviceId),
533
540
  connect: async (peer, via) => {
534
541
  if (!via)
535
542
  return connectPeer(peer);
@@ -559,6 +566,9 @@ export function startServer(options = {}) {
559
566
  collaborationService = new CollaborationService({ file: path.join(homedir(), '.termdock', 'federation', 'collaboration-services.json'),
560
567
  store: collaborationStore, transport: collaborationTransport, node: () => app.locals.collaborationNode,
561
568
  sessions: collaborationDirectorySessions, reverse: reverseCollaboration, connect: connectPeer,
569
+ deviceScope: device => runtime.store.listEffective({ subjectId: device, serviceId: runtime.serviceId })
570
+ .filter(grant => grant.scope.kind === 'sessions' && grant.actions.includes('session.input'))
571
+ .flatMap(grant => grant.scope.kind === 'sessions' ? grant.scope.sessionIds : []),
562
572
  pairConnect: peer => connectCollaborationRpc(runtime.identity, peer) });
563
573
  app.locals.collaborationService = collaborationService;
564
574
  collaborationService.start();
@@ -126,7 +126,25 @@ export async function createFederationRuntime(app, directory, handlers, options
126
126
  let collaborationRpc;
127
127
  let unregisterCollaboration;
128
128
  const open = (action) => openAccessAllowed(context.allowOpenAccess === true, isAuthEnabled(), action);
129
- const allowed = (subjectId, action, sessionId) => open(action) || store.authorize({ subjectId, serviceId, action, sessionId }).allowed;
129
+ const stableSessionId = (id) => {
130
+ try {
131
+ const resolved = options.resolveSessionId?.(id);
132
+ return typeof resolved === 'string' && resolved && resolved !== id ? resolved : undefined;
133
+ }
134
+ catch {
135
+ return undefined;
136
+ }
137
+ };
138
+ const allowed = (subjectId, action, sessionId) => {
139
+ if (open(action) || store.authorize({ subjectId, serviceId, action, sessionId }).allowed)
140
+ return true;
141
+ // The wire may still carry the transient backend PTY id while the grant
142
+ // is bound to the stable client session id (or an older backend id).
143
+ if (sessionId === undefined)
144
+ return false;
145
+ const stable = stableSessionId(sessionId);
146
+ return stable !== undefined && store.authorize({ subjectId, serviceId, action, sessionId: stable }).allowed;
147
+ };
130
148
  const full = (subjectId) => open() || store.hasFullServiceAccess({ subjectId, serviceId });
131
149
  let channel;
132
150
  const operations = new Map();
@@ -276,6 +294,20 @@ export async function createFederationRuntime(app, directory, handlers, options
276
294
  throw new Error('COLLABORATION_UPGRADE_REQUIRED');
277
295
  send({ type: 'result', id: packet.id, ...options.collaborationService(subjectId, packet) });
278
296
  }
297
+ else if (packet.type === 'collaboration-scoped-peer') {
298
+ if (!options.registerScopedCollaborationPeer)
299
+ throw new Error('COLLABORATION_UPGRADE_REQUIRED');
300
+ const origin = typeof packet.origin === 'string' ? packet.origin : '';
301
+ if (!origin || !packet.node || typeof packet.node !== 'object')
302
+ throw new Error('INVALID_COLLABORATION_PEER');
303
+ // The peer may only touch sessions this device can write to right now.
304
+ const sessions = [...new Set(store.listEffective({ subjectId, serviceId })
305
+ .filter(grant => grant.scope.kind === 'sessions' && grant.actions.includes('session.input'))
306
+ .flatMap(grant => grant.scope.kind === 'sessions' ? grant.scope.sessionIds : []))];
307
+ if (!sessions.length)
308
+ throw new Error('AUTHORIZATION_DENIED');
309
+ send({ type: 'result', id: packet.id, ...options.registerScopedCollaborationPeer(subjectId, origin, packet.node, sessions) });
310
+ }
279
311
  else if (packet.type === 'collaboration-exchange') {
280
312
  if (!options.collaborationExchange)
281
313
  throw new Error('COLLABORATION_UNAVAILABLE');
@@ -411,9 +443,24 @@ export async function createFederationRuntime(app, directory, handlers, options
411
443
  ...(packet.expiresAt === undefined ? {} : { expiresAt: packet.expiresAt }) };
412
444
  validateInvitation(invitation);
413
445
  if (invitation.scope.kind === 'sessions') {
414
- const known = new Set((await sessionInventory()).filter(session => session.live === true).map(session => session.backendSessionId));
415
- if (!invitation.scope.sessionIds.every(id => known.has(id)))
446
+ // Bind to the stable client session id, never the transient backend
447
+ // PTY id: backends are replaced on restart, tmux recovery or
448
+ // re-attach, which would otherwise invalidate the whole grant.
449
+ const stable = new Map();
450
+ for (const session of await sessionInventory()) {
451
+ if (session.live !== true)
452
+ continue;
453
+ const frontendSessionId = typeof session.sessionId === 'string' ? session.sessionId : '';
454
+ if (!frontendSessionId)
455
+ continue;
456
+ stable.set(frontendSessionId, frontendSessionId);
457
+ if (typeof session.backendSessionId === 'string' && session.backendSessionId)
458
+ stable.set(session.backendSessionId, frontendSessionId);
459
+ }
460
+ const sessionIds = invitation.scope.sessionIds.map(id => stable.get(id)).filter((id) => typeof id === 'string');
461
+ if (sessionIds.length !== invitation.scope.sessionIds.length || new Set(sessionIds).size !== sessionIds.length)
416
462
  throw new Error('UNKNOWN_SESSION');
463
+ invitation.scope = { kind: 'sessions', sessionIds };
417
464
  }
418
465
  check('authorization.manage');
419
466
  send({ type: 'result', id: packet.id, serviceId, ...invitations.create(subjectId, invitation) });
@@ -1436,6 +1436,19 @@ async function runAgentAutomation(automation, req) {
1436
1436
  function resolveFrontendSessionId(input) {
1437
1437
  return resolveCollaborationSessionId(input, globalSessionState.sessions, collaborationRouting);
1438
1438
  }
1439
+ /** Stable-id resolver for encrypted client authorization: accepts either the
1440
+ * stable client session id or a transient backend PTY id and returns the stable
1441
+ * one, so session-scoped grants survive backend replacement. */
1442
+ export function resolveStableFederationSessionId(id) {
1443
+ if (!id)
1444
+ return null;
1445
+ try {
1446
+ return resolveFrontendSessionId({ sessionId: id, backendSessionId: id });
1447
+ }
1448
+ catch {
1449
+ return null;
1450
+ }
1451
+ }
1439
1452
  function collaborationRemoteSessions() {
1440
1453
  return Array.from(new Map(collaborationStore.list().flatMap((group) => group.remoteSessions ?? [])
1441
1454
  .map((session) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termdock",
3
- "version": "1.4.245",
3
+ "version": "1.4.247",
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.245",
4
+ "version": "1.4.247",
5
5
  "runtimeProtocolVersion": 1,
6
6
  "minimumDesktopVersion": "1.4.46",
7
7
  "nodeMajor": 22,
8
8
  "dependencyHash": "sha256-K4KyYJuVoQDpZsBM8ZX1Rw3MddOxAzVdp/cPm0iGZz0=",
9
- "serverBundleHash": "sha256-5EHTPHBzYbhXiki7HYAUodtWvNgxb7mxs+XD1yM1sXo=",
10
- "clientBundleHash": "sha256-+bCKIDDFWs3O4xXhcKsruZaYoCDM0PJDAJI6F7I5A3I=",
9
+ "serverBundleHash": "sha256-jt8V06gEQdEOQuK7k49oLE0RIfpkIZP7rDDt7Vh6E80=",
10
+ "clientBundleHash": "sha256-b+6COls3nNjiyFKb3RQRKLWhe9MI1wPlehaAY2rwHX8=",
11
11
  "entrypoint": "dist/server/cli.js",
12
12
  "clientEntrypoint": "dist/client/index.html"
13
13
  }