termdock 1.4.330 → 1.4.331

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 (342) hide show
  1. package/dist/client/assets/{App-JL8Fd8uO.js → App-xBkso5In.js} +6 -6
  2. package/dist/client/assets/App-xBkso5In.js.br +0 -0
  3. package/dist/client/assets/App-xBkso5In.js.gz +0 -0
  4. package/dist/client/assets/{ArchitecturePanel-CwvZXpvS.js → ArchitecturePanel-DNY0prqs.js} +2 -2
  5. package/dist/client/assets/ArchitecturePanel-DNY0prqs.js.br +0 -0
  6. package/dist/client/assets/ArchitecturePanel-DNY0prqs.js.gz +0 -0
  7. package/dist/client/assets/{ChangeWalkthroughPanel-BF3p_M6Y.js → ChangeWalkthroughPanel-xvUzbgKh.js} +1 -1
  8. package/dist/client/assets/ChangeWalkthroughPanel-xvUzbgKh.js.br +0 -0
  9. package/dist/client/assets/ChangeWalkthroughPanel-xvUzbgKh.js.gz +0 -0
  10. package/dist/client/assets/{CollaborationMainWorkspace-CYpn4j_x.js → CollaborationMainWorkspace-DsIWXeh0.js} +1 -1
  11. package/dist/client/assets/CollaborationMainWorkspace-DsIWXeh0.js.br +0 -0
  12. package/dist/client/assets/CollaborationMainWorkspace-DsIWXeh0.js.gz +0 -0
  13. package/dist/client/assets/CollaborationTaskContent-DatXl2k_.js +2 -0
  14. package/dist/client/assets/{ComputerControlView-DWlZmlCH.js → ComputerControlView-D-1UEmtr.js} +3 -3
  15. package/dist/client/assets/ComputerControlView-D-1UEmtr.js.br +0 -0
  16. package/dist/client/assets/ComputerControlView-D-1UEmtr.js.gz +0 -0
  17. package/dist/client/assets/{DagPlayground-IbzlcDVX.js → DagPlayground-1KaifMRo.js} +1 -1
  18. package/dist/client/assets/DagPlayground-1KaifMRo.js.br +0 -0
  19. package/dist/client/assets/DagPlayground-1KaifMRo.js.gz +0 -0
  20. package/dist/client/assets/{DiffLab-DEAYEwfY.js → DiffLab-Dh7lMk1W.js} +1 -1
  21. package/dist/client/assets/DiffLab-Dh7lMk1W.js.br +0 -0
  22. package/dist/client/assets/DiffLab-Dh7lMk1W.js.gz +0 -0
  23. package/dist/client/assets/{DiffReview-BPHfC8nZ.js → DiffReview-Bxe6OacV.js} +1 -1
  24. package/dist/client/assets/DiffReview-Bxe6OacV.js.br +0 -0
  25. package/dist/client/assets/DiffReview-Bxe6OacV.js.gz +0 -0
  26. package/dist/client/assets/{DiffReviewLab-2iKu20Ik.js → DiffReviewLab-CwdLf6kM.js} +1 -1
  27. package/dist/client/assets/DiffReviewLab-CwdLf6kM.js.br +0 -0
  28. package/dist/client/assets/DiffReviewLab-CwdLf6kM.js.gz +0 -0
  29. package/dist/client/assets/{DiffViewer-C4S3oEQV.js → DiffViewer-oGb-V3AK.js} +1 -1
  30. package/dist/client/assets/DiffViewer-oGb-V3AK.js.br +0 -0
  31. package/dist/client/assets/DiffViewer-oGb-V3AK.js.gz +0 -0
  32. package/dist/client/assets/{ModelPreview-D_KABt7i.js → ModelPreview-BTunplWr.js} +1 -1
  33. package/dist/client/assets/{ModelPreview-D_KABt7i.js.br → ModelPreview-BTunplWr.js.br} +0 -0
  34. package/dist/client/assets/ModelPreview-BTunplWr.js.gz +0 -0
  35. package/dist/client/assets/{RightSidebar-scaBEaFJ.js → RightSidebar-DvYmab8z.js} +3 -3
  36. package/dist/client/assets/RightSidebar-DvYmab8z.js.br +0 -0
  37. package/dist/client/assets/RightSidebar-DvYmab8z.js.gz +0 -0
  38. package/dist/client/assets/{abnfDiagram-VCTEODGH-OAQJcJ5a.js → abnfDiagram-VCTEODGH-D4LxQjpJ.js} +1 -1
  39. package/dist/client/assets/abnfDiagram-VCTEODGH-D4LxQjpJ.js.br +0 -0
  40. package/dist/client/assets/abnfDiagram-VCTEODGH-D4LxQjpJ.js.gz +0 -0
  41. package/dist/client/assets/app-A96wp9Xv.js +35 -0
  42. package/dist/client/assets/app-A96wp9Xv.js.br +0 -0
  43. package/dist/client/assets/app-A96wp9Xv.js.gz +0 -0
  44. package/dist/client/assets/{arc-B29HLhod.js → arc-BcCf73Fm.js} +1 -1
  45. package/dist/client/assets/arc-BcCf73Fm.js.br +0 -0
  46. package/dist/client/assets/arc-BcCf73Fm.js.gz +0 -0
  47. package/dist/client/assets/{architectureDiagram-5GKGNRK7-CQeKeLzl.js → architectureDiagram-5GKGNRK7-Dfg95GK6.js} +1 -1
  48. package/dist/client/assets/architectureDiagram-5GKGNRK7-Dfg95GK6.js.br +0 -0
  49. package/dist/client/assets/architectureDiagram-5GKGNRK7-Dfg95GK6.js.gz +0 -0
  50. package/dist/client/assets/{blockDiagram-I7D4REHJ-CgQQGQN_.js → blockDiagram-I7D4REHJ-BwXSp0xK.js} +1 -1
  51. package/dist/client/assets/blockDiagram-I7D4REHJ-BwXSp0xK.js.br +0 -0
  52. package/dist/client/assets/blockDiagram-I7D4REHJ-BwXSp0xK.js.gz +0 -0
  53. package/dist/client/assets/{c4Diagram-7LVT6UL2-BTeUIAS9.js → c4Diagram-7LVT6UL2-D4GfUedH.js} +1 -1
  54. package/dist/client/assets/c4Diagram-7LVT6UL2-D4GfUedH.js.br +0 -0
  55. package/dist/client/assets/c4Diagram-7LVT6UL2-D4GfUedH.js.gz +0 -0
  56. package/dist/client/assets/channel-k5dcS0_z.js +1 -0
  57. package/dist/client/assets/{chunk-2Q5K7J3B-Bao8D59Y.js → chunk-2Q5K7J3B-BqcmDKjo.js} +1 -1
  58. package/dist/client/assets/{chunk-5VM5RSS4-RIpn4ucJ.js → chunk-5VM5RSS4-BBV3_wnk.js} +1 -1
  59. package/dist/client/assets/{chunk-F27PBJKO-Cu3ypVNN.js → chunk-F27PBJKO-B-r7e040.js} +1 -1
  60. package/dist/client/assets/chunk-F27PBJKO-B-r7e040.js.br +0 -0
  61. package/dist/client/assets/chunk-F27PBJKO-B-r7e040.js.gz +0 -0
  62. package/dist/client/assets/{chunk-IMKFNOWR-BioTa0jG.js → chunk-IMKFNOWR-B83oWEy_.js} +1 -1
  63. package/dist/client/assets/chunk-IMKFNOWR-B83oWEy_.js.br +0 -0
  64. package/dist/client/assets/chunk-IMKFNOWR-B83oWEy_.js.gz +0 -0
  65. package/dist/client/assets/{chunk-JWPE2WC7-BPE5l-1s.js → chunk-JWPE2WC7-C2FW583q.js} +1 -1
  66. package/dist/client/assets/{chunk-POPQ4Y6H-DUF-0HB1.js → chunk-POPQ4Y6H-BWU7oLd-.js} +1 -1
  67. package/dist/client/assets/{chunk-SVP7TREG-BHaV6_ki.js → chunk-SVP7TREG-C5OgXymb.js} +1 -1
  68. package/dist/client/assets/chunk-SVP7TREG-C5OgXymb.js.br +0 -0
  69. package/dist/client/assets/chunk-SVP7TREG-C5OgXymb.js.gz +0 -0
  70. package/dist/client/assets/{chunk-TICWLB2K-SU15adqY.js → chunk-TICWLB2K-B1LlRwu4.js} +1 -1
  71. package/dist/client/assets/chunk-TICWLB2K-B1LlRwu4.js.br +0 -0
  72. package/dist/client/assets/chunk-TICWLB2K-B1LlRwu4.js.gz +0 -0
  73. package/dist/client/assets/{chunk-XXDRQBXY-oLy1dZJs.js → chunk-XXDRQBXY-7l9gcG6S.js} +1 -1
  74. package/dist/client/assets/classDiagram-ZZMXUADV-DQzBzWJL.js +1 -0
  75. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DQzBzWJL.js +1 -0
  76. package/dist/client/assets/{cose-bilkent-JH36ORCC-EE27IbbX.js → cose-bilkent-JH36ORCC-DNBCyqkI.js} +1 -1
  77. package/dist/client/assets/{cose-bilkent-JH36ORCC-EE27IbbX.js.br → cose-bilkent-JH36ORCC-DNBCyqkI.js.br} +0 -0
  78. package/dist/client/assets/cose-bilkent-JH36ORCC-DNBCyqkI.js.gz +0 -0
  79. package/dist/client/assets/{cynefin-OW5HDTMX-CpY9J9iu.js → cynefin-OW5HDTMX-BiCAbJSv.js} +1 -1
  80. package/dist/client/assets/cynefin-OW5HDTMX-BiCAbJSv.js.br +0 -0
  81. package/dist/client/assets/cynefin-OW5HDTMX-BiCAbJSv.js.gz +0 -0
  82. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-mJxcQnkp.js → cynefinDiagram-5FMLGOSQ-CaRucQy9.js} +1 -1
  83. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CaRucQy9.js.br +0 -0
  84. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CaRucQy9.js.gz +0 -0
  85. package/dist/client/assets/{dagre-GXQ25YYZ-DAUZrxwq.js → dagre-GXQ25YYZ-kU4wdq9U.js} +1 -1
  86. package/dist/client/assets/dagre-GXQ25YYZ-kU4wdq9U.js.br +0 -0
  87. package/dist/client/assets/dagre-GXQ25YYZ-kU4wdq9U.js.gz +0 -0
  88. package/dist/client/assets/{diagram-S7CK7UJ4-3rquuCu6.js → diagram-S7CK7UJ4-BvDFZeQg.js} +1 -1
  89. package/dist/client/assets/diagram-S7CK7UJ4-BvDFZeQg.js.br +0 -0
  90. package/dist/client/assets/diagram-S7CK7UJ4-BvDFZeQg.js.gz +0 -0
  91. package/dist/client/assets/{diagram-UQ7AKVKN-CZWjaDbi.js → diagram-UQ7AKVKN-DYTly1n3.js} +1 -1
  92. package/dist/client/assets/diagram-UQ7AKVKN-DYTly1n3.js.br +0 -0
  93. package/dist/client/assets/diagram-UQ7AKVKN-DYTly1n3.js.gz +0 -0
  94. package/dist/client/assets/{diagram-VSXAHHWV-CNQEg3jR.js → diagram-VSXAHHWV-C0bMSg7N.js} +1 -1
  95. package/dist/client/assets/diagram-VSXAHHWV-C0bMSg7N.js.br +0 -0
  96. package/dist/client/assets/diagram-VSXAHHWV-C0bMSg7N.js.gz +0 -0
  97. package/dist/client/assets/{diagram-VX7I27RA-DYorDR1n.js → diagram-VX7I27RA-C9_Uoa7n.js} +1 -1
  98. package/dist/client/assets/diagram-VX7I27RA-C9_Uoa7n.js.br +0 -0
  99. package/dist/client/assets/diagram-VX7I27RA-C9_Uoa7n.js.gz +0 -0
  100. package/dist/client/assets/{diagram-Z3DM3KII-BPgvVftJ.js → diagram-Z3DM3KII-CLsF0k3J.js} +1 -1
  101. package/dist/client/assets/diagram-Z3DM3KII-CLsF0k3J.js.br +0 -0
  102. package/dist/client/assets/diagram-Z3DM3KII-CLsF0k3J.js.gz +0 -0
  103. package/dist/client/assets/{ebnfDiagram-PWID7BFC-KqpJv-fX.js → ebnfDiagram-PWID7BFC-Bt6b2Ygi.js} +1 -1
  104. package/dist/client/assets/ebnfDiagram-PWID7BFC-Bt6b2Ygi.js.br +0 -0
  105. package/dist/client/assets/ebnfDiagram-PWID7BFC-Bt6b2Ygi.js.gz +0 -0
  106. package/dist/client/assets/{erDiagram-RLTQ6QDP-Bwj_TPoi.js → erDiagram-RLTQ6QDP-Bs5jB7E2.js} +1 -1
  107. package/dist/client/assets/erDiagram-RLTQ6QDP-Bs5jB7E2.js.br +0 -0
  108. package/dist/client/assets/erDiagram-RLTQ6QDP-Bs5jB7E2.js.gz +0 -0
  109. package/dist/client/assets/{flowDiagram-HODETNUW-BYALZ5I6.js → flowDiagram-HODETNUW-BCSeo8DJ.js} +1 -1
  110. package/dist/client/assets/flowDiagram-HODETNUW-BCSeo8DJ.js.br +0 -0
  111. package/dist/client/assets/flowDiagram-HODETNUW-BCSeo8DJ.js.gz +0 -0
  112. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-DwrR8yW_.js → ganttDiagram-EL5Y4UJY-BnCBe-Ue.js} +1 -1
  113. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BnCBe-Ue.js.br +0 -0
  114. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BnCBe-Ue.js.gz +0 -0
  115. package/dist/client/assets/{gestureArbiter-4NWfZprH.js → gestureArbiter-W1Lo4NZw.js} +1 -1
  116. package/dist/client/assets/gestureArbiter-W1Lo4NZw.js.br +0 -0
  117. package/dist/client/assets/gestureArbiter-W1Lo4NZw.js.gz +0 -0
  118. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-C3pH5ZGR.js → gitGraphDiagram-WWUBYQGX-C7BJXlkD.js} +1 -1
  119. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C7BJXlkD.js.br +0 -0
  120. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C7BJXlkD.js.gz +0 -0
  121. package/dist/client/assets/{infoDiagram-27XIBGKW-DpnbClE9.js → infoDiagram-27XIBGKW-CJXzvnav.js} +1 -1
  122. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-BFhiY6uy.js → ishikawaDiagram-5VMMS53U-BoBCZ1Wa.js} +1 -1
  123. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BoBCZ1Wa.js.br +0 -0
  124. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BoBCZ1Wa.js.gz +0 -0
  125. package/dist/client/assets/{journeyDiagram-3NMN7TZE-Beg2Cmg4.js → journeyDiagram-3NMN7TZE-C5bywqIt.js} +1 -1
  126. package/dist/client/assets/journeyDiagram-3NMN7TZE-C5bywqIt.js.br +0 -0
  127. package/dist/client/assets/journeyDiagram-3NMN7TZE-C5bywqIt.js.gz +0 -0
  128. package/dist/client/assets/{kanban-definition-UXKFOSKX-CNb51-_F.js → kanban-definition-UXKFOSKX-ChHpoQyu.js} +1 -1
  129. package/dist/client/assets/kanban-definition-UXKFOSKX-ChHpoQyu.js.br +0 -0
  130. package/dist/client/assets/kanban-definition-UXKFOSKX-ChHpoQyu.js.gz +0 -0
  131. package/dist/client/assets/{layout-B07GM-uc.js → layout-e7M-xuok.js} +1 -1
  132. package/dist/client/assets/layout-e7M-xuok.js.br +0 -0
  133. package/dist/client/assets/layout-e7M-xuok.js.gz +0 -0
  134. package/dist/client/assets/{linear-DRJlaLbJ.js → linear-A5CrihlL.js} +1 -1
  135. package/dist/client/assets/linear-A5CrihlL.js.br +0 -0
  136. package/dist/client/assets/linear-A5CrihlL.js.gz +0 -0
  137. package/dist/client/assets/{mermaid.core-BySznxI_.js → mermaid.core-BNac_Y3z.js} +5 -5
  138. package/dist/client/assets/mermaid.core-BNac_Y3z.js.br +0 -0
  139. package/dist/client/assets/{mermaid.core-BySznxI_.js.gz → mermaid.core-BNac_Y3z.js.gz} +0 -0
  140. package/dist/client/assets/{mindmap-definition-YA3MSWOX-BtStMFHK.js → mindmap-definition-YA3MSWOX-fQoEGcCr.js} +1 -1
  141. package/dist/client/assets/mindmap-definition-YA3MSWOX-fQoEGcCr.js.br +0 -0
  142. package/dist/client/assets/mindmap-definition-YA3MSWOX-fQoEGcCr.js.gz +0 -0
  143. package/dist/client/assets/{passwordBootstrap-B-T8YSfQ.js → passwordBootstrap--0YoOXsx.js} +1 -1
  144. package/dist/client/assets/passwordBootstrap--0YoOXsx.js.br +0 -0
  145. package/dist/client/assets/passwordBootstrap--0YoOXsx.js.gz +0 -0
  146. package/dist/client/assets/{pegDiagram-XKGWAZYB-BNJzxFGK.js → pegDiagram-XKGWAZYB-CYbfla8A.js} +1 -1
  147. package/dist/client/assets/pegDiagram-XKGWAZYB-CYbfla8A.js.br +0 -0
  148. package/dist/client/assets/pegDiagram-XKGWAZYB-CYbfla8A.js.gz +0 -0
  149. package/dist/client/assets/{pieDiagram-E7YTZNPT-Df1Y6zou.js → pieDiagram-E7YTZNPT-B6--ZKXC.js} +1 -1
  150. package/dist/client/assets/pieDiagram-E7YTZNPT-B6--ZKXC.js.br +0 -0
  151. package/dist/client/assets/pieDiagram-E7YTZNPT-B6--ZKXC.js.gz +0 -0
  152. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-Q3jN6--F.js → quadrantDiagram-AXDQQJYC-Bau_h7Jl.js} +1 -1
  153. package/dist/client/assets/quadrantDiagram-AXDQQJYC-Bau_h7Jl.js.br +0 -0
  154. package/dist/client/assets/quadrantDiagram-AXDQQJYC-Bau_h7Jl.js.gz +0 -0
  155. package/dist/client/assets/{railroadDiagram-O6MQD6OU-c-1SN7pC.js → railroadDiagram-O6MQD6OU-CApEuiEL.js} +1 -1
  156. package/dist/client/assets/railroadDiagram-O6MQD6OU-CApEuiEL.js.br +0 -0
  157. package/dist/client/assets/railroadDiagram-O6MQD6OU-CApEuiEL.js.gz +0 -0
  158. package/dist/client/assets/{rdpSession-B6j6_C4D.js → rdpSession-CydBq1bk.js} +1 -1
  159. package/dist/client/assets/rdpSession-CydBq1bk.js.br +0 -0
  160. package/dist/client/assets/rdpSession-CydBq1bk.js.gz +0 -0
  161. package/dist/client/assets/{referenceLongPress-Bln9X6SW.js → referenceLongPress-8ExgTbB3.js} +1 -1
  162. package/dist/client/assets/referenceLongPress-8ExgTbB3.js.br +0 -0
  163. package/dist/client/assets/referenceLongPress-8ExgTbB3.js.gz +0 -0
  164. package/dist/client/assets/{requirementDiagram-BXWQKSXE-wcsUZu82.js → requirementDiagram-BXWQKSXE-Rxe80d7j.js} +1 -1
  165. package/dist/client/assets/requirementDiagram-BXWQKSXE-Rxe80d7j.js.br +0 -0
  166. package/dist/client/assets/requirementDiagram-BXWQKSXE-Rxe80d7j.js.gz +0 -0
  167. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CfXyROPC.js → sankeyDiagram-P5KCCOFB-BaPl8d6E.js} +1 -1
  168. package/dist/client/assets/sankeyDiagram-P5KCCOFB-BaPl8d6E.js.br +0 -0
  169. package/dist/client/assets/sankeyDiagram-P5KCCOFB-BaPl8d6E.js.gz +0 -0
  170. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-D-IasKbj.js → sequenceDiagram-WJ2MYXX4-Asyx5gWK.js} +1 -1
  171. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-Asyx5gWK.js.br +0 -0
  172. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-Asyx5gWK.js.gz +0 -0
  173. package/dist/client/assets/{sizeCapture-INFHLROL-Cyoh7jyx.js → sizeCapture-INFHLROL-BQaSglof.js} +1 -1
  174. package/dist/client/assets/sizeCapture-INFHLROL-BQaSglof.js.br +0 -0
  175. package/dist/client/assets/sizeCapture-INFHLROL-BQaSglof.js.gz +0 -0
  176. package/dist/client/assets/{sparkles-kooHQYLJ.js → sparkles-BMR6NziM.js} +1 -1
  177. package/dist/client/assets/{stateDiagram-D77RDMKH-BFeLYGOW.js → stateDiagram-D77RDMKH-DycNNggj.js} +1 -1
  178. package/dist/client/assets/stateDiagram-D77RDMKH-DycNNggj.js.br +0 -0
  179. package/dist/client/assets/stateDiagram-D77RDMKH-DycNNggj.js.gz +0 -0
  180. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CS1AgP_n.js +1 -0
  181. package/dist/client/assets/{swimlanes-42K2YHIH-BtMhgPB2.js → swimlanes-42K2YHIH-2Z5Zd5j6.js} +1 -1
  182. package/dist/client/assets/swimlanes-42K2YHIH-2Z5Zd5j6.js.br +0 -0
  183. package/dist/client/assets/swimlanes-42K2YHIH-2Z5Zd5j6.js.gz +0 -0
  184. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-Cxqp7K9j.js +8 -0
  185. package/dist/client/assets/{timeline-definition-24CTP7MA-BccUO5W0.js → timeline-definition-24CTP7MA-BHiRARcP.js} +1 -1
  186. package/dist/client/assets/timeline-definition-24CTP7MA-BHiRARcP.js.br +0 -0
  187. package/dist/client/assets/timeline-definition-24CTP7MA-BHiRARcP.js.gz +0 -0
  188. package/dist/client/assets/{triangle-alert-rgLWcpfP.js → triangle-alert-TsfoVQJR.js} +1 -1
  189. package/dist/client/assets/{vennDiagram-4TSXK5OY-hNN_O594.js → vennDiagram-4TSXK5OY-JgKZ8N2y.js} +1 -1
  190. package/dist/client/assets/vennDiagram-4TSXK5OY-JgKZ8N2y.js.br +0 -0
  191. package/dist/client/assets/vennDiagram-4TSXK5OY-JgKZ8N2y.js.gz +0 -0
  192. package/dist/client/assets/{videoCompression-DS0r00L6.js → videoCompression-DGfMcwdq.js} +1 -1
  193. package/dist/client/assets/videoCompression-DGfMcwdq.js.br +0 -0
  194. package/dist/client/assets/videoCompression-DGfMcwdq.js.gz +0 -0
  195. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-C6h02bPv.js → wardleyDiagram-VM6X3IG4-DNmP9dmD.js} +1 -1
  196. package/dist/client/assets/wardleyDiagram-VM6X3IG4-DNmP9dmD.js.br +0 -0
  197. package/dist/client/assets/wardleyDiagram-VM6X3IG4-DNmP9dmD.js.gz +0 -0
  198. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-DvNnLmXs.js → xychartDiagram-S5SC5T6Z-BBFR9gmo.js} +1 -1
  199. package/dist/client/assets/xychartDiagram-S5SC5T6Z-BBFR9gmo.js.br +0 -0
  200. package/dist/client/assets/xychartDiagram-S5SC5T6Z-BBFR9gmo.js.gz +0 -0
  201. package/dist/client/index.html +1 -1
  202. package/dist/client/index.html.br +0 -0
  203. package/dist/client/index.html.gz +0 -0
  204. package/dist/client/sw-encrypted-background.js +1 -1
  205. package/dist/client/sw-encrypted-background.js.br +0 -0
  206. package/dist/client/sw-encrypted-background.js.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/collaborationPeerTransport.js +2 -1
  211. package/dist/server/federation/relay.js +121 -37
  212. package/dist/server/federation/streamLimits.js +5 -0
  213. package/package.json +1 -1
  214. package/runtime-manifest.json +3 -3
  215. package/dist/client/assets/App-JL8Fd8uO.js.br +0 -0
  216. package/dist/client/assets/App-JL8Fd8uO.js.gz +0 -0
  217. package/dist/client/assets/ArchitecturePanel-CwvZXpvS.js.br +0 -0
  218. package/dist/client/assets/ArchitecturePanel-CwvZXpvS.js.gz +0 -0
  219. package/dist/client/assets/ChangeWalkthroughPanel-BF3p_M6Y.js.br +0 -0
  220. package/dist/client/assets/ChangeWalkthroughPanel-BF3p_M6Y.js.gz +0 -0
  221. package/dist/client/assets/CollaborationMainWorkspace-CYpn4j_x.js.br +0 -0
  222. package/dist/client/assets/CollaborationMainWorkspace-CYpn4j_x.js.gz +0 -0
  223. package/dist/client/assets/CollaborationTaskContent-BjjX05Cv.js +0 -2
  224. package/dist/client/assets/ComputerControlView-DWlZmlCH.js.br +0 -0
  225. package/dist/client/assets/ComputerControlView-DWlZmlCH.js.gz +0 -0
  226. package/dist/client/assets/DagPlayground-IbzlcDVX.js.br +0 -0
  227. package/dist/client/assets/DagPlayground-IbzlcDVX.js.gz +0 -0
  228. package/dist/client/assets/DiffLab-DEAYEwfY.js.br +0 -0
  229. package/dist/client/assets/DiffLab-DEAYEwfY.js.gz +0 -0
  230. package/dist/client/assets/DiffReview-BPHfC8nZ.js.br +0 -0
  231. package/dist/client/assets/DiffReview-BPHfC8nZ.js.gz +0 -0
  232. package/dist/client/assets/DiffReviewLab-2iKu20Ik.js.br +0 -0
  233. package/dist/client/assets/DiffReviewLab-2iKu20Ik.js.gz +0 -0
  234. package/dist/client/assets/DiffViewer-C4S3oEQV.js.br +0 -0
  235. package/dist/client/assets/DiffViewer-C4S3oEQV.js.gz +0 -0
  236. package/dist/client/assets/ModelPreview-D_KABt7i.js.gz +0 -0
  237. package/dist/client/assets/RightSidebar-scaBEaFJ.js.br +0 -0
  238. package/dist/client/assets/RightSidebar-scaBEaFJ.js.gz +0 -0
  239. package/dist/client/assets/abnfDiagram-VCTEODGH-OAQJcJ5a.js.br +0 -0
  240. package/dist/client/assets/abnfDiagram-VCTEODGH-OAQJcJ5a.js.gz +0 -0
  241. package/dist/client/assets/app-aNkllBsm.js +0 -35
  242. package/dist/client/assets/app-aNkllBsm.js.br +0 -0
  243. package/dist/client/assets/app-aNkllBsm.js.gz +0 -0
  244. package/dist/client/assets/arc-B29HLhod.js.br +0 -0
  245. package/dist/client/assets/arc-B29HLhod.js.gz +0 -0
  246. package/dist/client/assets/architectureDiagram-5GKGNRK7-CQeKeLzl.js.br +0 -0
  247. package/dist/client/assets/architectureDiagram-5GKGNRK7-CQeKeLzl.js.gz +0 -0
  248. package/dist/client/assets/blockDiagram-I7D4REHJ-CgQQGQN_.js.br +0 -0
  249. package/dist/client/assets/blockDiagram-I7D4REHJ-CgQQGQN_.js.gz +0 -0
  250. package/dist/client/assets/c4Diagram-7LVT6UL2-BTeUIAS9.js.br +0 -0
  251. package/dist/client/assets/c4Diagram-7LVT6UL2-BTeUIAS9.js.gz +0 -0
  252. package/dist/client/assets/channel-DPAqeRss.js +0 -1
  253. package/dist/client/assets/chunk-F27PBJKO-Cu3ypVNN.js.br +0 -0
  254. package/dist/client/assets/chunk-F27PBJKO-Cu3ypVNN.js.gz +0 -0
  255. package/dist/client/assets/chunk-IMKFNOWR-BioTa0jG.js.br +0 -0
  256. package/dist/client/assets/chunk-IMKFNOWR-BioTa0jG.js.gz +0 -0
  257. package/dist/client/assets/chunk-SVP7TREG-BHaV6_ki.js.br +0 -0
  258. package/dist/client/assets/chunk-SVP7TREG-BHaV6_ki.js.gz +0 -0
  259. package/dist/client/assets/chunk-TICWLB2K-SU15adqY.js.br +0 -0
  260. package/dist/client/assets/chunk-TICWLB2K-SU15adqY.js.gz +0 -0
  261. package/dist/client/assets/classDiagram-ZZMXUADV-kQeU2Z7d.js +0 -1
  262. package/dist/client/assets/classDiagram-v2-VYDZK3BY-kQeU2Z7d.js +0 -1
  263. package/dist/client/assets/cose-bilkent-JH36ORCC-EE27IbbX.js.gz +0 -0
  264. package/dist/client/assets/cynefin-OW5HDTMX-CpY9J9iu.js.br +0 -0
  265. package/dist/client/assets/cynefin-OW5HDTMX-CpY9J9iu.js.gz +0 -0
  266. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-mJxcQnkp.js.br +0 -0
  267. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-mJxcQnkp.js.gz +0 -0
  268. package/dist/client/assets/dagre-GXQ25YYZ-DAUZrxwq.js.br +0 -0
  269. package/dist/client/assets/dagre-GXQ25YYZ-DAUZrxwq.js.gz +0 -0
  270. package/dist/client/assets/diagram-S7CK7UJ4-3rquuCu6.js.br +0 -0
  271. package/dist/client/assets/diagram-S7CK7UJ4-3rquuCu6.js.gz +0 -0
  272. package/dist/client/assets/diagram-UQ7AKVKN-CZWjaDbi.js.br +0 -0
  273. package/dist/client/assets/diagram-UQ7AKVKN-CZWjaDbi.js.gz +0 -0
  274. package/dist/client/assets/diagram-VSXAHHWV-CNQEg3jR.js.br +0 -0
  275. package/dist/client/assets/diagram-VSXAHHWV-CNQEg3jR.js.gz +0 -0
  276. package/dist/client/assets/diagram-VX7I27RA-DYorDR1n.js.br +0 -0
  277. package/dist/client/assets/diagram-VX7I27RA-DYorDR1n.js.gz +0 -0
  278. package/dist/client/assets/diagram-Z3DM3KII-BPgvVftJ.js.br +0 -0
  279. package/dist/client/assets/diagram-Z3DM3KII-BPgvVftJ.js.gz +0 -0
  280. package/dist/client/assets/ebnfDiagram-PWID7BFC-KqpJv-fX.js.br +0 -0
  281. package/dist/client/assets/ebnfDiagram-PWID7BFC-KqpJv-fX.js.gz +0 -0
  282. package/dist/client/assets/erDiagram-RLTQ6QDP-Bwj_TPoi.js.br +0 -0
  283. package/dist/client/assets/erDiagram-RLTQ6QDP-Bwj_TPoi.js.gz +0 -0
  284. package/dist/client/assets/flowDiagram-HODETNUW-BYALZ5I6.js.br +0 -0
  285. package/dist/client/assets/flowDiagram-HODETNUW-BYALZ5I6.js.gz +0 -0
  286. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DwrR8yW_.js.br +0 -0
  287. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DwrR8yW_.js.gz +0 -0
  288. package/dist/client/assets/gestureArbiter-4NWfZprH.js.br +0 -0
  289. package/dist/client/assets/gestureArbiter-4NWfZprH.js.gz +0 -0
  290. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C3pH5ZGR.js.br +0 -0
  291. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C3pH5ZGR.js.gz +0 -0
  292. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BFhiY6uy.js.br +0 -0
  293. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BFhiY6uy.js.gz +0 -0
  294. package/dist/client/assets/journeyDiagram-3NMN7TZE-Beg2Cmg4.js.br +0 -0
  295. package/dist/client/assets/journeyDiagram-3NMN7TZE-Beg2Cmg4.js.gz +0 -0
  296. package/dist/client/assets/kanban-definition-UXKFOSKX-CNb51-_F.js.br +0 -0
  297. package/dist/client/assets/kanban-definition-UXKFOSKX-CNb51-_F.js.gz +0 -0
  298. package/dist/client/assets/layout-B07GM-uc.js.br +0 -0
  299. package/dist/client/assets/layout-B07GM-uc.js.gz +0 -0
  300. package/dist/client/assets/linear-DRJlaLbJ.js.br +0 -0
  301. package/dist/client/assets/linear-DRJlaLbJ.js.gz +0 -0
  302. package/dist/client/assets/mermaid.core-BySznxI_.js.br +0 -0
  303. package/dist/client/assets/mindmap-definition-YA3MSWOX-BtStMFHK.js.br +0 -0
  304. package/dist/client/assets/mindmap-definition-YA3MSWOX-BtStMFHK.js.gz +0 -0
  305. package/dist/client/assets/passwordBootstrap-B-T8YSfQ.js.br +0 -0
  306. package/dist/client/assets/passwordBootstrap-B-T8YSfQ.js.gz +0 -0
  307. package/dist/client/assets/pegDiagram-XKGWAZYB-BNJzxFGK.js.br +0 -0
  308. package/dist/client/assets/pegDiagram-XKGWAZYB-BNJzxFGK.js.gz +0 -0
  309. package/dist/client/assets/pieDiagram-E7YTZNPT-Df1Y6zou.js.br +0 -0
  310. package/dist/client/assets/pieDiagram-E7YTZNPT-Df1Y6zou.js.gz +0 -0
  311. package/dist/client/assets/quadrantDiagram-AXDQQJYC-Q3jN6--F.js.br +0 -0
  312. package/dist/client/assets/quadrantDiagram-AXDQQJYC-Q3jN6--F.js.gz +0 -0
  313. package/dist/client/assets/railroadDiagram-O6MQD6OU-c-1SN7pC.js.br +0 -0
  314. package/dist/client/assets/railroadDiagram-O6MQD6OU-c-1SN7pC.js.gz +0 -0
  315. package/dist/client/assets/rdpSession-B6j6_C4D.js.br +0 -0
  316. package/dist/client/assets/rdpSession-B6j6_C4D.js.gz +0 -0
  317. package/dist/client/assets/referenceLongPress-Bln9X6SW.js.br +0 -0
  318. package/dist/client/assets/referenceLongPress-Bln9X6SW.js.gz +0 -0
  319. package/dist/client/assets/requirementDiagram-BXWQKSXE-wcsUZu82.js.br +0 -0
  320. package/dist/client/assets/requirementDiagram-BXWQKSXE-wcsUZu82.js.gz +0 -0
  321. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CfXyROPC.js.br +0 -0
  322. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CfXyROPC.js.gz +0 -0
  323. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-D-IasKbj.js.br +0 -0
  324. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-D-IasKbj.js.gz +0 -0
  325. package/dist/client/assets/sizeCapture-INFHLROL-Cyoh7jyx.js.br +0 -0
  326. package/dist/client/assets/sizeCapture-INFHLROL-Cyoh7jyx.js.gz +0 -0
  327. package/dist/client/assets/stateDiagram-D77RDMKH-BFeLYGOW.js.br +0 -0
  328. package/dist/client/assets/stateDiagram-D77RDMKH-BFeLYGOW.js.gz +0 -0
  329. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-Cn5inEsZ.js +0 -1
  330. package/dist/client/assets/swimlanes-42K2YHIH-BtMhgPB2.js.br +0 -0
  331. package/dist/client/assets/swimlanes-42K2YHIH-BtMhgPB2.js.gz +0 -0
  332. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-Di2Vfydj.js +0 -8
  333. package/dist/client/assets/timeline-definition-24CTP7MA-BccUO5W0.js.br +0 -0
  334. package/dist/client/assets/timeline-definition-24CTP7MA-BccUO5W0.js.gz +0 -0
  335. package/dist/client/assets/vennDiagram-4TSXK5OY-hNN_O594.js.br +0 -0
  336. package/dist/client/assets/vennDiagram-4TSXK5OY-hNN_O594.js.gz +0 -0
  337. package/dist/client/assets/videoCompression-DS0r00L6.js.br +0 -0
  338. package/dist/client/assets/videoCompression-DS0r00L6.js.gz +0 -0
  339. package/dist/client/assets/wardleyDiagram-VM6X3IG4-C6h02bPv.js.br +0 -0
  340. package/dist/client/assets/wardleyDiagram-VM6X3IG4-C6h02bPv.js.gz +0 -0
  341. package/dist/client/assets/xychartDiagram-S5SC5T6Z-DvNnLmXs.js.br +0 -0
  342. package/dist/client/assets/xychartDiagram-S5SC5T6Z-DvNnLmXs.js.gz +0 -0
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,a)=>{const o=e||("document"in self?document.currentScript.src:"")||location.href;if(s[o])return;let r={};const c=e=>n(e,o),d={module:{uri:o},exports:r,require:c};s[o]=Promise.all(i.map(e=>d[e]||c(e))).then(e=>(a(...e),r))}}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:"5f059a61fad372907e561196e64b3a15"},{url:"assets/app-aNkllBsm.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-e1PkqIqN.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:"boot-logo.png",revision:"2e3a25efd9b0b8ca1eab53b5f2284556"},{url:"favicon.ico",revision:"2994debfa6f59a0898e24eb0c54d64b5"},{url:"ipad-status-bar.js",revision:"3a8080edb8a5cc658a7908f6ad69537f"},{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,a)=>{const o=e||("document"in self?document.currentScript.src:"")||location.href;if(s[o])return;let c={};const r=e=>n(e,o),d={module:{uri:o},exports:c,require:r};s[o]=Promise.all(i.map(e=>d[e]||r(e))).then(e=>(a(...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:"bc64b8c1fa3ef473a31f37178b747d16"},{url:"assets/app-A96wp9Xv.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-e1PkqIqN.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:"boot-logo.png",revision:"2e3a25efd9b0b8ca1eab53b5f2284556"},{url:"favicon.ico",revision:"2994debfa6f59a0898e24eb0c54d64b5"},{url:"ipad-status-bar.js",revision:"3a8080edb8a5cc658a7908f6ad69537f"},{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
@@ -1,3 +1,4 @@
1
+ import { RELAY_CLIENT_CONNECT_TIMEOUT_MS } from '../federation/streamLimits.js';
1
2
  import { encryptedRequestSubject } from '../federation/requestContext.js';
2
3
  import { randomUUID } from 'node:crypto';
3
4
  import { readFileSync, writeFileSync, renameSync, mkdirSync } from 'node:fs';
@@ -164,7 +165,7 @@ function relayDuplex(socket, target) {
164
165
  let readyResolve, readyReject;
165
166
  const ready = new Promise((resolve, reject) => { readyResolve = resolve; readyReject = reject; });
166
167
  void ready.catch(() => { });
167
- const timer = setTimeout(() => fail(new Error('ROUTE_TIMEOUT')), 5000);
168
+ const timer = setTimeout(() => fail(new Error('ROUTE_TIMEOUT')), RELAY_CLIENT_CONNECT_TIMEOUT_MS);
168
169
  const fail = (error) => { clearTimeout(timer); readyReject(error); queue.end(error); socket.close(); };
169
170
  const send = (frame) => {
170
171
  if (socket.readyState !== 1 || socket.bufferedAmount > 1024 * 1024)
@@ -1,7 +1,8 @@
1
+ import { RELAY_PROVIDER_CONNECT_TIMEOUT_MS, RELAY_ROUTE_OPEN_TIMEOUT_MS } from './streamLimits.js';
1
2
  import { randomUUID } from 'node:crypto';
2
3
  import { EventEmitter } from 'node:events';
3
4
  const defaults = { maxFrameBytes: 256 * 1024, maxBufferedBytes: 1024 * 1024,
4
- maxStreams: 128, heartbeatMs: 30_000, maxRouteTtlMs: 90_000, connectTimeoutMs: 10_000 };
5
+ maxStreams: 128, heartbeatMs: 30_000, maxRouteTtlMs: 90_000, connectTimeoutMs: RELAY_PROVIDER_CONNECT_TIMEOUT_MS, routeTimeoutMs: RELAY_ROUTE_OPEN_TIMEOUT_MS };
5
6
  const identifier = (v) => typeof v === 'string' && /^[a-zA-Z0-9_.:-]{1,160}$/.test(v);
6
7
  function parse(raw, limits) {
7
8
  if (Buffer.byteLength(raw instanceof Array ? Buffer.concat(raw) : raw) > limits.maxFrameBytes)
@@ -90,9 +91,11 @@ export class RelayRouter {
90
91
  this.options = options;
91
92
  this.limits = { ...defaults, ...options };
92
93
  this.sweep = setInterval(() => {
93
- for (const [id, route] of this.routes)
94
- if (route.expires <= Date.now() || !this.canRegister(route.peer, id))
95
- this.withdraw(id, route.peer);
94
+ for (const [id, routes] of this.routes)
95
+ for (const [peer, route] of routes) {
96
+ if (route.expires <= Date.now() || peer.ws.readyState !== 1 || !this.canRegister(peer, id))
97
+ this.withdraw(id, peer);
98
+ }
96
99
  for (const peer of this.peers)
97
100
  for (const stream of [...peer.streams.values()]) {
98
101
  if (stream.owner === peer && !this.canRoute(peer, stream.serviceId))
@@ -107,16 +110,22 @@ export class RelayRouter {
107
110
  canRoute(peer, serviceId) {
108
111
  return !this.directPeers.has(peer) && this.options.allowRoute(peer.principal, serviceId);
109
112
  }
113
+ providers(serviceId) {
114
+ return [...(this.routes.get(serviceId) || [])]
115
+ .filter(([peer, route]) => route.expires > Date.now() && peer.ws.readyState === 1 && this.canRegister(peer, serviceId))
116
+ // Recent target failures lower priority but never make the only route disappear.
117
+ .sort((a, b) => Math.max(0, a[1].retryAfter - Date.now()) - Math.max(0, b[1].retryAfter - Date.now()))
118
+ .map(([peer]) => peer);
119
+ }
110
120
  hasRoute(serviceId) {
111
- const route = this.routes.get(serviceId);
112
- return !this.stopped && !!route && route.expires > Date.now() && route.peer.ws.readyState === 1 && this.canRegister(route.peer, serviceId);
121
+ return !this.stopped && this.providers(serviceId).length > 0;
113
122
  }
114
123
  activeRouteIds() {
115
124
  return [...this.routes.keys()].filter(serviceId => this.hasRoute(serviceId));
116
125
  }
117
126
  /** Trusted local configuration only. Clients never supply a target URL or factory. */
118
127
  registerDirect(serviceId, connect) {
119
- if (this.stopped || !identifier(serviceId) || typeof connect !== 'function' || this.hasRoute(serviceId))
128
+ if (this.stopped || !identifier(serviceId) || typeof connect !== 'function' || [...this.peers].some(peer => this.directPeers.get(peer) === serviceId))
120
129
  throw new Error('Invalid or already registered direct target');
121
130
  const [routerWire, clientWire] = memoryPair();
122
131
  // The private WeakMap marks this peer; its placeholder principal is never
@@ -139,6 +148,10 @@ export class RelayRouter {
139
148
  }
140
149
  /** Caller awaits attach before completing its application-level ready handshake. */
141
150
  async attach(ws, context) {
151
+ if (this.stopped) {
152
+ ws.close(1001, 'Router stopped');
153
+ return false;
154
+ }
142
155
  // Reject early application frames rather than buffering untrusted traffic while authenticating.
143
156
  let early = false;
144
157
  const rejectEarly = () => { early = true; ws.close(1008, 'Authentication pending'); };
@@ -151,7 +164,7 @@ export class RelayRouter {
151
164
  principal = null;
152
165
  }
153
166
  ws.off('message', rejectEarly);
154
- if (principal === null || early || ws.readyState !== 1) {
167
+ if (this.stopped || principal === null || early || ws.readyState !== 1) {
155
168
  ws.close(1008, 'Relay authentication required');
156
169
  return false;
157
170
  }
@@ -169,72 +182,131 @@ export class RelayRouter {
169
182
  return true;
170
183
  }
171
184
  withdraw(serviceId, peer) {
172
- if (this.routes.get(serviceId)?.peer === peer)
185
+ const routes = this.routes.get(serviceId);
186
+ routes?.delete(peer);
187
+ if (!routes?.size)
173
188
  this.routes.delete(serviceId);
174
189
  for (const stream of [...peer.streams.values()])
175
190
  if (stream.serviceId === serviceId && stream.provider === peer)
176
- this.closeStream(stream, 'Route unavailable');
191
+ this.providerFailed(stream, 'Route unavailable');
177
192
  }
178
193
  remove(peer) {
179
194
  this.peers.delete(peer);
180
- for (const [id, route] of this.routes)
181
- if (route.peer === peer)
195
+ // Consumers cannot fail over after disconnecting; remove them first.
196
+ for (const stream of [...peer.streams.values()])
197
+ if (stream.owner === peer)
198
+ this.closeStream(stream, 'Relay disconnected');
199
+ for (const [id, routes] of this.routes)
200
+ if (routes.has(peer))
182
201
  this.withdraw(id, peer);
183
202
  for (const stream of [...peer.streams.values()])
184
- this.closeStream(stream, 'Relay disconnected');
203
+ this.providerFailed(stream, 'Relay disconnected');
185
204
  }
186
205
  closeStream(s, reason) {
206
+ if (s.owner.streams.get(s.ownerId) !== s)
207
+ return;
208
+ clearTimeout(s.deadline);
187
209
  s.owner.streams.delete(s.ownerId);
188
- s.provider.streams.delete(s.providerId);
210
+ if (s.provider.streams.get(s.providerId) === s) {
211
+ s.provider.streams.delete(s.providerId);
212
+ send(s.provider.ws, { type: 'close', streamId: s.providerId, reason }, this.limits);
213
+ }
189
214
  send(s.owner.ws, { type: 'close', streamId: s.ownerId, reason }, this.limits);
215
+ }
216
+ providerFailed(s, reason) {
217
+ if (s.owner.streams.get(s.ownerId) !== s)
218
+ return;
219
+ clearTimeout(s.deadline);
220
+ s.provider.streams.delete(s.providerId);
190
221
  send(s.provider.ws, { type: 'close', streamId: s.providerId, reason }, this.limits);
222
+ const route = this.routes.get(s.serviceId)?.get(s.provider);
223
+ if (route)
224
+ route.retryAfter = Date.now() + 5000;
225
+ // Never replay ciphertext (or terminal input) onto a replacement transport.
226
+ if (s.opened || !this.openProvider(s))
227
+ this.closeStream(s, reason);
228
+ }
229
+ openProvider(s) {
230
+ if (this.stopped || Date.now() >= s.expires || s.owner.ws.readyState !== 1 || !this.canRoute(s.owner, s.serviceId))
231
+ return false;
232
+ for (const provider of this.providers(s.serviceId)) {
233
+ if (provider === s.owner || s.attempted.has(provider) || provider.streams.size >= this.limits.maxStreams)
234
+ continue;
235
+ s.attempted.add(provider);
236
+ s.provider = provider;
237
+ s.providerId = randomUUID();
238
+ provider.streams.set(s.providerId, s);
239
+ if (!send(provider.ws, { type: 'open', streamId: s.providerId, serviceId: s.serviceId }, this.limits)) {
240
+ provider.streams.delete(s.providerId);
241
+ continue;
242
+ }
243
+ s.deadline = setTimeout(() => this.providerFailed(s, 'Target timeout'), Math.min(this.limits.connectTimeoutMs, s.expires - Date.now()));
244
+ s.deadline.unref?.();
245
+ return true;
246
+ }
247
+ return false;
191
248
  }
192
249
  receive(peer, f) {
193
250
  if (f.type === 'register') {
194
251
  if (!f.serviceIds.every(id => this.canRegister(peer, id)))
195
252
  throw new Error('Registration denied');
253
+ for (const [id, routes] of this.routes)
254
+ if (routes.has(peer) && !f.serviceIds.includes(id))
255
+ this.withdraw(id, peer);
196
256
  for (const id of f.serviceIds) {
197
- const old = this.routes.get(id);
198
- if (old && old.peer !== peer && old.expires > Date.now())
199
- throw new Error('Route already registered');
257
+ let routes = this.routes.get(id);
258
+ if (!routes) {
259
+ routes = new Map();
260
+ this.routes.set(id, routes);
261
+ }
262
+ routes.set(peer, { expires: Date.now() + Math.min(f.ttlMs, this.limits.maxRouteTtlMs), retryAfter: routes.get(peer)?.retryAfter ?? 0 });
200
263
  }
201
- for (const [id, r] of this.routes)
202
- if (r.peer === peer && !f.serviceIds.includes(id))
203
- this.withdraw(id, peer);
204
- for (const id of f.serviceIds)
205
- this.routes.set(id, { peer, expires: Date.now() + Math.min(f.ttlMs, this.limits.maxRouteTtlMs) });
206
264
  return;
207
265
  }
208
266
  if (f.type === 'open') {
209
- const route = this.routes.get(f.serviceId);
210
267
  if (peer.streams.has(f.streamId))
211
268
  throw new Error('Duplicate stream');
212
- if (!this.canRoute(peer, f.serviceId) || !route || route.expires <= Date.now() || route.peer === peer) {
269
+ if (!this.canRoute(peer, f.serviceId) || !this.hasRoute(f.serviceId)) {
213
270
  send(peer.ws, { type: 'close', streamId: f.streamId, reason: 'Route unavailable or denied' }, this.limits);
214
271
  return;
215
272
  }
216
- if (peer.streams.size >= this.limits.maxStreams || route.peer.streams.size >= this.limits.maxStreams)
273
+ if (peer.streams.size >= this.limits.maxStreams)
217
274
  throw new Error('Stream budget exceeded');
218
- const s = { owner: peer, ownerId: f.streamId, provider: route.peer, providerId: randomUUID(), serviceId: f.serviceId };
275
+ const s = { owner: peer, ownerId: f.streamId, provider: peer, providerId: '', serviceId: f.serviceId, opened: false, expires: Date.now() + this.limits.routeTimeoutMs, attempted: new Set() };
219
276
  peer.streams.set(s.ownerId, s);
220
- route.peer.streams.set(s.providerId, s);
221
- if (!send(route.peer.ws, { ...f, streamId: s.providerId }, this.limits))
222
- this.closeStream(s, 'Relay disconnected');
277
+ if (!this.openProvider(s))
278
+ this.closeStream(s, 'Route unavailable or congested');
223
279
  return;
224
280
  }
225
281
  const s = peer.streams.get(f.streamId);
226
282
  if (!s)
227
283
  return;
228
- if (!this.canRoute(s.owner, s.serviceId) || !this.canRegister(s.provider, s.serviceId)) {
284
+ if (!this.canRoute(s.owner, s.serviceId)) {
229
285
  this.closeStream(s, 'Authorization revoked');
230
286
  return;
231
287
  }
288
+ const registration = this.routes.get(s.serviceId)?.get(s.provider);
289
+ if (!registration || registration.expires <= Date.now() || !this.canRegister(s.provider, s.serviceId)) {
290
+ this.withdraw(s.serviceId, s.provider);
291
+ return;
292
+ }
232
293
  if (f.type === 'close') {
233
- this.closeStream(s, 'Channel closed');
294
+ if (peer === s.provider)
295
+ this.providerFailed(s, 'Channel closed');
296
+ else
297
+ this.closeStream(s, 'Channel closed');
234
298
  return;
235
299
  }
236
300
  if (f.type === 'opened' && peer !== s.provider)
237
301
  throw new Error('Invalid channel direction');
302
+ if (f.type === 'opened') {
303
+ if (s.opened)
304
+ throw new Error('Channel already opened');
305
+ clearTimeout(s.deadline);
306
+ s.opened = true;
307
+ }
308
+ else if (!s.opened)
309
+ throw new Error('Channel not ready');
238
310
  const target = peer === s.owner ? s.provider : s.owner;
239
311
  if (!send(target.ws, { ...f, streamId: peer === s.owner ? s.providerId : s.ownerId }, this.limits))
240
312
  this.closeStream(s, 'Relay congestion');
@@ -251,6 +323,7 @@ export class RelayClient {
251
323
  limits;
252
324
  streams = new Map();
253
325
  renewal;
326
+ pending = new Map();
254
327
  stopped = false;
255
328
  constructor(upstream, options) {
256
329
  this.upstream = upstream;
@@ -265,6 +338,8 @@ export class RelayClient {
265
338
  upstream.on('message', raw => { void this.receive(raw).catch(() => upstream.close(1008, 'Invalid relay frame')); });
266
339
  }
267
340
  drop(id, reason) {
341
+ clearTimeout(this.pending.get(id));
342
+ this.pending.delete(id);
268
343
  const target = this.streams.get(id);
269
344
  this.streams.delete(id);
270
345
  target?.close();
@@ -276,26 +351,35 @@ export class RelayClient {
276
351
  throw new Error('Unexpected registration');
277
352
  if (f.type === 'open') {
278
353
  const connect = this.options.targets.get(f.serviceId);
279
- if (!connect || this.streams.has(f.streamId) || this.streams.size >= this.limits.maxStreams) {
354
+ if (this.streams.has(f.streamId))
355
+ throw new Error('Duplicate stream');
356
+ if (!connect || this.streams.size >= this.limits.maxStreams) {
280
357
  this.drop(f.streamId, 'Target unavailable');
281
358
  return;
282
359
  }
283
360
  this.streams.set(f.streamId, null);
284
- let timedOut = false;
285
- const timer = setTimeout(() => { timedOut = true; this.drop(f.streamId, 'Target timeout'); }, this.limits.connectTimeoutMs);
361
+ const timer = setTimeout(() => { this.drop(f.streamId, 'Target timeout'); }, this.limits.connectTimeoutMs);
286
362
  timer.unref?.();
363
+ this.pending.set(f.streamId, timer);
287
364
  let target;
288
365
  try {
289
366
  target = await connect();
290
367
  }
291
368
  catch {
292
- clearTimeout(timer);
293
- this.drop(f.streamId, 'Target unavailable');
369
+ if (this.pending.get(f.streamId) === timer)
370
+ this.drop(f.streamId, 'Target unavailable');
371
+ return;
372
+ }
373
+ // A canceled attempt may complete after the same ID has been reused.
374
+ if (this.pending.get(f.streamId) !== timer || this.stopped) {
375
+ target.close();
294
376
  return;
295
377
  }
296
378
  clearTimeout(timer);
297
- if (timedOut || this.stopped || !this.streams.has(f.streamId)) {
379
+ this.pending.delete(f.streamId);
380
+ if (target.readyState !== 1) {
298
381
  target.close();
382
+ this.drop(f.streamId, 'Target not ready');
299
383
  return;
300
384
  }
301
385
  this.streams.set(f.streamId, target);
@@ -3,3 +3,8 @@
3
3
  export const MAX_ACTIVE_HTTP_REQUESTS = 8;
4
4
  export const MAX_SERVER_HTTP_REQUESTS = 32;
5
5
  export const MAX_OPEN_SECURE_SOCKETS = 128;
6
+ // Relay selection must finish before foreground/background clients abandon the
7
+ // transport, leaving time for the final pinned Noise handshake.
8
+ export const RELAY_PROVIDER_CONNECT_TIMEOUT_MS = 10_000;
9
+ export const RELAY_ROUTE_OPEN_TIMEOUT_MS = 15_000;
10
+ export const RELAY_CLIENT_CONNECT_TIMEOUT_MS = 20_000;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termdock",
3
- "version": "1.4.330",
3
+ "version": "1.4.331",
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.330",
4
+ "version": "1.4.331",
5
5
  "runtimeProtocolVersion": 1,
6
6
  "minimumDesktopVersion": "1.4.46",
7
7
  "nodeMajor": 22,
8
8
  "dependencyHash": "sha256-oaGYi/P5ob8sd6VnNBOwshKozjhdV+hYiCmLAsn5x00=",
9
- "serverBundleHash": "sha256-R3DBIQv0z+SBN+LCWHRsFbWHqQ92u8mBkCkfn1MJdok=",
10
- "clientBundleHash": "sha256-MLNBIgsbEuR7PI6Npn9Zt4OyvUR6y5f88Gic0erRCvE=",
9
+ "serverBundleHash": "sha256-8G1r0kK1SCfOUPNd0nZl3wgoQuslq1dDeS5wpBtmPeI=",
10
+ "clientBundleHash": "sha256-R0LHH5Yo2BX1nGwLCClboWwzkoz/xOgeYTdOEEWULMk=",
11
11
  "entrypoint": "dist/server/cli.js",
12
12
  "clientEntrypoint": "dist/client/index.html"
13
13
  }
@@ -1,2 +0,0 @@
1
- import{bA as r}from"./app-aNkllBsm.js";import{b as m}from"./dnd-BCFAPC0L.js";import{b as n}from"./RightSidebar-scaBEaFJ.js";import"./react-XDCjal2T.js";import"./terminal-C7X98Amf.js";import"./App-JL8Fd8uO.js";import"./gestureArbiter-4NWfZprH.js";import"./triangle-alert-rgLWcpfP.js";import"./referenceLongPress-Bln9X6SW.js";import"./DiffReview-BPHfC8nZ.js";import"./sparkles-kooHQYLJ.js";import"./DiffViewer-C4S3oEQV.js";import"./ChangeWalkthroughPanel-BF3p_M6Y.js";function g({content:o}){const e=m.useMemo(()=>n(o.split(`
2
- `),null,null),[o]);return r.jsx("div",{className:"min-w-0 space-y-3 break-words text-sm leading-6 text-foreground [&_h1]:text-lg [&_h2]:text-base [&_h3]:text-sm [&_pre]:max-w-full [&_table]:text-xs",children:e.map((t,i)=>r.jsx("div",{className:"min-w-0",children:typeof t.content=="function"?t.content(null):t.content},i))})}export{g as default};