termdock 1.4.285 → 1.4.287

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 (329) hide show
  1. package/.desktop-dist/main.js +17 -558
  2. package/README.md +2 -4
  3. package/dist/client/assets/{App--hZmWk-u.js → App-qs0jye8B.js} +29 -28
  4. package/dist/client/assets/App-qs0jye8B.js.br +0 -0
  5. package/dist/client/assets/App-qs0jye8B.js.gz +0 -0
  6. package/dist/client/assets/{ChangeWalkthroughPanel-BQ1hdwzt.js → ChangeWalkthroughPanel-X-M6nxKJ.js} +1 -1
  7. package/dist/client/assets/ChangeWalkthroughPanel-X-M6nxKJ.js.br +0 -0
  8. package/dist/client/assets/ChangeWalkthroughPanel-X-M6nxKJ.js.gz +0 -0
  9. package/dist/client/assets/{DagPlayground-BERXHwib.js → DagPlayground-DgiUaUkH.js} +1 -1
  10. package/dist/client/assets/DagPlayground-DgiUaUkH.js.br +0 -0
  11. package/dist/client/assets/DagPlayground-DgiUaUkH.js.gz +0 -0
  12. package/dist/client/assets/{DiffLab-DF14_TAz.js → DiffLab-u8njwj0d.js} +1 -1
  13. package/dist/client/assets/DiffLab-u8njwj0d.js.br +0 -0
  14. package/dist/client/assets/DiffLab-u8njwj0d.js.gz +0 -0
  15. package/dist/client/assets/{DiffReview-BQcIn0zl.js → DiffReview-DoQY-klj.js} +1 -1
  16. package/dist/client/assets/DiffReview-DoQY-klj.js.br +0 -0
  17. package/dist/client/assets/DiffReview-DoQY-klj.js.gz +0 -0
  18. package/dist/client/assets/{DiffReviewLab-CgChwzQr.js → DiffReviewLab-DlKbMbfq.js} +1 -1
  19. package/dist/client/assets/DiffReviewLab-DlKbMbfq.js.br +0 -0
  20. package/dist/client/assets/DiffReviewLab-DlKbMbfq.js.gz +0 -0
  21. package/dist/client/assets/{DiffViewer-hDpe-wvG.js → DiffViewer-nlvDqGPJ.js} +1 -1
  22. package/dist/client/assets/DiffViewer-nlvDqGPJ.js.br +0 -0
  23. package/dist/client/assets/DiffViewer-nlvDqGPJ.js.gz +0 -0
  24. package/dist/client/assets/{ModelPreview-vg3vRIhx.js → ModelPreview-C3beTH3N.js} +1 -1
  25. package/dist/client/assets/ModelPreview-C3beTH3N.js.br +0 -0
  26. package/dist/client/assets/ModelPreview-C3beTH3N.js.gz +0 -0
  27. package/dist/client/assets/{RightSidebar-5H4vhn3k.js → RightSidebar-BtktcUdh.js} +5 -5
  28. package/dist/client/assets/RightSidebar-BtktcUdh.js.br +0 -0
  29. package/dist/client/assets/RightSidebar-BtktcUdh.js.gz +0 -0
  30. package/dist/client/assets/{abnfDiagram-VCTEODGH-DI7938HB.js → abnfDiagram-VCTEODGH-7J_hDjG2.js} +1 -1
  31. package/dist/client/assets/abnfDiagram-VCTEODGH-7J_hDjG2.js.br +0 -0
  32. package/dist/client/assets/abnfDiagram-VCTEODGH-7J_hDjG2.js.gz +0 -0
  33. package/dist/client/assets/{app-BeVXUQb-.js → app-CHKqaWIE.js} +7 -7
  34. package/dist/client/assets/app-CHKqaWIE.js.br +0 -0
  35. package/dist/client/assets/app-CHKqaWIE.js.gz +0 -0
  36. package/dist/client/assets/{arc-D4qDm5Yn.js → arc-Bg_CuCZm.js} +1 -1
  37. package/dist/client/assets/arc-Bg_CuCZm.js.br +0 -0
  38. package/dist/client/assets/arc-Bg_CuCZm.js.gz +0 -0
  39. package/dist/client/assets/{architectureDiagram-5GKGNRK7-C4IZCNC9.js → architectureDiagram-5GKGNRK7-CsSHwySz.js} +1 -1
  40. package/dist/client/assets/architectureDiagram-5GKGNRK7-CsSHwySz.js.br +0 -0
  41. package/dist/client/assets/architectureDiagram-5GKGNRK7-CsSHwySz.js.gz +0 -0
  42. package/dist/client/assets/{blockDiagram-I7D4REHJ-DHVOr_jQ.js → blockDiagram-I7D4REHJ-DePM_hkV.js} +1 -1
  43. package/dist/client/assets/blockDiagram-I7D4REHJ-DePM_hkV.js.br +0 -0
  44. package/dist/client/assets/blockDiagram-I7D4REHJ-DePM_hkV.js.gz +0 -0
  45. package/dist/client/assets/{c4Diagram-7LVT6UL2-kQqkOkIe.js → c4Diagram-7LVT6UL2-BQ8B9h53.js} +1 -1
  46. package/dist/client/assets/c4Diagram-7LVT6UL2-BQ8B9h53.js.br +0 -0
  47. package/dist/client/assets/c4Diagram-7LVT6UL2-BQ8B9h53.js.gz +0 -0
  48. package/dist/client/assets/channel-8p7Zocq1.js +1 -0
  49. package/dist/client/assets/{chunk-2Q5K7J3B-D2kOR60I.js → chunk-2Q5K7J3B-Bo9Nc-d4.js} +1 -1
  50. package/dist/client/assets/{chunk-5VM5RSS4-CxaDg0nL.js → chunk-5VM5RSS4-D_qQp7an.js} +1 -1
  51. package/dist/client/assets/{chunk-F27PBJKO-Bxf7XPNj.js → chunk-F27PBJKO-CJvGLWuF.js} +1 -1
  52. package/dist/client/assets/chunk-F27PBJKO-CJvGLWuF.js.br +0 -0
  53. package/dist/client/assets/chunk-F27PBJKO-CJvGLWuF.js.gz +0 -0
  54. package/dist/client/assets/{chunk-IMKFNOWR-BTifpaB5.js → chunk-IMKFNOWR-e4fa23mF.js} +1 -1
  55. package/dist/client/assets/chunk-IMKFNOWR-e4fa23mF.js.br +0 -0
  56. package/dist/client/assets/chunk-IMKFNOWR-e4fa23mF.js.gz +0 -0
  57. package/dist/client/assets/{chunk-JWPE2WC7-Deieql_u.js → chunk-JWPE2WC7-D9qVRvQs.js} +1 -1
  58. package/dist/client/assets/{chunk-POPQ4Y6H-CqZwUpjK.js → chunk-POPQ4Y6H-7eOizLll.js} +1 -1
  59. package/dist/client/assets/{chunk-SVP7TREG-Bm1spPMb.js → chunk-SVP7TREG-Co1wDBYI.js} +1 -1
  60. package/dist/client/assets/chunk-SVP7TREG-Co1wDBYI.js.br +0 -0
  61. package/dist/client/assets/chunk-SVP7TREG-Co1wDBYI.js.gz +0 -0
  62. package/dist/client/assets/{chunk-TICWLB2K-BGLj-zGP.js → chunk-TICWLB2K-yKjTtLNf.js} +1 -1
  63. package/dist/client/assets/chunk-TICWLB2K-yKjTtLNf.js.br +0 -0
  64. package/dist/client/assets/chunk-TICWLB2K-yKjTtLNf.js.gz +0 -0
  65. package/dist/client/assets/{chunk-XXDRQBXY-CR77bUfc.js → chunk-XXDRQBXY-DDFq5Eoi.js} +1 -1
  66. package/dist/client/assets/classDiagram-ZZMXUADV-DM8VyUpP.js +1 -0
  67. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DM8VyUpP.js +1 -0
  68. package/dist/client/assets/{cose-bilkent-JH36ORCC-GTawhnoV.js → cose-bilkent-JH36ORCC-Ng2b-szu.js} +1 -1
  69. package/dist/client/assets/cose-bilkent-JH36ORCC-Ng2b-szu.js.br +0 -0
  70. package/dist/client/assets/cose-bilkent-JH36ORCC-Ng2b-szu.js.gz +0 -0
  71. package/dist/client/assets/{cynefin-OW5HDTMX-DHdRkQdW.js → cynefin-OW5HDTMX-BUzoxsoE.js} +1 -1
  72. package/dist/client/assets/cynefin-OW5HDTMX-BUzoxsoE.js.br +0 -0
  73. package/dist/client/assets/cynefin-OW5HDTMX-BUzoxsoE.js.gz +0 -0
  74. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-Cj2ytLun.js → cynefinDiagram-5FMLGOSQ-9sKimYPk.js} +1 -1
  75. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-9sKimYPk.js.br +0 -0
  76. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-9sKimYPk.js.gz +0 -0
  77. package/dist/client/assets/{dagre-GXQ25YYZ-BdFZmtIj.js → dagre-GXQ25YYZ-C6GZ4pYU.js} +1 -1
  78. package/dist/client/assets/dagre-GXQ25YYZ-C6GZ4pYU.js.br +0 -0
  79. package/dist/client/assets/dagre-GXQ25YYZ-C6GZ4pYU.js.gz +0 -0
  80. package/dist/client/assets/{diagram-S7CK7UJ4-D5WQNuKI.js → diagram-S7CK7UJ4-DHewWm_2.js} +1 -1
  81. package/dist/client/assets/diagram-S7CK7UJ4-DHewWm_2.js.br +0 -0
  82. package/dist/client/assets/diagram-S7CK7UJ4-DHewWm_2.js.gz +0 -0
  83. package/dist/client/assets/{diagram-UQ7AKVKN-ChwjfMce.js → diagram-UQ7AKVKN-BU-Qm_iS.js} +1 -1
  84. package/dist/client/assets/diagram-UQ7AKVKN-BU-Qm_iS.js.br +0 -0
  85. package/dist/client/assets/diagram-UQ7AKVKN-BU-Qm_iS.js.gz +0 -0
  86. package/dist/client/assets/{diagram-VSXAHHWV-DT4FET5f.js → diagram-VSXAHHWV-DEvxj92u.js} +1 -1
  87. package/dist/client/assets/diagram-VSXAHHWV-DEvxj92u.js.br +0 -0
  88. package/dist/client/assets/diagram-VSXAHHWV-DEvxj92u.js.gz +0 -0
  89. package/dist/client/assets/{diagram-VX7I27RA-BLJsAGx6.js → diagram-VX7I27RA-DwwnVInb.js} +1 -1
  90. package/dist/client/assets/diagram-VX7I27RA-DwwnVInb.js.br +0 -0
  91. package/dist/client/assets/diagram-VX7I27RA-DwwnVInb.js.gz +0 -0
  92. package/dist/client/assets/{diagram-Z3DM3KII-C1ofLllK.js → diagram-Z3DM3KII-DDhqqeca.js} +1 -1
  93. package/dist/client/assets/diagram-Z3DM3KII-DDhqqeca.js.br +0 -0
  94. package/dist/client/assets/diagram-Z3DM3KII-DDhqqeca.js.gz +0 -0
  95. package/dist/client/assets/{ebnfDiagram-PWID7BFC-apxDEeqe.js → ebnfDiagram-PWID7BFC-CQz2BRgT.js} +1 -1
  96. package/dist/client/assets/ebnfDiagram-PWID7BFC-CQz2BRgT.js.br +0 -0
  97. package/dist/client/assets/ebnfDiagram-PWID7BFC-CQz2BRgT.js.gz +0 -0
  98. package/dist/client/assets/{erDiagram-RLTQ6QDP-Dq9hBYpH.js → erDiagram-RLTQ6QDP-D2eLjKEA.js} +1 -1
  99. package/dist/client/assets/erDiagram-RLTQ6QDP-D2eLjKEA.js.br +0 -0
  100. package/dist/client/assets/erDiagram-RLTQ6QDP-D2eLjKEA.js.gz +0 -0
  101. package/dist/client/assets/{flowDiagram-HODETNUW-Juk-Qv9f.js → flowDiagram-HODETNUW-B7oJq5P3.js} +1 -1
  102. package/dist/client/assets/flowDiagram-HODETNUW-B7oJq5P3.js.br +0 -0
  103. package/dist/client/assets/flowDiagram-HODETNUW-B7oJq5P3.js.gz +0 -0
  104. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-mmwd0mxs.js → ganttDiagram-EL5Y4UJY-BUA_LsMw.js} +1 -1
  105. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BUA_LsMw.js.br +0 -0
  106. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BUA_LsMw.js.gz +0 -0
  107. package/dist/client/assets/{gestureArbiter-CM_xJnCS.js → gestureArbiter-8VtxF9dg.js} +1 -1
  108. package/dist/client/assets/gestureArbiter-8VtxF9dg.js.br +0 -0
  109. package/dist/client/assets/gestureArbiter-8VtxF9dg.js.gz +0 -0
  110. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX--UL7HV4P.js → gitGraphDiagram-WWUBYQGX-BlbsPdki.js} +1 -1
  111. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BlbsPdki.js.br +0 -0
  112. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BlbsPdki.js.gz +0 -0
  113. package/dist/client/assets/{index-pZsldTFS.css → index-DUCUcxTy.css} +1 -1
  114. package/dist/client/assets/index-DUCUcxTy.css.br +0 -0
  115. package/dist/client/assets/{index-pZsldTFS.css.gz → index-DUCUcxTy.css.gz} +0 -0
  116. package/dist/client/assets/{infoDiagram-27XIBGKW-CcsxyqYJ.js → infoDiagram-27XIBGKW-DdYvRIDS.js} +1 -1
  117. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-CNVFPx1_.js → ishikawaDiagram-5VMMS53U-CZbBbDjz.js} +1 -1
  118. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CZbBbDjz.js.br +0 -0
  119. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CZbBbDjz.js.gz +0 -0
  120. package/dist/client/assets/{journeyDiagram-3NMN7TZE-BtIuJLUp.js → journeyDiagram-3NMN7TZE-DtxlqtaG.js} +1 -1
  121. package/dist/client/assets/journeyDiagram-3NMN7TZE-DtxlqtaG.js.br +0 -0
  122. package/dist/client/assets/journeyDiagram-3NMN7TZE-DtxlqtaG.js.gz +0 -0
  123. package/dist/client/assets/{kanban-definition-UXKFOSKX-gOFjuFZV.js → kanban-definition-UXKFOSKX-UMDV9UCG.js} +1 -1
  124. package/dist/client/assets/kanban-definition-UXKFOSKX-UMDV9UCG.js.br +0 -0
  125. package/dist/client/assets/kanban-definition-UXKFOSKX-UMDV9UCG.js.gz +0 -0
  126. package/dist/client/assets/{layout-KEP24zEE.js → layout-CAAXci79.js} +1 -1
  127. package/dist/client/assets/layout-CAAXci79.js.br +0 -0
  128. package/dist/client/assets/layout-CAAXci79.js.gz +0 -0
  129. package/dist/client/assets/{linear-BwUXWDLn.js → linear-BGBP_FE_.js} +1 -1
  130. package/dist/client/assets/linear-BGBP_FE_.js.br +0 -0
  131. package/dist/client/assets/linear-BGBP_FE_.js.gz +0 -0
  132. package/dist/client/assets/{mermaid.core-DkzJYwWa.js → mermaid.core-BH_WDKpZ.js} +5 -5
  133. package/dist/client/assets/mermaid.core-BH_WDKpZ.js.br +0 -0
  134. package/dist/client/assets/mermaid.core-BH_WDKpZ.js.gz +0 -0
  135. package/dist/client/assets/{mindmap-definition-YA3MSWOX-BE1H8WPd.js → mindmap-definition-YA3MSWOX-7yyx6kg5.js} +1 -1
  136. package/dist/client/assets/mindmap-definition-YA3MSWOX-7yyx6kg5.js.br +0 -0
  137. package/dist/client/assets/mindmap-definition-YA3MSWOX-7yyx6kg5.js.gz +0 -0
  138. package/dist/client/assets/{passwordBootstrap-Dhzj9-U2.js → passwordBootstrap-Dt3dN800.js} +1 -1
  139. package/dist/client/assets/passwordBootstrap-Dt3dN800.js.br +0 -0
  140. package/dist/client/assets/passwordBootstrap-Dt3dN800.js.gz +0 -0
  141. package/dist/client/assets/{pegDiagram-XKGWAZYB-CorBwvfP.js → pegDiagram-XKGWAZYB-D254I9Yl.js} +1 -1
  142. package/dist/client/assets/pegDiagram-XKGWAZYB-D254I9Yl.js.br +0 -0
  143. package/dist/client/assets/pegDiagram-XKGWAZYB-D254I9Yl.js.gz +0 -0
  144. package/dist/client/assets/{pieDiagram-E7YTZNPT-A017Uk-W.js → pieDiagram-E7YTZNPT-DTy-4KXi.js} +1 -1
  145. package/dist/client/assets/pieDiagram-E7YTZNPT-DTy-4KXi.js.br +0 -0
  146. package/dist/client/assets/pieDiagram-E7YTZNPT-DTy-4KXi.js.gz +0 -0
  147. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-CNNywvhG.js → quadrantDiagram-AXDQQJYC-BMsaHxl0.js} +1 -1
  148. package/dist/client/assets/quadrantDiagram-AXDQQJYC-BMsaHxl0.js.br +0 -0
  149. package/dist/client/assets/quadrantDiagram-AXDQQJYC-BMsaHxl0.js.gz +0 -0
  150. package/dist/client/assets/{railroadDiagram-O6MQD6OU-DIxiWn5A.js → railroadDiagram-O6MQD6OU-D4c39AAQ.js} +1 -1
  151. package/dist/client/assets/railroadDiagram-O6MQD6OU-D4c39AAQ.js.br +0 -0
  152. package/dist/client/assets/railroadDiagram-O6MQD6OU-D4c39AAQ.js.gz +0 -0
  153. package/dist/client/assets/{referenceLongPress-Bp8q50sv.js → referenceLongPress-TTIbwCKV.js} +1 -1
  154. package/dist/client/assets/referenceLongPress-TTIbwCKV.js.br +0 -0
  155. package/dist/client/assets/referenceLongPress-TTIbwCKV.js.gz +0 -0
  156. package/dist/client/assets/{requirementDiagram-BXWQKSXE-Ob4lS23U.js → requirementDiagram-BXWQKSXE-CwJjBKnR.js} +1 -1
  157. package/dist/client/assets/requirementDiagram-BXWQKSXE-CwJjBKnR.js.br +0 -0
  158. package/dist/client/assets/requirementDiagram-BXWQKSXE-CwJjBKnR.js.gz +0 -0
  159. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-Cc5e7umb.js → sankeyDiagram-P5KCCOFB-DVlRBDMK.js} +1 -1
  160. package/dist/client/assets/sankeyDiagram-P5KCCOFB-DVlRBDMK.js.br +0 -0
  161. package/dist/client/assets/sankeyDiagram-P5KCCOFB-DVlRBDMK.js.gz +0 -0
  162. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-CLTRKFht.js → sequenceDiagram-WJ2MYXX4-BsWqKeoD.js} +1 -1
  163. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BsWqKeoD.js.br +0 -0
  164. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BsWqKeoD.js.gz +0 -0
  165. package/dist/client/assets/{sizeCapture-INFHLROL-h6hFhQw6.js → sizeCapture-INFHLROL-1FEOsRFT.js} +1 -1
  166. package/dist/client/assets/sizeCapture-INFHLROL-1FEOsRFT.js.br +0 -0
  167. package/dist/client/assets/sizeCapture-INFHLROL-1FEOsRFT.js.gz +0 -0
  168. package/dist/client/assets/{sparkles-9OJtJfyK.js → sparkles-hN4VSTDx.js} +1 -1
  169. package/dist/client/assets/{stateDiagram-D77RDMKH-DSaJxX_r.js → stateDiagram-D77RDMKH-DWNE48Sc.js} +1 -1
  170. package/dist/client/assets/stateDiagram-D77RDMKH-DWNE48Sc.js.br +0 -0
  171. package/dist/client/assets/stateDiagram-D77RDMKH-DWNE48Sc.js.gz +0 -0
  172. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-BMprFuVB.js +1 -0
  173. package/dist/client/assets/{swimlanes-42K2YHIH-CP7ABWyE.js → swimlanes-42K2YHIH-ghhxa8QM.js} +1 -1
  174. package/dist/client/assets/swimlanes-42K2YHIH-ghhxa8QM.js.br +0 -0
  175. package/dist/client/assets/swimlanes-42K2YHIH-ghhxa8QM.js.gz +0 -0
  176. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-Dg4tYXGL.js +8 -0
  177. package/dist/client/assets/{timeline-definition-24CTP7MA-CdwVIVF6.js → timeline-definition-24CTP7MA-B0eZfCze.js} +1 -1
  178. package/dist/client/assets/timeline-definition-24CTP7MA-B0eZfCze.js.br +0 -0
  179. package/dist/client/assets/timeline-definition-24CTP7MA-B0eZfCze.js.gz +0 -0
  180. package/dist/client/assets/{triangle-alert-BvT4KSYf.js → triangle-alert-zb36qQ-j.js} +1 -1
  181. package/dist/client/assets/{vennDiagram-4TSXK5OY-BXGgQFVY.js → vennDiagram-4TSXK5OY-DCdV0A4l.js} +1 -1
  182. package/dist/client/assets/vennDiagram-4TSXK5OY-DCdV0A4l.js.br +0 -0
  183. package/dist/client/assets/vennDiagram-4TSXK5OY-DCdV0A4l.js.gz +0 -0
  184. package/dist/client/assets/{videoCompression-BFXJyhpz.js → videoCompression-BzT-9eWg.js} +1 -1
  185. package/dist/client/assets/videoCompression-BzT-9eWg.js.br +0 -0
  186. package/dist/client/assets/videoCompression-BzT-9eWg.js.gz +0 -0
  187. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-CtLophqU.js → wardleyDiagram-VM6X3IG4-BQvk-8b6.js} +1 -1
  188. package/dist/client/assets/wardleyDiagram-VM6X3IG4-BQvk-8b6.js.br +0 -0
  189. package/dist/client/assets/wardleyDiagram-VM6X3IG4-BQvk-8b6.js.gz +0 -0
  190. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-YZ9bnI1e.js → xychartDiagram-S5SC5T6Z-D1VdK6g5.js} +1 -1
  191. package/dist/client/assets/xychartDiagram-S5SC5T6Z-D1VdK6g5.js.br +0 -0
  192. package/dist/client/assets/xychartDiagram-S5SC5T6Z-D1VdK6g5.js.gz +0 -0
  193. package/dist/client/index.html +2 -2
  194. package/dist/client/index.html.br +0 -0
  195. package/dist/client/index.html.gz +0 -0
  196. package/dist/client/sw.js +1 -1
  197. package/dist/client/sw.js.br +0 -0
  198. package/dist/client/sw.js.gz +0 -0
  199. package/dist/server/entry.js +2 -6
  200. package/dist/server/routes/terminal.js +4 -22
  201. package/dist/server/utils/enableSupervision.js +2 -3
  202. package/dist/server/utils/runtimeClient.js +0 -32
  203. package/package.json +3 -3
  204. package/runtime-manifest.json +3 -3
  205. package/scripts/classify-release.mjs +0 -1
  206. package/dist/client/assets/App--hZmWk-u.js.br +0 -0
  207. package/dist/client/assets/App--hZmWk-u.js.gz +0 -0
  208. package/dist/client/assets/ChangeWalkthroughPanel-BQ1hdwzt.js.br +0 -0
  209. package/dist/client/assets/ChangeWalkthroughPanel-BQ1hdwzt.js.gz +0 -0
  210. package/dist/client/assets/DagPlayground-BERXHwib.js.br +0 -0
  211. package/dist/client/assets/DagPlayground-BERXHwib.js.gz +0 -0
  212. package/dist/client/assets/DiffLab-DF14_TAz.js.br +0 -0
  213. package/dist/client/assets/DiffLab-DF14_TAz.js.gz +0 -0
  214. package/dist/client/assets/DiffReview-BQcIn0zl.js.br +0 -0
  215. package/dist/client/assets/DiffReview-BQcIn0zl.js.gz +0 -0
  216. package/dist/client/assets/DiffReviewLab-CgChwzQr.js.br +0 -0
  217. package/dist/client/assets/DiffReviewLab-CgChwzQr.js.gz +0 -0
  218. package/dist/client/assets/DiffViewer-hDpe-wvG.js.br +0 -0
  219. package/dist/client/assets/DiffViewer-hDpe-wvG.js.gz +0 -0
  220. package/dist/client/assets/ModelPreview-vg3vRIhx.js.br +0 -0
  221. package/dist/client/assets/ModelPreview-vg3vRIhx.js.gz +0 -0
  222. package/dist/client/assets/RightSidebar-5H4vhn3k.js.br +0 -0
  223. package/dist/client/assets/RightSidebar-5H4vhn3k.js.gz +0 -0
  224. package/dist/client/assets/abnfDiagram-VCTEODGH-DI7938HB.js.br +0 -0
  225. package/dist/client/assets/abnfDiagram-VCTEODGH-DI7938HB.js.gz +0 -0
  226. package/dist/client/assets/app-BeVXUQb-.js.br +0 -0
  227. package/dist/client/assets/app-BeVXUQb-.js.gz +0 -0
  228. package/dist/client/assets/arc-D4qDm5Yn.js.br +0 -0
  229. package/dist/client/assets/arc-D4qDm5Yn.js.gz +0 -0
  230. package/dist/client/assets/architectureDiagram-5GKGNRK7-C4IZCNC9.js.br +0 -0
  231. package/dist/client/assets/architectureDiagram-5GKGNRK7-C4IZCNC9.js.gz +0 -0
  232. package/dist/client/assets/blockDiagram-I7D4REHJ-DHVOr_jQ.js.br +0 -0
  233. package/dist/client/assets/blockDiagram-I7D4REHJ-DHVOr_jQ.js.gz +0 -0
  234. package/dist/client/assets/c4Diagram-7LVT6UL2-kQqkOkIe.js.br +0 -0
  235. package/dist/client/assets/c4Diagram-7LVT6UL2-kQqkOkIe.js.gz +0 -0
  236. package/dist/client/assets/channel-DNlwrmA4.js +0 -1
  237. package/dist/client/assets/chunk-F27PBJKO-Bxf7XPNj.js.br +0 -0
  238. package/dist/client/assets/chunk-F27PBJKO-Bxf7XPNj.js.gz +0 -0
  239. package/dist/client/assets/chunk-IMKFNOWR-BTifpaB5.js.br +0 -0
  240. package/dist/client/assets/chunk-IMKFNOWR-BTifpaB5.js.gz +0 -0
  241. package/dist/client/assets/chunk-SVP7TREG-Bm1spPMb.js.br +0 -0
  242. package/dist/client/assets/chunk-SVP7TREG-Bm1spPMb.js.gz +0 -0
  243. package/dist/client/assets/chunk-TICWLB2K-BGLj-zGP.js.br +0 -0
  244. package/dist/client/assets/chunk-TICWLB2K-BGLj-zGP.js.gz +0 -0
  245. package/dist/client/assets/classDiagram-ZZMXUADV-CUt4JCwJ.js +0 -1
  246. package/dist/client/assets/classDiagram-v2-VYDZK3BY-CUt4JCwJ.js +0 -1
  247. package/dist/client/assets/cose-bilkent-JH36ORCC-GTawhnoV.js.br +0 -0
  248. package/dist/client/assets/cose-bilkent-JH36ORCC-GTawhnoV.js.gz +0 -0
  249. package/dist/client/assets/cynefin-OW5HDTMX-DHdRkQdW.js.br +0 -0
  250. package/dist/client/assets/cynefin-OW5HDTMX-DHdRkQdW.js.gz +0 -0
  251. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Cj2ytLun.js.br +0 -0
  252. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Cj2ytLun.js.gz +0 -0
  253. package/dist/client/assets/dagre-GXQ25YYZ-BdFZmtIj.js.br +0 -0
  254. package/dist/client/assets/dagre-GXQ25YYZ-BdFZmtIj.js.gz +0 -0
  255. package/dist/client/assets/diagram-S7CK7UJ4-D5WQNuKI.js.br +0 -0
  256. package/dist/client/assets/diagram-S7CK7UJ4-D5WQNuKI.js.gz +0 -0
  257. package/dist/client/assets/diagram-UQ7AKVKN-ChwjfMce.js.br +0 -0
  258. package/dist/client/assets/diagram-UQ7AKVKN-ChwjfMce.js.gz +0 -0
  259. package/dist/client/assets/diagram-VSXAHHWV-DT4FET5f.js.br +0 -0
  260. package/dist/client/assets/diagram-VSXAHHWV-DT4FET5f.js.gz +0 -0
  261. package/dist/client/assets/diagram-VX7I27RA-BLJsAGx6.js.br +0 -0
  262. package/dist/client/assets/diagram-VX7I27RA-BLJsAGx6.js.gz +0 -0
  263. package/dist/client/assets/diagram-Z3DM3KII-C1ofLllK.js.br +0 -0
  264. package/dist/client/assets/diagram-Z3DM3KII-C1ofLllK.js.gz +0 -0
  265. package/dist/client/assets/ebnfDiagram-PWID7BFC-apxDEeqe.js.br +0 -0
  266. package/dist/client/assets/ebnfDiagram-PWID7BFC-apxDEeqe.js.gz +0 -0
  267. package/dist/client/assets/erDiagram-RLTQ6QDP-Dq9hBYpH.js.br +0 -0
  268. package/dist/client/assets/erDiagram-RLTQ6QDP-Dq9hBYpH.js.gz +0 -0
  269. package/dist/client/assets/flowDiagram-HODETNUW-Juk-Qv9f.js.br +0 -0
  270. package/dist/client/assets/flowDiagram-HODETNUW-Juk-Qv9f.js.gz +0 -0
  271. package/dist/client/assets/ganttDiagram-EL5Y4UJY-mmwd0mxs.js.br +0 -0
  272. package/dist/client/assets/ganttDiagram-EL5Y4UJY-mmwd0mxs.js.gz +0 -0
  273. package/dist/client/assets/gestureArbiter-CM_xJnCS.js.br +0 -0
  274. package/dist/client/assets/gestureArbiter-CM_xJnCS.js.gz +0 -0
  275. package/dist/client/assets/gitGraphDiagram-WWUBYQGX--UL7HV4P.js.br +0 -0
  276. package/dist/client/assets/gitGraphDiagram-WWUBYQGX--UL7HV4P.js.gz +0 -0
  277. package/dist/client/assets/index-pZsldTFS.css.br +0 -0
  278. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CNVFPx1_.js.br +0 -0
  279. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CNVFPx1_.js.gz +0 -0
  280. package/dist/client/assets/journeyDiagram-3NMN7TZE-BtIuJLUp.js.br +0 -0
  281. package/dist/client/assets/journeyDiagram-3NMN7TZE-BtIuJLUp.js.gz +0 -0
  282. package/dist/client/assets/kanban-definition-UXKFOSKX-gOFjuFZV.js.br +0 -0
  283. package/dist/client/assets/kanban-definition-UXKFOSKX-gOFjuFZV.js.gz +0 -0
  284. package/dist/client/assets/layout-KEP24zEE.js.br +0 -0
  285. package/dist/client/assets/layout-KEP24zEE.js.gz +0 -0
  286. package/dist/client/assets/linear-BwUXWDLn.js.br +0 -0
  287. package/dist/client/assets/linear-BwUXWDLn.js.gz +0 -0
  288. package/dist/client/assets/mermaid.core-DkzJYwWa.js.br +0 -0
  289. package/dist/client/assets/mermaid.core-DkzJYwWa.js.gz +0 -0
  290. package/dist/client/assets/mindmap-definition-YA3MSWOX-BE1H8WPd.js.br +0 -0
  291. package/dist/client/assets/mindmap-definition-YA3MSWOX-BE1H8WPd.js.gz +0 -0
  292. package/dist/client/assets/passwordBootstrap-Dhzj9-U2.js.br +0 -0
  293. package/dist/client/assets/passwordBootstrap-Dhzj9-U2.js.gz +0 -0
  294. package/dist/client/assets/pegDiagram-XKGWAZYB-CorBwvfP.js.br +0 -0
  295. package/dist/client/assets/pegDiagram-XKGWAZYB-CorBwvfP.js.gz +0 -0
  296. package/dist/client/assets/pieDiagram-E7YTZNPT-A017Uk-W.js.br +0 -0
  297. package/dist/client/assets/pieDiagram-E7YTZNPT-A017Uk-W.js.gz +0 -0
  298. package/dist/client/assets/quadrantDiagram-AXDQQJYC-CNNywvhG.js.br +0 -0
  299. package/dist/client/assets/quadrantDiagram-AXDQQJYC-CNNywvhG.js.gz +0 -0
  300. package/dist/client/assets/railroadDiagram-O6MQD6OU-DIxiWn5A.js.br +0 -0
  301. package/dist/client/assets/railroadDiagram-O6MQD6OU-DIxiWn5A.js.gz +0 -0
  302. package/dist/client/assets/referenceLongPress-Bp8q50sv.js.br +0 -0
  303. package/dist/client/assets/referenceLongPress-Bp8q50sv.js.gz +0 -0
  304. package/dist/client/assets/requirementDiagram-BXWQKSXE-Ob4lS23U.js.br +0 -0
  305. package/dist/client/assets/requirementDiagram-BXWQKSXE-Ob4lS23U.js.gz +0 -0
  306. package/dist/client/assets/sankeyDiagram-P5KCCOFB-Cc5e7umb.js.br +0 -0
  307. package/dist/client/assets/sankeyDiagram-P5KCCOFB-Cc5e7umb.js.gz +0 -0
  308. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-CLTRKFht.js.br +0 -0
  309. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-CLTRKFht.js.gz +0 -0
  310. package/dist/client/assets/sizeCapture-INFHLROL-h6hFhQw6.js.br +0 -0
  311. package/dist/client/assets/sizeCapture-INFHLROL-h6hFhQw6.js.gz +0 -0
  312. package/dist/client/assets/stateDiagram-D77RDMKH-DSaJxX_r.js.br +0 -0
  313. package/dist/client/assets/stateDiagram-D77RDMKH-DSaJxX_r.js.gz +0 -0
  314. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CQ9iS9Nl.js +0 -1
  315. package/dist/client/assets/swimlanes-42K2YHIH-CP7ABWyE.js.br +0 -0
  316. package/dist/client/assets/swimlanes-42K2YHIH-CP7ABWyE.js.gz +0 -0
  317. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-BbfCRvRt.js +0 -8
  318. package/dist/client/assets/timeline-definition-24CTP7MA-CdwVIVF6.js.br +0 -0
  319. package/dist/client/assets/timeline-definition-24CTP7MA-CdwVIVF6.js.gz +0 -0
  320. package/dist/client/assets/vennDiagram-4TSXK5OY-BXGgQFVY.js.br +0 -0
  321. package/dist/client/assets/vennDiagram-4TSXK5OY-BXGgQFVY.js.gz +0 -0
  322. package/dist/client/assets/videoCompression-BFXJyhpz.js.br +0 -0
  323. package/dist/client/assets/videoCompression-BFXJyhpz.js.gz +0 -0
  324. package/dist/client/assets/wardleyDiagram-VM6X3IG4-CtLophqU.js.br +0 -0
  325. package/dist/client/assets/wardleyDiagram-VM6X3IG4-CtLophqU.js.gz +0 -0
  326. package/dist/client/assets/xychartDiagram-S5SC5T6Z-YZ9bnI1e.js.br +0 -0
  327. package/dist/client/assets/xychartDiagram-S5SC5T6Z-YZ9bnI1e.js.gz +0 -0
  328. package/dist/server/utils/desktopRuntimeOwner.js +0 -105
  329. package/scripts/prepare-desktop-runtime.mjs +0 -228
