termdock 1.4.296 → 1.4.297

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 (364) hide show
  1. package/.desktop-dist/main.js +35 -2
  2. package/README.en.md +257 -0
  3. package/README.md +284 -133
  4. package/dist/client/assets/App-BbqtNY2x.js +177 -0
  5. package/dist/client/assets/App-BbqtNY2x.js.br +0 -0
  6. package/dist/client/assets/App-BbqtNY2x.js.gz +0 -0
  7. package/dist/client/assets/{ChangeWalkthroughPanel-DXprT-7m.js → ChangeWalkthroughPanel-CvQJIp_C.js} +1 -1
  8. package/dist/client/assets/ChangeWalkthroughPanel-CvQJIp_C.js.br +0 -0
  9. package/dist/client/assets/ChangeWalkthroughPanel-CvQJIp_C.js.gz +0 -0
  10. package/dist/client/assets/CollaborationMainWorkspace-B0OgRtyR.js +1 -0
  11. package/dist/client/assets/CollaborationMainWorkspace-B0OgRtyR.js.br +0 -0
  12. package/dist/client/assets/CollaborationMainWorkspace-B0OgRtyR.js.gz +0 -0
  13. package/dist/client/assets/CollaborationTaskContent-C01GXOEq.js +2 -0
  14. package/dist/client/assets/ComputerControlView-CW1uA133.js +4 -0
  15. package/dist/client/assets/ComputerControlView-CW1uA133.js.br +0 -0
  16. package/dist/client/assets/ComputerControlView-CW1uA133.js.gz +0 -0
  17. package/dist/client/assets/{DagPlayground-DZcUunT5.js → DagPlayground-CdE3tQsl.js} +1 -1
  18. package/dist/client/assets/DagPlayground-CdE3tQsl.js.br +0 -0
  19. package/dist/client/assets/DagPlayground-CdE3tQsl.js.gz +0 -0
  20. package/dist/client/assets/{DiffLab-Brv4DCTb.js → DiffLab-BLGNnazd.js} +1 -1
  21. package/dist/client/assets/DiffLab-BLGNnazd.js.br +0 -0
  22. package/dist/client/assets/DiffLab-BLGNnazd.js.gz +0 -0
  23. package/dist/client/assets/{DiffReview-BuLu1qCi.js → DiffReview-CYw3ASI6.js} +1 -1
  24. package/dist/client/assets/DiffReview-CYw3ASI6.js.br +0 -0
  25. package/dist/client/assets/DiffReview-CYw3ASI6.js.gz +0 -0
  26. package/dist/client/assets/{DiffReviewLab-DSGamuAD.js → DiffReviewLab-CySIuWq_.js} +1 -1
  27. package/dist/client/assets/DiffReviewLab-CySIuWq_.js.br +0 -0
  28. package/dist/client/assets/DiffReviewLab-CySIuWq_.js.gz +0 -0
  29. package/dist/client/assets/{DiffViewer-BUCYxg27.js → DiffViewer-WsYvN75z.js} +13 -13
  30. package/dist/client/assets/DiffViewer-WsYvN75z.js.br +0 -0
  31. package/dist/client/assets/DiffViewer-WsYvN75z.js.gz +0 -0
  32. package/dist/client/assets/{ModelPreview-Bnlo-oVE.js → ModelPreview-Dnlx9ByX.js} +1 -1
  33. package/dist/client/assets/ModelPreview-Dnlx9ByX.js.br +0 -0
  34. package/dist/client/assets/ModelPreview-Dnlx9ByX.js.gz +0 -0
  35. package/dist/client/assets/RightSidebar-Cp5b_y0u.js +1678 -0
  36. package/dist/client/assets/RightSidebar-Cp5b_y0u.js.br +0 -0
  37. package/dist/client/assets/RightSidebar-Cp5b_y0u.js.gz +0 -0
  38. package/dist/client/assets/{abnfDiagram-VCTEODGH-K6Ppkrbt.js → abnfDiagram-VCTEODGH-CK1mGFRQ.js} +1 -1
  39. package/dist/client/assets/abnfDiagram-VCTEODGH-CK1mGFRQ.js.br +0 -0
  40. package/dist/client/assets/abnfDiagram-VCTEODGH-CK1mGFRQ.js.gz +0 -0
  41. package/dist/client/assets/app-DfACMixk.js +35 -0
  42. package/dist/client/assets/app-DfACMixk.js.br +0 -0
  43. package/dist/client/assets/app-DfACMixk.js.gz +0 -0
  44. package/dist/client/assets/{arc-Co2OQqtH.js → arc-yZE1gqDl.js} +1 -1
  45. package/dist/client/assets/arc-yZE1gqDl.js.br +0 -0
  46. package/dist/client/assets/arc-yZE1gqDl.js.gz +0 -0
  47. package/dist/client/assets/{architectureDiagram-5GKGNRK7-BQnl7tVF.js → architectureDiagram-5GKGNRK7-U5XSC7cY.js} +1 -1
  48. package/dist/client/assets/architectureDiagram-5GKGNRK7-U5XSC7cY.js.br +0 -0
  49. package/dist/client/assets/architectureDiagram-5GKGNRK7-U5XSC7cY.js.gz +0 -0
  50. package/dist/client/assets/{blockDiagram-I7D4REHJ-Bm5D5-qq.js → blockDiagram-I7D4REHJ-pVJnntSG.js} +1 -1
  51. package/dist/client/assets/blockDiagram-I7D4REHJ-pVJnntSG.js.br +0 -0
  52. package/dist/client/assets/blockDiagram-I7D4REHJ-pVJnntSG.js.gz +0 -0
  53. package/dist/client/assets/{c4Diagram-7LVT6UL2-B9oPpey8.js → c4Diagram-7LVT6UL2-Bwz0AJJV.js} +1 -1
  54. package/dist/client/assets/c4Diagram-7LVT6UL2-Bwz0AJJV.js.br +0 -0
  55. package/dist/client/assets/c4Diagram-7LVT6UL2-Bwz0AJJV.js.gz +0 -0
  56. package/dist/client/assets/channel-qqjDJtcZ.js +1 -0
  57. package/dist/client/assets/{chunk-2Q5K7J3B-TMaWHH0U.js → chunk-2Q5K7J3B-CXJ1kP4X.js} +1 -1
  58. package/dist/client/assets/{chunk-5VM5RSS4-CH7XpknV.js → chunk-5VM5RSS4-Dpdum_2z.js} +1 -1
  59. package/dist/client/assets/{chunk-F27PBJKO-CJ1rotBe.js → chunk-F27PBJKO-BCG5Zi_-.js} +1 -1
  60. package/dist/client/assets/chunk-F27PBJKO-BCG5Zi_-.js.br +0 -0
  61. package/dist/client/assets/chunk-F27PBJKO-BCG5Zi_-.js.gz +0 -0
  62. package/dist/client/assets/{chunk-IMKFNOWR-UYKZ5uOG.js → chunk-IMKFNOWR-BM-GcNcv.js} +1 -1
  63. package/dist/client/assets/chunk-IMKFNOWR-BM-GcNcv.js.br +0 -0
  64. package/dist/client/assets/chunk-IMKFNOWR-BM-GcNcv.js.gz +0 -0
  65. package/dist/client/assets/{chunk-JWPE2WC7-BYL8aXjQ.js → chunk-JWPE2WC7-BWiXpQT9.js} +1 -1
  66. package/dist/client/assets/{chunk-POPQ4Y6H-C3E8yfU2.js → chunk-POPQ4Y6H-vQSslMNv.js} +1 -1
  67. package/dist/client/assets/{chunk-SVP7TREG-DCTDYa1E.js → chunk-SVP7TREG-Aqfz6nPA.js} +1 -1
  68. package/dist/client/assets/chunk-SVP7TREG-Aqfz6nPA.js.br +0 -0
  69. package/dist/client/assets/chunk-SVP7TREG-Aqfz6nPA.js.gz +0 -0
  70. package/dist/client/assets/{chunk-TICWLB2K-wHiaOsBh.js → chunk-TICWLB2K-DDjekMd0.js} +1 -1
  71. package/dist/client/assets/chunk-TICWLB2K-DDjekMd0.js.br +0 -0
  72. package/dist/client/assets/chunk-TICWLB2K-DDjekMd0.js.gz +0 -0
  73. package/dist/client/assets/{chunk-XXDRQBXY-D_d479hK.js → chunk-XXDRQBXY-BegIBcFg.js} +1 -1
  74. package/dist/client/assets/classDiagram-ZZMXUADV-BDuBrfNz.js +1 -0
  75. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BDuBrfNz.js +1 -0
  76. package/dist/client/assets/{cose-bilkent-JH36ORCC-DnhlPBLr.js → cose-bilkent-JH36ORCC-B2izFsBY.js} +1 -1
  77. package/dist/client/assets/cose-bilkent-JH36ORCC-B2izFsBY.js.br +0 -0
  78. package/dist/client/assets/cose-bilkent-JH36ORCC-B2izFsBY.js.gz +0 -0
  79. package/dist/client/assets/{cynefin-OW5HDTMX-BsjzNqJZ.js → cynefin-OW5HDTMX-C7HA99Zc.js} +1 -1
  80. package/dist/client/assets/cynefin-OW5HDTMX-C7HA99Zc.js.br +0 -0
  81. package/dist/client/assets/cynefin-OW5HDTMX-C7HA99Zc.js.gz +0 -0
  82. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-sVUb0zY5.js → cynefinDiagram-5FMLGOSQ-vNIzcCYl.js} +1 -1
  83. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-vNIzcCYl.js.br +0 -0
  84. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-vNIzcCYl.js.gz +0 -0
  85. package/dist/client/assets/{dagre-GXQ25YYZ-YErk8S-c.js → dagre-GXQ25YYZ-Bv9WHNT9.js} +1 -1
  86. package/dist/client/assets/dagre-GXQ25YYZ-Bv9WHNT9.js.br +0 -0
  87. package/dist/client/assets/dagre-GXQ25YYZ-Bv9WHNT9.js.gz +0 -0
  88. package/dist/client/assets/{diagram-S7CK7UJ4-BaHbV5ho.js → diagram-S7CK7UJ4-DFg5UNic.js} +1 -1
  89. package/dist/client/assets/diagram-S7CK7UJ4-DFg5UNic.js.br +0 -0
  90. package/dist/client/assets/diagram-S7CK7UJ4-DFg5UNic.js.gz +0 -0
  91. package/dist/client/assets/{diagram-UQ7AKVKN-BocCYx3V.js → diagram-UQ7AKVKN-BFQsCAs7.js} +1 -1
  92. package/dist/client/assets/diagram-UQ7AKVKN-BFQsCAs7.js.br +0 -0
  93. package/dist/client/assets/diagram-UQ7AKVKN-BFQsCAs7.js.gz +0 -0
  94. package/dist/client/assets/{diagram-VSXAHHWV-ZMTYwWOQ.js → diagram-VSXAHHWV-C4R8TKEv.js} +1 -1
  95. package/dist/client/assets/diagram-VSXAHHWV-C4R8TKEv.js.br +0 -0
  96. package/dist/client/assets/diagram-VSXAHHWV-C4R8TKEv.js.gz +0 -0
  97. package/dist/client/assets/{diagram-VX7I27RA-xmk_EY1h.js → diagram-VX7I27RA-CL75HIf0.js} +1 -1
  98. package/dist/client/assets/diagram-VX7I27RA-CL75HIf0.js.br +0 -0
  99. package/dist/client/assets/diagram-VX7I27RA-CL75HIf0.js.gz +0 -0
  100. package/dist/client/assets/{diagram-Z3DM3KII-DKDY_cG6.js → diagram-Z3DM3KII-CfJampuO.js} +1 -1
  101. package/dist/client/assets/diagram-Z3DM3KII-CfJampuO.js.br +0 -0
  102. package/dist/client/assets/diagram-Z3DM3KII-CfJampuO.js.gz +0 -0
  103. package/dist/client/assets/{ebnfDiagram-PWID7BFC-C_0z-Jx9.js → ebnfDiagram-PWID7BFC-Ct53jhNd.js} +1 -1
  104. package/dist/client/assets/ebnfDiagram-PWID7BFC-Ct53jhNd.js.br +0 -0
  105. package/dist/client/assets/ebnfDiagram-PWID7BFC-Ct53jhNd.js.gz +0 -0
  106. package/dist/client/assets/{erDiagram-RLTQ6QDP-DHUaG7mt.js → erDiagram-RLTQ6QDP-BgL2xOOa.js} +1 -1
  107. package/dist/client/assets/erDiagram-RLTQ6QDP-BgL2xOOa.js.br +0 -0
  108. package/dist/client/assets/erDiagram-RLTQ6QDP-BgL2xOOa.js.gz +0 -0
  109. package/dist/client/assets/{flowDiagram-HODETNUW-BMNsdMBD.js → flowDiagram-HODETNUW-Cp4Nu5jY.js} +1 -1
  110. package/dist/client/assets/flowDiagram-HODETNUW-Cp4Nu5jY.js.br +0 -0
  111. package/dist/client/assets/flowDiagram-HODETNUW-Cp4Nu5jY.js.gz +0 -0
  112. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-BH1AiKuF.js → ganttDiagram-EL5Y4UJY-DI0rdyPX.js} +1 -1
  113. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DI0rdyPX.js.br +0 -0
  114. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DI0rdyPX.js.gz +0 -0
  115. package/dist/client/assets/{gestureArbiter-DvupkPra.js → gestureArbiter-Belsq4xq.js} +1 -1
  116. package/dist/client/assets/gestureArbiter-Belsq4xq.js.br +0 -0
  117. package/dist/client/assets/gestureArbiter-Belsq4xq.js.gz +0 -0
  118. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-DAgV0MV-.js → gitGraphDiagram-WWUBYQGX-C0H4loQP.js} +1 -1
  119. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C0H4loQP.js.br +0 -0
  120. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-C0H4loQP.js.gz +0 -0
  121. package/dist/client/assets/index-CYmI1EsU.css +1 -0
  122. package/dist/client/assets/index-CYmI1EsU.css.br +0 -0
  123. package/dist/client/assets/index-CYmI1EsU.css.gz +0 -0
  124. package/dist/client/assets/{infoDiagram-27XIBGKW-C7iSg0cB.js → infoDiagram-27XIBGKW-BN4RpQTL.js} +1 -1
  125. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-BpZwsQvw.js → ishikawaDiagram-5VMMS53U-BZQ5qZB_.js} +1 -1
  126. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BZQ5qZB_.js.br +0 -0
  127. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BZQ5qZB_.js.gz +0 -0
  128. package/dist/client/assets/{journeyDiagram-3NMN7TZE-DXEeFLvw.js → journeyDiagram-3NMN7TZE-Q8bx0_N4.js} +1 -1
  129. package/dist/client/assets/journeyDiagram-3NMN7TZE-Q8bx0_N4.js.br +0 -0
  130. package/dist/client/assets/journeyDiagram-3NMN7TZE-Q8bx0_N4.js.gz +0 -0
  131. package/dist/client/assets/{kanban-definition-UXKFOSKX-CV9ivL5u.js → kanban-definition-UXKFOSKX-D7JhGtpO.js} +1 -1
  132. package/dist/client/assets/kanban-definition-UXKFOSKX-D7JhGtpO.js.br +0 -0
  133. package/dist/client/assets/kanban-definition-UXKFOSKX-D7JhGtpO.js.gz +0 -0
  134. package/dist/client/assets/{layout-DsKKsJKX.js → layout-DERUg0xU.js} +1 -1
  135. package/dist/client/assets/layout-DERUg0xU.js.br +0 -0
  136. package/dist/client/assets/layout-DERUg0xU.js.gz +0 -0
  137. package/dist/client/assets/{linear-Dl9MDNV3.js → linear-lNTe4x00.js} +1 -1
  138. package/dist/client/assets/linear-lNTe4x00.js.br +0 -0
  139. package/dist/client/assets/linear-lNTe4x00.js.gz +0 -0
  140. package/dist/client/assets/{mermaid.core-CxZFe3as.js → mermaid.core-WHCwLQDQ.js} +5 -5
  141. package/dist/client/assets/mermaid.core-WHCwLQDQ.js.br +0 -0
  142. package/dist/client/assets/mermaid.core-WHCwLQDQ.js.gz +0 -0
  143. package/dist/client/assets/{mindmap-definition-YA3MSWOX-C3ormYdL.js → mindmap-definition-YA3MSWOX-BouapA4v.js} +1 -1
  144. package/dist/client/assets/mindmap-definition-YA3MSWOX-BouapA4v.js.br +0 -0
  145. package/dist/client/assets/mindmap-definition-YA3MSWOX-BouapA4v.js.gz +0 -0
  146. package/dist/client/assets/{passwordBootstrap-a8z6jJNY.js → passwordBootstrap-E0piP814.js} +2 -2
  147. package/dist/client/assets/passwordBootstrap-E0piP814.js.br +0 -0
  148. package/dist/client/assets/passwordBootstrap-E0piP814.js.gz +0 -0
  149. package/dist/client/assets/{pegDiagram-XKGWAZYB-CG0wNylH.js → pegDiagram-XKGWAZYB-Curpo5Rq.js} +1 -1
  150. package/dist/client/assets/pegDiagram-XKGWAZYB-Curpo5Rq.js.br +0 -0
  151. package/dist/client/assets/pegDiagram-XKGWAZYB-Curpo5Rq.js.gz +0 -0
  152. package/dist/client/assets/{pieDiagram-E7YTZNPT-D2-ydqyX.js → pieDiagram-E7YTZNPT-BLQCHaOG.js} +1 -1
  153. package/dist/client/assets/pieDiagram-E7YTZNPT-BLQCHaOG.js.br +0 -0
  154. package/dist/client/assets/pieDiagram-E7YTZNPT-BLQCHaOG.js.gz +0 -0
  155. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-CK3fRC18.js → quadrantDiagram-AXDQQJYC-PViFqGao.js} +1 -1
  156. package/dist/client/assets/quadrantDiagram-AXDQQJYC-PViFqGao.js.br +0 -0
  157. package/dist/client/assets/quadrantDiagram-AXDQQJYC-PViFqGao.js.gz +0 -0
  158. package/dist/client/assets/{railroadDiagram-O6MQD6OU-V4EFlydu.js → railroadDiagram-O6MQD6OU-BtHo1LpT.js} +1 -1
  159. package/dist/client/assets/railroadDiagram-O6MQD6OU-BtHo1LpT.js.br +0 -0
  160. package/dist/client/assets/railroadDiagram-O6MQD6OU-BtHo1LpT.js.gz +0 -0
  161. package/dist/client/assets/rdpSession-O_f9ejOI.js +1 -0
  162. package/dist/client/assets/rdpSession-O_f9ejOI.js.br +0 -0
  163. package/dist/client/assets/rdpSession-O_f9ejOI.js.gz +0 -0
  164. package/dist/client/assets/{referenceLongPress-BjmYd1vB.js → referenceLongPress-BZr7Lqzh.js} +1 -1
  165. package/dist/client/assets/referenceLongPress-BZr7Lqzh.js.br +0 -0
  166. package/dist/client/assets/referenceLongPress-BZr7Lqzh.js.gz +0 -0
  167. package/dist/client/assets/{requirementDiagram-BXWQKSXE-Di1_tyAX.js → requirementDiagram-BXWQKSXE-BUm81HUU.js} +1 -1
  168. package/dist/client/assets/requirementDiagram-BXWQKSXE-BUm81HUU.js.br +0 -0
  169. package/dist/client/assets/requirementDiagram-BXWQKSXE-BUm81HUU.js.gz +0 -0
  170. package/dist/client/assets/rfb-CxsXsMUX.js +5 -0
  171. package/dist/client/assets/rfb-CxsXsMUX.js.br +0 -0
  172. package/dist/client/assets/rfb-CxsXsMUX.js.gz +0 -0
  173. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-D-qpWNza.js → sankeyDiagram-P5KCCOFB-B-_-aZ_y.js} +1 -1
  174. package/dist/client/assets/sankeyDiagram-P5KCCOFB-B-_-aZ_y.js.br +0 -0
  175. package/dist/client/assets/sankeyDiagram-P5KCCOFB-B-_-aZ_y.js.gz +0 -0
  176. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-DmIxafrB.js → sequenceDiagram-WJ2MYXX4-DT6LDIfx.js} +1 -1
  177. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DT6LDIfx.js.br +0 -0
  178. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DT6LDIfx.js.gz +0 -0
  179. package/dist/client/assets/{sizeCapture-INFHLROL-4MTh3tTt.js → sizeCapture-INFHLROL-CTYerd9j.js} +1 -1
  180. package/dist/client/assets/sizeCapture-INFHLROL-CTYerd9j.js.br +0 -0
  181. package/dist/client/assets/sizeCapture-INFHLROL-CTYerd9j.js.gz +0 -0
  182. package/dist/client/assets/{sparkles-Dk93lHg0.js → sparkles-CgaUBIwH.js} +1 -1
  183. package/dist/client/assets/{stateDiagram-D77RDMKH-CgYgneIv.js → stateDiagram-D77RDMKH-CQbb5x2_.js} +1 -1
  184. package/dist/client/assets/stateDiagram-D77RDMKH-CQbb5x2_.js.br +0 -0
  185. package/dist/client/assets/stateDiagram-D77RDMKH-CQbb5x2_.js.gz +0 -0
  186. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CJAVXcx1.js +1 -0
  187. package/dist/client/assets/{swimlanes-42K2YHIH-OWA9HFVf.js → swimlanes-42K2YHIH-BHZ4X2Fd.js} +1 -1
  188. package/dist/client/assets/swimlanes-42K2YHIH-BHZ4X2Fd.js.br +0 -0
  189. package/dist/client/assets/swimlanes-42K2YHIH-BHZ4X2Fd.js.gz +0 -0
  190. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-VL2nyI27.js +8 -0
  191. package/dist/client/assets/{timeline-definition-24CTP7MA-BAzx5DyO.js → timeline-definition-24CTP7MA-BrjH6R6w.js} +1 -1
  192. package/dist/client/assets/timeline-definition-24CTP7MA-BrjH6R6w.js.br +0 -0
  193. package/dist/client/assets/timeline-definition-24CTP7MA-BrjH6R6w.js.gz +0 -0
  194. package/dist/client/assets/{triangle-alert-CUIBOwqW.js → triangle-alert-C9IHD_eF.js} +1 -1
  195. package/dist/client/assets/{vennDiagram-4TSXK5OY-CBZ-PhTQ.js → vennDiagram-4TSXK5OY-C9f5jYgk.js} +1 -1
  196. package/dist/client/assets/vennDiagram-4TSXK5OY-C9f5jYgk.js.br +0 -0
  197. package/dist/client/assets/vennDiagram-4TSXK5OY-C9f5jYgk.js.gz +0 -0
  198. package/dist/client/assets/{videoCompression-BCnqCkRK.js → videoCompression-DJaU8exd.js} +1 -1
  199. package/dist/client/assets/videoCompression-DJaU8exd.js.br +0 -0
  200. package/dist/client/assets/videoCompression-DJaU8exd.js.gz +0 -0
  201. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-DbWzC6l5.js → wardleyDiagram-VM6X3IG4-6ljFvtiC.js} +1 -1
  202. package/dist/client/assets/wardleyDiagram-VM6X3IG4-6ljFvtiC.js.br +0 -0
  203. package/dist/client/assets/wardleyDiagram-VM6X3IG4-6ljFvtiC.js.gz +0 -0
  204. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-BmApnTWE.js → xychartDiagram-S5SC5T6Z-BaR2hm3e.js} +1 -1
  205. package/dist/client/assets/xychartDiagram-S5SC5T6Z-BaR2hm3e.js.br +0 -0
  206. package/dist/client/assets/xychartDiagram-S5SC5T6Z-BaR2hm3e.js.gz +0 -0
  207. package/dist/client/index.html +2 -2
  208. package/dist/client/index.html.br +0 -0
  209. package/dist/client/index.html.gz +0 -0
  210. package/dist/client/sw.js +1 -1
  211. package/dist/client/sw.js.br +0 -0
  212. package/dist/client/sw.js.gz +0 -0
  213. package/dist/server/agent/collaborationCli.js +3 -3
  214. package/dist/server/agent/collaborationGroupRoutes.js +0 -2
  215. package/dist/server/agent/collaborationResultPresentation.js +14 -0
  216. package/dist/server/agent/collaborationService.js +3 -1
  217. package/dist/server/agent/collaborationStore.js +12 -21
  218. package/dist/server/agent/collaborationTaskBundles.js +2 -2
  219. package/dist/server/agent/collaborationTaskCli.js +4 -4
  220. package/dist/server/agent/collaborationTaskStore.js +87 -25
  221. package/dist/server/agent/collaborationTaskWorkspace.js +66 -1
  222. package/dist/server/agent/collaborationTeam.js +16 -0
  223. package/dist/server/agent/executionArchives.js +52 -0
  224. package/dist/server/entry.js +6 -1
  225. package/dist/server/federation/runtime.js +24 -6
  226. package/dist/server/routes/computer.js +198 -0
  227. package/dist/server/routes/computerTarget.js +23 -0
  228. package/dist/server/routes/guacamoleProtocol.js +55 -0
  229. package/dist/server/routes/rdp.js +162 -0
  230. package/dist/server/routes/terminal.js +375 -360
  231. package/dist/server/shared/computerPreferences.js +29 -0
  232. package/dist/server/utils/computerCredentials.js +88 -0
  233. package/dist/server/utils/sharedSampling.js +93 -0
  234. package/dist/server/utils/terminalOutputDelivery.js +8 -1
  235. package/dist/server/utils/tmuxMetadataWriter.js +61 -0
  236. package/package.json +4 -1
  237. package/runtime-manifest.json +4 -4
  238. package/dist/client/assets/App-BiLjlrk-.js +0 -171
  239. package/dist/client/assets/App-BiLjlrk-.js.br +0 -0
  240. package/dist/client/assets/App-BiLjlrk-.js.gz +0 -0
  241. package/dist/client/assets/ChangeWalkthroughPanel-DXprT-7m.js.br +0 -0
  242. package/dist/client/assets/ChangeWalkthroughPanel-DXprT-7m.js.gz +0 -0
  243. package/dist/client/assets/DagPlayground-DZcUunT5.js.br +0 -0
  244. package/dist/client/assets/DagPlayground-DZcUunT5.js.gz +0 -0
  245. package/dist/client/assets/DiffLab-Brv4DCTb.js.br +0 -0
  246. package/dist/client/assets/DiffLab-Brv4DCTb.js.gz +0 -0
  247. package/dist/client/assets/DiffReview-BuLu1qCi.js.br +0 -0
  248. package/dist/client/assets/DiffReview-BuLu1qCi.js.gz +0 -0
  249. package/dist/client/assets/DiffReviewLab-DSGamuAD.js.br +0 -0
  250. package/dist/client/assets/DiffReviewLab-DSGamuAD.js.gz +0 -0
  251. package/dist/client/assets/DiffViewer-BUCYxg27.js.br +0 -0
  252. package/dist/client/assets/DiffViewer-BUCYxg27.js.gz +0 -0
  253. package/dist/client/assets/ModelPreview-Bnlo-oVE.js.br +0 -0
  254. package/dist/client/assets/ModelPreview-Bnlo-oVE.js.gz +0 -0
  255. package/dist/client/assets/RightSidebar-r_3Lk5Rp.js +0 -1678
  256. package/dist/client/assets/RightSidebar-r_3Lk5Rp.js.br +0 -0
  257. package/dist/client/assets/RightSidebar-r_3Lk5Rp.js.gz +0 -0
  258. package/dist/client/assets/abnfDiagram-VCTEODGH-K6Ppkrbt.js.br +0 -0
  259. package/dist/client/assets/abnfDiagram-VCTEODGH-K6Ppkrbt.js.gz +0 -0
  260. package/dist/client/assets/app-CATnTUZF.js +0 -35
  261. package/dist/client/assets/app-CATnTUZF.js.br +0 -0
  262. package/dist/client/assets/app-CATnTUZF.js.gz +0 -0
  263. package/dist/client/assets/arc-Co2OQqtH.js.br +0 -0
  264. package/dist/client/assets/arc-Co2OQqtH.js.gz +0 -0
  265. package/dist/client/assets/architectureDiagram-5GKGNRK7-BQnl7tVF.js.br +0 -0
  266. package/dist/client/assets/architectureDiagram-5GKGNRK7-BQnl7tVF.js.gz +0 -0
  267. package/dist/client/assets/blockDiagram-I7D4REHJ-Bm5D5-qq.js.br +0 -0
  268. package/dist/client/assets/blockDiagram-I7D4REHJ-Bm5D5-qq.js.gz +0 -0
  269. package/dist/client/assets/c4Diagram-7LVT6UL2-B9oPpey8.js.br +0 -0
  270. package/dist/client/assets/c4Diagram-7LVT6UL2-B9oPpey8.js.gz +0 -0
  271. package/dist/client/assets/channel-Czv2W4qA.js +0 -1
  272. package/dist/client/assets/chunk-F27PBJKO-CJ1rotBe.js.br +0 -0
  273. package/dist/client/assets/chunk-F27PBJKO-CJ1rotBe.js.gz +0 -0
  274. package/dist/client/assets/chunk-IMKFNOWR-UYKZ5uOG.js.br +0 -0
  275. package/dist/client/assets/chunk-IMKFNOWR-UYKZ5uOG.js.gz +0 -0
  276. package/dist/client/assets/chunk-SVP7TREG-DCTDYa1E.js.br +0 -0
  277. package/dist/client/assets/chunk-SVP7TREG-DCTDYa1E.js.gz +0 -0
  278. package/dist/client/assets/chunk-TICWLB2K-wHiaOsBh.js.br +0 -0
  279. package/dist/client/assets/chunk-TICWLB2K-wHiaOsBh.js.gz +0 -0
  280. package/dist/client/assets/classDiagram-ZZMXUADV-BdvOOL9k.js +0 -1
  281. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BdvOOL9k.js +0 -1
  282. package/dist/client/assets/cose-bilkent-JH36ORCC-DnhlPBLr.js.br +0 -0
  283. package/dist/client/assets/cose-bilkent-JH36ORCC-DnhlPBLr.js.gz +0 -0
  284. package/dist/client/assets/cynefin-OW5HDTMX-BsjzNqJZ.js.br +0 -0
  285. package/dist/client/assets/cynefin-OW5HDTMX-BsjzNqJZ.js.gz +0 -0
  286. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-sVUb0zY5.js.br +0 -0
  287. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-sVUb0zY5.js.gz +0 -0
  288. package/dist/client/assets/dagre-GXQ25YYZ-YErk8S-c.js.br +0 -0
  289. package/dist/client/assets/dagre-GXQ25YYZ-YErk8S-c.js.gz +0 -0
  290. package/dist/client/assets/diagram-S7CK7UJ4-BaHbV5ho.js.br +0 -0
  291. package/dist/client/assets/diagram-S7CK7UJ4-BaHbV5ho.js.gz +0 -0
  292. package/dist/client/assets/diagram-UQ7AKVKN-BocCYx3V.js.br +0 -0
  293. package/dist/client/assets/diagram-UQ7AKVKN-BocCYx3V.js.gz +0 -0
  294. package/dist/client/assets/diagram-VSXAHHWV-ZMTYwWOQ.js.br +0 -0
  295. package/dist/client/assets/diagram-VSXAHHWV-ZMTYwWOQ.js.gz +0 -0
  296. package/dist/client/assets/diagram-VX7I27RA-xmk_EY1h.js.br +0 -0
  297. package/dist/client/assets/diagram-VX7I27RA-xmk_EY1h.js.gz +0 -0
  298. package/dist/client/assets/diagram-Z3DM3KII-DKDY_cG6.js.br +0 -0
  299. package/dist/client/assets/diagram-Z3DM3KII-DKDY_cG6.js.gz +0 -0
  300. package/dist/client/assets/ebnfDiagram-PWID7BFC-C_0z-Jx9.js.br +0 -0
  301. package/dist/client/assets/ebnfDiagram-PWID7BFC-C_0z-Jx9.js.gz +0 -0
  302. package/dist/client/assets/erDiagram-RLTQ6QDP-DHUaG7mt.js.br +0 -0
  303. package/dist/client/assets/erDiagram-RLTQ6QDP-DHUaG7mt.js.gz +0 -0
  304. package/dist/client/assets/flowDiagram-HODETNUW-BMNsdMBD.js.br +0 -0
  305. package/dist/client/assets/flowDiagram-HODETNUW-BMNsdMBD.js.gz +0 -0
  306. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BH1AiKuF.js.br +0 -0
  307. package/dist/client/assets/ganttDiagram-EL5Y4UJY-BH1AiKuF.js.gz +0 -0
  308. package/dist/client/assets/gestureArbiter-DvupkPra.js.br +0 -0
  309. package/dist/client/assets/gestureArbiter-DvupkPra.js.gz +0 -0
  310. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DAgV0MV-.js.br +0 -0
  311. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-DAgV0MV-.js.gz +0 -0
  312. package/dist/client/assets/index-Bi9A6QUP.css +0 -1
  313. package/dist/client/assets/index-Bi9A6QUP.css.br +0 -0
  314. package/dist/client/assets/index-Bi9A6QUP.css.gz +0 -0
  315. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BpZwsQvw.js.br +0 -0
  316. package/dist/client/assets/ishikawaDiagram-5VMMS53U-BpZwsQvw.js.gz +0 -0
  317. package/dist/client/assets/journeyDiagram-3NMN7TZE-DXEeFLvw.js.br +0 -0
  318. package/dist/client/assets/journeyDiagram-3NMN7TZE-DXEeFLvw.js.gz +0 -0
  319. package/dist/client/assets/kanban-definition-UXKFOSKX-CV9ivL5u.js.br +0 -0
  320. package/dist/client/assets/kanban-definition-UXKFOSKX-CV9ivL5u.js.gz +0 -0
  321. package/dist/client/assets/layout-DsKKsJKX.js.br +0 -0
  322. package/dist/client/assets/layout-DsKKsJKX.js.gz +0 -0
  323. package/dist/client/assets/linear-Dl9MDNV3.js.br +0 -0
  324. package/dist/client/assets/linear-Dl9MDNV3.js.gz +0 -0
  325. package/dist/client/assets/mermaid.core-CxZFe3as.js.br +0 -0
  326. package/dist/client/assets/mermaid.core-CxZFe3as.js.gz +0 -0
  327. package/dist/client/assets/mindmap-definition-YA3MSWOX-C3ormYdL.js.br +0 -0
  328. package/dist/client/assets/mindmap-definition-YA3MSWOX-C3ormYdL.js.gz +0 -0
  329. package/dist/client/assets/passwordBootstrap-a8z6jJNY.js.br +0 -0
  330. package/dist/client/assets/passwordBootstrap-a8z6jJNY.js.gz +0 -0
  331. package/dist/client/assets/pegDiagram-XKGWAZYB-CG0wNylH.js.br +0 -0
  332. package/dist/client/assets/pegDiagram-XKGWAZYB-CG0wNylH.js.gz +0 -0
  333. package/dist/client/assets/pieDiagram-E7YTZNPT-D2-ydqyX.js.br +0 -0
  334. package/dist/client/assets/pieDiagram-E7YTZNPT-D2-ydqyX.js.gz +0 -0
  335. package/dist/client/assets/quadrantDiagram-AXDQQJYC-CK3fRC18.js.br +0 -0
  336. package/dist/client/assets/quadrantDiagram-AXDQQJYC-CK3fRC18.js.gz +0 -0
  337. package/dist/client/assets/railroadDiagram-O6MQD6OU-V4EFlydu.js.br +0 -0
  338. package/dist/client/assets/railroadDiagram-O6MQD6OU-V4EFlydu.js.gz +0 -0
  339. package/dist/client/assets/referenceLongPress-BjmYd1vB.js.br +0 -0
  340. package/dist/client/assets/referenceLongPress-BjmYd1vB.js.gz +0 -0
  341. package/dist/client/assets/requirementDiagram-BXWQKSXE-Di1_tyAX.js.br +0 -0
  342. package/dist/client/assets/requirementDiagram-BXWQKSXE-Di1_tyAX.js.gz +0 -0
  343. package/dist/client/assets/sankeyDiagram-P5KCCOFB-D-qpWNza.js.br +0 -0
  344. package/dist/client/assets/sankeyDiagram-P5KCCOFB-D-qpWNza.js.gz +0 -0
  345. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DmIxafrB.js.br +0 -0
  346. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-DmIxafrB.js.gz +0 -0
  347. package/dist/client/assets/sizeCapture-INFHLROL-4MTh3tTt.js.br +0 -0
  348. package/dist/client/assets/sizeCapture-INFHLROL-4MTh3tTt.js.gz +0 -0
  349. package/dist/client/assets/stateDiagram-D77RDMKH-CgYgneIv.js.br +0 -0
  350. package/dist/client/assets/stateDiagram-D77RDMKH-CgYgneIv.js.gz +0 -0
  351. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CvPf0fxf.js +0 -1
  352. package/dist/client/assets/swimlanes-42K2YHIH-OWA9HFVf.js.br +0 -0
  353. package/dist/client/assets/swimlanes-42K2YHIH-OWA9HFVf.js.gz +0 -0
  354. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-CZ_OauyW.js +0 -8
  355. package/dist/client/assets/timeline-definition-24CTP7MA-BAzx5DyO.js.br +0 -0
  356. package/dist/client/assets/timeline-definition-24CTP7MA-BAzx5DyO.js.gz +0 -0
  357. package/dist/client/assets/vennDiagram-4TSXK5OY-CBZ-PhTQ.js.br +0 -0
  358. package/dist/client/assets/vennDiagram-4TSXK5OY-CBZ-PhTQ.js.gz +0 -0
  359. package/dist/client/assets/videoCompression-BCnqCkRK.js.br +0 -0
  360. package/dist/client/assets/videoCompression-BCnqCkRK.js.gz +0 -0
  361. package/dist/client/assets/wardleyDiagram-VM6X3IG4-DbWzC6l5.js.br +0 -0
  362. package/dist/client/assets/wardleyDiagram-VM6X3IG4-DbWzC6l5.js.gz +0 -0
  363. package/dist/client/assets/xychartDiagram-S5SC5T6Z-BmApnTWE.js.br +0 -0
  364. package/dist/client/assets/xychartDiagram-S5SC5T6Z-BmApnTWE.js.gz +0 -0
