termdock 1.4.321 → 1.4.322

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 (347) hide show
  1. package/dist/client/assets/{App-VAvoVlm2.js → App-DEKo4SNL.js} +67 -67
  2. package/dist/client/assets/App-DEKo4SNL.js.br +0 -0
  3. package/dist/client/assets/App-DEKo4SNL.js.gz +0 -0
  4. package/dist/client/assets/{ArchitecturePanel-BIlIOGx7.js → ArchitecturePanel-VDM6hrwp.js} +2 -2
  5. package/dist/client/assets/ArchitecturePanel-VDM6hrwp.js.br +0 -0
  6. package/dist/client/assets/ArchitecturePanel-VDM6hrwp.js.gz +0 -0
  7. package/dist/client/assets/{ChangeWalkthroughPanel-BtXqyUzD.js → ChangeWalkthroughPanel-B64j3i8o.js} +1 -1
  8. package/dist/client/assets/ChangeWalkthroughPanel-B64j3i8o.js.br +0 -0
  9. package/dist/client/assets/ChangeWalkthroughPanel-B64j3i8o.js.gz +0 -0
  10. package/dist/client/assets/{CollaborationMainWorkspace-DUw3cqW-.js → CollaborationMainWorkspace-DG8TQNqo.js} +1 -1
  11. package/dist/client/assets/CollaborationMainWorkspace-DG8TQNqo.js.br +0 -0
  12. package/dist/client/assets/CollaborationMainWorkspace-DG8TQNqo.js.gz +0 -0
  13. package/dist/client/assets/CollaborationTaskContent-msQsgVaI.js +2 -0
  14. package/dist/client/assets/{ComputerControlView-D81udDZO.js → ComputerControlView-Co-TTYas.js} +2 -2
  15. package/dist/client/assets/ComputerControlView-Co-TTYas.js.br +0 -0
  16. package/dist/client/assets/ComputerControlView-Co-TTYas.js.gz +0 -0
  17. package/dist/client/assets/{DagPlayground-B3hTlIFu.js → DagPlayground-kJczdJ6J.js} +1 -1
  18. package/dist/client/assets/DagPlayground-kJczdJ6J.js.br +0 -0
  19. package/dist/client/assets/DagPlayground-kJczdJ6J.js.gz +0 -0
  20. package/dist/client/assets/{DiffLab-C5sDPAZ5.js → DiffLab-BaaioC-q.js} +1 -1
  21. package/dist/client/assets/DiffLab-BaaioC-q.js.br +0 -0
  22. package/dist/client/assets/DiffLab-BaaioC-q.js.gz +0 -0
  23. package/dist/client/assets/{DiffReview-DQFgOJPF.js → DiffReview-Wfck3RIS.js} +1 -1
  24. package/dist/client/assets/DiffReview-Wfck3RIS.js.br +0 -0
  25. package/dist/client/assets/DiffReview-Wfck3RIS.js.gz +0 -0
  26. package/dist/client/assets/{DiffReviewLab-CZvBmujD.js → DiffReviewLab-Dblr3wgw.js} +1 -1
  27. package/dist/client/assets/DiffReviewLab-Dblr3wgw.js.br +0 -0
  28. package/dist/client/assets/DiffReviewLab-Dblr3wgw.js.gz +0 -0
  29. package/dist/client/assets/{DiffViewer-DOvGC9bh.js → DiffViewer-C-utC5Ga.js} +1 -1
  30. package/dist/client/assets/DiffViewer-C-utC5Ga.js.br +0 -0
  31. package/dist/client/assets/DiffViewer-C-utC5Ga.js.gz +0 -0
  32. package/dist/client/assets/{ModelPreview-ClKH4BQ7.js → ModelPreview-BBLnHWVQ.js} +1 -1
  33. package/dist/client/assets/ModelPreview-BBLnHWVQ.js.br +0 -0
  34. package/dist/client/assets/ModelPreview-BBLnHWVQ.js.gz +0 -0
  35. package/dist/client/assets/{RightSidebar-BeegDfBO.js → RightSidebar-CUHSFkmZ.js} +3 -3
  36. package/dist/client/assets/RightSidebar-CUHSFkmZ.js.br +0 -0
  37. package/dist/client/assets/RightSidebar-CUHSFkmZ.js.gz +0 -0
  38. package/dist/client/assets/{abnfDiagram-VCTEODGH-CHUZIHQo.js → abnfDiagram-VCTEODGH-DDd99QpA.js} +1 -1
  39. package/dist/client/assets/abnfDiagram-VCTEODGH-DDd99QpA.js.br +0 -0
  40. package/dist/client/assets/abnfDiagram-VCTEODGH-DDd99QpA.js.gz +0 -0
  41. package/dist/client/assets/{app-Bj0N393t.js → app-CfqF7_nh.js} +3 -3
  42. package/dist/client/assets/app-CfqF7_nh.js.br +0 -0
  43. package/dist/client/assets/app-CfqF7_nh.js.gz +0 -0
  44. package/dist/client/assets/{arc-CIJEXYV7.js → arc-C3dck_E0.js} +1 -1
  45. package/dist/client/assets/arc-C3dck_E0.js.br +0 -0
  46. package/dist/client/assets/arc-C3dck_E0.js.gz +0 -0
  47. package/dist/client/assets/{architectureDiagram-5GKGNRK7-CcX1UBXG.js → architectureDiagram-5GKGNRK7-C3bCQc2w.js} +1 -1
  48. package/dist/client/assets/architectureDiagram-5GKGNRK7-C3bCQc2w.js.br +0 -0
  49. package/dist/client/assets/architectureDiagram-5GKGNRK7-C3bCQc2w.js.gz +0 -0
  50. package/dist/client/assets/{blockDiagram-I7D4REHJ-gDLrIBDk.js → blockDiagram-I7D4REHJ-znMn6iCQ.js} +1 -1
  51. package/dist/client/assets/blockDiagram-I7D4REHJ-znMn6iCQ.js.br +0 -0
  52. package/dist/client/assets/blockDiagram-I7D4REHJ-znMn6iCQ.js.gz +0 -0
  53. package/dist/client/assets/{c4Diagram-7LVT6UL2-BQA7WLEL.js → c4Diagram-7LVT6UL2-C0sopIsj.js} +1 -1
  54. package/dist/client/assets/c4Diagram-7LVT6UL2-C0sopIsj.js.br +0 -0
  55. package/dist/client/assets/c4Diagram-7LVT6UL2-C0sopIsj.js.gz +0 -0
  56. package/dist/client/assets/channel-CMC8t83j.js +1 -0
  57. package/dist/client/assets/{chunk-2Q5K7J3B-CPCY618J.js → chunk-2Q5K7J3B-f7USyccJ.js} +1 -1
  58. package/dist/client/assets/{chunk-5VM5RSS4-Cc3Czx6A.js → chunk-5VM5RSS4-Ck2xirDs.js} +1 -1
  59. package/dist/client/assets/{chunk-F27PBJKO-3scxqZTK.js → chunk-F27PBJKO-DaDCIj30.js} +1 -1
  60. package/dist/client/assets/chunk-F27PBJKO-DaDCIj30.js.br +0 -0
  61. package/dist/client/assets/chunk-F27PBJKO-DaDCIj30.js.gz +0 -0
  62. package/dist/client/assets/{chunk-IMKFNOWR-BOCOE1VY.js → chunk-IMKFNOWR-DEC_On5x.js} +1 -1
  63. package/dist/client/assets/chunk-IMKFNOWR-DEC_On5x.js.br +0 -0
  64. package/dist/client/assets/chunk-IMKFNOWR-DEC_On5x.js.gz +0 -0
  65. package/dist/client/assets/{chunk-JWPE2WC7-DX2Onu68.js → chunk-JWPE2WC7-BrswC3n2.js} +1 -1
  66. package/dist/client/assets/{chunk-POPQ4Y6H-C4MN3QRd.js → chunk-POPQ4Y6H-ClMbDV47.js} +1 -1
  67. package/dist/client/assets/{chunk-SVP7TREG-DOKo3BNt.js → chunk-SVP7TREG-D7_1VwC5.js} +1 -1
  68. package/dist/client/assets/chunk-SVP7TREG-D7_1VwC5.js.br +0 -0
  69. package/dist/client/assets/chunk-SVP7TREG-D7_1VwC5.js.gz +0 -0
  70. package/dist/client/assets/{chunk-TICWLB2K-CPpFFmO9.js → chunk-TICWLB2K-D5jzVTZ8.js} +1 -1
  71. package/dist/client/assets/chunk-TICWLB2K-D5jzVTZ8.js.br +0 -0
  72. package/dist/client/assets/chunk-TICWLB2K-D5jzVTZ8.js.gz +0 -0
  73. package/dist/client/assets/{chunk-XXDRQBXY-Zp_XOFU2.js → chunk-XXDRQBXY-DOhaoLcX.js} +1 -1
  74. package/dist/client/assets/classDiagram-ZZMXUADV-ElMHzA-E.js +1 -0
  75. package/dist/client/assets/classDiagram-v2-VYDZK3BY-ElMHzA-E.js +1 -0
  76. package/dist/client/assets/{cose-bilkent-JH36ORCC-iYXdWZMG.js → cose-bilkent-JH36ORCC-DOsaKgiX.js} +1 -1
  77. package/dist/client/assets/cose-bilkent-JH36ORCC-DOsaKgiX.js.br +0 -0
  78. package/dist/client/assets/cose-bilkent-JH36ORCC-DOsaKgiX.js.gz +0 -0
  79. package/dist/client/assets/{cynefin-OW5HDTMX-CXRpxmcA.js → cynefin-OW5HDTMX-CMcLh_wh.js} +1 -1
  80. package/dist/client/assets/cynefin-OW5HDTMX-CMcLh_wh.js.br +0 -0
  81. package/dist/client/assets/cynefin-OW5HDTMX-CMcLh_wh.js.gz +0 -0
  82. package/dist/client/assets/{cynefinDiagram-5FMLGOSQ-CH1TQhgO.js → cynefinDiagram-5FMLGOSQ-Dd8bfq9V.js} +1 -1
  83. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Dd8bfq9V.js.br +0 -0
  84. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-Dd8bfq9V.js.gz +0 -0
  85. package/dist/client/assets/{dagre-GXQ25YYZ-BdshuKJr.js → dagre-GXQ25YYZ-BlW7fAi0.js} +1 -1
  86. package/dist/client/assets/dagre-GXQ25YYZ-BlW7fAi0.js.br +0 -0
  87. package/dist/client/assets/dagre-GXQ25YYZ-BlW7fAi0.js.gz +0 -0
  88. package/dist/client/assets/{diagram-S7CK7UJ4-VbNBimIR.js → diagram-S7CK7UJ4-B0-tKahG.js} +1 -1
  89. package/dist/client/assets/diagram-S7CK7UJ4-B0-tKahG.js.br +0 -0
  90. package/dist/client/assets/diagram-S7CK7UJ4-B0-tKahG.js.gz +0 -0
  91. package/dist/client/assets/{diagram-UQ7AKVKN-D_NUFcq3.js → diagram-UQ7AKVKN-BQumj4Dw.js} +1 -1
  92. package/dist/client/assets/diagram-UQ7AKVKN-BQumj4Dw.js.br +0 -0
  93. package/dist/client/assets/diagram-UQ7AKVKN-BQumj4Dw.js.gz +0 -0
  94. package/dist/client/assets/{diagram-VSXAHHWV-CfYRQ4mq.js → diagram-VSXAHHWV-Zx_FLmPP.js} +1 -1
  95. package/dist/client/assets/diagram-VSXAHHWV-Zx_FLmPP.js.br +0 -0
  96. package/dist/client/assets/diagram-VSXAHHWV-Zx_FLmPP.js.gz +0 -0
  97. package/dist/client/assets/{diagram-VX7I27RA-YHy6vMjY.js → diagram-VX7I27RA-CEZvatNH.js} +1 -1
  98. package/dist/client/assets/diagram-VX7I27RA-CEZvatNH.js.br +0 -0
  99. package/dist/client/assets/diagram-VX7I27RA-CEZvatNH.js.gz +0 -0
  100. package/dist/client/assets/{diagram-Z3DM3KII-DvHqYL0O.js → diagram-Z3DM3KII-CJ9IEQ8j.js} +1 -1
  101. package/dist/client/assets/diagram-Z3DM3KII-CJ9IEQ8j.js.br +0 -0
  102. package/dist/client/assets/diagram-Z3DM3KII-CJ9IEQ8j.js.gz +0 -0
  103. package/dist/client/assets/{ebnfDiagram-PWID7BFC-Bl9bDxAP.js → ebnfDiagram-PWID7BFC-sQQMv3ea.js} +1 -1
  104. package/dist/client/assets/ebnfDiagram-PWID7BFC-sQQMv3ea.js.br +0 -0
  105. package/dist/client/assets/ebnfDiagram-PWID7BFC-sQQMv3ea.js.gz +0 -0
  106. package/dist/client/assets/{erDiagram-RLTQ6QDP-DauNoBZZ.js → erDiagram-RLTQ6QDP-D3rMpj7M.js} +1 -1
  107. package/dist/client/assets/erDiagram-RLTQ6QDP-D3rMpj7M.js.br +0 -0
  108. package/dist/client/assets/erDiagram-RLTQ6QDP-D3rMpj7M.js.gz +0 -0
  109. package/dist/client/assets/{flowDiagram-HODETNUW-D6eDWfJY.js → flowDiagram-HODETNUW-B6QZiE0-.js} +1 -1
  110. package/dist/client/assets/flowDiagram-HODETNUW-B6QZiE0-.js.br +0 -0
  111. package/dist/client/assets/flowDiagram-HODETNUW-B6QZiE0-.js.gz +0 -0
  112. package/dist/client/assets/{ganttDiagram-EL5Y4UJY-CWHSwTR6.js → ganttDiagram-EL5Y4UJY-Bw9bltcu.js} +1 -1
  113. package/dist/client/assets/ganttDiagram-EL5Y4UJY-Bw9bltcu.js.br +0 -0
  114. package/dist/client/assets/ganttDiagram-EL5Y4UJY-Bw9bltcu.js.gz +0 -0
  115. package/dist/client/assets/{gestureArbiter-nU4jhK3S.js → gestureArbiter-Cczz34oI.js} +1 -1
  116. package/dist/client/assets/gestureArbiter-Cczz34oI.js.br +0 -0
  117. package/dist/client/assets/{gestureArbiter-nU4jhK3S.js.gz → gestureArbiter-Cczz34oI.js.gz} +0 -0
  118. package/dist/client/assets/{gitGraphDiagram-WWUBYQGX-BHYt5-_X.js → gitGraphDiagram-WWUBYQGX-mdnkxjeD.js} +1 -1
  119. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-mdnkxjeD.js.br +0 -0
  120. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-mdnkxjeD.js.gz +0 -0
  121. package/dist/client/assets/{infoDiagram-27XIBGKW-DPmlcUaZ.js → infoDiagram-27XIBGKW-DyrPP3Yf.js} +1 -1
  122. package/dist/client/assets/{ishikawaDiagram-5VMMS53U-DAn65XKZ.js → ishikawaDiagram-5VMMS53U-CEPH_ePM.js} +1 -1
  123. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CEPH_ePM.js.br +0 -0
  124. package/dist/client/assets/ishikawaDiagram-5VMMS53U-CEPH_ePM.js.gz +0 -0
  125. package/dist/client/assets/{journeyDiagram-3NMN7TZE-B2c5x9jb.js → journeyDiagram-3NMN7TZE-CQ0PjBy7.js} +1 -1
  126. package/dist/client/assets/journeyDiagram-3NMN7TZE-CQ0PjBy7.js.br +0 -0
  127. package/dist/client/assets/journeyDiagram-3NMN7TZE-CQ0PjBy7.js.gz +0 -0
  128. package/dist/client/assets/{kanban-definition-UXKFOSKX-CMeEp_9r.js → kanban-definition-UXKFOSKX-BpQUXA60.js} +1 -1
  129. package/dist/client/assets/kanban-definition-UXKFOSKX-BpQUXA60.js.br +0 -0
  130. package/dist/client/assets/kanban-definition-UXKFOSKX-BpQUXA60.js.gz +0 -0
  131. package/dist/client/assets/{layout-Db99ysGT.js → layout-BdptC7rq.js} +1 -1
  132. package/dist/client/assets/layout-BdptC7rq.js.br +0 -0
  133. package/dist/client/assets/{layout-Db99ysGT.js.gz → layout-BdptC7rq.js.gz} +0 -0
  134. package/dist/client/assets/{linear-B6mREmTG.js → linear-C2cSRCxu.js} +1 -1
  135. package/dist/client/assets/linear-C2cSRCxu.js.br +0 -0
  136. package/dist/client/assets/linear-C2cSRCxu.js.gz +0 -0
  137. package/dist/client/assets/{mermaid.core-DndzUmju.js → mermaid.core-ClVMFyAU.js} +5 -5
  138. package/dist/client/assets/mermaid.core-ClVMFyAU.js.br +0 -0
  139. package/dist/client/assets/mermaid.core-ClVMFyAU.js.gz +0 -0
  140. package/dist/client/assets/{mindmap-definition-YA3MSWOX-qYAlDvc4.js → mindmap-definition-YA3MSWOX-D0AFCmsY.js} +1 -1
  141. package/dist/client/assets/mindmap-definition-YA3MSWOX-D0AFCmsY.js.br +0 -0
  142. package/dist/client/assets/mindmap-definition-YA3MSWOX-D0AFCmsY.js.gz +0 -0
  143. package/dist/client/assets/{passwordBootstrap-DaJXVcdB.js → passwordBootstrap-R2qlU2Pq.js} +1 -1
  144. package/dist/client/assets/passwordBootstrap-R2qlU2Pq.js.br +0 -0
  145. package/dist/client/assets/passwordBootstrap-R2qlU2Pq.js.gz +0 -0
  146. package/dist/client/assets/{pegDiagram-XKGWAZYB-Dg5DCFIn.js → pegDiagram-XKGWAZYB-BGAh0bwg.js} +1 -1
  147. package/dist/client/assets/pegDiagram-XKGWAZYB-BGAh0bwg.js.br +0 -0
  148. package/dist/client/assets/pegDiagram-XKGWAZYB-BGAh0bwg.js.gz +0 -0
  149. package/dist/client/assets/{pieDiagram-E7YTZNPT-dje1AAFI.js → pieDiagram-E7YTZNPT-CDOZUF44.js} +1 -1
  150. package/dist/client/assets/pieDiagram-E7YTZNPT-CDOZUF44.js.br +0 -0
  151. package/dist/client/assets/pieDiagram-E7YTZNPT-CDOZUF44.js.gz +0 -0
  152. package/dist/client/assets/{quadrantDiagram-AXDQQJYC-DLXI6hrS.js → quadrantDiagram-AXDQQJYC-D_Qn6NTU.js} +1 -1
  153. package/dist/client/assets/quadrantDiagram-AXDQQJYC-D_Qn6NTU.js.br +0 -0
  154. package/dist/client/assets/quadrantDiagram-AXDQQJYC-D_Qn6NTU.js.gz +0 -0
  155. package/dist/client/assets/{railroadDiagram-O6MQD6OU-DcY-P8Q_.js → railroadDiagram-O6MQD6OU-qUVGWhJN.js} +1 -1
  156. package/dist/client/assets/railroadDiagram-O6MQD6OU-qUVGWhJN.js.br +0 -0
  157. package/dist/client/assets/railroadDiagram-O6MQD6OU-qUVGWhJN.js.gz +0 -0
  158. package/dist/client/assets/{rdpSession-JkZuPKb3.js → rdpSession-hgCM4i-j.js} +1 -1
  159. package/dist/client/assets/rdpSession-hgCM4i-j.js.br +0 -0
  160. package/dist/client/assets/rdpSession-hgCM4i-j.js.gz +0 -0
  161. package/dist/client/assets/{referenceLongPress-CR3uo3V0.js → referenceLongPress-BEMsP11a.js} +1 -1
  162. package/dist/client/assets/referenceLongPress-BEMsP11a.js.br +0 -0
  163. package/dist/client/assets/referenceLongPress-BEMsP11a.js.gz +0 -0
  164. package/dist/client/assets/{requirementDiagram-BXWQKSXE-B-GLzS7h.js → requirementDiagram-BXWQKSXE-BBQMQuVZ.js} +1 -1
  165. package/dist/client/assets/requirementDiagram-BXWQKSXE-BBQMQuVZ.js.br +0 -0
  166. package/dist/client/assets/requirementDiagram-BXWQKSXE-BBQMQuVZ.js.gz +0 -0
  167. package/dist/client/assets/{sankeyDiagram-P5KCCOFB-CINtGjgu.js → sankeyDiagram-P5KCCOFB-CeEExsqW.js} +1 -1
  168. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CeEExsqW.js.br +0 -0
  169. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CeEExsqW.js.gz +0 -0
  170. package/dist/client/assets/{sequenceDiagram-WJ2MYXX4-BRE-_raI.js → sequenceDiagram-WJ2MYXX4-7ZPO-X0a.js} +1 -1
  171. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-7ZPO-X0a.js.br +0 -0
  172. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-7ZPO-X0a.js.gz +0 -0
  173. package/dist/client/assets/{sizeCapture-INFHLROL-v2bGYNk3.js → sizeCapture-INFHLROL-MBjz7Snm.js} +1 -1
  174. package/dist/client/assets/sizeCapture-INFHLROL-MBjz7Snm.js.br +0 -0
  175. package/dist/client/assets/sizeCapture-INFHLROL-MBjz7Snm.js.gz +0 -0
  176. package/dist/client/assets/{sparkles-Dx518Xui.js → sparkles-C9ShmGPf.js} +1 -1
  177. package/dist/client/assets/{stateDiagram-D77RDMKH-CIQ1zGkb.js → stateDiagram-D77RDMKH-DtLp89uP.js} +1 -1
  178. package/dist/client/assets/stateDiagram-D77RDMKH-DtLp89uP.js.br +0 -0
  179. package/dist/client/assets/stateDiagram-D77RDMKH-DtLp89uP.js.gz +0 -0
  180. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-CIQb4Dp7.js +1 -0
  181. package/dist/client/assets/{swimlanes-42K2YHIH-DEjGaJr6.js → swimlanes-42K2YHIH-Bc02S1q-.js} +1 -1
  182. package/dist/client/assets/swimlanes-42K2YHIH-Bc02S1q-.js.br +0 -0
  183. package/dist/client/assets/swimlanes-42K2YHIH-Bc02S1q-.js.gz +0 -0
  184. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-RiKL7eXI.js +8 -0
  185. package/dist/client/assets/{timeline-definition-24CTP7MA-BPbZrudq.js → timeline-definition-24CTP7MA-BLLwbOm5.js} +1 -1
  186. package/dist/client/assets/timeline-definition-24CTP7MA-BLLwbOm5.js.br +0 -0
  187. package/dist/client/assets/{timeline-definition-24CTP7MA-BPbZrudq.js.gz → timeline-definition-24CTP7MA-BLLwbOm5.js.gz} +0 -0
  188. package/dist/client/assets/{triangle-alert-CVm2qdGE.js → triangle-alert-i_L8ws6U.js} +1 -1
  189. package/dist/client/assets/{vennDiagram-4TSXK5OY-CAsKNSfN.js → vennDiagram-4TSXK5OY-8FcrAdbk.js} +1 -1
  190. package/dist/client/assets/vennDiagram-4TSXK5OY-8FcrAdbk.js.br +0 -0
  191. package/dist/client/assets/{vennDiagram-4TSXK5OY-CAsKNSfN.js.gz → vennDiagram-4TSXK5OY-8FcrAdbk.js.gz} +0 -0
  192. package/dist/client/assets/{videoCompression-CCOgxfhm.js → videoCompression-RIaDabW4.js} +1 -1
  193. package/dist/client/assets/videoCompression-RIaDabW4.js.br +0 -0
  194. package/dist/client/assets/videoCompression-RIaDabW4.js.gz +0 -0
  195. package/dist/client/assets/{wardleyDiagram-VM6X3IG4-EeabO9yU.js → wardleyDiagram-VM6X3IG4-paL2wRrJ.js} +1 -1
  196. package/dist/client/assets/wardleyDiagram-VM6X3IG4-paL2wRrJ.js.br +0 -0
  197. package/dist/client/assets/wardleyDiagram-VM6X3IG4-paL2wRrJ.js.gz +0 -0
  198. package/dist/client/assets/{xychartDiagram-S5SC5T6Z-MSUoQl2z.js → xychartDiagram-S5SC5T6Z-BM5qJ4E7.js} +1 -1
  199. package/dist/client/assets/xychartDiagram-S5SC5T6Z-BM5qJ4E7.js.br +0 -0
  200. package/dist/client/assets/xychartDiagram-S5SC5T6Z-BM5qJ4E7.js.gz +0 -0
  201. package/dist/client/index.html +1 -1
  202. package/dist/client/index.html.br +0 -0
  203. package/dist/client/index.html.gz +0 -0
  204. package/dist/client/sw.js +1 -1
  205. package/dist/client/sw.js.br +0 -0
  206. package/dist/client/sw.js.gz +0 -0
  207. package/dist/server/agent/collaborationCli.js +5 -1
  208. package/dist/server/agent/collaborationRoutes.js +2 -0
  209. package/dist/server/agent/collaborationTaskCli.js +1 -1
  210. package/dist/server/agent/collaborationTaskGuidance.js +2 -0
  211. package/dist/server/agent/collaborationTaskStore.js +18 -11
  212. package/dist/server/agent/collaborationTmuxDelivery.js +3 -2
  213. package/dist/server/agent/integrationCli.js +6 -0
  214. package/dist/server/agent/integrationServer.js +2 -0
  215. package/dist/server/agent/promptDelivery.js +2 -2
  216. package/dist/server/agent/sessionLaunchState.js +20 -0
  217. package/dist/server/agent/terminalInput.js +17 -0
  218. package/dist/server/routes/terminal.js +48 -37
  219. package/docs/integrations.md +49 -0
  220. package/package.json +1 -1
  221. package/runtime-manifest.json +3 -3
  222. package/dist/client/assets/App-VAvoVlm2.js.br +0 -0
  223. package/dist/client/assets/App-VAvoVlm2.js.gz +0 -0
  224. package/dist/client/assets/ArchitecturePanel-BIlIOGx7.js.br +0 -0
  225. package/dist/client/assets/ArchitecturePanel-BIlIOGx7.js.gz +0 -0
  226. package/dist/client/assets/ChangeWalkthroughPanel-BtXqyUzD.js.br +0 -0
  227. package/dist/client/assets/ChangeWalkthroughPanel-BtXqyUzD.js.gz +0 -0
  228. package/dist/client/assets/CollaborationMainWorkspace-DUw3cqW-.js.br +0 -0
  229. package/dist/client/assets/CollaborationMainWorkspace-DUw3cqW-.js.gz +0 -0
  230. package/dist/client/assets/CollaborationTaskContent-C2sQQp6K.js +0 -2
  231. package/dist/client/assets/ComputerControlView-D81udDZO.js.br +0 -0
  232. package/dist/client/assets/ComputerControlView-D81udDZO.js.gz +0 -0
  233. package/dist/client/assets/DagPlayground-B3hTlIFu.js.br +0 -0
  234. package/dist/client/assets/DagPlayground-B3hTlIFu.js.gz +0 -0
  235. package/dist/client/assets/DiffLab-C5sDPAZ5.js.br +0 -0
  236. package/dist/client/assets/DiffLab-C5sDPAZ5.js.gz +0 -0
  237. package/dist/client/assets/DiffReview-DQFgOJPF.js.br +0 -0
  238. package/dist/client/assets/DiffReview-DQFgOJPF.js.gz +0 -0
  239. package/dist/client/assets/DiffReviewLab-CZvBmujD.js.br +0 -0
  240. package/dist/client/assets/DiffReviewLab-CZvBmujD.js.gz +0 -0
  241. package/dist/client/assets/DiffViewer-DOvGC9bh.js.br +0 -0
  242. package/dist/client/assets/DiffViewer-DOvGC9bh.js.gz +0 -0
  243. package/dist/client/assets/ModelPreview-ClKH4BQ7.js.br +0 -0
  244. package/dist/client/assets/ModelPreview-ClKH4BQ7.js.gz +0 -0
  245. package/dist/client/assets/RightSidebar-BeegDfBO.js.br +0 -0
  246. package/dist/client/assets/RightSidebar-BeegDfBO.js.gz +0 -0
  247. package/dist/client/assets/abnfDiagram-VCTEODGH-CHUZIHQo.js.br +0 -0
  248. package/dist/client/assets/abnfDiagram-VCTEODGH-CHUZIHQo.js.gz +0 -0
  249. package/dist/client/assets/app-Bj0N393t.js.br +0 -0
  250. package/dist/client/assets/app-Bj0N393t.js.gz +0 -0
  251. package/dist/client/assets/arc-CIJEXYV7.js.br +0 -0
  252. package/dist/client/assets/arc-CIJEXYV7.js.gz +0 -0
  253. package/dist/client/assets/architectureDiagram-5GKGNRK7-CcX1UBXG.js.br +0 -0
  254. package/dist/client/assets/architectureDiagram-5GKGNRK7-CcX1UBXG.js.gz +0 -0
  255. package/dist/client/assets/blockDiagram-I7D4REHJ-gDLrIBDk.js.br +0 -0
  256. package/dist/client/assets/blockDiagram-I7D4REHJ-gDLrIBDk.js.gz +0 -0
  257. package/dist/client/assets/c4Diagram-7LVT6UL2-BQA7WLEL.js.br +0 -0
  258. package/dist/client/assets/c4Diagram-7LVT6UL2-BQA7WLEL.js.gz +0 -0
  259. package/dist/client/assets/channel-OHMJip5O.js +0 -1
  260. package/dist/client/assets/chunk-F27PBJKO-3scxqZTK.js.br +0 -0
  261. package/dist/client/assets/chunk-F27PBJKO-3scxqZTK.js.gz +0 -0
  262. package/dist/client/assets/chunk-IMKFNOWR-BOCOE1VY.js.br +0 -0
  263. package/dist/client/assets/chunk-IMKFNOWR-BOCOE1VY.js.gz +0 -0
  264. package/dist/client/assets/chunk-SVP7TREG-DOKo3BNt.js.br +0 -0
  265. package/dist/client/assets/chunk-SVP7TREG-DOKo3BNt.js.gz +0 -0
  266. package/dist/client/assets/chunk-TICWLB2K-CPpFFmO9.js.br +0 -0
  267. package/dist/client/assets/chunk-TICWLB2K-CPpFFmO9.js.gz +0 -0
  268. package/dist/client/assets/classDiagram-ZZMXUADV-DwA5mGyC.js +0 -1
  269. package/dist/client/assets/classDiagram-v2-VYDZK3BY-DwA5mGyC.js +0 -1
  270. package/dist/client/assets/cose-bilkent-JH36ORCC-iYXdWZMG.js.br +0 -0
  271. package/dist/client/assets/cose-bilkent-JH36ORCC-iYXdWZMG.js.gz +0 -0
  272. package/dist/client/assets/cynefin-OW5HDTMX-CXRpxmcA.js.br +0 -0
  273. package/dist/client/assets/cynefin-OW5HDTMX-CXRpxmcA.js.gz +0 -0
  274. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CH1TQhgO.js.br +0 -0
  275. package/dist/client/assets/cynefinDiagram-5FMLGOSQ-CH1TQhgO.js.gz +0 -0
  276. package/dist/client/assets/dagre-GXQ25YYZ-BdshuKJr.js.br +0 -0
  277. package/dist/client/assets/dagre-GXQ25YYZ-BdshuKJr.js.gz +0 -0
  278. package/dist/client/assets/diagram-S7CK7UJ4-VbNBimIR.js.br +0 -0
  279. package/dist/client/assets/diagram-S7CK7UJ4-VbNBimIR.js.gz +0 -0
  280. package/dist/client/assets/diagram-UQ7AKVKN-D_NUFcq3.js.br +0 -0
  281. package/dist/client/assets/diagram-UQ7AKVKN-D_NUFcq3.js.gz +0 -0
  282. package/dist/client/assets/diagram-VSXAHHWV-CfYRQ4mq.js.br +0 -0
  283. package/dist/client/assets/diagram-VSXAHHWV-CfYRQ4mq.js.gz +0 -0
  284. package/dist/client/assets/diagram-VX7I27RA-YHy6vMjY.js.br +0 -0
  285. package/dist/client/assets/diagram-VX7I27RA-YHy6vMjY.js.gz +0 -0
  286. package/dist/client/assets/diagram-Z3DM3KII-DvHqYL0O.js.br +0 -0
  287. package/dist/client/assets/diagram-Z3DM3KII-DvHqYL0O.js.gz +0 -0
  288. package/dist/client/assets/ebnfDiagram-PWID7BFC-Bl9bDxAP.js.br +0 -0
  289. package/dist/client/assets/ebnfDiagram-PWID7BFC-Bl9bDxAP.js.gz +0 -0
  290. package/dist/client/assets/erDiagram-RLTQ6QDP-DauNoBZZ.js.br +0 -0
  291. package/dist/client/assets/erDiagram-RLTQ6QDP-DauNoBZZ.js.gz +0 -0
  292. package/dist/client/assets/flowDiagram-HODETNUW-D6eDWfJY.js.br +0 -0
  293. package/dist/client/assets/flowDiagram-HODETNUW-D6eDWfJY.js.gz +0 -0
  294. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CWHSwTR6.js.br +0 -0
  295. package/dist/client/assets/ganttDiagram-EL5Y4UJY-CWHSwTR6.js.gz +0 -0
  296. package/dist/client/assets/gestureArbiter-nU4jhK3S.js.br +0 -0
  297. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BHYt5-_X.js.br +0 -0
  298. package/dist/client/assets/gitGraphDiagram-WWUBYQGX-BHYt5-_X.js.gz +0 -0
  299. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DAn65XKZ.js.br +0 -0
  300. package/dist/client/assets/ishikawaDiagram-5VMMS53U-DAn65XKZ.js.gz +0 -0
  301. package/dist/client/assets/journeyDiagram-3NMN7TZE-B2c5x9jb.js.br +0 -0
  302. package/dist/client/assets/journeyDiagram-3NMN7TZE-B2c5x9jb.js.gz +0 -0
  303. package/dist/client/assets/kanban-definition-UXKFOSKX-CMeEp_9r.js.br +0 -0
  304. package/dist/client/assets/kanban-definition-UXKFOSKX-CMeEp_9r.js.gz +0 -0
  305. package/dist/client/assets/layout-Db99ysGT.js.br +0 -0
  306. package/dist/client/assets/linear-B6mREmTG.js.br +0 -0
  307. package/dist/client/assets/linear-B6mREmTG.js.gz +0 -0
  308. package/dist/client/assets/mermaid.core-DndzUmju.js.br +0 -0
  309. package/dist/client/assets/mermaid.core-DndzUmju.js.gz +0 -0
  310. package/dist/client/assets/mindmap-definition-YA3MSWOX-qYAlDvc4.js.br +0 -0
  311. package/dist/client/assets/mindmap-definition-YA3MSWOX-qYAlDvc4.js.gz +0 -0
  312. package/dist/client/assets/passwordBootstrap-DaJXVcdB.js.br +0 -0
  313. package/dist/client/assets/passwordBootstrap-DaJXVcdB.js.gz +0 -0
  314. package/dist/client/assets/pegDiagram-XKGWAZYB-Dg5DCFIn.js.br +0 -0
  315. package/dist/client/assets/pegDiagram-XKGWAZYB-Dg5DCFIn.js.gz +0 -0
  316. package/dist/client/assets/pieDiagram-E7YTZNPT-dje1AAFI.js.br +0 -0
  317. package/dist/client/assets/pieDiagram-E7YTZNPT-dje1AAFI.js.gz +0 -0
  318. package/dist/client/assets/quadrantDiagram-AXDQQJYC-DLXI6hrS.js.br +0 -0
  319. package/dist/client/assets/quadrantDiagram-AXDQQJYC-DLXI6hrS.js.gz +0 -0
  320. package/dist/client/assets/railroadDiagram-O6MQD6OU-DcY-P8Q_.js.br +0 -0
  321. package/dist/client/assets/railroadDiagram-O6MQD6OU-DcY-P8Q_.js.gz +0 -0
  322. package/dist/client/assets/rdpSession-JkZuPKb3.js.br +0 -0
  323. package/dist/client/assets/rdpSession-JkZuPKb3.js.gz +0 -0
  324. package/dist/client/assets/referenceLongPress-CR3uo3V0.js.br +0 -0
  325. package/dist/client/assets/referenceLongPress-CR3uo3V0.js.gz +0 -0
  326. package/dist/client/assets/requirementDiagram-BXWQKSXE-B-GLzS7h.js.br +0 -0
  327. package/dist/client/assets/requirementDiagram-BXWQKSXE-B-GLzS7h.js.gz +0 -0
  328. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CINtGjgu.js.br +0 -0
  329. package/dist/client/assets/sankeyDiagram-P5KCCOFB-CINtGjgu.js.gz +0 -0
  330. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BRE-_raI.js.br +0 -0
  331. package/dist/client/assets/sequenceDiagram-WJ2MYXX4-BRE-_raI.js.gz +0 -0
  332. package/dist/client/assets/sizeCapture-INFHLROL-v2bGYNk3.js.br +0 -0
  333. package/dist/client/assets/sizeCapture-INFHLROL-v2bGYNk3.js.gz +0 -0
  334. package/dist/client/assets/stateDiagram-D77RDMKH-CIQ1zGkb.js.br +0 -0
  335. package/dist/client/assets/stateDiagram-D77RDMKH-CIQ1zGkb.js.gz +0 -0
  336. package/dist/client/assets/stateDiagram-v2-MP3YSRHH-DCGuhzdh.js +0 -1
  337. package/dist/client/assets/swimlanes-42K2YHIH-DEjGaJr6.js.br +0 -0
  338. package/dist/client/assets/swimlanes-42K2YHIH-DEjGaJr6.js.gz +0 -0
  339. package/dist/client/assets/swimlanesDiagram-VR7AAH4N-Bj14fTzZ.js +0 -8
  340. package/dist/client/assets/timeline-definition-24CTP7MA-BPbZrudq.js.br +0 -0
  341. package/dist/client/assets/vennDiagram-4TSXK5OY-CAsKNSfN.js.br +0 -0
  342. package/dist/client/assets/videoCompression-CCOgxfhm.js.br +0 -0
  343. package/dist/client/assets/videoCompression-CCOgxfhm.js.gz +0 -0
  344. package/dist/client/assets/wardleyDiagram-VM6X3IG4-EeabO9yU.js.br +0 -0
  345. package/dist/client/assets/wardleyDiagram-VM6X3IG4-EeabO9yU.js.gz +0 -0
  346. package/dist/client/assets/xychartDiagram-S5SC5T6Z-MSUoQl2z.js.br +0 -0
  347. package/dist/client/assets/xychartDiagram-S5SC5T6Z-MSUoQl2z.js.gz +0 -0
