termdock 1.4.308 → 1.4.310

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 (375) hide show
  1. package/README.en.md +3 -1
  2. package/README.md +3 -1
  3. package/THIRD_PARTY_NOTICES.md +30 -0
  4. package/dist/client/assets/{App-ggIA_xqR.js → App-CytIMrFr.js} +62 -55
  5. package/dist/client/assets/App-CytIMrFr.js.br +0 -0
  6. package/dist/client/assets/App-CytIMrFr.js.gz +0 -0
  7. package/dist/client/assets/ArchitecturePanel-BRTR2IsK.js +9 -0
  8. package/dist/client/assets/ArchitecturePanel-BRTR2IsK.js.br +0 -0
  9. package/dist/client/assets/ArchitecturePanel-BRTR2IsK.js.gz +0 -0
  10. package/dist/client/assets/{ArchitecturePanel-Cmpmp6FS.css → ArchitecturePanel-B_BDrrfR.css} +1 -1
  11. package/dist/client/assets/ArchitecturePanel-B_BDrrfR.css.br +0 -0
  12. package/dist/client/assets/ArchitecturePanel-B_BDrrfR.css.gz +0 -0
  13. package/dist/client/assets/{ChangeWalkthroughPanel-D1Puc7B3.js → ChangeWalkthroughPanel-Bm9Tvd6H.js} +2 -2
  14. package/dist/client/assets/ChangeWalkthroughPanel-Bm9Tvd6H.js.br +0 -0
  15. package/dist/client/assets/ChangeWalkthroughPanel-Bm9Tvd6H.js.gz +0 -0
  16. package/dist/client/assets/CollaborationMainWorkspace-BagYBDlJ.js +1 -0
  17. package/dist/client/assets/CollaborationMainWorkspace-BagYBDlJ.js.br +0 -0
  18. package/dist/client/assets/CollaborationMainWorkspace-BagYBDlJ.js.gz +0 -0
  19. package/dist/client/assets/CollaborationTaskContent-D7LXylWr.js +2 -0
  20. package/dist/client/assets/{ComputerControlView-D5Lw9sNA.js → ComputerControlView-CC6r2cD3.js} +2 -2
  21. package/dist/client/assets/ComputerControlView-CC6r2cD3.js.br +0 -0
  22. package/dist/client/assets/ComputerControlView-CC6r2cD3.js.gz +0 -0
  23. package/dist/client/assets/{DagPlayground-DYJrGfiG.js → DagPlayground-BqAadqBT.js} +1 -1
  24. package/dist/client/assets/DagPlayground-BqAadqBT.js.br +0 -0
  25. package/dist/client/assets/DagPlayground-BqAadqBT.js.gz +0 -0
  26. package/dist/client/assets/{DiffLab-5zdcFW3z.js → DiffLab-CrEVLy-j.js} +1 -1
  27. package/dist/client/assets/DiffLab-CrEVLy-j.js.br +0 -0
  28. package/dist/client/assets/DiffLab-CrEVLy-j.js.gz +0 -0
  29. package/dist/client/assets/{DiffReview-BBBC_NjV.js → DiffReview-C8e2GQxb.js} +1 -1
  30. package/dist/client/assets/DiffReview-C8e2GQxb.js.br +0 -0
  31. package/dist/client/assets/DiffReview-C8e2GQxb.js.gz +0 -0
  32. package/dist/client/assets/{DiffReviewLab-CbhosFSB.js → DiffReviewLab-RQ1NmpZE.js} +2 -2
  33. package/dist/client/assets/DiffReviewLab-RQ1NmpZE.js.br +0 -0
  34. package/dist/client/assets/DiffReviewLab-RQ1NmpZE.js.gz +0 -0
  35. package/dist/client/assets/{DiffViewer-BuQwFQ4V.js → DiffViewer-KljgMa9h.js} +8 -8
  36. package/dist/client/assets/DiffViewer-KljgMa9h.js.br +0 -0
  37. package/dist/client/assets/DiffViewer-KljgMa9h.js.gz +0 -0
  38. package/dist/client/assets/{ModelPreview-nO2VmqdP.js → ModelPreview-B9UR1TR3.js} +1 -1
  39. package/dist/client/assets/ModelPreview-B9UR1TR3.js.br +0 -0
  40. package/dist/client/assets/ModelPreview-B9UR1TR3.js.gz +0 -0
  41. package/dist/client/assets/RightSidebar-DSH93gN5.js +1677 -0
  42. package/dist/client/assets/RightSidebar-DSH93gN5.js.br +0 -0
  43. package/dist/client/assets/RightSidebar-DSH93gN5.js.gz +0 -0
  44. package/dist/client/assets/{abnfDiagram-VCTEODGH-yi0K8GDG.js → abnfDiagram-VCTEODGH-WFUf9n1A.js} +1 -1
  45. package/dist/client/assets/abnfDiagram-VCTEODGH-WFUf9n1A.js.br +0 -0
  46. package/dist/client/assets/abnfDiagram-VCTEODGH-WFUf9n1A.js.gz +0 -0
  47. package/dist/client/assets/{app-B6FdOF6K.js → app-Bey8S6UU.js} +4 -4
  48. package/dist/client/assets/app-Bey8S6UU.js.br +0 -0
  49. package/dist/client/assets/app-Bey8S6UU.js.gz +0 -0
  50. package/dist/client/assets/{arc-_nLI_-XZ.js → arc-BXKxIsA3.js} +1 -1
  51. package/dist/client/assets/arc-BXKxIsA3.js.br +0 -0
  52. package/dist/client/assets/arc-BXKxIsA3.js.gz +0 -0
  53. package/dist/client/assets/{architectureDiagram-5GKGNRK7-CikrA78O.js → architectureDiagram-5GKGNRK7-DAfRrSxr.js} +1 -1
  54. package/dist/client/assets/architectureDiagram-5GKGNRK7-DAfRrSxr.js.br +0 -0
  55. package/dist/client/assets/architectureDiagram-5GKGNRK7-DAfRrSxr.js.gz +0 -0
  56. package/dist/client/assets/{blockDiagram-I7D4REHJ-CWJq6qJ7.js → blockDiagram-I7D4REHJ-1HbSy7rb.js} +1 -1
  57. package/dist/client/assets/blockDiagram-I7D4REHJ-1HbSy7rb.js.br +0 -0
  58. package/dist/client/assets/blockDiagram-I7D4REHJ-1HbSy7rb.js.gz +0 -0
  59. package/dist/client/assets/{c4Diagram-7LVT6UL2-gzPzLGvs.js → c4Diagram-7LVT6UL2-Dxwui-M_.js} +1 -1
  60. package/dist/client/assets/c4Diagram-7LVT6UL2-Dxwui-M_.js.br +0 -0
  61. package/dist/client/assets/c4Diagram-7LVT6UL2-Dxwui-M_.js.gz +0 -0
  62. package/dist/client/assets/channel-Dkh0SMv-.js +1 -0
  63. package/dist/client/assets/{chunk-2Q5K7J3B-CfX9l18E.js → chunk-2Q5K7J3B-CJSdJ_A1.js} +1 -1
  64. package/dist/client/assets/{chunk-5VM5RSS4-JSV1yrXM.js → chunk-5VM5RSS4-BNEXn4bI.js} +1 -1
  65. package/dist/client/assets/{chunk-F27PBJKO-CQ0LXeap.js → chunk-F27PBJKO-BaM6iLMb.js} +1 -1
  66. package/dist/client/assets/chunk-F27PBJKO-BaM6iLMb.js.br +0 -0
  67. package/dist/client/assets/chunk-F27PBJKO-BaM6iLMb.js.gz +0 -0
  68. package/dist/client/assets/{chunk-IMKFNOWR-CJOEPkK9.js → chunk-IMKFNOWR-DxPJBdLq.js} +1 -1
  69. package/dist/client/assets/chunk-IMKFNOWR-DxPJBdLq.js.br +0 -0
  70. package/dist/client/assets/chunk-IMKFNOWR-DxPJBdLq.js.gz +0 -0
  71. package/dist/client/assets/{chunk-JWPE2WC7-Dpp7Xu_E.js → chunk-JWPE2WC7-BwEOSoiu.js} +1 -1
  72. package/dist/client/assets/{chunk-POPQ4Y6H-9hDa1b8z.js → chunk-POPQ4Y6H-CbYcBz8G.js} +1 -1
  73. package/dist/client/assets/{chunk-SVP7TREG-BskkG9gg.js → chunk-SVP7TREG-CpnycZ3K.js} +1 -1
  74. package/dist/client/assets/chunk-SVP7TREG-CpnycZ3K.js.br +0 -0
  75. package/dist/client/assets/chunk-SVP7TREG-CpnycZ3K.js.gz +0 -0
  76. package/dist/client/assets/{chunk-TICWLB2K-DyzuP-9I.js → chunk-TICWLB2K-5oWwjAOF.js} +1 -1
  77. package/dist/client/assets/chunk-TICWLB2K-5oWwjAOF.js.br +0 -0
  78. package/dist/client/assets/chunk-TICWLB2K-5oWwjAOF.js.gz +0 -0
  79. package/dist/client/assets/{chunk-XXDRQBXY-C31_1i6z.js → chunk-XXDRQBXY-VWUm4Sz5.js} +1 -1
  80. package/dist/client/assets/classDiagram-ZZMXUADV-DqvmSdwt.js +1 -0
  81. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DqvmSdwt.js +1 -0
  82. package/dist/client/assets/{cose-bilkent-JH36ORCC-Bm-ESDOc.js → cose-bilkent-JH36ORCC-gpF5Tw44.js} +1 -1
  83. package/dist/client/assets/cose-bilkent-JH36ORCC-gpF5Tw44.js.br +0 -0
  84. package/dist/client/assets/cose-bilkent-JH36ORCC-gpF5Tw44.js.gz +0 -0
  85. package/dist/client/assets/{cynefin-OW5HDTMX-DbFWAPvX.js → cynefin-OW5HDTMX-HFr7zRQ0.js} +1 -1
  86. package/dist/client/assets/cynefin-OW5HDTMX-HFr7zRQ0.js.br +0 -0
  87. package/dist/client/assets/cynefin-OW5HDTMX-HFr7zRQ0.js.gz +0 -0
  88. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-Ca0IKRdH.js → cynefinDiagram-5FMLGOSQ-LccKgJj0.js} +1 -1
  89. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-LccKgJj0.js.br +0 -0
  90. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-LccKgJj0.js.gz +0 -0
  91. package/dist/client/assets/{dagre-GXQ25YYZ-D_5uEMjJ.js → dagre-GXQ25YYZ-C7eLk1r1.js} +1 -1
  92. package/dist/client/assets/dagre-GXQ25YYZ-C7eLk1r1.js.br +0 -0
  93. package/dist/client/assets/dagre-GXQ25YYZ-C7eLk1r1.js.gz +0 -0
  94. package/dist/client/assets/{diagram-S7CK7UJ4-DWVpndRP.js → diagram-S7CK7UJ4-DkWPZYAg.js} +1 -1
  95. package/dist/client/assets/diagram-S7CK7UJ4-DkWPZYAg.js.br +0 -0
  96. package/dist/client/assets/diagram-S7CK7UJ4-DkWPZYAg.js.gz +0 -0
  97. package/dist/client/assets/{diagram-UQ7AKVKN-DmYTya3w.js → diagram-UQ7AKVKN-DluTsMXz.js} +1 -1
  98. package/dist/client/assets/diagram-UQ7AKVKN-DluTsMXz.js.br +0 -0
  99. package/dist/client/assets/diagram-UQ7AKVKN-DluTsMXz.js.gz +0 -0
  100. package/dist/client/assets/{diagram-VSXAHHWV-BEA6kqNj.js → diagram-VSXAHHWV-BLXEmXmu.js} +1 -1
  101. package/dist/client/assets/diagram-VSXAHHWV-BLXEmXmu.js.br +0 -0
  102. package/dist/client/assets/diagram-VSXAHHWV-BLXEmXmu.js.gz +0 -0
  103. package/dist/client/assets/{diagram-VX7I27RA-CU9vP0P0.js → diagram-VX7I27RA-DO3J99WU.js} +1 -1
  104. package/dist/client/assets/diagram-VX7I27RA-DO3J99WU.js.br +0 -0
  105. package/dist/client/assets/diagram-VX7I27RA-DO3J99WU.js.gz +0 -0
  106. package/dist/client/assets/{diagram-Z3DM3KII-B_GvE2g-.js → diagram-Z3DM3KII-kvkSusTy.js} +1 -1
  107. package/dist/client/assets/diagram-Z3DM3KII-kvkSusTy.js.br +0 -0
  108. package/dist/client/assets/diagram-Z3DM3KII-kvkSusTy.js.gz +0 -0
  109. package/dist/client/assets/{ebnfDiagram-PWID7BFC-BLrPQuLE.js → ebnfDiagram-PWID7BFC-Bxd9hatc.js} +1 -1
  110. package/dist/client/assets/ebnfDiagram-PWID7BFC-Bxd9hatc.js.br +0 -0
  111. package/dist/client/assets/ebnfDiagram-PWID7BFC-Bxd9hatc.js.gz +0 -0
  112. package/dist/client/assets/{erDiagram-RLTQ6QDP-DlXgoyZ-.js → erDiagram-RLTQ6QDP-BWc3uM23.js} +1 -1
  113. package/dist/client/assets/erDiagram-RLTQ6QDP-BWc3uM23.js.br +0 -0
  114. package/dist/client/assets/erDiagram-RLTQ6QDP-BWc3uM23.js.gz +0 -0
  115. package/dist/client/assets/{flowDiagram-HODETNUW-fPHWxEDZ.js → flowDiagram-HODETNUW-BQhPtc9z.js} +1 -1
  116. package/dist/client/assets/flowDiagram-HODETNUW-BQhPtc9z.js.br +0 -0
  117. package/dist/client/assets/flowDiagram-HODETNUW-BQhPtc9z.js.gz +0 -0
  118. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-B8MOv6ug.js → ganttDiagram-EL5Y4UJY-DzmTLgVr.js} +1 -1
  119. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DzmTLgVr.js.br +0 -0
  120. package/dist/client/assets/ganttDiagram-EL5Y4UJY-DzmTLgVr.js.gz +0 -0
  121. package/dist/client/assets/{gestureArbiter-JW8vcVRm.js → gestureArbiter-BuNZMZ7A.js} +1 -1
  122. package/dist/client/assets/gestureArbiter-BuNZMZ7A.js.br +0 -0
  123. package/dist/client/assets/gestureArbiter-BuNZMZ7A.js.gz +0 -0
  124. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-lH9gSoFx.js → gitGraphDiagram-WWUBYQGX-r0Onfl7K.js} +1 -1
  125. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-r0Onfl7K.js.br +0 -0
  126. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-r0Onfl7K.js.gz +0 -0
  127. package/dist/client/assets/{index-CNY7CTVa.css → index-C6D5a-dg.css} +1 -1
  128. package/dist/client/assets/index-C6D5a-dg.css.br +0 -0
  129. package/dist/client/assets/{index-CNY7CTVa.css.gz → index-C6D5a-dg.css.gz} +0 -0
  130. package/dist/client/assets/{infoDiagram-27XIBGKW-CSG29Ty_.js → infoDiagram-27XIBGKW-C52jpDzv.js} +1 -1
  131. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-CcwSE5qV.js → ishikawaDiagram-5VMMS53U-C-l0eHmO.js} +1 -1
  132. package/dist/client/assets/ishikawaDiagram-5VMMS53U-C-l0eHmO.js.br +0 -0
  133. package/dist/client/assets/ishikawaDiagram-5VMMS53U-C-l0eHmO.js.gz +0 -0
  134. package/dist/client/assets/{journeyDiagram-3NMN7TZE-CXFUeP2c.js → journeyDiagram-3NMN7TZE-DmhgEOjX.js} +1 -1
  135. package/dist/client/assets/journeyDiagram-3NMN7TZE-DmhgEOjX.js.br +0 -0
  136. package/dist/client/assets/journeyDiagram-3NMN7TZE-DmhgEOjX.js.gz +0 -0
  137. package/dist/client/assets/{kanban-definition-UXKFOSKX-KEHwljd2.js → kanban-definition-UXKFOSKX-BnZWlxIT.js} +1 -1
  138. package/dist/client/assets/kanban-definition-UXKFOSKX-BnZWlxIT.js.br +0 -0
  139. package/dist/client/assets/kanban-definition-UXKFOSKX-BnZWlxIT.js.gz +0 -0
  140. package/dist/client/assets/{layout-DqYx0MnO.js → layout-BrxPpC7u.js} +1 -1
  141. package/dist/client/assets/layout-BrxPpC7u.js.br +0 -0
  142. package/dist/client/assets/layout-BrxPpC7u.js.gz +0 -0
  143. package/dist/client/assets/{linear-BnG3XaJW.js → linear-DaEpqVcH.js} +1 -1
  144. package/dist/client/assets/linear-DaEpqVcH.js.br +0 -0
  145. package/dist/client/assets/linear-DaEpqVcH.js.gz +0 -0
  146. package/dist/client/assets/{mermaid.core-Ce00rdM6.js → mermaid.core-CidoOS12.js} +5 -5
  147. package/dist/client/assets/mermaid.core-CidoOS12.js.br +0 -0
  148. package/dist/client/assets/mermaid.core-CidoOS12.js.gz +0 -0
  149. package/dist/client/assets/{mindmap-definition-YA3MSWOX-D0hOW4SY.js → mindmap-definition-YA3MSWOX-Bpr3CVLy.js} +1 -1
  150. package/dist/client/assets/mindmap-definition-YA3MSWOX-Bpr3CVLy.js.br +0 -0
  151. package/dist/client/assets/mindmap-definition-YA3MSWOX-Bpr3CVLy.js.gz +0 -0
  152. package/dist/client/assets/passwordBootstrap-D7hFrc0r.js +2 -0
  153. package/dist/client/assets/passwordBootstrap-D7hFrc0r.js.br +0 -0
  154. package/dist/client/assets/passwordBootstrap-D7hFrc0r.js.gz +0 -0
  155. package/dist/client/assets/{pegDiagram-XKGWAZYB-UKp9t91x.js → pegDiagram-XKGWAZYB-Bw2JpSYn.js} +1 -1
  156. package/dist/client/assets/pegDiagram-XKGWAZYB-Bw2JpSYn.js.br +0 -0
  157. package/dist/client/assets/pegDiagram-XKGWAZYB-Bw2JpSYn.js.gz +0 -0
  158. package/dist/client/assets/{pieDiagram-E7YTZNPT-Dif97wbH.js → pieDiagram-E7YTZNPT-BaKc3ifQ.js} +1 -1
  159. package/dist/client/assets/pieDiagram-E7YTZNPT-BaKc3ifQ.js.br +0 -0
  160. package/dist/client/assets/pieDiagram-E7YTZNPT-BaKc3ifQ.js.gz +0 -0
  161. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-BPyHtH91.js → quadrantDiagram-AXDQQJYC-B0Yi-dl9.js} +1 -1
  162. package/dist/client/assets/quadrantDiagram-AXDQQJYC-B0Yi-dl9.js.br +0 -0
  163. package/dist/client/assets/quadrantDiagram-AXDQQJYC-B0Yi-dl9.js.gz +0 -0
  164. package/dist/client/assets/{railroadDiagram-O6MQD6OU-Wleq9LmS.js → railroadDiagram-O6MQD6OU-DCcCQofU.js} +1 -1
  165. package/dist/client/assets/railroadDiagram-O6MQD6OU-DCcCQofU.js.br +0 -0
  166. package/dist/client/assets/railroadDiagram-O6MQD6OU-DCcCQofU.js.gz +0 -0
  167. package/dist/client/assets/{rdpSession-CobFMSUs.js → rdpSession-DY81W5BY.js} +1 -1
  168. package/dist/client/assets/rdpSession-DY81W5BY.js.br +0 -0
  169. package/dist/client/assets/rdpSession-DY81W5BY.js.gz +0 -0
  170. package/dist/client/assets/{referenceLongPress-bZ0xp-v2.js → referenceLongPress-CAzWqXsY.js} +1 -1
  171. package/dist/client/assets/referenceLongPress-CAzWqXsY.js.br +0 -0
  172. package/dist/client/assets/referenceLongPress-CAzWqXsY.js.gz +0 -0
  173. package/dist/client/assets/{requirementDiagram-BXWQKSXE-BL4pp0Ta.js → requirementDiagram-BXWQKSXE-CEJFRPWH.js} +1 -1
  174. package/dist/client/assets/requirementDiagram-BXWQKSXE-CEJFRPWH.js.br +0 -0
  175. package/dist/client/assets/requirementDiagram-BXWQKSXE-CEJFRPWH.js.gz +0 -0
  176. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CV1cKx37.js → sankeyDiagram-P5KCCOFB-B3Wk45FA.js} +1 -1
  177. package/dist/client/assets/sankeyDiagram-P5KCCOFB-B3Wk45FA.js.br +0 -0
  178. package/dist/client/assets/sankeyDiagram-P5KCCOFB-B3Wk45FA.js.gz +0 -0
  179. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BF2InLwV.js → sequenceDiagram-WJ2MYXX4-BejEsITb.js} +1 -1
  180. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BejEsITb.js.br +0 -0
  181. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BejEsITb.js.gz +0 -0
  182. package/dist/client/assets/{sizeCapture-INFHLROL-CldUyStR.js → sizeCapture-INFHLROL-DZ5NJZnM.js} +1 -1
  183. package/dist/client/assets/sizeCapture-INFHLROL-DZ5NJZnM.js.br +0 -0
  184. package/dist/client/assets/sizeCapture-INFHLROL-DZ5NJZnM.js.gz +0 -0
  185. package/dist/client/assets/{sparkles-Cg-yPdE2.js → sparkles-DQGLdN2b.js} +1 -1
  186. package/dist/client/assets/{stateDiagram-D77RDMKH-CByehbEd.js → stateDiagram-D77RDMKH-D8SSEwHa.js} +1 -1
  187. package/dist/client/assets/stateDiagram-D77RDMKH-D8SSEwHa.js.br +0 -0
  188. package/dist/client/assets/stateDiagram-D77RDMKH-D8SSEwHa.js.gz +0 -0
  189. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-D1KQOetv.js +1 -0
  190. package/dist/client/assets/{swimlanes-42K2YHIH--1_7YTL4.js → swimlanes-42K2YHIH-Dow-EKMG.js} +1 -1
  191. package/dist/client/assets/swimlanes-42K2YHIH-Dow-EKMG.js.br +0 -0
  192. package/dist/client/assets/swimlanes-42K2YHIH-Dow-EKMG.js.gz +0 -0
  193. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-DQbZCzq9.js +8 -0
  194. package/dist/client/assets/{timeline-definition-24CTP7MA-CXfXJFK6.js → timeline-definition-24CTP7MA-DpQ9D5f6.js} +1 -1
  195. package/dist/client/assets/timeline-definition-24CTP7MA-DpQ9D5f6.js.br +0 -0
  196. package/dist/client/assets/timeline-definition-24CTP7MA-DpQ9D5f6.js.gz +0 -0
  197. package/dist/client/assets/{triangle-alert-CbMRJ6sx.js → triangle-alert-Bdf_dBch.js} +1 -1
  198. package/dist/client/assets/{vennDiagram-4TSXK5OY-byr6UQpL.js → vennDiagram-4TSXK5OY-DoemAmM2.js} +1 -1
  199. package/dist/client/assets/vennDiagram-4TSXK5OY-DoemAmM2.js.br +0 -0
  200. package/dist/client/assets/vennDiagram-4TSXK5OY-DoemAmM2.js.gz +0 -0
  201. package/dist/client/assets/{videoCompression-ivJAy00d.js → videoCompression-Bg4gUQUf.js} +1 -1
  202. package/dist/client/assets/videoCompression-Bg4gUQUf.js.br +0 -0
  203. package/dist/client/assets/videoCompression-Bg4gUQUf.js.gz +0 -0
  204. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-FJduk-7s.js → wardleyDiagram-VM6X3IG4-MernEZ54.js} +1 -1
  205. package/dist/client/assets/wardleyDiagram-VM6X3IG4-MernEZ54.js.br +0 -0
  206. package/dist/client/assets/wardleyDiagram-VM6X3IG4-MernEZ54.js.gz +0 -0
  207. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-Ct1fBPFS.js → xychartDiagram-S5SC5T6Z-CzO3HEHD.js} +1 -1
  208. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CzO3HEHD.js.br +0 -0
  209. package/dist/client/assets/xychartDiagram-S5SC5T6Z-CzO3HEHD.js.gz +0 -0
  210. package/dist/client/index.html +2 -2
  211. package/dist/client/index.html.br +0 -0
  212. package/dist/client/index.html.gz +0 -0
  213. package/dist/client/sw.js +1 -1
  214. package/dist/client/sw.js.br +0 -0
  215. package/dist/client/sw.js.gz +0 -0
  216. package/dist/server/agent/collaborationCli.js +21 -5
  217. package/dist/server/agent/collaborationStore.js +5 -0
  218. package/dist/server/agent/integrationCli.js +60 -2
  219. package/dist/server/agent/integrationServer.js +22 -2
  220. package/dist/server/agent/integrationSessions.js +250 -19
  221. package/dist/server/agent/integrationStore.js +1 -1
  222. package/dist/server/agent/sessionLifecycle.js +81 -0
  223. package/dist/server/agent/sessionResumeConfiguration.js +32 -0
  224. package/dist/server/architecture/cli.js +295 -0
  225. package/dist/server/architecture/document.js +328 -0
  226. package/dist/server/architecture/documentDiff.js +34 -0
  227. package/dist/server/architecture/fieldMutation.js +52 -0
  228. package/dist/server/architecture/flowchart.js +62 -0
  229. package/dist/server/architecture/mermaidDiff.js +85 -0
  230. package/dist/server/architecture/routes.js +117 -0
  231. package/dist/server/architecture/store.js +502 -0
  232. package/dist/server/cli.js +7 -1
  233. package/dist/server/entry.js +2 -0
  234. package/dist/server/federation/accessPolicy.js +9 -1
  235. package/dist/server/routes/terminal.js +75 -1
  236. package/docs/integrations.md +178 -3
  237. package/package.json +3 -1
  238. package/runtime-manifest.json +4 -4
  239. package/dist/client/assets/App-ggIA_xqR.js.br +0 -0
  240. package/dist/client/assets/App-ggIA_xqR.js.gz +0 -0
  241. package/dist/client/assets/ArchitecturePanel-Cmpmp6FS.css.br +0 -0
  242. package/dist/client/assets/ArchitecturePanel-Cmpmp6FS.css.gz +0 -0
  243. package/dist/client/assets/ArchitecturePanel-CoBspW_C.js +0 -12
  244. package/dist/client/assets/ArchitecturePanel-CoBspW_C.js.br +0 -0
  245. package/dist/client/assets/ArchitecturePanel-CoBspW_C.js.gz +0 -0
  246. package/dist/client/assets/ChangeWalkthroughPanel-D1Puc7B3.js.br +0 -0
  247. package/dist/client/assets/ChangeWalkthroughPanel-D1Puc7B3.js.gz +0 -0
  248. package/dist/client/assets/CollaborationMainWorkspace-BPyK5Xs8.js +0 -1
  249. package/dist/client/assets/CollaborationMainWorkspace-BPyK5Xs8.js.br +0 -0
  250. package/dist/client/assets/CollaborationMainWorkspace-BPyK5Xs8.js.gz +0 -0
  251. package/dist/client/assets/CollaborationTaskContent-CTSJJqze.js +0 -2
  252. package/dist/client/assets/ComputerControlView-D5Lw9sNA.js.br +0 -0
  253. package/dist/client/assets/ComputerControlView-D5Lw9sNA.js.gz +0 -0
  254. package/dist/client/assets/DagPlayground-DYJrGfiG.js.br +0 -0
  255. package/dist/client/assets/DagPlayground-DYJrGfiG.js.gz +0 -0
  256. package/dist/client/assets/DiffLab-5zdcFW3z.js.br +0 -0
  257. package/dist/client/assets/DiffLab-5zdcFW3z.js.gz +0 -0
  258. package/dist/client/assets/DiffReview-BBBC_NjV.js.br +0 -0
  259. package/dist/client/assets/DiffReview-BBBC_NjV.js.gz +0 -0
  260. package/dist/client/assets/DiffReviewLab-CbhosFSB.js.br +0 -0
  261. package/dist/client/assets/DiffReviewLab-CbhosFSB.js.gz +0 -0
  262. package/dist/client/assets/DiffViewer-BuQwFQ4V.js.br +0 -0
  263. package/dist/client/assets/DiffViewer-BuQwFQ4V.js.gz +0 -0
  264. package/dist/client/assets/ModelPreview-nO2VmqdP.js.br +0 -0
  265. package/dist/client/assets/ModelPreview-nO2VmqdP.js.gz +0 -0
  266. package/dist/client/assets/RightSidebar-BoNzpS2K.js +0 -1677
  267. package/dist/client/assets/RightSidebar-BoNzpS2K.js.br +0 -0
  268. package/dist/client/assets/RightSidebar-BoNzpS2K.js.gz +0 -0
  269. package/dist/client/assets/abnfDiagram-VCTEODGH-yi0K8GDG.js.br +0 -0
  270. package/dist/client/assets/abnfDiagram-VCTEODGH-yi0K8GDG.js.gz +0 -0
  271. package/dist/client/assets/app-B6FdOF6K.js.br +0 -0
  272. package/dist/client/assets/app-B6FdOF6K.js.gz +0 -0
  273. package/dist/client/assets/arc-_nLI_-XZ.js.br +0 -0
  274. package/dist/client/assets/arc-_nLI_-XZ.js.gz +0 -0
  275. package/dist/client/assets/architectureDiagram-5GKGNRK7-CikrA78O.js.br +0 -0
  276. package/dist/client/assets/architectureDiagram-5GKGNRK7-CikrA78O.js.gz +0 -0
  277. package/dist/client/assets/blockDiagram-I7D4REHJ-CWJq6qJ7.js.br +0 -0
  278. package/dist/client/assets/blockDiagram-I7D4REHJ-CWJq6qJ7.js.gz +0 -0
  279. package/dist/client/assets/c4Diagram-7LVT6UL2-gzPzLGvs.js.br +0 -0
  280. package/dist/client/assets/c4Diagram-7LVT6UL2-gzPzLGvs.js.gz +0 -0
  281. package/dist/client/assets/channel-BYsFmOmF.js +0 -1
  282. package/dist/client/assets/chunk-F27PBJKO-CQ0LXeap.js.br +0 -0
  283. package/dist/client/assets/chunk-F27PBJKO-CQ0LXeap.js.gz +0 -0
  284. package/dist/client/assets/chunk-IMKFNOWR-CJOEPkK9.js.br +0 -0
  285. package/dist/client/assets/chunk-IMKFNOWR-CJOEPkK9.js.gz +0 -0
  286. package/dist/client/assets/chunk-SVP7TREG-BskkG9gg.js.br +0 -0
  287. package/dist/client/assets/chunk-SVP7TREG-BskkG9gg.js.gz +0 -0
  288. package/dist/client/assets/chunk-TICWLB2K-DyzuP-9I.js.br +0 -0
  289. package/dist/client/assets/chunk-TICWLB2K-DyzuP-9I.js.gz +0 -0
  290. package/dist/client/assets/classDiagram-ZZMXUADV-BnmZv6Ns.js +0 -1
  291. package/dist/client/assets/classDiagram-v2-VYDZK3BY-BnmZv6Ns.js +0 -1
  292. package/dist/client/assets/cose-bilkent-JH36ORCC-Bm-ESDOc.js.br +0 -0
  293. package/dist/client/assets/cose-bilkent-JH36ORCC-Bm-ESDOc.js.gz +0 -0
  294. package/dist/client/assets/cynefin-OW5HDTMX-DbFWAPvX.js.br +0 -0
  295. package/dist/client/assets/cynefin-OW5HDTMX-DbFWAPvX.js.gz +0 -0
  296. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Ca0IKRdH.js.br +0 -0
  297. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Ca0IKRdH.js.gz +0 -0
  298. package/dist/client/assets/dagre-GXQ25YYZ-D_5uEMjJ.js.br +0 -0
  299. package/dist/client/assets/dagre-GXQ25YYZ-D_5uEMjJ.js.gz +0 -0
  300. package/dist/client/assets/diagram-S7CK7UJ4-DWVpndRP.js.br +0 -0
  301. package/dist/client/assets/diagram-S7CK7UJ4-DWVpndRP.js.gz +0 -0
  302. package/dist/client/assets/diagram-UQ7AKVKN-DmYTya3w.js.br +0 -0
  303. package/dist/client/assets/diagram-UQ7AKVKN-DmYTya3w.js.gz +0 -0
  304. package/dist/client/assets/diagram-VSXAHHWV-BEA6kqNj.js.br +0 -0
  305. package/dist/client/assets/diagram-VSXAHHWV-BEA6kqNj.js.gz +0 -0
  306. package/dist/client/assets/diagram-VX7I27RA-CU9vP0P0.js.br +0 -0
  307. package/dist/client/assets/diagram-VX7I27RA-CU9vP0P0.js.gz +0 -0
  308. package/dist/client/assets/diagram-Z3DM3KII-B_GvE2g-.js.br +0 -0
  309. package/dist/client/assets/diagram-Z3DM3KII-B_GvE2g-.js.gz +0 -0
  310. package/dist/client/assets/ebnfDiagram-PWID7BFC-BLrPQuLE.js.br +0 -0
  311. package/dist/client/assets/ebnfDiagram-PWID7BFC-BLrPQuLE.js.gz +0 -0
  312. package/dist/client/assets/erDiagram-RLTQ6QDP-DlXgoyZ-.js.br +0 -0
  313. package/dist/client/assets/erDiagram-RLTQ6QDP-DlXgoyZ-.js.gz +0 -0
  314. package/dist/client/assets/flowDiagram-HODETNUW-fPHWxEDZ.js.br +0 -0
  315. package/dist/client/assets/flowDiagram-HODETNUW-fPHWxEDZ.js.gz +0 -0
  316. package/dist/client/assets/ganttDiagram-EL5Y4UJY-B8MOv6ug.js.br +0 -0
  317. package/dist/client/assets/ganttDiagram-EL5Y4UJY-B8MOv6ug.js.gz +0 -0
  318. package/dist/client/assets/gestureArbiter-JW8vcVRm.js.br +0 -0
  319. package/dist/client/assets/gestureArbiter-JW8vcVRm.js.gz +0 -0
  320. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-lH9gSoFx.js.br +0 -0
  321. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-lH9gSoFx.js.gz +0 -0
  322. package/dist/client/assets/index-CNY7CTVa.css.br +0 -0
  323. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CcwSE5qV.js.br +0 -0
  324. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CcwSE5qV.js.gz +0 -0
  325. package/dist/client/assets/journeyDiagram-3NMN7TZE-CXFUeP2c.js.br +0 -0
  326. package/dist/client/assets/journeyDiagram-3NMN7TZE-CXFUeP2c.js.gz +0 -0
  327. package/dist/client/assets/kanban-definition-UXKFOSKX-KEHwljd2.js.br +0 -0
  328. package/dist/client/assets/kanban-definition-UXKFOSKX-KEHwljd2.js.gz +0 -0
  329. package/dist/client/assets/layout-DqYx0MnO.js.br +0 -0
  330. package/dist/client/assets/layout-DqYx0MnO.js.gz +0 -0
  331. package/dist/client/assets/linear-BnG3XaJW.js.br +0 -0
  332. package/dist/client/assets/linear-BnG3XaJW.js.gz +0 -0
  333. package/dist/client/assets/mermaid.core-Ce00rdM6.js.br +0 -0
  334. package/dist/client/assets/mermaid.core-Ce00rdM6.js.gz +0 -0
  335. package/dist/client/assets/mindmap-definition-YA3MSWOX-D0hOW4SY.js.br +0 -0
  336. package/dist/client/assets/mindmap-definition-YA3MSWOX-D0hOW4SY.js.gz +0 -0
  337. package/dist/client/assets/passwordBootstrap-Bncb8qF_.js +0 -2
  338. package/dist/client/assets/passwordBootstrap-Bncb8qF_.js.br +0 -0
  339. package/dist/client/assets/passwordBootstrap-Bncb8qF_.js.gz +0 -0
  340. package/dist/client/assets/pegDiagram-XKGWAZYB-UKp9t91x.js.br +0 -0
  341. package/dist/client/assets/pegDiagram-XKGWAZYB-UKp9t91x.js.gz +0 -0
  342. package/dist/client/assets/pieDiagram-E7YTZNPT-Dif97wbH.js.br +0 -0
  343. package/dist/client/assets/pieDiagram-E7YTZNPT-Dif97wbH.js.gz +0 -0
  344. package/dist/client/assets/quadrantDiagram-AXDQQJYC-BPyHtH91.js.br +0 -0
  345. package/dist/client/assets/quadrantDiagram-AXDQQJYC-BPyHtH91.js.gz +0 -0
  346. package/dist/client/assets/railroadDiagram-O6MQD6OU-Wleq9LmS.js.br +0 -0
  347. package/dist/client/assets/railroadDiagram-O6MQD6OU-Wleq9LmS.js.gz +0 -0
  348. package/dist/client/assets/rdpSession-CobFMSUs.js.br +0 -0
  349. package/dist/client/assets/rdpSession-CobFMSUs.js.gz +0 -0
  350. package/dist/client/assets/referenceLongPress-bZ0xp-v2.js.br +0 -0
  351. package/dist/client/assets/referenceLongPress-bZ0xp-v2.js.gz +0 -0
  352. package/dist/client/assets/requirementDiagram-BXWQKSXE-BL4pp0Ta.js.br +0 -0
  353. package/dist/client/assets/requirementDiagram-BXWQKSXE-BL4pp0Ta.js.gz +0 -0
  354. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CV1cKx37.js.br +0 -0
  355. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CV1cKx37.js.gz +0 -0
  356. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BF2InLwV.js.br +0 -0
  357. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BF2InLwV.js.gz +0 -0
  358. package/dist/client/assets/sizeCapture-INFHLROL-CldUyStR.js.br +0 -0
  359. package/dist/client/assets/sizeCapture-INFHLROL-CldUyStR.js.gz +0 -0
  360. package/dist/client/assets/stateDiagram-D77RDMKH-CByehbEd.js.br +0 -0
  361. package/dist/client/assets/stateDiagram-D77RDMKH-CByehbEd.js.gz +0 -0
  362. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CTcrJ-w0.js +0 -1
  363. package/dist/client/assets/swimlanes-42K2YHIH--1_7YTL4.js.br +0 -0
  364. package/dist/client/assets/swimlanes-42K2YHIH--1_7YTL4.js.gz +0 -0
  365. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-RSMV9AhO.js +0 -8
  366. package/dist/client/assets/timeline-definition-24CTP7MA-CXfXJFK6.js.br +0 -0
  367. package/dist/client/assets/timeline-definition-24CTP7MA-CXfXJFK6.js.gz +0 -0
  368. package/dist/client/assets/vennDiagram-4TSXK5OY-byr6UQpL.js.br +0 -0
  369. package/dist/client/assets/vennDiagram-4TSXK5OY-byr6UQpL.js.gz +0 -0
  370. package/dist/client/assets/videoCompression-ivJAy00d.js.br +0 -0
  371. package/dist/client/assets/videoCompression-ivJAy00d.js.gz +0 -0
  372. package/dist/client/assets/wardleyDiagram-VM6X3IG4-FJduk-7s.js.br +0 -0
  373. package/dist/client/assets/wardleyDiagram-VM6X3IG4-FJduk-7s.js.gz +0 -0
  374. package/dist/client/assets/xychartDiagram-S5SC5T6Z-Ct1fBPFS.js.br +0 -0
  375. package/dist/client/assets/xychartDiagram-S5SC5T6Z-Ct1fBPFS.js.gz +0 -0