package/README.md CHANGED
@@ -1,21 +1,98 @@
1
1
  # Termdock
2
2
 
3
- > 命名备注:项目新名称暂定为 **Termcove**。目前仅记录改名意向,程序名称、CLI 命令和 npm 包名仍沿用 Termdock / `termdock`;待未来正式决定全面改名时统一迁移。
3
+ <p align="center">
4
+ <img src="public/pwa-192x192.png" alt="Termdock 图标" width="96" />
5
+ </p>
4
6
 
5
- 一个面向移动端与桌面端的 Web 终端,由 tmux 持久托管会话,xterm.js + WebGL 负责渲染,Express + WebSocket 提供后端通信。
7
+ **把终端和 AI 编程工作区,带到你的手机、浏览器和 Mac。**
6
8
 
7
- ![License](https://img.shields.io/badge/license-MIT-green)
9
+ [![npm](https://img.shields.io/npm/v/termdock)](https://www.npmjs.com/package/termdock)
10
+ [![Downloads](https://img.shields.io/npm/dm/termdock)](https://www.npmjs.com/package/termdock)
11
+ [![macOS Download](https://img.shields.io/github/v/release/Jovines/termdock?label=macOS)](https://github.com/Jovines/termdock/releases)
12
+ [![License: MIT](https://img.shields.io/badge/License-MIT-green)](LICENSE)
13
+
14
+ 简体中文 · [English](README.en.md)
15
+
16
+ Termdock 是一个可自托管的 Web 终端与 AI Agent 工作区。你可以在电脑上运行 Claude Code、Codex、Gemini CLI 等工具,再从手机继续操作同一个 tmux 会话;也可以连接多台机器,把任务、消息、代码审阅和文件预览放在同一工作区里。
17
+
18
+ 终端与命令在运行 Termdock 服务的机器上执行。浏览器、PWA 和 macOS 客户端负责连接与交互;AI CLI 需要在服务所在机器上单独安装和登录。
19
+
20
+ [快速开始](#快速开始) · [功能特性](#功能特性) · [AI 与协作](#ai-与协作) · [常见问题](#常见问题) · [文档](#文档导航) · [参与贡献](#参与贡献)
21
+
22
+ ## 为什么用 Termdock
23
+
24
+ - **离开电脑后继续工作**:手机打开同一服务,查看输出、补充指令、处理 Agent 提问;关闭页面后,tmux 会话继续运行。
25
+ - **给手机一个适合终端的界面**:可定制快捷键栏、触摸滚动、滑动切换会话,以及 iOS 软键盘适配。
26
+ - **把 AI 工作放在一起**:管理多个 Agent 会话,在协作组中分派任务、回答问题、审阅交付物和验收结果。
27
+ - **跨机器连接**:切换多个服务;经过配置的入口可以中转目标服务的加密流量,目标仍独立检查身份与权限。
28
+ - **直接查看工作成果**:浏览文件、查看 Git diff,预览 Markdown、图片、视频、HTML、3D 模型和 KiCad 文件,并把选中的内容引用给 Agent。
29
+
30
+ ## 快速开始
31
+
32
+ ### 运行环境
33
+
34
+ | 项目 | 要求 |
35
+ | --- | --- |
36
+ | 服务系统 | macOS 或 Linux;Windows 用户可在 WSL2 的 Linux 环境中尝试 |
37
+ | Node.js | **22 或更新版本**,并安装 npm |
38
+ | 持久会话 | `tmux`,需要能从 `PATH` 找到 |
39
+ | 客户端 | 当前版本的 Chrome、Edge、Firefox 或 Safari;手机可通过 HTTPS 安装 PWA |
40
+ | macOS 桌面安装包 | 当前打包目标为 Apple Silicon(arm64),见 [Releases](https://github.com/Jovines/termdock/releases) |
41
+
42
+ 安装过程会检查原生终端模块和 tmux,并尝试修复依赖。手动准备 tmux:
43
+
44
+ ```bash
45
+ # macOS(已安装 Homebrew)
46
+ brew install tmux
47
+
48
+ # Ubuntu / Debian
49
+ sudo apt-get update
50
+ sudo apt-get install -y tmux
51
+ ```
52
+
53
+ 如果 `node-pty` 需要本机编译,macOS 安装 `xcode-select --install`,Ubuntu / Debian 安装 `build-essential` 和 `python3`。WSL2、不同 Linux 发行版和手机系统的具体行为请以实际环境为准。
54
+
55
+ ### 安装并启动
56
+
57
+ ```bash
58
+ npm install -g termdock
59
+
60
+ # 先设置密码,再启动服务
61
+ td --set-password
62
+ td
63
+
64
+ # 查看实际访问地址和服务状态
65
+ td --status
66
+ ```
67
+
68
+ `td` 和 `termdock` 是同一个 CLI 的两个名称。首次启动可能引导配置局域网名称与 HTTPS;打开启动日志或 `td --status` 给出的地址,登录后创建终端即可开始使用。
69
+
70
+ 只想先在本机试用,也可以运行:
71
+
72
+ ```bash
73
+ npx termdock --host 127.0.0.1
74
+ ```
75
+
76
+ 没有配置证书时,本机地址为 `http://localhost:9834`;配置证书后使用日志显示的 HTTPS 地址。默认监听地址为 `0.0.0.0:9834`,后台模式由 supervisor 监督运行。手机访问和 PWA 安装请继续阅读[局域网 HTTPS 配置](#局域网-https-访问手机--本机)。
77
+
78
+ ### macOS 桌面版
79
+
80
+ 从 [GitHub Releases](https://github.com/Jovines/termdock/releases) 下载 DMG,安装后打开连接中心。桌面版可以复用本机服务,也可以连接局域网或公网中的独立服务。
81
+
82
+ 如果本机已有 Node.js 22+ 和 CLI,桌面版会检测并按需启动服务;缺少 CLI 时,可点击「安装并启动」安装到 `~/.termdock/cli`。缺少合适的 Node.js 时,连接中心提供官网下载入口。退出桌面版后,独立服务继续运行。
83
+
84
+ 桌面版提供原生窗口、快捷键、Finder 文件交互和独立的应用更新。打包、签名与升级说明见 [Termdock for macOS](docs/macos-desktop.md)。
8
85
 
9
86
  ## 功能特性
10
87
 
11
88
  ### 终端能力
12
89
 
13
90
  - **xterm.js + WebGL 渲染**:使用 `@xterm/addon-webgl` 加速绘制,自动处理上下文丢失与纹理刷新
14
- - **tmux 持久会话**:所有会话由 tmux 托管,关闭页面/掉线后仍可恢复,支持 `detach`、`destroy`、强杀
15
- - **WebSocket 双向通信**:单条持久连接同时承载输入与输出(取代旧的 SSE + POST 方案)
91
+ - **tmux 持久会话**:tmux 模式下关闭页面或掉线后仍可恢复,支持分离、销毁和强制结束;持久运行需要 tmux 可用
92
+ - **加密双向通信**:通过 Noise 加密通道传输终端输入与输出,底层使用 WebSocket
16
93
  - **自动重连**:网络或后端中断后会自动尝试 attach 回原会话
17
94
  - **鼠标支持**:完整透传 SGR 鼠标协议,vim、htop、tmux copy-mode 内的滚动/点击都按预期工作
18
- - **OSC 0 CWD 嗅探**:标签页可动态显示当前进程或目录,无需轮询 `/proc`
95
+ - **会话标题与目录**:结合终端标题、shell integration 与进程信息显示当前会话上下文
19
96
 
20
97
  ### 多会话与标签栏
21
98
 
@@ -31,19 +108,77 @@
31
108
  - **手势**:点击 = 鼠标左键,长按 = 右键,捏合缩放调字号,触摸滑动 = 终端滚动
32
109
  - **iOS 适配**:处理选择菜单、键盘弹起、翻页与会话恢复时的纹理刷新等细节
33
110
 
111
+ ### 电脑控制
112
+
113
+ 右侧边栏的「电脑」页支持 RDP 和 VNC,提供鼠标、触摸、键盘、仅查看、桌面展开和系统快捷键。
114
+ Ubuntu / Linux、Windows 默认选择 RDP,macOS 默认选择 VNC;目标系统与协议可以分别切换。
115
+ VNC 使用 [noVNC](https://github.com/novnc/noVNC),RDP 使用 [Apache Guacamole](https://guacamole.apache.org/)。
116
+
117
+ 1. 在 Mac 上打开「系统设置 → 通用 → 共享 → 屏幕共享」,允许用于登录的 Mac 账户。
118
+ 2. 在「电脑」页填写当前 Termdock 服务能访问的电脑内网 IP 或主机名;VNC 端口固定为 5900,RDP 默认 3389,可按目标设置调整。
119
+ 可选择「连接服务所在电脑」,使用服务端本机地址;这里的本机是当前服务所在电脑。
120
+ 3. 填写 Mac 用户名和账户密码;如果使用独立 VNC 密码,先在 Mac 的屏幕共享设置中
121
+ 开启「VNC 查看器可以使用密码控制屏幕」,用户名可留空,按服务器要求补充。
122
+
123
+ 连接需要当前服务的全权授权。目标、协议、端口、账号和证书信任选择保存在当前服务。
124
+ 默认勾选「记住登录」,成功连接后将密码加密保存到服务端,下次打开自动连接;高级设置可关闭自动连接,
125
+ 「清除登录」可删除当前目标账号的凭据。密码不会进入浏览器存储或普通设置文件,服务端凭据文件及密钥仅供当前系统用户读取。
126
+ 切换侧栏页面、关闭侧栏或离开服务工作区时会断开控制。浏览器到 Termdock 的画面和输入复用现有加密通道;服务到目标电脑的 VNC 段
127
+ 应放在可信内网或 VPN 中。文字发送使用远程剪贴板,字符支持取决于服务器能力。
128
+ 系统设置步骤可参考 [Apple 屏幕共享说明](https://support.apple.com/guide/mac-help/mh11848/mac)。
129
+
130
+ 选择 VNC 时,Ubuntu / Linux 需要先启动兼容的 VNC 服务。共享现有 X11 桌面可使用
131
+ [x11vnc](https://github.com/LibVNC/x11vnc),在桌面终端设置 VNC 密码,并以
132
+ `-localhost -usepw -forever -shared -rfbport 5900` 启动,随后连接服务所在电脑。
133
+ [Ubuntu 24.04 内置远程桌面](https://documentation.ubuntu.com/desktop/en/24.04/how-to/share-your-desktop-remotely/)
134
+ 使用 RDP,可在此面板选择 RDP 连接。VNC 下的 Wayland 需要兼容该桌面的 VNC 服务。
135
+ TigerVNC 虚拟桌面是独立会话,不等同于当前屏幕。
136
+
137
+ 使用 RDP 时,在目标电脑启用远程桌面并设置登录凭据。Ubuntu 的「桌面共享」与「远程登录」
138
+ 可能使用不同会话和端口(3389 / 3390),填写设置界面中的实际端口、RDP 用户名和密码。
139
+ 目标使用自签名证书时,确认电脑身份后可勾选「信任此电脑的 RDP 证书(跳过校验)」。
140
+ 域可留空;连接服务所在电脑时使用 `127.0.0.1`。RDP 登录可能创建新会话,是否显示当前屏幕
141
+ 由目标远程桌面服务决定。
142
+
143
+ RDP 需要在 **Termdock 服务电脑** 启动支持 RDP 的 `guacd`,仅监听回环地址 `127.0.0.1:4822`。
144
+ Linux Docker 示例(复用主机网络,使 `127.0.0.1` 指向服务电脑):
145
+
146
+ ```bash
147
+ docker run -d --name termdock-guacd --network host --restart unless-stopped \
148
+ -e LOG_LEVEL=warning guacamole/guacd:1.6.0 -b 127.0.0.1
149
+ ```
150
+
151
+ 也可在服务电脑安装 Apache Guacamole 的 `guacd` 并绑定回环地址;自定义后端端口使用
152
+ `TERMDOCK_GUACD_PORT`。转换服务没有独立认证,不能暴露到局域网或公网。
153
+ 浏览器通过当前 Termdock 服务的全权授权与加密通道连接;RDP 密码的传输与保存请求均通过该通道,
154
+ 不写入 URL、日志或普通连接配置。无需部署 Guacamole 网页、数据库或另外开放业务 HTTP / WebSocket 端口。
155
+
34
156
  ### 安全与认证
35
157
 
36
- - **密码保护**(可选):通过 `termdock --set-password` 启用,登录页 + Cookie 会话
158
+ - **密码登录**:通过 `td --set-password` 设置密码,浏览器使用 OPAQUE 密码证明授权设备,再建立 Noise 加密连接
159
+ - **设备邀请与撤销**:一次性邀请链接和二维码,可选择会话查看、操作或完整服务权限
160
+ - **加密中继**:已配置的入口转发密文,目标服务独立验证设备身份与权限
37
161
  - **登录限流**:基于来源 IP 的指数退避,防暴力破解
38
162
  - **CSRF 防护**:所有写入接口要求 CSRF token
39
163
  - **WebSocket 升级鉴权**:未登录的 upgrade 请求会被 401 拒绝
40
164
  - **路径校验**:内置 `pathValidator` 防止路径穿越
41
165
 
166
+ 终端操作拥有服务所在系统账户的权限。公网部署需要强密码、可信 HTTPS 证书和明确的访问入口;配置方法与权限边界见[配置说明](docs/configuration.md#公网安全模式)和[加密连接文档](src/server/federation/README.md)。普通 PWA 仍依赖可信的前端代码来源。
167
+
168
+ ### 文件、审阅与设备
169
+
170
+ - 文件树、上传、下载、图片粘贴和文件拖拽,方便给 Agent 提供上下文。
171
+ - Git diff 与代码审阅,支持把选中的内容引用到终端或上下文草稿。
172
+ - Markdown、图片、视频与沙箱 HTML 预览;HTML 的支持范围见[加密连接文档](src/server/federation/README.md)。
173
+ - STL / GLB / glTF 模型查看与位置引用;KiCad 原理图、PCB 和工程预览。部分转换需要服务机上的额外工具,见[电子设计预览](docs/electronics-preview.md)。
174
+ - Android 投屏与控制,需要服务机上的 adb、scrcpy 及已授权的设备;电脑桌面控制步骤见上文。
175
+
42
176
  ### PWA
43
177
 
44
178
  - 自托管 JetBrains Mono NL + Symbols Nerd Font(含 Bold)
45
179
  - 完整的 PWA 图标 / 启动屏 / manifest,可安装到主屏幕全屏运行
46
- - Service Worker 缓存静态资源,支持离线打开
180
+ - Service Worker 缓存静态资源;离线时可打开缓存界面,终端操作仍需要连接服务
181
+ - 内置中英文界面与 Flexoki 深色、浅色主题
47
182
 
48
183
  ## 技术栈
49
184
 
@@ -56,32 +191,19 @@
56
191
  - **样式**:Tailwind CSS
57
192
  - **图标**:Remix Icon + Nerd Fonts
58
193
 
59
- ## 快速开始
60
-
61
- ### macOS 桌面版
62
-
63
- 桌面版用于连接本机、局域网或公网中独立运行的 Termdock 服务。
64
- 本机服务需先通过 CLI 启动;桌面版不安装 CLI,也不启动或接管服务。
65
-
66
- 正式版可从 [GitHub Releases](https://github.com/Jovines/termdock/releases)
67
- 下载 DMG;安装后的桌面版支持在应用菜单中检查并安装更新。
68
-
69
- 构建、版本管理和签名说明见
70
- [Termdock for macOS](docs/macos-desktop.md)。
71
-
72
- ### 一行命令启动
194
+ ## 服务管理与手机接入
73
195
 
74
- ```bash
75
- npx termdock
76
- ```
196
+ ### 常用命令与更新
77
197
 
78
- 默认监听 `0.0.0.0:9834`,并在后台运行。常用变体:
198
+ 全局安装后可使用:
79
199
 
80
200
  ```bash
81
- npx termdock --host 127.0.0.1 --port 4000
201
+ termdock --host 127.0.0.1 --port 4000
82
202
  termdock --foreground # 前台运行
83
203
  termdock --status # 查看后台状态
84
204
  termdock --stop # 停止后台服务
205
+ termdock --restart # 请求 supervisor 重启服务
206
+ td --help # 完整 CLI 帮助
85
207
  td update # 从 npm 官方源升级全局 CLI
86
208
  ```
87
209
 
@@ -105,8 +227,8 @@ macOS 桌面版仍使用独立的签名更新机制,不运行 npm 自动更新
105
227
  # 交互式设置(输入隐藏)
106
228
  termdock --set-password
107
229
 
108
- # 通过管道设置(CI / 脚本场景)
109
- echo "my-secret" | termdock --set-password
230
+ # 通过管道设置(CI / 脚本场景;先在环境中设置 TERMDOCK_SETUP_PASSWORD)
231
+ printf '%s\n' "$TERMDOCK_SETUP_PASSWORD" | termdock --set-password
110
232
 
111
233
  # 关闭鉴权
112
234
  termdock --clear-password
@@ -137,7 +259,7 @@ https://<name>.termdock.local:9834
137
259
  termdock --set-password
138
260
 
139
261
  # 2. 自动准备本地 HTTPS 证书
140
- # 若未安装 mkcert,会自动通过 Homebrew 执行 brew install mkcert
262
+ # 会检查 mkcert;macOS 可通过 Homebrew 自动安装
141
263
  termdock --setup-local-https
142
264
 
143
265
  # 3. 正常启动;如果 ~/.termdock/certs/ 下已有证书,会自动启用 HTTPS
@@ -181,6 +303,33 @@ https://<name>.termdock.local:9834
181
303
 
182
304
  注意:mDNS 依赖同一局域网的 `.local` 组播;访客 Wi‑Fi、客户端隔离、VPN 或部分企业网络可能会阻止解析。此时 `localhost` 访问仍然可用,但手机上的漂亮域名可能不可用。
183
305
 
306
+ 在 iPhone 的 Safari 中使用「分享 → 添加到主屏幕」;Android 使用浏览器的安装应用入口。首次连接需完成证书信任和登录。手机锁屏或后台时系统可能暂停客户端,服务机上的 tmux 会话继续运行,返回前台后重新连接。
307
+
308
+ ## AI 与协作
309
+
310
+ ### 在同一个终端继续 AI 工作
311
+
312
+ 在服务机上安装并登录你选择的 Agent CLI,然后在 Termdock 终端中启动,例如 `claude`、`codex` 或 `gemini`。项目内置多种 Agent 的识别与会话恢复适配,也支持通过插件添加适配。
313
+
314
+ Termdock 不提供模型账户或 API 额度,调用费用与权限由对应 CLI 和提供商决定。普通 shell、Vim、htop 等终端程序也可以使用。
315
+
316
+ ### 工作组、任务与跨机器协作
317
+
318
+ 创建协作组并添加 Agent 会话后,可以发送消息、建立目标与子任务、回答问题、确认方案、审阅结果和验收交付。自动协作支持协调者拆分目标、独立执行目录与独立评审,具体流程见[协作指南](docs/collaboration.md)。
319
+
320
+ 在 Termdock 管理的终端内查看 CLI:
321
+
322
+ ```bash
323
+ td collab --help
324
+ td collab status
325
+ td collab send <接收者会话ID> '请检查这次改动并回复结果'
326
+ td collab inbox --json
327
+ ```
328
+
329
+ 协作以终端和明确回复为依据,不要求各家 Agent 安装专用 hook。跨服务协作完成身份登记后,由服务后台通过加密通道继续投递与重试,不依赖网页一直打开。**写入终端不等于 Agent 已读或任务已完成**;任务报告保留原文与时间,最终结果需要明确评审或验收。
330
+
331
+ 多个服务的授权、入口中继和网络路由配置见[加密连接与 CLI 中继](src/server/federation/README.md)。
332
+
184
333
  ### 分享和安装 Agent 插件
185
334
 
186
335
  Agent 适配可以作为独立 Git 仓库分享。插件仓库根目录必须包含 `manifest.json`,可以同时携带 `icon.svg` 和标题生成等辅助脚本:
@@ -240,6 +389,8 @@ td plugin-create ./manifest.json
240
389
 
241
390
  插件作者和 Agent 可以运行 `td agent-plugin --json` 获取机器可读的当前协议、manifest schema、状态模型和全部公共命令。v1 manifest 会返回可直接交给 AI 修复的迁移说明。
242
391
 
392
+ ## 源码开发
393
+
243
394
  ### 从源码安装
244
395
 
245
396
  ```bash
@@ -291,6 +442,8 @@ npm run dev:server # tsx watch 后端:9835
291
442
  npm run build
292
443
  ```
293
444
 
445
+ 类型检查使用 `npm run lint`,单次测试运行使用 `npm test -- --run`;贡献流程见 [CONTRIBUTING.md](CONTRIBUTING.md)。
446
+
294
447
  输出:
295
448
 
296
449
  - `dist/client/`:前端静态资源
@@ -306,10 +459,7 @@ npm start
306
459
 
307
460
  ## 系统依赖
308
461
 
309
- - **Node.js ≥ 18**
310
- - **tmux**:会话托管必需,请确保 `tmux` 在 PATH 中
311
- - **macOS**:需安装 Xcode Command Line Tools 以便 `node-pty` 编译 `spawn-helper`
312
- - **Linux**:通常需要 `build-essential`、`python3` 才能编译 `node-pty`
462
+ 依赖与安装要求见[运行环境](#运行环境)。开发前请准备 Node.js 22+、tmux 及所需的原生模块编译工具。
313
463
 
314
464
  ### tmux 焦点跟踪
315
465
 
@@ -321,80 +471,38 @@ set -g focus-events on
321
471
 
322
472
  ## 项目结构
323
473
 
324
- ```
474
+ ```text
325
475
  termdock/
326
476
  ├── src/
327
- │ ├── main.tsx # 应用入口
328
- │ ├── App.tsx # 根组件
329
- │ ├── index.css # 全局样式
477
+ │ ├── App.tsx / main.tsx # Web 应用入口
478
+ │ ├── index.css # 主题与全局样式 token
330
479
  │ ├── lib/
331
- │ │ ├── terminal/ # xterm 适配层、主题、API
332
- │ │ ├── stores/ # Zustand store
333
- │ │ │ ├── useTerminalStore.ts
334
- │ │ │ └── useMultiSessionStore.ts
335
- │ │ ├── components/
336
- │ │ │ ├── MultiTerminalView.tsx # 多会话 Swiper 主视图
337
- │ │ │ ├── auth/LoginScreen.tsx # 登录页
338
- │ │ │ ├── terminal/ # 终端视图、错误/加载、移动键盘
339
- │ │ │ ├── settings/ # 调试面板、工具条预设
340
- │ │ │ ├── ui/ErrorBoundary.tsx
341
- │ │ │ └── views/TerminalView.tsx
342
- │ │ ├── hooks/ # 字号、滚动、断连清理、视口高度等
343
- │ │ └── utils/ # 错误处理、调试
480
+ │ │ ├── terminal/ # xterm 适配、主题与终端 API
481
+ │ │ ├── components/ # 终端、侧栏、设置和审阅界面
482
+ │ │ ├── federation/ # 浏览器加密通信与多服务访问
483
+ │ │ ├── stores/ # 状态管理
484
+ │ │ └── i18n/ # 中英文界面
344
485
  │ └── server/
345
- │ ├── cli.ts # CLI 入口(前后台、密码管理)
346
- │ ├── entry.ts # Express + WebSocket 启动
347
- │ ├── config.ts # 端口配置(dev: 9833/9835,prod: 9834)
348
- │ ├── routes/
349
- │ │ ├── auth.ts # 登录 / 登出 / 状态
350
- │ │ └── terminal.ts # 终端 + tmux 路由
351
- │ └── utils/
352
- │ ├── authProtection.ts # scrypt 密码哈希、会话、限流
353
- │ ├── csrfProtection.ts
354
- │ └── pathValidator.ts
355
- ├── public/ # PWA 图标、字体、manifest
356
- ├── install-local.sh / uninstall-local.sh
357
- ├── package.json
358
- ├── vite.config.ts
359
- └── tsconfig.json
360
- ```
361
-
362
- ## 主要 API 端点
363
-
364
- > 写入接口需要登录后获取 CSRF token,并通过 Cookie + token 一起调用。
365
-
366
- ### 鉴权
367
-
368
- | 方法 | 端点 | 描述 |
369
- |------|------|------|
370
- | GET | `/api/auth/status` | 查询是否启用鉴权 / 当前 cookie 是否有效 |
371
- | POST | `/api/auth/login` | 登录(限流) |
372
- | POST | `/api/auth/logout` | 登出 |
373
- | GET | `/api/csrf-token` | 获取 CSRF token(需登录) |
374
-
375
- ### 终端 / tmux
376
-
377
- | 方法 | 端点 | 描述 |
378
- |------|------|------|
379
- | POST | `/api/terminal/create` | 创建新会话 |
380
- | GET | `/api/terminal/:sessionId/ws` *(WebSocket)* | 双向通信通道 |
381
- | POST | `/api/terminal/:sessionId/input` | 发送输入(HTTP 兜底) |
382
- | POST | `/api/terminal/:sessionId/resize` | 调整终端尺寸 |
383
- | POST | `/api/terminal/:sessionId/tmux` | 执行 tmux 控制命令 |
384
- | POST | `/api/terminal/:sessionId/restart` | 重启会话 |
385
- | POST | `/api/terminal/:sessionId/detach` | 断开 attach |
386
- | GET | `/api/terminal/:sessionId/attach` | 重新 attach |
387
- | GET | `/api/terminal/:sessionId/health` | 健康检查 |
388
- | DELETE | `/api/terminal/:sessionId` | 关闭会话 |
389
- | POST | `/api/terminal/force-kill` | 强制结束 |
390
- | GET | `/api/terminal/tmux/sessions` | 列出所有 tmux 会话 |
391
- | DELETE | `/api/terminal/tmux/sessions/:name` | 销毁指定 tmux 会话 |
392
- | GET | `/api/terminal/processes` | 进程列表 |
486
+ │ ├── cli.ts / entry.ts # CLI 与服务入口
487
+ │ ├── routes/ # 终端、文件与其他业务路由
488
+ │ ├── agent/ # Agent 适配、协作与定时任务
489
+ │ └── federation/ # 服务身份、加密传输与中继
490
+ ├── desktop/ # Electron macOS 客户端
491
+ ├── public/ # 图标、字体与 Service Worker
492
+ ├── docs/ # 功能与开发文档
493
+ ├── scripts/ # 构建与维护脚本
494
+ └── package.json
495
+ ```
496
+
497
+ ### 程序化接入
498
+
499
+ 优先使用 `td collab`、`td automation`、`td notify` 和各命令的 `--help`,支持结构化 JSON 输出。页面业务请求必须使用应用的加密 `fetch` / `secureSocket`;直接 HTTP API 列表不能作为当前浏览器或远端接入方案。
500
+
501
+ 本机自动化的认证示例见上文 `auth-login.sh`,传输与授权设计见[加密连接文档](src/server/federation/README.md)。
393
502
 
394
503
  ## 主题
395
504
 
396
- 当前内置 **Flexoki Dark** —— 一套低对比度、暖色调的配色,长时间阅读更舒适。
397
- 主题定义在 `src/lib/terminal/theme.ts`,可按需扩展。
505
+ 内置 **Flexoki 深色与浅色主题**。界面颜色 token 在 `src/index.css`,终端 ANSI 配色在 `src/lib/terminal/theme.ts`;修改时请遵守仓库的色板约定。
398
506
 
399
507
  ## 配置
400
508
 
@@ -405,6 +513,8 @@ termdock/
405
513
  --port <port> 监听端口(默认 9834)
406
514
  --foreground 前台运行
407
515
  --status 查看后台服务状态
516
+ --restart 重启受监督的服务
517
+ --setup-local-https 准备局域网 HTTPS 证书
408
518
  --stop 停止后台服务
409
519
  --set-password 设置 / 修改访问密码(交互式)
410
520
  --clear-password 清除密码并关闭鉴权
@@ -420,16 +530,21 @@ NODE_ENV=development # 运行环境
420
530
  TERM=xterm-256color # 终端类型
421
531
  SHELL=/bin/zsh # 默认 shell
422
532
  MAX_TERMINAL_SESSIONS=20 # 最大会话数
423
- TERMINAL_IDLE_TIMEOUT=1800000 # 空闲超时 (毫秒)
533
+ TERMINAL_IDLE_TIMEOUT=21600000 # 空闲超时 (毫秒;生产默认 6 小时)
424
534
  ```
425
535
 
536
+ 完整配置项、加载顺序与公网模式见[配置说明](docs/configuration.md),环境变量示例见 [.env.example](.env.example)。
537
+
426
538
  ### 状态目录
427
539
 
428
540
  ```
429
541
  ~/.termdock/
430
542
  ├── auth.json # 密码哈希(mode 0600,仅在启用鉴权时存在)
431
543
  ├── server.json # 后台进程 PID / 端口
432
- └── server.log # 后台运行日志
544
+ ├── server.log # 后台运行日志
545
+ ├── crash.log # 服务异常与 supervisor 记录
546
+ ├── certs/ # 局域网 HTTPS 证书
547
+ └── federation/ # 服务身份、授权和路由配置
433
548
  ```
434
549
 
435
550
  ## 移动端控制
@@ -446,28 +561,75 @@ Esc / Tab / Ctrl / Alt / Cmd / ↑↓←→ / Enter / Backspace,并支持在
446
561
  - **滑动**(边缘):在多个会话之间翻页
447
562
  - **捏合缩放**:调整字号
448
563
 
449
- ## 发布到 npm
564
+ ## 常见问题
450
565
 
451
- ```bash
452
- npm publish
453
- ```
566
+ ### 手机应该打开哪个地址?
567
+
568
+ 打开 `td --status` 输出的局域网 HTTPS 地址,并确保手机和服务机网络可达。手机上的 `localhost` 指手机本身;首次接入使用日志提供的 onboarding 地址安装并信任 CA,再访问正式地址。
569
+
570
+ ### 关闭浏览器或 Mac 客户端会结束任务吗?
571
+
572
+ tmux 模式下,关闭客户端或暂时断网不会结束终端里的程序。主动销毁会话、关机或结束进程会终止任务。持久会话不是运行结果的备份。
573
+
574
+ ### 安装成功,但创建终端失败?
575
+
576
+ 先检查 `node --version`、`tmux -V` 与 `td --status`,再查看 `~/.termdock/server.log` 或前台运行输出。常见原因是 Node.js 版本过低、tmux 不在 PATH,或 `node-pty` 原生模块未正确安装。源码环境可在安装编译工具后运行 `npm rebuild node-pty --build-from-source`。
577
+
578
+ ### HTTPS 证书已信任,`.termdock.local` 仍无法打开?
579
+
580
+ 检查是否同一局域网、是否开启访客网络或客户端隔离,以及 VPN 是否阻断 mDNS。不要跳过证书验证;如果改用 IP 或其他域名,证书也需要覆盖该地址。
581
+
582
+ ### 可以部署到公网吗?
583
+
584
+ 可以,需要正确配置 HTTPS、强密码和 `TERMDOCK_PUBLIC_ORIGIN`,详见[公网安全模式](docs/configuration.md#公网安全模式)。终端拥有服务账户权限;应用的认证和路径检查不提供多租户系统隔离。
585
+
586
+ ### 离线还能操作终端吗?
587
+
588
+ 不能。PWA 可以缓存界面,操作终端、访问文件和控制设备仍需要服务连接。手机系统可能暂停后台页面,返回前台后会尝试恢复连接。
589
+
590
+ ### 更新后仍看到旧界面?
591
+
592
+ CLI 服务更新与 macOS 应用更新相互独立。安装新 CLI 后需确认服务已重启,再接受页面更新并重新加载。手机 PWA 如仍使用旧资源,可彻底关闭后重新打开;不要因此销毁 tmux 会话。
593
+
594
+ ### 浏览器和设备支持到什么程度?
595
+
596
+ 建议使用当前版本的 Chrome、Edge、Firefox 或 Safari。WebGL、剪贴板、PWA 安装和软键盘行为取决于浏览器与系统;macOS / iOS 的特定路径需要实机验收,不能用浏览器模拟结果代替。已知 macOS beta 问题见[本地网络权限记录](docs/macos-27-local-network.md)。
597
+
598
+ ## 文档导航
599
+
600
+ | 文档 | 内容 |
601
+ | --- | --- |
602
+ | [English README](README.en.md) | 英文介绍与上手指南 |
603
+ | [配置说明](docs/configuration.md) | 环境变量、服务监督、公网安全模式 |
604
+ | [macOS 桌面版](docs/macos-desktop.md) | 本机服务辅助、快捷键、打包、签名和升级 |
605
+ | [协作指南](docs/collaboration.md) | 消息 CLI、跨服务投递、目标、评审和验收 |
606
+ | [加密连接与中继](src/server/federation/README.md) | 密码证明、设备授权、入口路由与传输边界 |
607
+ | [电子设计预览](docs/electronics-preview.md) | KiCad 预览依赖与位置引用 |
608
+ | [模型特征](docs/model-features.md) | 3D 模型特征和坐标引用 |
609
+ | [参与贡献](CONTRIBUTING.md) | 开发准备、验证与提交说明 |
610
+
611
+ ## 参与贡献
612
+
613
+ 欢迎通过 [Issues](https://github.com/Jovines/termdock/issues) 反馈问题或讨论功能,也欢迎提交 [Pull Request](https://github.com/Jovines/termdock/pulls)。中文和英文都可以。
614
+
615
+ 除了代码,文档修正、翻译、不同设备上的体验反馈、Agent 插件和真实使用案例都能帮助项目成长。开发流程见 [CONTRIBUTING.md](CONTRIBUTING.md)。
616
+
617
+ 如果 Termdock 对你有用,欢迎给项目一个 Star,或把仓库链接分享给需要手机终端、自托管开发环境或多 Agent 协作的朋友。分享截图与复现日志时,请先隐藏密码、邀请链接、密钥与私人路径。
618
+
619
+ ## 许可证与致谢
454
620
 
455
- `prepublishOnly` 钩子会自动执行 `npm run build`。发布前请确认:
621
+ Termdock 使用 [MIT License](LICENSE)。打包的第三方组件和字体另有各自许可,见[第三方声明](public/third-party-notices.txt)。
456
622
 
457
- - npm 包名可用
458
- - `repository` / `homepage` / `bugs` 字段已更新
459
- - README、版本号已同步
623
+ 感谢 [xterm.js](https://github.com/xtermjs/xterm.js)、[tmux](https://github.com/tmux/tmux)、[node-pty](https://github.com/microsoft/node-pty)、[noVNC](https://github.com/novnc/noVNC) 及其他开源项目;界面配色来自 [Flexoki](https://stephango.com/flexoki)。
460
624
 
461
- ## 浏览器支持
625
+ <details>
626
+ <summary>项目命名备注</summary>
462
627
 
463
- - Chrome 88+
464
- - Firefox 79+
465
- - Safari 14+(含 iOS 14+)
466
- - Edge 88+
628
+ 项目新名称暂定为 **Termcove**。目前仅记录改名意向,程序名称、CLI 命令和 npm 包名仍沿用 Termdock / `termdock`;未来正式决定后再统一迁移。
467
629
 
468
- ## 许可证
630
+ </details>
469
631
 
470
- MIT
632
+ ## CLI 使用示例
471
633
 
472
634
  ### AI 关键进展提醒
473
635
 
@@ -521,11 +683,9 @@ tmux 检测;无效 ID 由服务端拒绝,不回退到其他身份。现有
521
683
  不提供这些进程之间的防冒充隔离。
522
684
  未指定时仍使用后端环境变量或明确的 `TMUX_PANE` 自动识别;缺少 pane 时不会猜测 tmux 的默认会话。
523
685
 
524
- ### Scheduled tasks from the CLI
686
+ ### 定时任务
525
687
 
526
- `td automation --help` exposes the same scheduled tasks as the web UI. Commands
527
- return JSON by default (exit 0 on success, 1 on failure), so agents can retain the
528
- returned `automation.id` and manage their own reminders:
688
+ `td automation --help` 提供与网页相同的定时任务管理功能。命令默认返回 JSON,成功退出码为 0,失败为 1;Agent 可以保存返回的 `automation.id`,继续管理自己的任务:
529
689
 
530
690
  ```bash
531
691
  td automation create --name 'Review team progress' --every 30 --self \
@@ -538,15 +698,6 @@ td automation run <automation-id>
538
698
  td automation delete <automation-id>
539
699
  ```
540
700
 
541
- `--self` identifies the current Termdock session, including tmux sessions surviving
542
- a service restart. Use `--session <full-session-id>` for another local session, or
543
- `--command '<agent launch command>'` to open a new session on each run. Existing
544
- session targets must have an Agent running when the task fires. New sessions use
545
- the CLI's working directory unless `--cwd` is specified. Prompts can also come
546
- from `--file <path>` or `--stdin` instead of `--prompt`.
701
+ `--self` 选择当前 Termdock 会话,包括服务重启后继续运行的 tmux 会话。其他本机会话使用 `--session <full-session-id>`;每次新建会话使用 `--command '<agent launch command>'`。向既有会话投递时,触发时刻必须已有 Agent 运行。新会话默认使用 CLI 当前目录,可通过 `--cwd` 指定;提示词也可以用 `--file <path>` 或 `--stdin` 提供。
547
702
 
548
- Schedules support `--every <whole minutes>` (1–43200) or `--at HH:MM` with optional
549
- `--weekdays 1,2,3,4,5` (0=Sunday, 6=Saturday; omitted means every day), using the
550
- server's timezone. Tasks repeat while enabled and the service is running;
551
- `--disabled` creates a paused task. A successful run means the task was dispatched,
552
- not that the Agent has completed the work. Scheduling is local to this service.
703
+ 支持 `--every <整分钟>`(1–43200),或 `--at HH:MM` 配合可选的 `--weekdays 1,2,3,4,5`(0 为周日,6 为周六;不填则每天),按服务端时区执行。任务启用且服务运行时会重复触发,`--disabled` 创建暂停状态的任务。运行成功表示已分派,不代表 Agent 已完成工作;定时任务属于当前服务。