@@ -40,6 +40,7 @@ export function writeCollaborationTmuxPane(run, pane, prompt, stdin, assertCurre
40
40
  progress?.('queue_wait');
41
41
  return serializeTerminalInput(paneInputKey(pane), () => {
42
42
  progress?.('queue_acquired');
43
+ assertCurrent?.('queue_acquired');
43
44
  return writeTmuxPrompt(run, pane, prompt, stdin, assertCurrent, progress);
44
45
  });
45
46
  }
@@ -47,7 +48,7 @@ async function writeTmuxPrompt(run, pane, prompt,
47
48
  /** Body travels on stdin so tmux cannot parse its semicolons/backslashes. */
48
49
  stdin, assertCurrent, progress) {
49
50
  await assertSamePane(run, pane);
50
- assertCurrent?.();
51
+ assertCurrent?.('before_paste');
51
52
  // A fixed pane target is independent of the current window, keyboard focus
52
53
  // and browser presence. Delivery goes through a named tmux buffer rather
53
54
  // than `send-keys -l`: while a pane is in copy-mode, literal bytes are
@@ -81,7 +82,7 @@ stdin, assertCurrent, progress) {
81
82
  progress?.('paste_written');
82
83
  await waitForPromptSubmit();
83
84
  await assertSamePane(run, pane);
84
- assertCurrent?.();
85
+ assertCurrent?.('before_submit');
85
86
  progress?.('submit_attempted');
86
87
  await run([
87
88
  // The submit key rides outside the paste block: inside it, an editor
@@ -61,6 +61,12 @@ export const INTEGRATION_HELP = `td integration — local scoped integration adm
61
61
  diagnostics <TD-session-id> (read stored launch/restore diagnostics; administrator only)
62
62
  1.4.314 adds phase/timestamps, paste/submit write facts and target-change
63
63
  evidence; no argv/environment/credentials or application readiness claim.
64
+ 1.4.322 adds guard_captured/runtime_resolving/runtime_resolved stages and
65
+ target_change.check_phase/guard_captured_at/checked_at, launch IDs and route revisions.
66
+ Check actual server agent_launch_generation_consistency=true (minimum 1.4.322),
67
+ terminal_input_check_diagnostics=true; upgrading only the CLI does not fix a running service.
68
+ TERMINAL_INPUT_TARGET_CHANGED still rejects an actually replaced target.
69
+ create never auto-retries; retry-cold remains a separate, explicitly authorized operation.
64
70
  Prior versions cannot reconstruct missing launch evidence retroactively.
65
71
  create --file <policy.json> --credential-file <private-output.json>
66
72
  update --file <policy.json> (same identity/group; preserves the credential)
@@ -246,6 +246,8 @@ export class IntegrationRuntime {
246
246
  session_startup_input_clear: true, session_startup_input_clear_min_version: '1.4.310',
247
247
  agent_launch_process_check: true, agent_launch_process_check_min_version: '1.4.312',
248
248
  terminal_input_runtime_fence: true, terminal_input_runtime_fence_min_version: '1.4.313',
249
+ agent_launch_generation_consistency: true, agent_launch_generation_consistency_min_version: '1.4.322',
250
+ terminal_input_check_diagnostics: true,
249
251
  session_launch_diagnostics: true, session_launch_diagnostics_min_version: '1.4.314',
250
252
  session_cold_retry: true, session_cold_retry_min_version: '1.4.314',
251
253
  session_rename: true, session_rename_min_version: '1.4.315',
@@ -22,12 +22,12 @@ export function writeBracketedPrompt(target, prompt, assertCurrent, progress) {
22
22
  progress?.('queue_wait');
23
23
  return serializeTerminalInput(target, async () => {
24
24
  progress?.('queue_acquired');
25
- assertCurrent?.();
25
+ assertCurrent?.('queue_acquired');
26
26
  progress?.('paste_attempted');
27
27
  target.write(buildBracketedPasteBytes(prompt));
28
28
  progress?.('paste_written');
29
29
  await waitForPromptSubmit();
30
- assertCurrent?.();
30
+ assertCurrent?.('before_submit');
31
31
  progress?.('submit_attempted');
32
32
  target.write('\r');
33
33
  progress?.('submit_written');
@@ -0,0 +1,20 @@
1
+ import { TerminalInputTargetChangedError } from './terminalInput.js';
2
+ /** Display/identity metadata may have crossed an await with an old snapshot.
3
+ * Only the launch lifecycle can change these server-owned control fields. */
4
+ export function mergeSessionLaunchState(candidate, current, change) {
5
+ if (!change)
6
+ return current ? { ...candidate,
7
+ agentLaunchGeneration: current.agentLaunchGeneration ?? null,
8
+ agentLaunchCheck: current.agentLaunchCheck ?? null,
9
+ } : candidate;
10
+ if (!current || (current.agentLaunchGeneration ?? null) !== change.expectedGeneration
11
+ || (current.agentLaunchCheck?.id ?? null) !== change.expectedCheckId) {
12
+ throw new TerminalInputTargetChangedError({
13
+ expected_backend_session_id: candidate.backendSessionId, current_backend_session_id: current?.backendSessionId ?? null,
14
+ expected_launch_id: change.expectedGeneration, current_launch_id: current?.agentLaunchGeneration ?? null,
15
+ backend_instance_matches: !!current && candidate.backendSessionId === current.backendSessionId,
16
+ check_phase: 'launch_state_commit', checked_at: Date.now(),
17
+ });
18
+ }
19
+ return { ...candidate, agentLaunchGeneration: change.generation, agentLaunchCheck: change.check };
20
+ }
@@ -22,6 +22,23 @@ export class TerminalInputTargetChangedError extends Error {
22
22
  this.evidence = evidence;
23
23
  }
24
24
  }
25
+ /** Capture once, including for a launch's own command. Never adopt a newer
26
+ * generation simply because the physical backend has stayed the same. */
27
+ export function captureRuntimeInputGuard(current, expected = current()) {
28
+ const capturedAt = Date.now();
29
+ return (phase = 'guard_capture') => {
30
+ const actual = current();
31
+ const matches = actual.backendInstance === expected.backendInstance;
32
+ if (actual.backendSessionId !== expected.backendSessionId || !matches
33
+ || actual.launchId !== expected.launchId || actual.routeRevision !== expected.routeRevision) {
34
+ throw new TerminalInputTargetChangedError({ expected_backend_session_id: expected.backendSessionId,
35
+ current_backend_session_id: actual.backendSessionId, expected_launch_id: expected.launchId,
36
+ current_launch_id: actual.launchId, backend_instance_matches: matches, check_phase: phase,
37
+ guard_captured_at: capturedAt, checked_at: Date.now(), expected_route_revision: expected.routeRevision,
38
+ current_route_revision: actual.routeRevision });
39
+ }
40
+ };
41
+ }
25
42
  /** Clearing a one-time launch check does not change the runtime generation. */
26
43
  export function captureTerminalInputGuard(current, expected = current()) {
27
44
  return () => {
@@ -51,7 +51,8 @@ import { archiveTaskWorkspace, restoreTaskWorkspace, snapshotTaskWorkspace } fro
51
51
  import { isTmuxRecoveryCandidate } from '../utils/tmuxRecoveryCandidate.js';
52
52
  import { AutomationStore, normalizeAutomationSchedule } from '../agent/automationStore.js';
53
53
  import { writeBracketedPrompt, canDeliverPromptToAgent } from '../agent/promptDelivery.js';
54
- import { captureTerminalInputGuard, waitAndWriteTerminalInput, TerminalInputTargetChangedError } from '../agent/terminalInput.js';
54
+ import { captureTerminalInputGuard, captureRuntimeInputGuard, waitAndWriteTerminalInput } from '../agent/terminalInput.js';
55
+ import { mergeSessionLaunchState } from '../agent/sessionLaunchState.js';
55
56
  import { agentLaunchBlockReason, normalizeAgentLaunchCheck } from '../agent/agentLaunchCheck.js';
56
57
  import { prepareSupervisionEnable } from '../utils/enableSupervision.js';
57
58
  import { buildServerHealthState, dismissServerHealth } from '../utils/serverHealth.js';
@@ -1082,8 +1083,9 @@ async function withInventoryOpenLock(key, task) {
1082
1083
  inventoryOpenLocks.set(key, pending);
1083
1084
  return pending;
1084
1085
  }
1085
- function upsertGlobalSessionRecord(record) {
1086
- const normalized = normalizePersistedClientSession(record);
1086
+ function upsertGlobalSessionRecord(record, launchChange) {
1087
+ const current = globalSessionState.sessions.find(candidate => candidate.sessionId === record.sessionId);
1088
+ const normalized = normalizePersistedClientSession(mergeSessionLaunchState(record, current, launchChange));
1087
1089
  if (!normalized) {
1088
1090
  throw new Error('invalid session record');
1089
1091
  }
@@ -1462,8 +1464,16 @@ async function beginAgentLaunchCheck(frontendSessionId, agentSlug, nativeSession
1462
1464
  if (!record)
1463
1465
  throw new Error('SESSION_REMOVED');
1464
1466
  const id = randomUUID();
1465
- upsertGlobalSessionRecord({ ...record, agentLaunchGeneration: id, agentLaunchCheck: { id, agentSlug, nativeSessionId, deadline: Date.now() + 120_000 } });
1466
- await persistGlobalStateNow();
1467
+ const updated = upsertGlobalSessionRecord(record, { expectedGeneration: record.agentLaunchGeneration ?? null,
1468
+ expectedCheckId: record.agentLaunchCheck?.id ?? null, generation: id,
1469
+ check: { id, agentSlug, nativeSessionId, deadline: Date.now() + 120_000 } });
1470
+ // Capture the guard before persistence yields. The launch command must use
1471
+ // this exact generation, even if another launch occurs during an await.
1472
+ const assertCurrent = terminalInputGuard(updated);
1473
+ assertCurrent('guard_capture');
1474
+ await persistGlobalStateNow(true);
1475
+ assertCurrent('launch_persisted');
1476
+ return assertCurrent;
1467
1477
  }
1468
1478
  async function observeAgentLaunchCheck(record, observed) {
1469
1479
  const check = record.agentLaunchCheck;
@@ -1477,53 +1487,56 @@ async function observeAgentLaunchCheck(record, observed) {
1477
1487
  return { state: 'offline', reason: 'SESSION_REMOVED' };
1478
1488
  if (latest.agentLaunchCheck?.id !== check.id)
1479
1489
  return { state: 'recovering', reason: 'AGENT_LAUNCH_CHANGED' };
1480
- upsertGlobalSessionRecord({ ...latest, agentLaunchCheck: null });
1490
+ upsertGlobalSessionRecord(latest, { expectedGeneration: latest.agentLaunchGeneration ?? null,
1491
+ expectedCheckId: check.id, generation: latest.agentLaunchGeneration ?? null, check: null });
1481
1492
  await persistGlobalStateNow();
1482
1493
  return null;
1483
1494
  }
1484
1495
  function terminalInputGuard(record) {
1485
1496
  const frontendSessionId = record.sessionId;
1486
1497
  const backendSessionId = record.backendSessionId;
1487
- const launchId = record.agentLaunchGeneration ?? null;
1488
- const routeRevision = collaborationRouting.get(frontendSessionId)?.routeRevision ?? null;
1489
- const backend = backendSessionId ? terminalSessions.get(backendSessionId) : undefined;
1490
- return () => {
1498
+ const expected = { backendSessionId, launchId: record.agentLaunchGeneration ?? null,
1499
+ routeRevision: collaborationRouting.get(frontendSessionId)?.routeRevision ?? null,
1500
+ backendInstance: backendSessionId ? terminalSessions.get(backendSessionId) : undefined };
1501
+ return captureRuntimeInputGuard(() => {
1491
1502
  const latest = globalSessionState.sessions.find(candidate => candidate.sessionId === frontendSessionId);
1492
1503
  if (!latest)
1493
1504
  throw new Error('SESSION_REMOVED');
1494
- const instanceMatches = !backendSessionId || terminalSessions.get(backendSessionId) === backend;
1495
- if ((collaborationRouting.get(frontendSessionId)?.routeRevision ?? null) !== routeRevision
1496
- || (latest.agentLaunchGeneration ?? null) !== launchId || latest.backendSessionId !== backendSessionId || !instanceMatches) {
1497
- throw new TerminalInputTargetChangedError({ expected_backend_session_id: backendSessionId, current_backend_session_id: latest.backendSessionId,
1498
- expected_launch_id: launchId, current_launch_id: latest.agentLaunchGeneration ?? null, backend_instance_matches: instanceMatches });
1499
- }
1500
- };
1505
+ return { backendSessionId: latest.backendSessionId, launchId: latest.agentLaunchGeneration ?? null,
1506
+ routeRevision: collaborationRouting.get(frontendSessionId)?.routeRevision ?? null,
1507
+ backendInstance: latest.backendSessionId ? terminalSessions.get(latest.backendSessionId) : undefined };
1508
+ }, expected);
1501
1509
  }
1502
1510
  /** tmux input always uses the pane queue, including automation and launch commands. */
1503
1511
  async function automaticTerminalInput(record, assertCurrent = terminalInputGuard(record), progress) {
1504
- assertCurrent();
1512
+ progress?.('guard_captured');
1513
+ assertCurrent('runtime_resolve');
1514
+ progress?.('runtime_resolving');
1505
1515
  if (record.mode === 'tmux') {
1506
1516
  const binding = collaborationRouting.get(record.sessionId) ?? {
1507
1517
  sessionId: record.sessionId, backendSessionId: record.backendSessionId, mode: record.mode,
1508
1518
  tmuxSessionName: record.tmuxSessionName, agentSlug: null, nativeSessionId: null, pane: null,
1509
1519
  };
1510
1520
  const inspected = await inspectCollaborationTmux(binding, null, true);
1511
- assertCurrent();
1521
+ assertCurrent('runtime_resolved');
1512
1522
  if (inspected.state !== 'ready' || !inspected.pane)
1513
1523
  throw new Error(inspected.reason ?? 'TMUX_PANE_UNAVAILABLE');
1514
1524
  const pane = inspected.pane;
1525
+ progress?.('runtime_resolved');
1515
1526
  return (prompt) => writeCollaborationTmuxPane(runTmux, pane, prompt, runTmuxStdin, assertCurrent, progress);
1516
1527
  }
1517
1528
  const backend = record.backendSessionId ? terminalSessions.get(record.backendSessionId) : null;
1518
1529
  if (!backend)
1519
1530
  throw new Error('SHELL_BACKEND_NOT_RUNNING');
1531
+ assertCurrent('runtime_resolved');
1532
+ progress?.('runtime_resolved');
1520
1533
  return (prompt) => writeBracketedPrompt(backend.ptyProcess, prompt, assertCurrent, progress);
1521
1534
  }
1522
- async function writeAutomaticTerminalPrompt(frontendSessionId, prompt, progress) {
1535
+ async function writeAutomaticTerminalPrompt(frontendSessionId, prompt, progress, launchGuard) {
1523
1536
  const record = globalSessionState.sessions.find(candidate => candidate.sessionId === frontendSessionId);
1524
1537
  if (!record)
1525
1538
  throw new Error('SESSION_REMOVED');
1526
- const write = await automaticTerminalInput(record, terminalInputGuard(record), progress);
1539
+ const write = await automaticTerminalInput(record, launchGuard ?? terminalInputGuard(record), progress);
1527
1540
  await write(prompt);
1528
1541
  }
1529
1542
  async function deliverAutomationPromptWhenReady(backendSessionId, prompt) {
@@ -1580,9 +1593,8 @@ async function runAgentAutomation(automation, req) {
1580
1593
  throw new Error('自动任务会话创建失败');
1581
1594
  if (automation.command) {
1582
1595
  const agent = detectAgentFromCommand(automation.command, agentCustomCommands());
1583
- if (agent)
1584
- await beginAgentLaunchCheck(frontendSessionId, agent.slug);
1585
- await writeAutomaticTerminalPrompt(frontendSessionId, automation.command);
1596
+ const launchGuard = agent ? await beginAgentLaunchCheck(frontendSessionId, agent.slug) : undefined;
1597
+ await writeAutomaticTerminalPrompt(frontendSessionId, automation.command, undefined, launchGuard);
1586
1598
  }
1587
1599
  if (automation.prompt) {
1588
1600
  if (automation.command)
@@ -1970,7 +1982,7 @@ async function spawnCollaborationAgentSession(req, group, sourceSessionId, input
1970
1982
  const backend = terminalSessions.get(opened.terminalSession.sessionId);
1971
1983
  if (!backend)
1972
1984
  throw new HttpStatusError(500, 'Agent Session 创建失败', 'COLLAB_AGENT_SESSION_FAILED');
1973
- await beginAgentLaunchCheck(frontendSessionId, launcher.slug);
1985
+ const launchGuard = await beginAgentLaunchCheck(frontendSessionId, launcher.slug);
1974
1986
  const latestGroup = collaborationStore.getGroup(group.id);
1975
1987
  if (!latestGroup || latestGroup.deleted) {
1976
1988
  const created = globalSessionState.sessions.find(record => record.sessionId === frontendSessionId);
@@ -1993,7 +2005,7 @@ async function spawnCollaborationAgentSession(req, group, sourceSessionId, input
1993
2005
  collaborationStore.setRole({ groupId: group.id, sessionId: frontendSessionId, role: bootstrapRole, creationKey });
1994
2006
  if (profile)
1995
2007
  collaborationStore.setMemberLaunchProfile(group.id, frontendSessionId, profile);
1996
- await writeAutomaticTerminalPrompt(frontendSessionId, buildCollaborationSpawnCommand({ slug: launcher.slug, command: profile?.command ?? launcher.command }));
2008
+ await writeAutomaticTerminalPrompt(frontendSessionId, buildCollaborationSpawnCommand({ slug: launcher.slug, command: profile?.command ?? launcher.command }), undefined, launchGuard);
1997
2009
  const requestedTask = typeof input.task === 'string' ? input.task.trim().slice(0, 20_000) : '';
1998
2010
  collaborationStore.send({
1999
2011
  groupId: updatedGroup.id,
@@ -2423,8 +2435,8 @@ async function launchIntegrationTerminal(record, restoring, prepared, progress,
2423
2435
  backend.agent = null;
2424
2436
  backend.agentResumeRecovered = false;
2425
2437
  progress?.('launch_intent');
2426
- await beginAgentLaunchCheck(record.session_id, record.agent_slug, restoring ? record.agent_native_session_id : null);
2427
- await writeAutomaticTerminalPrompt(record.session_id, integrationLaunchCommand(record, restoring), progress);
2438
+ const launchGuard = await beginAgentLaunchCheck(record.session_id, record.agent_slug, restoring ? record.agent_native_session_id : null);
2439
+ await writeAutomaticTerminalPrompt(record.session_id, integrationLaunchCommand(record, restoring), progress, launchGuard);
2428
2440
  broadcastClientState();
2429
2441
  });
2430
2442
  }
@@ -2471,12 +2483,12 @@ export function prepareCollaborationTaskWorker(task, template, dependencies, ser
2471
2483
  throw error;
2472
2484
  }
2473
2485
  if (!currentAgent && (!launch || launch.backendId !== opened.terminalSession.sessionId)) {
2474
- await beginAgentLaunchCheck(record.sessionId, launcher.slug);
2486
+ const launchGuard = await beginAgentLaunchCheck(record.sessionId, launcher.slug);
2475
2487
  // Persist before typing: a retry must never type the launcher into a newly booted Agent's prompt.
2476
2488
  const temporary = `${launchFile}.${process.pid}.tmp`;
2477
2489
  await fs.promises.writeFile(temporary, JSON.stringify({ sessionId: record.sessionId, backendId: opened.terminalSession.sessionId }), { mode: 0o600 });
2478
2490
  await fs.promises.rename(temporary, launchFile);
2479
- await writeAutomaticTerminalPrompt(opened.session.sessionId, buildCollaborationSpawnCommand({ slug: launcher.slug, command: inheritedProfile?.command ?? launcher.command }));
2491
+ await writeAutomaticTerminalPrompt(opened.session.sessionId, buildCollaborationSpawnCommand({ slug: launcher.slug, command: inheritedProfile?.command ?? launcher.command }), undefined, launchGuard);
2480
2492
  }
2481
2493
  const group = collaborationStore.getGroup(task.groupId);
2482
2494
  if (!group || group.deleted)
@@ -6144,8 +6156,8 @@ router.post('/tmux/recovery/restore-all', async (_req, res) => {
6144
6156
  const previous = collaborationRouting.get(frontendSessionId);
6145
6157
  if (previous)
6146
6158
  collaborationRouting.bind({ ...previous, pane: null });
6147
- await beginAgentLaunchCheck(frontendSessionId, agent.slug, target.nativeSessionId);
6148
- await writeAutomaticTerminalPrompt(frontendSessionId, command);
6159
+ const launchGuard = await beginAgentLaunchCheck(frontendSessionId, agent.slug, target.nativeSessionId);
6160
+ await writeAutomaticTerminalPrompt(frontendSessionId, command, undefined, launchGuard);
6149
6161
  }));
6150
6162
  outcomes.push({ sessionId: frontendSessionId, restored: true });
6151
6163
  }
@@ -7098,8 +7110,8 @@ router.post('/operations/execution-archives/:sessionId/restore', executionArchiv
7098
7110
  broadcastClientState();
7099
7111
  throw error;
7100
7112
  }
7101
- await beginAgentLaunchCheck(record.sessionId, target.slug, target.nativeSessionId);
7102
- await writeAutomaticTerminalPrompt(opened.session.sessionId, command);
7113
+ const launchGuard = await beginAgentLaunchCheck(record.sessionId, target.slug, target.nativeSessionId);
7114
+ await writeAutomaticTerminalPrompt(opened.session.sessionId, command, undefined, launchGuard);
7103
7115
  restoreArchivedMembership(entry, record.sessionId);
7104
7116
  await persistGlobalStateNow();
7105
7117
  broadcastClientState();
@@ -8343,10 +8355,9 @@ router.post('/:sessionId/agent-resume', async (req, res) => {
8343
8355
  try {
8344
8356
  const frontend = globalSessionState.sessions.find(candidate => candidate.backendSessionId === sessionId);
8345
8357
  const launch = async () => {
8358
+ const launchGuard = frontend ? await beginAgentLaunchCheck(frontend.sessionId, target.slug, target.nativeSessionId) : undefined;
8346
8359
  if (frontend)
8347
- await beginAgentLaunchCheck(frontend.sessionId, target.slug, target.nativeSessionId);
8348
- if (frontend)
8349
- await writeAutomaticTerminalPrompt(frontend.sessionId, target.command);
8360
+ await writeAutomaticTerminalPrompt(frontend.sessionId, target.command, undefined, launchGuard);
8350
8361
  else
8351
8362
  await writeBracketedPrompt(session.ptyProcess, target.command, captureTerminalInputGuard(() => terminalSessions.get(sessionId), session));
8352
8363
  };
@@ -1242,3 +1242,52 @@ message/thread/幂等键或历史,不自动补 Enter、不用屏幕文字识
1242
1242
  投递、不同/缺失/弱原生证据、多匹配/归属/未知旧写入拒绝、绑定持久化和失败、
1243
1243
  只读路由权限/CLI、网页暂停提示及加密传输边界。Mac 实际现场的当前原生身份尚未独立确认,原消息尚待拥有者确认及接入方实际服务
1244
1244
  升级/回读后继续投递;不以维护机回归冒充该现场已恢复。
1245
+
1246
+
1247
+ ## 1.4.322:启动代次一致性与输入检查诊断
1248
+
1249
+ 最低实际服务 **1.4.322**,配套 CLI 也升级至 1.4.322。`capabilities` 回读:
1250
+ `agent_launch_generation_consistency=true`、
1251
+ `agent_launch_generation_consistency_min_version=1.4.322`、
1252
+ `terminal_input_check_diagnostics=true`。普通协作协议仍为 2,integration protocol 仍为 1;
1253
+ 不新增权限。只更新 CLI 不会改变正在运行的旧服务。
1254
+
1255
+ 启动代次是 TD 服务生成的 `agentLaunchGeneration`,与原生 Agent UUID、
1256
+ IntegrationSession 的数值 `generation` 分别记录。同一 backend 在启动准备时从 null
1257
+ 变为新的启动 UUID 是正常动作。名称、cwd、原生身份元数据等整记录更新过去可能
1258
+ 携带 await 之前的旧启动字段写回;本版将启动字段交由专门的比较后更新路径管理,
1259
+ 普通元数据更新继承当前启动代次与一次性检查,不能覆盖或复活旧值。
1260
+
1261
+ 启动操作在写入本次代次后、持久化之前捕获自己的输入检查令牌,并在持久化返回、
1262
+ 承载解析、获取输入队列及粘贴/提交前持续使用它。冷启动、精确恢复、显式 cold retry
1263
+ 和普通启动共用这条保护;不会为了继续输入而采纳后来出现的启动代次。启动状态
1264
+ 落盘失败时不输入。真实 backend 对象/ID、绑定版本、tmux pane 或启动代次变化仍拒绝,
1265
+ 保留 `TERMINAL_INPUT_TARGET_CHANGED` / `TMUX_PANE_CHANGED` 等错误。
1266
+
1267
+ 管理员沿现有入口读取已保存的诊断:
1268
+
1269
+ ```sh
1270
+ td integration diagnostics <TD-session-id>
1271
+ ```
1272
+
1273
+ `launch_diagnostics.steps` 追加可选阶段 `guard_captured / runtime_resolving / runtime_resolved`;
1274
+ 既有 `queue_wait / queue_acquired / paste_* / submit_*` 保留。拒绝时
1275
+ `target_change` 可含 `check_phase / guard_captured_at / checked_at`,以及
1276
+ `expected_launch_id / current_launch_id`、backend ID/实例比较、绑定版本比较。
1277
+ `check_phase` 包含 `launch_state_commit / guard_capture / launch_persisted / runtime_resolve /
1278
+ runtime_resolved / queue_acquired / before_paste / before_submit`。时间是 TD 检查时间,
1279
+ 不是内核首字节写入时间;不包含正文、argv、环境或凭据。旧记录不补造缺失的证据。
1280
+
1281
+ 这次修复不增加自动重试:原 create 同键只回读原操作。失败现场保留,先用
1282
+ `session get` 核对当前事实;明确授权后才按现有 `session retry-cold` 契约显式操作,
1283
+ 必须满足无原生 UUID、无 TD 消息历史或待投递、精确原 shell、配置指纹与代次等条件。
1284
+ 已有原生 UUID 的会话继续精确 restore,不能以 cold retry 替代。消息正文不因升级重发。
1285
+
1286
+ 升级由现场唯一维护者协调:保留现有 HTTPS/鉴权参数,仅替换并重启 TD 服务;
1287
+ 核对在跑 tmux/Agent 完整身份没有变化,再回读实际服务版本和以上能力。
1288
+ 本版不要求重启、重建或重试业务 Agent,不更改 launch profile、sandbox 或业务调度。
1289
+ 终端动作仍是粘贴一次、50ms 后发送一次回车;TD 仍不保证应用提交、消费或执行完成。
1290
+
1291
+ 确定性交错回归覆盖延迟改名/元数据回写、清除检查、持久化等待、输入队列等待、
1292
+ 真实第二次启动、backend 替换及重新绑定;发生真实换代时,旧输入及旧的延迟回车
1293
+ 仍被拒绝。测试证明 TD 一致性与终端写入边界,不代替私有 Agent 的实机消费验收。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "termdock",
3
- "version": "1.4.321",
3
+ "version": "1.4.322",
4
4
  "description": "A complete web-based terminal application with modern UI",
5
5
  "type": "module",
6
6
  "main": ".desktop-dist/main.js",
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "packageName": "termdock",
4
- "version": "1.4.321",
4
+ "version": "1.4.322",
5
5
  "runtimeProtocolVersion": 1,
6
6
  "minimumDesktopVersion": "1.4.46",
7
7
  "nodeMajor": 22,
8
8
  "dependencyHash": "sha256-oaGYi/P5ob8sd6VnNBOwshKozjhdV+hYiCmLAsn5x00=",
9
- "serverBundleHash": "sha256-o36V1OU5HWHaYRXX3y2vcIKrppx0O4wtdbCRN90DifI=",
10
- "clientBundleHash": "sha256-rMB/XxqqSbnbT1KeX2KqTnR82mLyuW/NFSb1X7Y6BRE=",
9
+ "serverBundleHash": "sha256-T9JZp3X9tfMUYciSrnZbiUIXuc+IHqHJuGp6Wf5bHs8=",
10
+ "clientBundleHash": "sha256-4wVT4/UzD+TMRQjVw307g0c0x0cJm6NknoDeybiIQfA=",
11
11
  "entrypoint": "dist/server/cli.js",
12
12
  "clientEntrypoint": "dist/client/index.html"
13
13
  }
@@ -1,2 +0,0 @@
1
- import{by as r}from"./app-Bj0N393t.js";import{b as m}from"./dnd-BCFAPC0L.js";import{b as n}from"./RightSidebar-BeegDfBO.js";import"./react-XDCjal2T.js";import"./terminal-C7X98Amf.js";import"./App-VAvoVlm2.js";import"./gestureArbiter-nU4jhK3S.js";import"./triangle-alert-CVm2qdGE.js";import"./referenceLongPress-CR3uo3V0.js";import"./DiffReview-DQFgOJPF.js";import"./sparkles-Dx518Xui.js";import"./DiffViewer-DOvGC9bh.js";import"./ChangeWalkthroughPanel-BtXqyUzD.js";function g({content:o}){const e=m.useMemo(()=>n(o.split(`
2
- `),null,null),[o]);return r.jsx("div",{className:"min-w-0 space-y-3 break-words text-sm leading-6 text-foreground [&_h1]:text-lg [&_h2]:text-base [&_h3]:text-sm [&_pre]:max-w-full [&_table]:text-xs",children:e.map((t,i)=>r.jsx("div",{className:"min-w-0",children:typeof t.content=="function"?t.content(null):t.content},i))})}export{g as default};
@@ -1 +0,0 @@
1
- import{c as a,C as n}from"./mermaid.core-DndzUmju.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as t,C as e}from"./chunk-TICWLB2K-CPpFFmO9.js";import{d as i}from"./mermaid.core-DndzUmju.js";import"./chunk-5VM5RSS4-Cc3Czx6A.js";import"./chunk-XXDRQBXY-Zp_XOFU2.js";import"./chunk-POPQ4Y6H-C4MN3QRd.js";import"./chunk-F27PBJKO-3scxqZTK.js";import"./purify.es-4eNOHKSq.js";import"./app-Bj0N393t.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-C7X98Amf.js";var g={parser:t,get db(){return new e},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{g as diagram};
@@ -1 +0,0 @@
1
- import{s as a,a as s,c as t,C as e}from"./chunk-TICWLB2K-CPpFFmO9.js";import{d as i}from"./mermaid.core-DndzUmju.js";import"./chunk-5VM5RSS4-Cc3Czx6A.js";import"./chunk-XXDRQBXY-Zp_XOFU2.js";import"./chunk-POPQ4Y6H-C4MN3QRd.js";import"./chunk-F27PBJKO-3scxqZTK.js";import"./purify.es-4eNOHKSq.js";import"./app-Bj0N393t.js";import"./react-XDCjal2T.js";import"./dnd-BCFAPC0L.js";import"./terminal-C7X98Amf.js";var g={parser:t,get db(){return new e},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{g as diagram};