@@ -0,0 +1,32 @@
1
+ import fs from 'node:fs';
2
+ import { createHash } from 'node:crypto';
3
+ import { CollaborationError } from './collaborationProtocol.js';
4
+ const fail = (code, message) => { throw new CollaborationError(code, message, 409); };
5
+ /** Fingerprint only the launcher file and recovery semantics. This does not
6
+ * claim to fingerprint its dependencies, private Agent binaries, or history. */
7
+ export async function resumeConfigurationFingerprint(record, adapter) {
8
+ const semantics = await adapter.resumeConfiguration?.(record);
9
+ if (semantics === undefined)
10
+ fail('EXACT_RESUME_UNSUPPORTED', 'Adapter does not expose exact recovery semantics');
11
+ try {
12
+ const executable = fs.realpathSync(record.profile.executable);
13
+ const before = fs.statSync(executable);
14
+ if (!before.isFile() || before.size > 512 * 1024 * 1024)
15
+ fail('LAUNCHER_UNAVAILABLE', 'Launcher must be a regular file within the fingerprint size limit');
16
+ fs.accessSync(executable, fs.constants.X_OK);
17
+ const hash = createHash('sha256');
18
+ for await (const chunk of fs.createReadStream(executable))
19
+ hash.update(chunk);
20
+ const after = fs.statSync(executable);
21
+ if (before.dev !== after.dev || before.ino !== after.ino || before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs
22
+ || fs.realpathSync(record.profile.executable) !== executable)
23
+ fail('RESUME_CONFIGURATION_CHANGED', 'Launcher changed while fingerprinting');
24
+ return createHash('sha256').update(JSON.stringify({ version: 1, executable, content: hash.digest('hex'),
25
+ agent: record.agent_slug, argv: record.profile.argv, resumeArgv: record.profile.resumeArgv, cwd: record.cwd, semantics })).digest('hex');
26
+ }
27
+ catch (error) {
28
+ if (error instanceof CollaborationError)
29
+ throw error;
30
+ return fail('LAUNCHER_UNAVAILABLE', 'Recovery launcher could not be read and verified');
31
+ }
32
+ }
@@ -0,0 +1,295 @@
1
+ import fs from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ import { createHash } from 'node:crypto';
4
+ import { updateArchitectureField } from './fieldMutation.js';
5
+ import { ARCHITECTURE_FIELDS, ARCHITECTURE_FILE, analysisFile, architectureSourceDiagram, buildArchitecturePrompt, buildOmmScanPrompt, parseArchitecture } from './document.js';
6
+ import { ArchitectureStore } from './store.js';
7
+ import { parseFlowchart } from './flowchart.js';
8
+ import { diffMermaid } from './mermaidDiff.js';
9
+ import { diffArchitecture } from './documentDiff.js';
10
+ export const ARCHITECTURE_HELP = `Termdock architecture — recursive code architecture documents
11
+ Usage: td architecture <command> [--project <directory>] [--file <map.json>] [--format native|omm]
12
+ prompt [--language en|zh] Print the recursive analysis instructions
13
+ setup [claude|codex|cursor|openclaw|antigravity] [--teardown]
14
+ init | list | status Initialize or inspect project maps
15
+ tree [perspective/element] Browse the recursive document tree
16
+ read <element> <field> Read a field
17
+ write <element> <field> <text|-> Write a field (stdin with -)
18
+ show <element> Read all fields and metadata
19
+ delete <element> Delete that element and descendants
20
+ save <json|-> Validate and atomically save a native map, retaining history
21
+ validate [element] Check diagrams, documents and references
22
+ refs <element> Show incoming/outgoing and cross-perspective references
23
+ diff [element] | history Show changes and previous versions
24
+ config language [en|zh|...] Read/write the .omm content language
25
+ export [--format omm] Export native JSON or a portable .omm file bundle
26
+ import <json|-> Import a native map or a .omm file bundle
27
+ view Print the native Termdock viewer link
28
+ Fields: description, diagram, context, constraint, concern, todo, note.
29
+ Examples: td architecture prompt --project .
30
+ td architecture write --format omm overall-architecture/auth description -
31
+ td architecture save --file .termdock/architecture.json -`;
32
+ function target(document, element) {
33
+ const [perspective, ...parts] = element.split('/');
34
+ const view = document.perspectives.find(view => view.id === perspective);
35
+ if (!view)
36
+ throw new Error(`Perspective not found: ${perspective}`);
37
+ let node;
38
+ for (const [index, part] of parts.entries()) {
39
+ const id = document.origin === 'omm' ? `e_${createHash('sha256').update([perspective, ...parts.slice(0, index + 1)].join('/')).digest('hex').slice(0, 20)}` : part;
40
+ const next = view.nodes.find(item => item.id === id && item.parentId === node?.id);
41
+ if (!next)
42
+ throw new Error(`Element not found: ${element}`);
43
+ node = next;
44
+ }
45
+ return { view, node, value: node ?? view };
46
+ }
47
+ export async function runArchitectureCli(args, io = { write: value => process.stdout.write(`${value}\n`), stdin: async () => { let text = ''; for await (const chunk of process.stdin) {
48
+ text += String(chunk);
49
+ if (text.length > 5_000_000)
50
+ throw new Error('Input exceeds the architecture limit');
51
+ } return text; } }) {
52
+ try {
53
+ const positional = [], options = {};
54
+ for (let index = 0; index < args.length; index++) {
55
+ const arg = args[index];
56
+ if (['--project', '--file', '--format', '--language'].includes(arg)) {
57
+ if (!args[index + 1] || args[index + 1].startsWith('--'))
58
+ throw new Error(`Missing value for ${arg}`);
59
+ options[arg.slice(2)] = args[++index];
60
+ }
61
+ else if (['--teardown', '--list', '--help'].includes(arg))
62
+ options[arg.slice(2)] = 'true';
63
+ else if (arg.startsWith('--'))
64
+ throw new Error(`Unknown option: ${arg}`);
65
+ else
66
+ positional.push(arg);
67
+ }
68
+ const [command = 'help', element, field, ...content] = positional;
69
+ if (command === 'help' || options.help) {
70
+ io.write(ARCHITECTURE_HELP);
71
+ return 0;
72
+ }
73
+ const root = await fs.realpath(path.resolve(options.project ?? process.cwd()));
74
+ if (!(await fs.stat(root)).isDirectory())
75
+ throw new Error('Project root must be a directory');
76
+ const store = new ArchitectureStore(root);
77
+ const omm = options.format === 'omm' || options.file === '.omm';
78
+ if (options.format && !['native', 'omm'].includes(options.format))
79
+ throw new Error('Format must be native or omm');
80
+ const file = options.file ?? (omm ? '.omm' : ARCHITECTURE_FILE);
81
+ const input = async (values) => values[0] === '-' ? io.stdin() : values.join(' ');
82
+ const json = (value) => io.write(JSON.stringify(value, null, 2));
83
+ if (command === 'prompt' || command === 'scan') {
84
+ io.write(omm ? buildOmmScanPrompt(root, options.language === 'zh' ? 'zh' : 'en') : buildArchitecturePrompt(root, options.language === 'zh' ? 'zh' : 'en'));
85
+ return 0;
86
+ }
87
+ if (command === 'setup') {
88
+ const platforms = { claude: '.claude/skills', codex: '.agents/skills', cursor: '.cursor/skills', openclaw: '.openclaw/skills', antigravity: '.agent/skills' };
89
+ if (options.list) {
90
+ json(Object.keys(platforms));
91
+ return 0;
92
+ }
93
+ const selected = element ? [element] : Object.keys(platforms);
94
+ if (selected.some(platform => !platforms[platform]))
95
+ throw new Error('Unknown AI platform');
96
+ const marker = '<!-- Termdock architecture skill -->';
97
+ for (const platform of selected) {
98
+ const relative = `${platforms[platform]}/termdock-architecture/SKILL.md`, destination = await store.bounded(relative, true);
99
+ let existing = '';
100
+ try {
101
+ existing = await fs.readFile(destination, 'utf8');
102
+ }
103
+ catch (error) {
104
+ if (error.code !== 'ENOENT')
105
+ throw error;
106
+ }
107
+ if (existing && !existing.includes(marker))
108
+ throw new Error(`Refusing to overwrite an unrelated skill: ${relative}`);
109
+ if (options.teardown) {
110
+ if (existing.includes(marker))
111
+ await fs.unlink(destination);
112
+ io.write(`Removed ${relative}`);
113
+ continue;
114
+ }
115
+ const prompt = omm ? buildOmmScanPrompt(root, options.language === 'zh' ? 'zh' : 'en') : buildArchitecturePrompt(root, options.language === 'zh' ? 'zh' : 'en');
116
+ await fs.writeFile(destination, `---\nname: termdock-architecture\ndescription: Recursively analyze or update this project's Termdock code architecture.\n---\n${marker}\n\n${prompt}\n`, { mode: 0o600 });
117
+ io.write(`Installed ${relative}`);
118
+ }
119
+ return 0;
120
+ }
121
+ if (command === 'config') {
122
+ if (element !== 'language')
123
+ throw new Error('Use config language [code]');
124
+ json(await store.config(field));
125
+ return 0;
126
+ }
127
+ if (command === 'init') {
128
+ await store.config();
129
+ if (omm)
130
+ await store.config(options.language ?? 'en');
131
+ io.write('Ready. Use td architecture prompt, or Generate in the Architecture panel.');
132
+ return 0;
133
+ }
134
+ if (command === 'list') {
135
+ json(await store.list());
136
+ return 0;
137
+ }
138
+ if (command === 'save' || command === 'import') {
139
+ const raw = await input(positional.slice(1));
140
+ if (!raw)
141
+ throw new Error('Supply JSON or - for stdin');
142
+ const value = JSON.parse(raw);
143
+ if (value?.format === 'termdock-omm-bundle') {
144
+ await store.importOmmBundle(value);
145
+ json(await store.read('.omm'));
146
+ }
147
+ else {
148
+ const document = parseArchitecture(raw);
149
+ json(await store.save(options.file ?? (document.analysis ? analysisFile(document.analysis) : ARCHITECTURE_FILE), document));
150
+ }
151
+ return 0;
152
+ }
153
+ if (command === 'export' && omm) {
154
+ const source = options.file && options.file !== '.omm' ? (await store.read(options.file)).document : undefined;
155
+ if (source === null)
156
+ throw new Error('Architecture not found');
157
+ json(await store.exportOmmBundle(source));
158
+ return 0;
159
+ }
160
+ if (command === 'delete' && omm) {
161
+ if (!element)
162
+ throw new Error('Supply an element path');
163
+ await store.deleteOmmElement(element);
164
+ io.write(`Deleted ${element}`);
165
+ return 0;
166
+ }
167
+ if (command === 'write' && omm) {
168
+ if (!element || !ARCHITECTURE_FIELDS.includes(field))
169
+ throw new Error('Supply an element and valid field');
170
+ await store.writeOmmField(element, field, await input(content));
171
+ io.write(`Updated ${element}/${field}`);
172
+ return 0;
173
+ }
174
+ const loaded = await store.read(file), document = loaded.document;
175
+ if (!document)
176
+ throw new Error('No saved architecture. Generate one first, or select --format omm.');
177
+ if (command === 'export') {
178
+ json(document);
179
+ return 0;
180
+ }
181
+ if (command === 'status') {
182
+ json({ file, generatedAt: document.generatedAt, meta: document.meta, perspectives: document.perspectives.map(view => ({ id: view.id, nodes: view.nodes.length, edges: view.edges.length })) });
183
+ return 0;
184
+ }
185
+ if (command === 'history') {
186
+ json(await store.history(file));
187
+ return 0;
188
+ }
189
+ if (command === 'tree' && document.origin === 'omm') {
190
+ for (const entry of await store.ommElements())
191
+ if (!element || entry === element || entry.startsWith(`${element}/`))
192
+ io.write(`${' '.repeat(entry.split('/').length - 1)}${entry.split('/').pop()}`);
193
+ return 0;
194
+ }
195
+ if (command === 'tree') {
196
+ const views = element ? [target(document, element).view] : document.perspectives;
197
+ for (const view of views) {
198
+ io.write(view.id);
199
+ const walk = (parent, prefix) => { for (const node of view.nodes.filter(node => node.parentId === parent)) {
200
+ io.write(`${prefix}${node.id} — ${node.title}`);
201
+ walk(node.id, `${prefix} `);
202
+ } };
203
+ walk(element ? target(document, element).node?.id : undefined, ' ');
204
+ }
205
+ return 0;
206
+ }
207
+ if (command === 'validate') {
208
+ const issues = [];
209
+ for (const view of document.perspectives) {
210
+ for (const item of [view, ...view.nodes]) {
211
+ const key = `${view.id}${item === view ? '' : `/${item.id}`}`;
212
+ if (element && !key.startsWith(element))
213
+ continue;
214
+ if (!item.description && !item.summary)
215
+ issues.push({ element: key, message: 'Missing description' });
216
+ if (item.diagram) {
217
+ const diagram = parseFlowchart(item.diagram);
218
+ for (const issue of diagram.issues)
219
+ issues.push({ element: key, message: issue });
220
+ for (const node of diagram.nodes)
221
+ if (node.ref && (!document.perspectives.some(other => other.id === node.ref) || node.ref === view.id))
222
+ issues.push({ element: key, message: `Unresolved or self-referencing perspective: ${node.ref}` });
223
+ }
224
+ }
225
+ }
226
+ json({ valid: !issues.length, issues });
227
+ return issues.length ? 1 : 0;
228
+ }
229
+ if (command === 'diff' && !element) {
230
+ json(await store.history(file));
231
+ return 0;
232
+ }
233
+ if (command === 'view') {
234
+ io.write(`Open Termdock → this project → Architecture, or https://localhost:9834/?architecture=${encodeURIComponent(JSON.stringify({ root, file }))}`);
235
+ return 0;
236
+ }
237
+ if (!element)
238
+ throw new Error('Element path is required');
239
+ const selected = target(document, element);
240
+ if (command === 'delete') {
241
+ const removed = new Set();
242
+ if (!selected.node)
243
+ document.perspectives = document.perspectives.filter(view => view.id !== selected.view.id);
244
+ else {
245
+ removed.add(selected.node.id);
246
+ for (let index = 0; index < selected.view.nodes.length; index++)
247
+ for (const node of selected.view.nodes)
248
+ if (node.parentId && removed.has(node.parentId))
249
+ removed.add(node.id);
250
+ selected.view.nodes = selected.view.nodes.filter(node => !removed.has(node.id));
251
+ selected.view.edges = selected.view.edges.filter(edge => !removed.has(edge.from) && !removed.has(edge.to));
252
+ }
253
+ // Validation refuses dangling references and an empty document.
254
+ await store.save(file, document, loaded.revision);
255
+ io.write(`Deleted ${element}`);
256
+ return 0;
257
+ }
258
+ if (command === 'show') {
259
+ json(selected.value);
260
+ return 0;
261
+ }
262
+ if (command === 'read') {
263
+ if (!ARCHITECTURE_FIELDS.includes(field))
264
+ throw new Error('Invalid field');
265
+ io.write(selected.value[field] ?? (field === 'description' ? selected.value.summary : field === 'diagram' ? architectureSourceDiagram(selected.view, selected.node?.id) : ''));
266
+ return 0;
267
+ }
268
+ if (command === 'write') {
269
+ if (!ARCHITECTURE_FIELDS.includes(field))
270
+ throw new Error('Invalid field');
271
+ const updated = updateArchitectureField(document, selected.view.id, selected.node?.id, field, await input(content));
272
+ await store.save(file, updated, loaded.revision);
273
+ io.write(`Updated ${element}/${field}`);
274
+ return 0;
275
+ }
276
+ if (command === 'refs') {
277
+ json({ outgoing: selected.node?.references ?? [], incoming: document.perspectives.flatMap(view => view.nodes.filter(node => node.references?.some(ref => ref.perspective === selected.view.id && (!ref.node || ref.node === selected.node?.id))).map(node => ({ perspective: view.id, node: node.id }))), connections: selected.node ? selected.view.edges.filter(edge => edge.from === selected.node.id || edge.to === selected.node.id) : selected.view.edges });
278
+ return 0;
279
+ }
280
+ if (command === 'diff') {
281
+ if (selected.value.meta?.previousDiagram && selected.value.diagram)
282
+ json(diffMermaid(selected.value.meta.previousDiagram, selected.value.diagram));
283
+ else {
284
+ const versions = await store.history(file);
285
+ json(versions[0] ? diffArchitecture(await store.historical(file, versions[0].id), document).filter(change => change.perspective === selected.view.id && (!selected.node || change.node === selected.node.id)) : []);
286
+ }
287
+ return 0;
288
+ }
289
+ throw new Error(`Unknown architecture command: ${command}`);
290
+ }
291
+ catch (error) {
292
+ io.write(`Error: ${error instanceof Error ? error.message : String(error)}`);
293
+ return 1;
294
+ }
295
+ }