@@ -1,228 +0,0 @@
1
- import { execFileSync, spawnSync } from 'node:child_process';
2
- import fs from 'node:fs';
3
- import os from 'node:os';
4
- import path from 'node:path';
5
- import process from 'node:process';
6
- import { fileURLToPath } from 'node:url';
7
-
8
- const scriptDir = path.dirname(fileURLToPath(import.meta.url));
9
- const root = path.resolve(scriptDir, '..');
10
- const stage = path.join(root, '.desktop-runtime');
11
- const runtimeDir = path.join(stage, 'runtime');
12
- const serverDir = path.join(stage, 'server');
13
- const toolchainDir = path.join(stage, 'toolchain');
14
- const toolchainBinDir = path.join(toolchainDir, 'bin');
15
- const toolchainLibDir = path.join(toolchainDir, 'lib');
16
- const nodeDownloadDir = path.join(stage, 'node-download');
17
- const nodeArchiveCacheDir = process.env.TERMDOCK_NODE_ARCHIVE_CACHE
18
- ? path.resolve(process.env.TERMDOCK_NODE_ARCHIVE_CACHE)
19
- : path.join(os.homedir(), '.cache', 'termdock', 'node-archives');
20
- const desktopBuildNodeMajor = 22;
21
-
22
- const buildNodeMajor = Number.parseInt(process.versions.node.split('.')[0], 10);
23
- if (buildNodeMajor !== desktopBuildNodeMajor) {
24
- throw new Error(
25
- `macOS desktop packaging requires Node.js ${desktopBuildNodeMajor}.x; `
26
- + `current build runtime is ${process.version}.`,
27
- );
28
- }
29
-
30
- function run(command, args, options = {}) {
31
- const result = spawnSync(command, args, {
32
- cwd: options.cwd ?? root,
33
- env: options.env ?? process.env,
34
- encoding: 'utf8',
35
- stdio: options.stdio ?? 'inherit',
36
- });
37
- if (result.status !== 0) {
38
- throw new Error(`${command} ${args.join(' ')} failed with exit code ${result.status}`);
39
- }
40
- return result.stdout ?? '';
41
- }
42
-
43
- function executableOnPath(name) {
44
- if (process.platform === 'darwin') {
45
- for (const candidate of [
46
- `/opt/homebrew/bin/${name}`,
47
- `/usr/local/bin/${name}`,
48
- ]) {
49
- if (fs.existsSync(candidate)) return candidate;
50
- }
51
- }
52
- try {
53
- return execFileSync('/usr/bin/which', [name], { encoding: 'utf8' }).trim() || null;
54
- } catch {
55
- return null;
56
- }
57
- }
58
-
59
- function isSystemLibrary(libraryPath) {
60
- return libraryPath.startsWith('/System/Library/')
61
- || libraryPath.startsWith('/usr/lib/');
62
- }
63
-
64
- function linkedLibraries(binaryPath) {
65
- if (process.platform !== 'darwin') return [];
66
- const output = execFileSync('/usr/bin/otool', ['-L', binaryPath], { encoding: 'utf8' });
67
- return output
68
- .split('\n')
69
- .slice(1)
70
- .map((line) => line.trim().split(/\s+\(/)[0])
71
- .filter((entry) => entry && !entry.startsWith('@') && !isSystemLibrary(entry));
72
- }
73
-
74
- function copyMacBinary(sourcePath, destinationPath) {
75
- fs.copyFileSync(sourcePath, destinationPath);
76
- fs.chmodSync(destinationPath, 0o755);
77
- if (process.platform !== 'darwin') return;
78
-
79
- const queue = [{ source: sourcePath, destination: destinationPath, inLibDir: false }];
80
- const copiedLibraries = new Map();
81
- while (queue.length > 0) {
82
- const current = queue.shift();
83
- for (const dependency of linkedLibraries(current.source)) {
84
- const basename = path.basename(dependency);
85
- const bundledDependency = path.join(toolchainLibDir, basename);
86
- if (!copiedLibraries.has(dependency)) {
87
- if (!fs.existsSync(dependency)) {
88
- throw new Error(`Missing linked library ${dependency} required by ${current.source}`);
89
- }
90
- fs.copyFileSync(dependency, bundledDependency);
91
- fs.chmodSync(bundledDependency, 0o755);
92
- copiedLibraries.set(dependency, bundledDependency);
93
- queue.push({ source: dependency, destination: bundledDependency, inLibDir: true });
94
- }
95
- const relativeReference = current.inLibDir
96
- ? `@loader_path/${basename}`
97
- : `@loader_path/../lib/${basename}`;
98
- run('/usr/bin/install_name_tool', ['-change', dependency, relativeReference, current.destination]);
99
- }
100
- if (current.inLibDir) {
101
- run('/usr/bin/install_name_tool', ['-id', `@loader_path/${path.basename(current.destination)}`, current.destination]);
102
- }
103
- }
104
- }
105
-
106
- function makeSpawnHelpersExecutable(directory) {
107
- if (!fs.existsSync(directory)) return;
108
- for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
109
- const entryPath = path.join(directory, entry.name);
110
- if (entry.isDirectory()) {
111
- makeSpawnHelpersExecutable(entryPath);
112
- } else if (entry.isFile() && entry.name === 'spawn-helper') {
113
- fs.chmodSync(entryPath, 0o755);
114
- }
115
- }
116
- }
117
-
118
- fs.rmSync(stage, { recursive: true, force: true });
119
- fs.mkdirSync(path.join(runtimeDir, 'bin'), { recursive: true });
120
- fs.mkdirSync(serverDir, { recursive: true });
121
- fs.mkdirSync(toolchainBinDir, { recursive: true });
122
- fs.mkdirSync(toolchainLibDir, { recursive: true });
123
-
124
- const runtimeNode = path.join(runtimeDir, 'bin', 'node');
125
- const nodePlatform = process.platform === 'win32' ? 'win' : process.platform;
126
- const nodeArch = process.arch === 'x64' ? 'x64' : process.arch;
127
- const nodeArchiveExt = process.platform === 'win32' ? 'zip' : 'tar.gz';
128
- const nodeArchiveName = `node-${process.version}-${nodePlatform}-${nodeArch}.${nodeArchiveExt}`;
129
- const nodeArchiveUrl = `https://nodejs.org/dist/${process.version}/${nodeArchiveName}`;
130
- fs.mkdirSync(nodeDownloadDir, { recursive: true });
131
- const nodeArchivePath = path.join(nodeDownloadDir, nodeArchiveName);
132
- fs.mkdirSync(nodeArchiveCacheDir, { recursive: true });
133
- const cachedNodeArchivePath = path.join(nodeArchiveCacheDir, nodeArchiveName);
134
- if (!fs.existsSync(cachedNodeArchivePath)) {
135
- const temporaryArchivePath = `${cachedNodeArchivePath}.${process.pid}.tmp`;
136
- try {
137
- run('/usr/bin/curl', ['-fL', '--retry', '4', '--output', temporaryArchivePath, nodeArchiveUrl]);
138
- run('/usr/bin/tar', ['-tzf', temporaryArchivePath], { stdio: 'ignore' });
139
- fs.renameSync(temporaryArchivePath, cachedNodeArchivePath);
140
- } finally {
141
- fs.rmSync(temporaryArchivePath, { force: true });
142
- }
143
- }
144
- fs.copyFileSync(cachedNodeArchivePath, nodeArchivePath);
145
- if (nodeArchiveExt !== 'tar.gz') {
146
- throw new Error(`Desktop runtime preparation is not implemented for ${process.platform}`);
147
- }
148
- run('/usr/bin/tar', ['-xzf', nodeArchivePath, '-C', nodeDownloadDir]);
149
- const extractedNode = path.join(
150
- nodeDownloadDir,
151
- `node-${process.version}-${nodePlatform}-${nodeArch}`,
152
- 'bin',
153
- 'node',
154
- );
155
- copyMacBinary(extractedNode, runtimeNode);
156
-
157
- const rootPackage = JSON.parse(fs.readFileSync(path.join(root, 'package.json'), 'utf8'));
158
- const runtimeManifest = JSON.parse(
159
- fs.readFileSync(path.join(root, 'runtime-manifest.json'), 'utf8'),
160
- );
161
- const runtimePackage = {
162
- name: rootPackage.name,
163
- version: rootPackage.version,
164
- private: true,
165
- type: 'module',
166
- dependencies: rootPackage.dependencies,
167
- overrides: rootPackage.overrides,
168
- };
169
- fs.writeFileSync(path.join(serverDir, 'package.json'), `${JSON.stringify(runtimePackage, null, 2)}\n`);
170
- fs.copyFileSync(path.join(root, 'package-lock.json'), path.join(serverDir, 'package-lock.json'));
171
- fs.copyFileSync(
172
- path.join(root, 'runtime-manifest.json'),
173
- path.join(serverDir, 'runtime-manifest.json'),
174
- );
175
- fs.cpSync(path.join(root, 'dist'), path.join(serverDir, 'dist'), { recursive: true });
176
-
177
- run(process.platform === 'win32' ? 'npm.cmd' : 'npm', [
178
- 'ci',
179
- '--omit=dev',
180
- '--no-audit',
181
- '--no-fund',
182
- ], {
183
- cwd: serverDir,
184
- env: {
185
- ...process.env,
186
- PATH: `${path.dirname(process.execPath)}${path.delimiter}${process.env.PATH ?? ''}`,
187
- },
188
- });
189
-
190
- // Ship the same repair gate for bundled and subsequently downloaded runtimes.
191
- fs.cpSync(path.join(root, 'scripts'), path.join(serverDir, 'scripts'), { recursive: true });
192
- run(runtimeNode, [path.join(serverDir, 'scripts/ensure-node-pty.cjs'), path.join(serverDir, 'node_modules/node-pty')], { cwd: serverDir });
193
- makeSpawnHelpersExecutable(path.join(serverDir, 'node_modules', 'node-pty'));
194
- run(runtimeNode, [
195
- '-e',
196
- [
197
- "const {createRequire}=require('node:module')",
198
- "const req=createRequire(process.cwd()+'/desktop-runtime-probe.cjs')",
199
- "const pty=req('node-pty')",
200
- "const child=pty.spawn(process.platform==='win32'?'cmd.exe':'/bin/sh',process.platform==='win32'?['/d','/s','/c','echo termdock-desktop-pty-ok']:['-lc','printf termdock-desktop-pty-ok'],{name:'xterm',cols:80,rows:24})",
201
- "let output=''",
202
- "child.onData((data)=>{output+=data})",
203
- "child.onExit(()=>{if(!output.includes('termdock-desktop-pty-ok')){console.error(output);process.exit(1)}})",
204
- ].join(';'),
205
- ], { cwd: serverDir });
206
-
207
- for (const name of ['tmux', 'rg', 'git', 'mkcert']) {
208
- const source = executableOnPath(name);
209
- if (!source) {
210
- console.warn(`[desktop-runtime] optional bundled tool not found: ${name}`);
211
- continue;
212
- }
213
- const destination = path.join(toolchainBinDir, name);
214
- copyMacBinary(source, destination);
215
- console.log(`[desktop-runtime] bundled ${name} from ${source}`);
216
- }
217
-
218
- const manifest = {
219
- version: rootPackage.version,
220
- platform: process.platform,
221
- arch: process.arch,
222
- nodeVersion: process.version,
223
- createdAt: new Date().toISOString(),
224
- tools: fs.readdirSync(toolchainBinDir).sort(),
225
- runtimeCompatibility: runtimeManifest,
226
- };
227
- fs.writeFileSync(path.join(stage, 'manifest.json'), `${JSON.stringify(manifest, null, 2)}\n`);
228
- console.log(`[desktop-runtime] ready at ${stage}`);