@quenty/studio-bridge 0.7.1 → 0.9.0

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 (689) hide show
  1. package/CHANGELOG.md +14 -42
  2. package/README.md +166 -115
  3. package/dist/src/bridge/bridge-connection-remote.test.d.ts +7 -0
  4. package/dist/src/bridge/bridge-connection-remote.test.d.ts.map +1 -0
  5. package/dist/src/bridge/bridge-connection-remote.test.js +144 -0
  6. package/dist/src/bridge/bridge-connection-remote.test.js.map +1 -0
  7. package/dist/src/bridge/bridge-connection.d.ts +112 -0
  8. package/dist/src/bridge/bridge-connection.d.ts.map +1 -0
  9. package/dist/src/bridge/bridge-connection.js +528 -0
  10. package/dist/src/bridge/bridge-connection.js.map +1 -0
  11. package/dist/src/bridge/bridge-connection.test.d.ts +6 -0
  12. package/dist/src/bridge/bridge-connection.test.d.ts.map +1 -0
  13. package/dist/src/bridge/bridge-connection.test.js +773 -0
  14. package/dist/src/bridge/bridge-connection.test.js.map +1 -0
  15. package/dist/src/bridge/bridge-session.d.ts +38 -0
  16. package/dist/src/bridge/bridge-session.d.ts.map +1 -0
  17. package/dist/src/bridge/bridge-session.js +259 -0
  18. package/dist/src/bridge/bridge-session.js.map +1 -0
  19. package/dist/src/bridge/bridge-session.test.d.ts +6 -0
  20. package/dist/src/bridge/bridge-session.test.d.ts.map +1 -0
  21. package/dist/src/bridge/bridge-session.test.js +264 -0
  22. package/dist/src/bridge/bridge-session.test.js.map +1 -0
  23. package/dist/src/bridge/index.d.ts +13 -0
  24. package/dist/src/bridge/index.d.ts.map +1 -0
  25. package/dist/src/bridge/index.js +13 -0
  26. package/dist/src/bridge/index.js.map +1 -0
  27. package/dist/src/bridge/internal/__tests__/failover-crash.test.d.ts +9 -0
  28. package/dist/src/bridge/internal/__tests__/failover-crash.test.d.ts.map +1 -0
  29. package/dist/src/bridge/internal/__tests__/failover-crash.test.js +159 -0
  30. package/dist/src/bridge/internal/__tests__/failover-crash.test.js.map +1 -0
  31. package/dist/src/bridge/internal/__tests__/failover-graceful.test.d.ts +9 -0
  32. package/dist/src/bridge/internal/__tests__/failover-graceful.test.d.ts.map +1 -0
  33. package/dist/src/bridge/internal/__tests__/failover-graceful.test.js +218 -0
  34. package/dist/src/bridge/internal/__tests__/failover-graceful.test.js.map +1 -0
  35. package/dist/src/bridge/internal/__tests__/failover-inflight.test.d.ts +9 -0
  36. package/dist/src/bridge/internal/__tests__/failover-inflight.test.d.ts.map +1 -0
  37. package/dist/src/bridge/internal/__tests__/failover-inflight.test.js +246 -0
  38. package/dist/src/bridge/internal/__tests__/failover-inflight.test.js.map +1 -0
  39. package/dist/src/bridge/internal/__tests__/host-client-integration.test.d.ts +10 -0
  40. package/dist/src/bridge/internal/__tests__/host-client-integration.test.d.ts.map +1 -0
  41. package/dist/src/bridge/internal/__tests__/host-client-integration.test.js +298 -0
  42. package/dist/src/bridge/internal/__tests__/host-client-integration.test.js.map +1 -0
  43. package/dist/src/bridge/internal/bridge-client.d.ts +70 -0
  44. package/dist/src/bridge/internal/bridge-client.d.ts.map +1 -0
  45. package/dist/src/bridge/internal/bridge-client.js +344 -0
  46. package/dist/src/bridge/internal/bridge-client.js.map +1 -0
  47. package/dist/src/bridge/internal/bridge-client.test.d.ts +7 -0
  48. package/dist/src/bridge/internal/bridge-client.test.d.ts.map +1 -0
  49. package/dist/src/bridge/internal/bridge-client.test.js +301 -0
  50. package/dist/src/bridge/internal/bridge-client.test.js.map +1 -0
  51. package/dist/src/bridge/internal/bridge-host.d.ts +78 -0
  52. package/dist/src/bridge/internal/bridge-host.d.ts.map +1 -0
  53. package/dist/src/bridge/internal/bridge-host.js +383 -0
  54. package/dist/src/bridge/internal/bridge-host.js.map +1 -0
  55. package/dist/src/bridge/internal/bridge-host.test.d.ts +7 -0
  56. package/dist/src/bridge/internal/bridge-host.test.d.ts.map +1 -0
  57. package/dist/src/bridge/internal/bridge-host.test.js +377 -0
  58. package/dist/src/bridge/internal/bridge-host.test.js.map +1 -0
  59. package/dist/src/bridge/internal/environment-detection.d.ts +44 -0
  60. package/dist/src/bridge/internal/environment-detection.d.ts.map +1 -0
  61. package/dist/src/bridge/internal/environment-detection.js +91 -0
  62. package/dist/src/bridge/internal/environment-detection.js.map +1 -0
  63. package/dist/src/bridge/internal/environment-detection.test.d.ts +7 -0
  64. package/dist/src/bridge/internal/environment-detection.test.d.ts.map +1 -0
  65. package/dist/src/bridge/internal/environment-detection.test.js +150 -0
  66. package/dist/src/bridge/internal/environment-detection.test.js.map +1 -0
  67. package/dist/src/bridge/internal/hand-off.d.ts +69 -0
  68. package/dist/src/bridge/internal/hand-off.d.ts.map +1 -0
  69. package/dist/src/bridge/internal/hand-off.js +178 -0
  70. package/dist/src/bridge/internal/hand-off.js.map +1 -0
  71. package/dist/src/bridge/internal/hand-off.test.d.ts +7 -0
  72. package/dist/src/bridge/internal/hand-off.test.d.ts.map +1 -0
  73. package/dist/src/bridge/internal/hand-off.test.js +325 -0
  74. package/dist/src/bridge/internal/hand-off.test.js.map +1 -0
  75. package/dist/src/bridge/internal/health-endpoint.d.ts +32 -0
  76. package/dist/src/bridge/internal/health-endpoint.d.ts.map +1 -0
  77. package/dist/src/bridge/internal/health-endpoint.js +73 -0
  78. package/dist/src/bridge/internal/health-endpoint.js.map +1 -0
  79. package/dist/src/bridge/internal/health-endpoint.test.d.ts +6 -0
  80. package/dist/src/bridge/internal/health-endpoint.test.d.ts.map +1 -0
  81. package/dist/src/bridge/internal/health-endpoint.test.js +122 -0
  82. package/dist/src/bridge/internal/health-endpoint.test.js.map +1 -0
  83. package/dist/src/bridge/internal/host-protocol.d.ts +60 -0
  84. package/dist/src/bridge/internal/host-protocol.d.ts.map +1 -0
  85. package/dist/src/bridge/internal/host-protocol.js +184 -0
  86. package/dist/src/bridge/internal/host-protocol.js.map +1 -0
  87. package/dist/src/bridge/internal/host-protocol.test.d.ts +6 -0
  88. package/dist/src/bridge/internal/host-protocol.test.d.ts.map +1 -0
  89. package/dist/src/bridge/internal/host-protocol.test.js +307 -0
  90. package/dist/src/bridge/internal/host-protocol.test.js.map +1 -0
  91. package/dist/src/bridge/internal/session-tracker.d.ts +67 -0
  92. package/dist/src/bridge/internal/session-tracker.d.ts.map +1 -0
  93. package/dist/src/bridge/internal/session-tracker.js +138 -0
  94. package/dist/src/bridge/internal/session-tracker.js.map +1 -0
  95. package/dist/src/bridge/internal/session-tracker.test.d.ts +6 -0
  96. package/dist/src/bridge/internal/session-tracker.test.d.ts.map +1 -0
  97. package/dist/src/bridge/internal/session-tracker.test.js +342 -0
  98. package/dist/src/bridge/internal/session-tracker.test.js.map +1 -0
  99. package/dist/src/bridge/internal/transport-client.d.ts +43 -0
  100. package/dist/src/bridge/internal/transport-client.d.ts.map +1 -0
  101. package/dist/src/bridge/internal/transport-client.js +146 -0
  102. package/dist/src/bridge/internal/transport-client.js.map +1 -0
  103. package/dist/src/bridge/internal/transport-client.test.d.ts +6 -0
  104. package/dist/src/bridge/internal/transport-client.test.d.ts.map +1 -0
  105. package/dist/src/bridge/internal/transport-client.test.js +176 -0
  106. package/dist/src/bridge/internal/transport-client.test.js.map +1 -0
  107. package/dist/src/bridge/internal/transport-server.d.ts +59 -0
  108. package/dist/src/bridge/internal/transport-server.d.ts.map +1 -0
  109. package/dist/src/bridge/internal/transport-server.js +189 -0
  110. package/dist/src/bridge/internal/transport-server.js.map +1 -0
  111. package/dist/src/bridge/internal/transport-server.test.d.ts +6 -0
  112. package/dist/src/bridge/internal/transport-server.test.d.ts.map +1 -0
  113. package/dist/src/bridge/internal/transport-server.test.js +171 -0
  114. package/dist/src/bridge/internal/transport-server.test.js.map +1 -0
  115. package/dist/src/bridge/types.d.ts +117 -0
  116. package/dist/src/bridge/types.d.ts.map +1 -0
  117. package/dist/src/bridge/types.js +68 -0
  118. package/dist/src/bridge/types.js.map +1 -0
  119. package/dist/src/cli/adapters/cli-command-adapter-handler.test.d.ts +6 -0
  120. package/dist/src/cli/adapters/cli-command-adapter-handler.test.d.ts.map +1 -0
  121. package/dist/src/cli/adapters/cli-command-adapter-handler.test.js +260 -0
  122. package/dist/src/cli/adapters/cli-command-adapter-handler.test.js.map +1 -0
  123. package/dist/src/cli/adapters/cli-command-adapter.d.ts +39 -0
  124. package/dist/src/cli/adapters/cli-command-adapter.d.ts.map +1 -0
  125. package/dist/src/cli/adapters/cli-command-adapter.js +241 -0
  126. package/dist/src/cli/adapters/cli-command-adapter.js.map +1 -0
  127. package/dist/src/cli/adapters/cli-command-adapter.test.d.ts +5 -0
  128. package/dist/src/cli/adapters/cli-command-adapter.test.d.ts.map +1 -0
  129. package/dist/src/cli/adapters/cli-command-adapter.test.js +188 -0
  130. package/dist/src/cli/adapters/cli-command-adapter.test.js.map +1 -0
  131. package/dist/src/cli/adapters/group-builder.d.ts +29 -0
  132. package/dist/src/cli/adapters/group-builder.d.ts.map +1 -0
  133. package/dist/src/cli/adapters/group-builder.js +54 -0
  134. package/dist/src/cli/adapters/group-builder.js.map +1 -0
  135. package/dist/src/cli/adapters/group-builder.test.d.ts +5 -0
  136. package/dist/src/cli/adapters/group-builder.test.d.ts.map +1 -0
  137. package/dist/src/cli/adapters/group-builder.test.js +108 -0
  138. package/dist/src/cli/adapters/group-builder.test.js.map +1 -0
  139. package/dist/src/cli/adapters/help-formatter.d.ts +11 -0
  140. package/dist/src/cli/adapters/help-formatter.d.ts.map +1 -0
  141. package/dist/src/cli/adapters/help-formatter.js +78 -0
  142. package/dist/src/cli/adapters/help-formatter.js.map +1 -0
  143. package/dist/src/cli/adapters/help-formatter.test.d.ts +5 -0
  144. package/dist/src/cli/adapters/help-formatter.test.d.ts.map +1 -0
  145. package/dist/src/cli/adapters/help-formatter.test.js +79 -0
  146. package/dist/src/cli/adapters/help-formatter.test.js.map +1 -0
  147. package/dist/src/cli/adapters/target-resolver.d.ts +54 -0
  148. package/dist/src/cli/adapters/target-resolver.d.ts.map +1 -0
  149. package/dist/src/cli/adapters/target-resolver.js +90 -0
  150. package/dist/src/cli/adapters/target-resolver.js.map +1 -0
  151. package/dist/src/cli/adapters/target-resolver.test.d.ts +5 -0
  152. package/dist/src/cli/adapters/target-resolver.test.d.ts.map +1 -0
  153. package/dist/src/cli/adapters/target-resolver.test.js +169 -0
  154. package/dist/src/cli/adapters/target-resolver.test.js.map +1 -0
  155. package/dist/src/cli/args/global-args.d.ts +2 -0
  156. package/dist/src/cli/args/global-args.d.ts.map +1 -1
  157. package/dist/src/cli/cli.d.ts +6 -3
  158. package/dist/src/cli/cli.d.ts.map +1 -1
  159. package/dist/src/cli/cli.js +82 -20
  160. package/dist/src/cli/cli.js.map +1 -1
  161. package/dist/src/cli/resolve-script-content.d.ts +19 -0
  162. package/dist/src/cli/resolve-script-content.d.ts.map +1 -0
  163. package/dist/src/cli/resolve-script-content.js +22 -0
  164. package/dist/src/cli/resolve-script-content.js.map +1 -0
  165. package/dist/src/cli/resolve-session.d.ts +21 -0
  166. package/dist/src/cli/resolve-session.d.ts.map +1 -0
  167. package/dist/src/cli/resolve-session.js +40 -0
  168. package/dist/src/cli/resolve-session.js.map +1 -0
  169. package/dist/src/cli/resolve-session.test.d.ts +5 -0
  170. package/dist/src/cli/resolve-session.test.d.ts.map +1 -0
  171. package/dist/src/cli/resolve-session.test.js +112 -0
  172. package/dist/src/cli/resolve-session.test.js.map +1 -0
  173. package/dist/src/cli/script-executor.d.ts +1 -0
  174. package/dist/src/cli/script-executor.d.ts.map +1 -1
  175. package/dist/src/cli/script-executor.js +7 -1
  176. package/dist/src/cli/script-executor.js.map +1 -1
  177. package/dist/src/cli/types.d.ts +11 -0
  178. package/dist/src/cli/types.d.ts.map +1 -0
  179. package/dist/src/cli/types.js +5 -0
  180. package/dist/src/cli/types.js.map +1 -0
  181. package/dist/src/commands/connect.d.ts +16 -0
  182. package/dist/src/commands/connect.d.ts.map +1 -0
  183. package/dist/src/commands/connect.js +15 -0
  184. package/dist/src/commands/connect.js.map +1 -0
  185. package/dist/src/commands/connect.test.d.ts +5 -0
  186. package/dist/src/commands/connect.test.d.ts.map +1 -0
  187. package/dist/src/commands/connect.test.js +46 -0
  188. package/dist/src/commands/connect.test.js.map +1 -0
  189. package/dist/src/commands/console/exec/exec.d.ts +43 -0
  190. package/dist/src/commands/console/exec/exec.d.ts.map +1 -0
  191. package/dist/src/commands/console/exec/exec.js +79 -0
  192. package/dist/src/commands/console/exec/exec.js.map +1 -0
  193. package/dist/src/commands/console/exec/exec.test.d.ts +5 -0
  194. package/dist/src/commands/console/exec/exec.test.d.ts.map +1 -0
  195. package/dist/src/commands/console/exec/exec.test.js +191 -0
  196. package/dist/src/commands/console/exec/exec.test.js.map +1 -0
  197. package/dist/src/commands/console/logs/logs.d.ts +23 -0
  198. package/dist/src/commands/console/logs/logs.d.ts.map +1 -0
  199. package/dist/src/commands/console/logs/logs.js +80 -0
  200. package/dist/src/commands/console/logs/logs.js.map +1 -0
  201. package/dist/src/commands/console/logs/logs.test.d.ts +5 -0
  202. package/dist/src/commands/console/logs/logs.test.d.ts.map +1 -0
  203. package/dist/src/commands/console/logs/logs.test.js +111 -0
  204. package/dist/src/commands/console/logs/logs.test.js.map +1 -0
  205. package/dist/src/commands/disconnect.d.ts +9 -0
  206. package/dist/src/commands/disconnect.d.ts.map +1 -0
  207. package/dist/src/commands/disconnect.js +8 -0
  208. package/dist/src/commands/disconnect.js.map +1 -0
  209. package/dist/src/commands/disconnect.test.d.ts +5 -0
  210. package/dist/src/commands/disconnect.test.d.ts.map +1 -0
  211. package/dist/src/commands/disconnect.test.js +17 -0
  212. package/dist/src/commands/disconnect.test.js.map +1 -0
  213. package/dist/src/commands/explorer/query/query.d.ts +31 -0
  214. package/dist/src/commands/explorer/query/query.d.ts.map +1 -0
  215. package/dist/src/commands/explorer/query/query.js +106 -0
  216. package/dist/src/commands/explorer/query/query.js.map +1 -0
  217. package/dist/src/commands/explorer/query/query.test.d.ts +5 -0
  218. package/dist/src/commands/explorer/query/query.test.d.ts.map +1 -0
  219. package/dist/src/commands/explorer/query/query.test.js +228 -0
  220. package/dist/src/commands/explorer/query/query.test.js.map +1 -0
  221. package/dist/src/commands/formatters.test.d.ts +6 -0
  222. package/dist/src/commands/formatters.test.d.ts.map +1 -0
  223. package/dist/src/commands/formatters.test.js +211 -0
  224. package/dist/src/commands/formatters.test.js.map +1 -0
  225. package/dist/src/commands/framework/action-loader.d.ts +25 -0
  226. package/dist/src/commands/framework/action-loader.d.ts.map +1 -0
  227. package/dist/src/commands/framework/action-loader.js +46 -0
  228. package/dist/src/commands/framework/action-loader.js.map +1 -0
  229. package/dist/src/commands/framework/action-loader.test.d.ts +5 -0
  230. package/dist/src/commands/framework/action-loader.test.d.ts.map +1 -0
  231. package/dist/src/commands/framework/action-loader.test.js +89 -0
  232. package/dist/src/commands/framework/action-loader.test.js.map +1 -0
  233. package/dist/src/commands/framework/arg-builder.d.ts +92 -0
  234. package/dist/src/commands/framework/arg-builder.d.ts.map +1 -0
  235. package/dist/src/commands/framework/arg-builder.js +137 -0
  236. package/dist/src/commands/framework/arg-builder.js.map +1 -0
  237. package/dist/src/commands/framework/arg-builder.test.d.ts +5 -0
  238. package/dist/src/commands/framework/arg-builder.test.d.ts.map +1 -0
  239. package/dist/src/commands/framework/arg-builder.test.js +246 -0
  240. package/dist/src/commands/framework/arg-builder.test.js.map +1 -0
  241. package/dist/src/commands/framework/command-registry.d.ts +23 -0
  242. package/dist/src/commands/framework/command-registry.d.ts.map +1 -0
  243. package/dist/src/commands/framework/command-registry.js +42 -0
  244. package/dist/src/commands/framework/command-registry.js.map +1 -0
  245. package/dist/src/commands/framework/command-registry.test.d.ts +5 -0
  246. package/dist/src/commands/framework/command-registry.test.d.ts.map +1 -0
  247. package/dist/src/commands/framework/command-registry.test.js +158 -0
  248. package/dist/src/commands/framework/command-registry.test.js.map +1 -0
  249. package/dist/src/commands/framework/define-command.d.ts +76 -0
  250. package/dist/src/commands/framework/define-command.d.ts.map +1 -0
  251. package/dist/src/commands/framework/define-command.js +28 -0
  252. package/dist/src/commands/framework/define-command.js.map +1 -0
  253. package/dist/src/commands/framework/define-command.test.d.ts +5 -0
  254. package/dist/src/commands/framework/define-command.test.d.ts.map +1 -0
  255. package/dist/src/commands/framework/define-command.test.js +135 -0
  256. package/dist/src/commands/framework/define-command.test.js.map +1 -0
  257. package/dist/src/commands/framework/index.d.ts +8 -0
  258. package/dist/src/commands/framework/index.d.ts.map +1 -0
  259. package/dist/src/commands/framework/index.js +8 -0
  260. package/dist/src/commands/framework/index.js.map +1 -0
  261. package/dist/src/commands/index.d.ts +20 -0
  262. package/dist/src/commands/index.d.ts.map +1 -0
  263. package/dist/src/commands/index.js +20 -0
  264. package/dist/src/commands/index.js.map +1 -0
  265. package/dist/src/commands/linux/inject-credentials/inject-credentials.d.ts +15 -0
  266. package/dist/src/commands/linux/inject-credentials/inject-credentials.d.ts.map +1 -0
  267. package/dist/src/commands/linux/inject-credentials/inject-credentials.js +88 -0
  268. package/dist/src/commands/linux/inject-credentials/inject-credentials.js.map +1 -0
  269. package/dist/src/commands/linux/setup/setup.d.ts +19 -0
  270. package/dist/src/commands/linux/setup/setup.d.ts.map +1 -0
  271. package/dist/src/commands/linux/setup/setup.js +107 -0
  272. package/dist/src/commands/linux/setup/setup.js.map +1 -0
  273. package/dist/src/commands/linux/status/status.d.ts +34 -0
  274. package/dist/src/commands/linux/status/status.d.ts.map +1 -0
  275. package/dist/src/commands/linux/status/status.js +134 -0
  276. package/dist/src/commands/linux/status/status.js.map +1 -0
  277. package/dist/src/commands/plugin/install/install.d.ts +10 -0
  278. package/dist/src/commands/plugin/install/install.d.ts.map +1 -0
  279. package/dist/src/commands/plugin/install/install.js +23 -0
  280. package/dist/src/commands/plugin/install/install.js.map +1 -0
  281. package/dist/src/commands/plugin/uninstall/uninstall.d.ts +9 -0
  282. package/dist/src/commands/plugin/uninstall/uninstall.d.ts.map +1 -0
  283. package/dist/src/commands/plugin/uninstall/uninstall.js +41 -0
  284. package/dist/src/commands/plugin/uninstall/uninstall.js.map +1 -0
  285. package/dist/src/commands/process/close/close.d.ts +22 -0
  286. package/dist/src/commands/process/close/close.d.ts.map +1 -0
  287. package/dist/src/commands/process/close/close.js +34 -0
  288. package/dist/src/commands/process/close/close.js.map +1 -0
  289. package/dist/src/commands/process/format-state.d.ts +7 -0
  290. package/dist/src/commands/process/format-state.d.ts.map +1 -0
  291. package/dist/src/commands/process/format-state.js +19 -0
  292. package/dist/src/commands/process/format-state.js.map +1 -0
  293. package/dist/src/commands/process/info/info.d.ts +17 -0
  294. package/dist/src/commands/process/info/info.d.ts.map +1 -0
  295. package/dist/src/commands/process/info/info.js +38 -0
  296. package/dist/src/commands/process/info/info.js.map +1 -0
  297. package/dist/src/commands/process/info/info.test.d.ts +5 -0
  298. package/dist/src/commands/process/info/info.test.d.ts.map +1 -0
  299. package/dist/src/commands/process/info/info.test.js +58 -0
  300. package/dist/src/commands/process/info/info.test.js.map +1 -0
  301. package/dist/src/commands/process/launch/launch.d.ts +17 -0
  302. package/dist/src/commands/process/launch/launch.d.ts.map +1 -0
  303. package/dist/src/commands/process/launch/launch.js +26 -0
  304. package/dist/src/commands/process/launch/launch.js.map +1 -0
  305. package/dist/src/commands/process/launch/launch.test.d.ts +5 -0
  306. package/dist/src/commands/process/launch/launch.test.d.ts.map +1 -0
  307. package/dist/src/commands/process/launch/launch.test.js +49 -0
  308. package/dist/src/commands/process/launch/launch.test.js.map +1 -0
  309. package/dist/src/commands/process/list/list.d.ts +16 -0
  310. package/dist/src/commands/process/list/list.d.ts.map +1 -0
  311. package/dist/src/commands/process/list/list.js +56 -0
  312. package/dist/src/commands/process/list/list.js.map +1 -0
  313. package/dist/src/commands/process/list/list.test.d.ts +5 -0
  314. package/dist/src/commands/process/list/list.test.d.ts.map +1 -0
  315. package/dist/src/commands/process/list/list.test.js +71 -0
  316. package/dist/src/commands/process/list/list.test.js.map +1 -0
  317. package/dist/src/commands/process/run/run.d.ts +31 -0
  318. package/dist/src/commands/process/run/run.d.ts.map +1 -0
  319. package/dist/src/commands/process/run/run.js +63 -0
  320. package/dist/src/commands/process/run/run.js.map +1 -0
  321. package/dist/src/commands/rgba-to-png.d.ts +17 -0
  322. package/dist/src/commands/rgba-to-png.d.ts.map +1 -0
  323. package/dist/src/commands/rgba-to-png.js +85 -0
  324. package/dist/src/commands/rgba-to-png.js.map +1 -0
  325. package/dist/src/commands/serve/serve.d.ts +17 -0
  326. package/dist/src/commands/serve/serve.d.ts.map +1 -0
  327. package/dist/src/commands/serve/serve.js +128 -0
  328. package/dist/src/commands/serve/serve.js.map +1 -0
  329. package/dist/src/commands/serve/serve.test.d.ts +5 -0
  330. package/dist/src/commands/serve/serve.test.d.ts.map +1 -0
  331. package/dist/src/commands/serve/serve.test.js +100 -0
  332. package/dist/src/commands/serve/serve.test.js.map +1 -0
  333. package/dist/src/commands/viewport/screenshot/screenshot.d.ts +17 -0
  334. package/dist/src/commands/viewport/screenshot/screenshot.d.ts.map +1 -0
  335. package/dist/src/commands/viewport/screenshot/screenshot.js +45 -0
  336. package/dist/src/commands/viewport/screenshot/screenshot.js.map +1 -0
  337. package/dist/src/commands/viewport/screenshot/screenshot.test.d.ts +5 -0
  338. package/dist/src/commands/viewport/screenshot/screenshot.test.d.ts.map +1 -0
  339. package/dist/src/commands/viewport/screenshot/screenshot.test.js +143 -0
  340. package/dist/src/commands/viewport/screenshot/screenshot.test.js.map +1 -0
  341. package/dist/src/docker/docker-delegator.d.ts +30 -0
  342. package/dist/src/docker/docker-delegator.d.ts.map +1 -0
  343. package/dist/src/docker/docker-delegator.js +201 -0
  344. package/dist/src/docker/docker-delegator.js.map +1 -0
  345. package/dist/src/docker/docker-delegator.test.d.ts +2 -0
  346. package/dist/src/docker/docker-delegator.test.d.ts.map +1 -0
  347. package/dist/src/docker/docker-delegator.test.js +132 -0
  348. package/dist/src/docker/docker-delegator.test.js.map +1 -0
  349. package/dist/src/index.d.ts +9 -2
  350. package/dist/src/index.d.ts.map +1 -1
  351. package/dist/src/index.js +6 -1
  352. package/dist/src/index.js.map +1 -1
  353. package/dist/src/index.test.d.ts +2 -0
  354. package/dist/src/index.test.d.ts.map +1 -0
  355. package/dist/src/index.test.js +51 -0
  356. package/dist/src/index.test.js.map +1 -0
  357. package/dist/src/linux/index.d.ts +12 -0
  358. package/dist/src/linux/index.d.ts.map +1 -0
  359. package/dist/src/linux/index.js +11 -0
  360. package/dist/src/linux/index.js.map +1 -0
  361. package/dist/src/linux/linux-config.d.ts +37 -0
  362. package/dist/src/linux/linux-config.d.ts.map +1 -0
  363. package/dist/src/linux/linux-config.js +70 -0
  364. package/dist/src/linux/linux-config.js.map +1 -0
  365. package/dist/src/linux/linux-config.test.d.ts +2 -0
  366. package/dist/src/linux/linux-config.test.d.ts.map +1 -0
  367. package/dist/src/linux/linux-config.test.js +54 -0
  368. package/dist/src/linux/linux-config.test.js.map +1 -0
  369. package/dist/src/linux/linux-credential-writer.d.ts +35 -0
  370. package/dist/src/linux/linux-credential-writer.d.ts.map +1 -0
  371. package/dist/src/linux/linux-credential-writer.js +300 -0
  372. package/dist/src/linux/linux-credential-writer.js.map +1 -0
  373. package/dist/src/linux/linux-display-manager.d.ts +24 -0
  374. package/dist/src/linux/linux-display-manager.d.ts.map +1 -0
  375. package/dist/src/linux/linux-display-manager.js +92 -0
  376. package/dist/src/linux/linux-display-manager.js.map +1 -0
  377. package/dist/src/linux/linux-env-guard.d.ts +13 -0
  378. package/dist/src/linux/linux-env-guard.d.ts.map +1 -0
  379. package/dist/src/linux/linux-env-guard.js +31 -0
  380. package/dist/src/linux/linux-env-guard.js.map +1 -0
  381. package/dist/src/linux/linux-env-guard.test.d.ts +2 -0
  382. package/dist/src/linux/linux-env-guard.test.d.ts.map +1 -0
  383. package/dist/src/linux/linux-env-guard.test.js +48 -0
  384. package/dist/src/linux/linux-env-guard.test.js.map +1 -0
  385. package/dist/src/linux/linux-fflags.d.ts +17 -0
  386. package/dist/src/linux/linux-fflags.d.ts.map +1 -0
  387. package/dist/src/linux/linux-fflags.js +33 -0
  388. package/dist/src/linux/linux-fflags.js.map +1 -0
  389. package/dist/src/linux/linux-fflags.test.d.ts +2 -0
  390. package/dist/src/linux/linux-fflags.test.d.ts.map +1 -0
  391. package/dist/src/linux/linux-fflags.test.js +55 -0
  392. package/dist/src/linux/linux-fflags.test.js.map +1 -0
  393. package/dist/src/linux/linux-prerequisites.d.ts +24 -0
  394. package/dist/src/linux/linux-prerequisites.d.ts.map +1 -0
  395. package/dist/src/linux/linux-prerequisites.js +118 -0
  396. package/dist/src/linux/linux-prerequisites.js.map +1 -0
  397. package/dist/src/linux/linux-shader-patcher.d.ts +17 -0
  398. package/dist/src/linux/linux-shader-patcher.d.ts.map +1 -0
  399. package/dist/src/linux/linux-shader-patcher.js +48 -0
  400. package/dist/src/linux/linux-shader-patcher.js.map +1 -0
  401. package/dist/src/linux/linux-shader-patcher.test.d.ts +2 -0
  402. package/dist/src/linux/linux-shader-patcher.test.d.ts.map +1 -0
  403. package/dist/src/linux/linux-shader-patcher.test.js +55 -0
  404. package/dist/src/linux/linux-shader-patcher.test.js.map +1 -0
  405. package/dist/src/linux/linux-studio-installer.d.ts +10 -0
  406. package/dist/src/linux/linux-studio-installer.d.ts.map +1 -0
  407. package/dist/src/linux/linux-studio-installer.js +79 -0
  408. package/dist/src/linux/linux-studio-installer.js.map +1 -0
  409. package/dist/src/linux/linux-studio-launcher.d.ts +10 -0
  410. package/dist/src/linux/linux-studio-launcher.d.ts.map +1 -0
  411. package/dist/src/linux/linux-studio-launcher.js +73 -0
  412. package/dist/src/linux/linux-studio-launcher.js.map +1 -0
  413. package/dist/src/linux/linux-version-resolver.d.ts +18 -0
  414. package/dist/src/linux/linux-version-resolver.d.ts.map +1 -0
  415. package/dist/src/linux/linux-version-resolver.js +49 -0
  416. package/dist/src/linux/linux-version-resolver.js.map +1 -0
  417. package/dist/src/linux/linux-wine-env.d.ts +11 -0
  418. package/dist/src/linux/linux-wine-env.d.ts.map +1 -0
  419. package/dist/src/linux/linux-wine-env.js +33 -0
  420. package/dist/src/linux/linux-wine-env.js.map +1 -0
  421. package/dist/src/linux/linux-wine-env.test.d.ts +2 -0
  422. package/dist/src/linux/linux-wine-env.test.d.ts.map +1 -0
  423. package/dist/src/linux/linux-wine-env.test.js +47 -0
  424. package/dist/src/linux/linux-wine-env.test.js.map +1 -0
  425. package/dist/src/plugin/persistent-plugin-installer.d.ts +21 -0
  426. package/dist/src/plugin/persistent-plugin-installer.d.ts.map +1 -0
  427. package/dist/src/plugin/persistent-plugin-installer.js +69 -0
  428. package/dist/src/plugin/persistent-plugin-installer.js.map +1 -0
  429. package/dist/src/plugin/persistent-plugin-installer.test.d.ts +5 -0
  430. package/dist/src/plugin/persistent-plugin-installer.test.d.ts.map +1 -0
  431. package/dist/src/plugin/persistent-plugin-installer.test.js +119 -0
  432. package/dist/src/plugin/persistent-plugin-installer.test.js.map +1 -0
  433. package/dist/src/plugin/plugin-discovery.d.ts +7 -0
  434. package/dist/src/plugin/plugin-discovery.d.ts.map +1 -0
  435. package/dist/src/plugin/plugin-discovery.js +18 -0
  436. package/dist/src/plugin/plugin-discovery.js.map +1 -0
  437. package/dist/src/plugin/plugin-discovery.test.d.ts +5 -0
  438. package/dist/src/plugin/plugin-discovery.test.d.ts.map +1 -0
  439. package/dist/src/plugin/plugin-discovery.test.js +55 -0
  440. package/dist/src/plugin/plugin-discovery.test.js.map +1 -0
  441. package/dist/src/plugin/plugin-injector.js +1 -1
  442. package/dist/src/plugin/plugin-injector.js.map +1 -1
  443. package/dist/src/process/studio-process-manager.d.ts +7 -3
  444. package/dist/src/process/studio-process-manager.d.ts.map +1 -1
  445. package/dist/src/process/studio-process-manager.js +40 -11
  446. package/dist/src/process/studio-process-manager.js.map +1 -1
  447. package/dist/src/process/studio-process-manager.test.js +18 -1
  448. package/dist/src/process/studio-process-manager.test.js.map +1 -1
  449. package/dist/src/server/action-dispatcher.d.ts +35 -0
  450. package/dist/src/server/action-dispatcher.d.ts.map +1 -0
  451. package/dist/src/server/action-dispatcher.js +67 -0
  452. package/dist/src/server/action-dispatcher.js.map +1 -0
  453. package/dist/src/server/action-dispatcher.test.d.ts +6 -0
  454. package/dist/src/server/action-dispatcher.test.d.ts.map +1 -0
  455. package/dist/src/server/action-dispatcher.test.js +173 -0
  456. package/dist/src/server/action-dispatcher.test.js.map +1 -0
  457. package/dist/src/server/index.d.ts +1 -1
  458. package/dist/src/server/index.d.ts.map +1 -1
  459. package/dist/src/server/pending-request-map.d.ts +33 -0
  460. package/dist/src/server/pending-request-map.d.ts.map +1 -0
  461. package/dist/src/server/pending-request-map.js +69 -0
  462. package/dist/src/server/pending-request-map.js.map +1 -0
  463. package/dist/src/server/pending-request-map.test.d.ts +2 -0
  464. package/dist/src/server/pending-request-map.test.d.ts.map +1 -0
  465. package/dist/src/server/pending-request-map.test.js +192 -0
  466. package/dist/src/server/pending-request-map.test.js.map +1 -0
  467. package/dist/src/server/plugin-detection.test.d.ts +7 -0
  468. package/dist/src/server/plugin-detection.test.d.ts.map +1 -0
  469. package/dist/src/server/plugin-detection.test.js +154 -0
  470. package/dist/src/server/plugin-detection.test.js.map +1 -0
  471. package/dist/src/server/studio-bridge-server.d.ts +44 -7
  472. package/dist/src/server/studio-bridge-server.d.ts.map +1 -1
  473. package/dist/src/server/studio-bridge-server.js +341 -91
  474. package/dist/src/server/studio-bridge-server.js.map +1 -1
  475. package/dist/src/server/studio-bridge-server.test.js +231 -207
  476. package/dist/src/server/studio-bridge-server.test.js.map +1 -1
  477. package/dist/src/server/web-socket-protocol-basic.test.d.ts +2 -0
  478. package/dist/src/server/web-socket-protocol-basic.test.d.ts.map +1 -0
  479. package/dist/src/server/web-socket-protocol-basic.test.js +98 -0
  480. package/dist/src/server/web-socket-protocol-basic.test.js.map +1 -0
  481. package/dist/src/server/web-socket-protocol.d.ts +218 -20
  482. package/dist/src/server/web-socket-protocol.d.ts.map +1 -1
  483. package/dist/src/server/web-socket-protocol.js +346 -20
  484. package/dist/src/server/web-socket-protocol.js.map +1 -1
  485. package/dist/src/server/web-socket-protocol.test.js +572 -146
  486. package/dist/src/server/web-socket-protocol.test.js.map +1 -1
  487. package/dist/src/test/e2e/hand-off.test.d.ts +9 -0
  488. package/dist/src/test/e2e/hand-off.test.d.ts.map +1 -0
  489. package/dist/src/test/e2e/hand-off.test.js +274 -0
  490. package/dist/src/test/e2e/hand-off.test.js.map +1 -0
  491. package/dist/src/test/e2e/persistent-session.test.d.ts +11 -0
  492. package/dist/src/test/e2e/persistent-session.test.d.ts.map +1 -0
  493. package/dist/src/test/e2e/persistent-session.test.js +367 -0
  494. package/dist/src/test/e2e/persistent-session.test.js.map +1 -0
  495. package/dist/src/test/e2e/split-server.test.d.ts +14 -0
  496. package/dist/src/test/e2e/split-server.test.d.ts.map +1 -0
  497. package/dist/src/test/e2e/split-server.test.js +230 -0
  498. package/dist/src/test/e2e/split-server.test.js.map +1 -0
  499. package/dist/src/test/helpers/mock-plugin-client.d.ts +69 -0
  500. package/dist/src/test/helpers/mock-plugin-client.d.ts.map +1 -0
  501. package/dist/src/test/helpers/mock-plugin-client.js +213 -0
  502. package/dist/src/test/helpers/mock-plugin-client.js.map +1 -0
  503. package/dist/tsconfig.tsbuildinfo +1 -1
  504. package/docker/.dockerignore +2 -0
  505. package/docker/Dockerfile +113 -0
  506. package/docker/docker-compose.yml +20 -0
  507. package/docker/entrypoint.sh +19 -0
  508. package/package.json +8 -6
  509. package/src/bridge/bridge-connection-remote.test.ts +189 -0
  510. package/src/bridge/bridge-connection.test.ts +1076 -0
  511. package/src/bridge/bridge-connection.ts +718 -0
  512. package/src/bridge/bridge-session.test.ts +336 -0
  513. package/src/bridge/bridge-session.ts +365 -0
  514. package/src/bridge/index.ts +42 -0
  515. package/src/bridge/internal/__tests__/failover-crash.test.ts +191 -0
  516. package/src/bridge/internal/__tests__/failover-graceful.test.ts +268 -0
  517. package/src/bridge/internal/__tests__/failover-inflight.test.ts +329 -0
  518. package/src/bridge/internal/__tests__/host-client-integration.test.ts +387 -0
  519. package/src/bridge/internal/bridge-client.test.ts +399 -0
  520. package/src/bridge/internal/bridge-client.ts +434 -0
  521. package/src/bridge/internal/bridge-host.test.ts +501 -0
  522. package/src/bridge/internal/bridge-host.ts +531 -0
  523. package/src/bridge/internal/environment-detection.test.ts +180 -0
  524. package/src/bridge/internal/environment-detection.ts +119 -0
  525. package/src/bridge/internal/hand-off.test.ts +408 -0
  526. package/src/bridge/internal/hand-off.ts +275 -0
  527. package/src/bridge/internal/health-endpoint.test.ts +147 -0
  528. package/src/bridge/internal/health-endpoint.ts +100 -0
  529. package/src/bridge/internal/host-protocol.test.ts +415 -0
  530. package/src/bridge/internal/host-protocol.ts +255 -0
  531. package/src/bridge/internal/session-tracker.test.ts +535 -0
  532. package/src/bridge/internal/session-tracker.ts +198 -0
  533. package/src/bridge/internal/transport-client.test.ts +241 -0
  534. package/src/bridge/internal/transport-client.ts +194 -0
  535. package/src/bridge/internal/transport-server.test.ts +220 -0
  536. package/src/bridge/internal/transport-server.ts +242 -0
  537. package/src/bridge/types.ts +161 -0
  538. package/src/cli/adapters/cli-command-adapter-handler.test.ts +318 -0
  539. package/src/cli/adapters/cli-command-adapter.test.ts +221 -0
  540. package/src/cli/adapters/cli-command-adapter.ts +342 -0
  541. package/src/cli/adapters/group-builder.test.ts +146 -0
  542. package/src/cli/adapters/group-builder.ts +81 -0
  543. package/src/cli/adapters/help-formatter.test.ts +97 -0
  544. package/src/cli/adapters/help-formatter.ts +86 -0
  545. package/src/cli/adapters/target-resolver.test.ts +222 -0
  546. package/src/cli/adapters/target-resolver.ts +144 -0
  547. package/src/cli/args/global-args.ts +2 -0
  548. package/src/cli/cli.ts +100 -21
  549. package/src/cli/resolve-script-content.ts +36 -0
  550. package/src/cli/resolve-session.test.ts +141 -0
  551. package/src/cli/resolve-session.ts +66 -0
  552. package/src/cli/script-executor.ts +22 -4
  553. package/src/cli/types.ts +11 -0
  554. package/src/commands/connect.test.ts +61 -0
  555. package/src/commands/connect.ts +32 -0
  556. package/src/commands/console/exec/exec.test.ts +258 -0
  557. package/src/commands/console/exec/exec.ts +130 -0
  558. package/src/commands/console/exec/execute.luau +202 -0
  559. package/src/commands/console/logs/logs.test.ts +138 -0
  560. package/src/commands/console/logs/logs.ts +115 -0
  561. package/src/commands/console/logs/query-logs.luau +76 -0
  562. package/src/commands/disconnect.test.ts +21 -0
  563. package/src/commands/disconnect.ts +12 -0
  564. package/src/commands/explorer/query/query-data-model.luau +206 -0
  565. package/src/commands/explorer/query/query.test.ts +297 -0
  566. package/src/commands/explorer/query/query.ts +157 -0
  567. package/src/commands/formatters.test.ts +237 -0
  568. package/src/commands/framework/action-loader.test.ts +118 -0
  569. package/src/commands/framework/action-loader.ts +65 -0
  570. package/src/commands/framework/arg-builder.test.ts +298 -0
  571. package/src/commands/framework/arg-builder.ts +203 -0
  572. package/src/commands/framework/command-registry.test.ts +204 -0
  573. package/src/commands/framework/command-registry.ts +51 -0
  574. package/src/commands/framework/define-command.test.ts +161 -0
  575. package/src/commands/framework/define-command.ts +114 -0
  576. package/src/commands/framework/index.ts +33 -0
  577. package/src/commands/index.ts +72 -0
  578. package/src/commands/linux/inject-credentials/inject-credentials.ts +118 -0
  579. package/src/commands/linux/setup/setup.ts +145 -0
  580. package/src/commands/linux/status/status.ts +180 -0
  581. package/src/commands/plugin/install/install.ts +31 -0
  582. package/src/commands/plugin/uninstall/uninstall.ts +54 -0
  583. package/src/commands/process/close/close.ts +52 -0
  584. package/src/commands/process/format-state.ts +21 -0
  585. package/src/commands/process/info/info.test.ts +76 -0
  586. package/src/commands/process/info/info.ts +54 -0
  587. package/src/commands/process/info/query-state.luau +48 -0
  588. package/src/commands/process/launch/launch.test.ts +65 -0
  589. package/src/commands/process/launch/launch.ts +45 -0
  590. package/src/commands/process/list/list.test.ts +82 -0
  591. package/src/commands/process/list/list.ts +75 -0
  592. package/src/commands/process/run/run.ts +98 -0
  593. package/src/commands/rgba-to-png.ts +98 -0
  594. package/src/commands/serve/serve.test.ts +139 -0
  595. package/src/commands/serve/serve.ts +161 -0
  596. package/src/commands/viewport/screenshot/capture-screenshot.luau +247 -0
  597. package/src/commands/viewport/screenshot/screenshot.test.ts +181 -0
  598. package/src/commands/viewport/screenshot/screenshot.ts +71 -0
  599. package/src/docker/docker-delegator.test.ts +159 -0
  600. package/src/docker/docker-delegator.ts +240 -0
  601. package/src/index.test.ts +58 -0
  602. package/src/index.ts +104 -3
  603. package/src/linux/README.md +130 -0
  604. package/src/linux/index.ts +25 -0
  605. package/src/linux/linux-config.test.ts +66 -0
  606. package/src/linux/linux-config.ts +102 -0
  607. package/src/linux/linux-credential-writer.ts +421 -0
  608. package/src/linux/linux-display-manager.ts +106 -0
  609. package/src/linux/linux-env-guard.test.ts +62 -0
  610. package/src/linux/linux-env-guard.ts +38 -0
  611. package/src/linux/linux-fflags.test.ts +78 -0
  612. package/src/linux/linux-fflags.ts +48 -0
  613. package/src/linux/linux-prerequisites.ts +152 -0
  614. package/src/linux/linux-shader-patcher.test.ts +76 -0
  615. package/src/linux/linux-shader-patcher.ts +56 -0
  616. package/src/linux/linux-studio-installer.ts +113 -0
  617. package/src/linux/linux-studio-launcher.ts +90 -0
  618. package/src/linux/linux-version-resolver.ts +74 -0
  619. package/src/linux/linux-wine-env.test.ts +56 -0
  620. package/src/linux/linux-wine-env.ts +38 -0
  621. package/src/linux/write-cred.c +48 -0
  622. package/src/plugin/persistent-plugin-installer.test.ts +171 -0
  623. package/src/plugin/persistent-plugin-installer.ts +90 -0
  624. package/src/plugin/plugin-discovery.test.ts +70 -0
  625. package/src/plugin/plugin-discovery.ts +21 -0
  626. package/src/plugin/plugin-injector.ts +1 -1
  627. package/src/process/studio-process-manager.test.ts +22 -1
  628. package/src/process/studio-process-manager.ts +59 -18
  629. package/src/server/action-dispatcher.test.ts +240 -0
  630. package/src/server/action-dispatcher.ts +89 -0
  631. package/src/server/index.ts +0 -3
  632. package/src/server/pending-request-map.test.ts +261 -0
  633. package/src/server/pending-request-map.ts +87 -0
  634. package/src/server/plugin-detection.test.ts +195 -0
  635. package/src/server/studio-bridge-server.test.ts +321 -283
  636. package/src/server/studio-bridge-server.ts +469 -111
  637. package/src/server/web-socket-protocol-basic.test.ts +131 -0
  638. package/src/server/web-socket-protocol.test.ts +658 -159
  639. package/src/server/web-socket-protocol.ts +668 -58
  640. package/src/test/e2e/hand-off.test.ts +338 -0
  641. package/src/test/e2e/persistent-session.test.ts +442 -0
  642. package/src/test/e2e/split-server.test.ts +290 -0
  643. package/src/test/helpers/mock-plugin-client.ts +276 -0
  644. package/templates/studio-bridge-plugin/src/Shared/ActionRouter.luau +245 -0
  645. package/templates/studio-bridge-plugin/src/Shared/DiscoveryStateMachine.luau +203 -0
  646. package/templates/studio-bridge-plugin/src/Shared/MessageBuffer.luau +144 -0
  647. package/templates/studio-bridge-plugin/src/Shared/Protocol.luau +132 -0
  648. package/templates/studio-bridge-plugin/src/StudioBridgePlugin.server.lua +364 -133
  649. package/templates/studio-bridge-plugin/src/Vendor/png.luau +1247 -0
  650. package/templates/studio-bridge-plugin-test/test/actions.test.luau +580 -0
  651. package/templates/studio-bridge-plugin-test/test/discovery.test.luau +622 -0
  652. package/templates/studio-bridge-plugin-test/test/execute-handler.test.luau +406 -0
  653. package/templates/studio-bridge-plugin-test/test/hash-lifecycle.test.luau +814 -0
  654. package/templates/studio-bridge-plugin-test/test/integration.test.luau +1020 -0
  655. package/templates/studio-bridge-plugin-test/test/new-actions.test.luau +339 -0
  656. package/templates/studio-bridge-plugin-test/test/plugin-entry.test.luau +493 -0
  657. package/templates/studio-bridge-plugin-test/test/protocol.test.luau +506 -0
  658. package/templates/studio-bridge-plugin-test/test/roblox-mocks.luau +108 -0
  659. package/templates/studio-bridge-plugin-test/test/test-runner.luau +112 -0
  660. package/dist/src/cli/commands/exec-command.d.ts +0 -15
  661. package/dist/src/cli/commands/exec-command.d.ts.map +0 -1
  662. package/dist/src/cli/commands/exec-command.js +0 -35
  663. package/dist/src/cli/commands/exec-command.js.map +0 -1
  664. package/dist/src/cli/commands/run-command.d.ts +0 -15
  665. package/dist/src/cli/commands/run-command.d.ts.map +0 -1
  666. package/dist/src/cli/commands/run-command.js +0 -47
  667. package/dist/src/cli/commands/run-command.js.map +0 -1
  668. package/dist/src/cli/commands/terminal/terminal-command.d.ts +0 -17
  669. package/dist/src/cli/commands/terminal/terminal-command.d.ts.map +0 -1
  670. package/dist/src/cli/commands/terminal/terminal-command.js +0 -41
  671. package/dist/src/cli/commands/terminal/terminal-command.js.map +0 -1
  672. package/dist/src/cli/commands/terminal/terminal-editor.d.ts +0 -43
  673. package/dist/src/cli/commands/terminal/terminal-editor.d.ts.map +0 -1
  674. package/dist/src/cli/commands/terminal/terminal-editor.js +0 -430
  675. package/dist/src/cli/commands/terminal/terminal-editor.js.map +0 -1
  676. package/dist/src/cli/commands/terminal/terminal-mode.d.ts +0 -13
  677. package/dist/src/cli/commands/terminal/terminal-mode.d.ts.map +0 -1
  678. package/dist/src/cli/commands/terminal/terminal-mode.js +0 -141
  679. package/dist/src/cli/commands/terminal/terminal-mode.js.map +0 -1
  680. package/dist/src/server/web-socket-protocol.smoke.test.d.ts +0 -6
  681. package/dist/src/server/web-socket-protocol.smoke.test.d.ts.map +0 -1
  682. package/dist/src/server/web-socket-protocol.smoke.test.js +0 -196
  683. package/dist/src/server/web-socket-protocol.smoke.test.js.map +0 -1
  684. package/src/cli/commands/exec-command.ts +0 -48
  685. package/src/cli/commands/run-command.ts +0 -63
  686. package/src/cli/commands/terminal/terminal-command.ts +0 -54
  687. package/src/cli/commands/terminal/terminal-editor.ts +0 -500
  688. package/src/cli/commands/terminal/terminal-mode.ts +0 -184
  689. package/src/server/web-socket-protocol.smoke.test.ts +0 -255
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Public entry point for connecting to the studio-bridge network. Handles
3
+ * host/client role detection transparently. Consumers never create a
4
+ * BridgeHost, BridgeClient, TransportServer, or any other internal type.
5
+ *
6
+ * Use the static factory `connectAsync()` to create instances.
7
+ */
8
+ import { EventEmitter } from 'events';
9
+ import { BridgeSession } from './bridge-session.js';
10
+ import type { SessionInfo, SessionContext, InstanceInfo } from './types.js';
11
+ export interface BridgeConnectionOptions {
12
+ /** Port for the bridge host. Default: 38741. */
13
+ port?: number;
14
+ /** Max time to wait for initial connection setup. Default: 30_000ms. */
15
+ timeoutMs?: number;
16
+ /** Keep the host alive even when idle. Default: false. */
17
+ keepAlive?: boolean;
18
+ /** Skip local port-bind attempt and connect directly as client (host:port). */
19
+ remoteHost?: string;
20
+ /** Force local mode -- skip devcontainer auto-detection. */
21
+ local?: boolean;
22
+ /**
23
+ * When true and this process becomes the host, wait for active Studios to
24
+ * discover and connect before returning. Use for short-lived commands that
25
+ * need all sessions available immediately. Default: false.
26
+ */
27
+ waitForSessions?: boolean;
28
+ }
29
+ export declare class BridgeConnection extends EventEmitter {
30
+ private _role;
31
+ private _isConnected;
32
+ private _keepAlive;
33
+ private _hasSettled;
34
+ private _host;
35
+ private _tracker;
36
+ private _hostSessions;
37
+ private _hostHandles;
38
+ private _client;
39
+ private _idleTimer;
40
+ private constructor();
41
+ /**
42
+ * Connect to the studio-bridge network and return a ready-to-use
43
+ * BridgeConnection.
44
+ *
45
+ * - If remoteHost is specified: connects directly as a client.
46
+ * - If local is specified: skips devcontainer auto-detection, uses local mode.
47
+ * - If no host is running: binds the port, becomes the host.
48
+ * - If a host is running: connects as a client.
49
+ */
50
+ static connectAsync(options?: BridgeConnectionOptions): Promise<BridgeConnection>;
51
+ disconnectAsync(): Promise<void>;
52
+ /** Whether this process ended up as host or client. */
53
+ get role(): 'host' | 'client';
54
+ /** Whether the connection is currently active. */
55
+ get isConnected(): boolean;
56
+ /** The actual port the bridge is bound to (host) or connected to (client). */
57
+ get port(): number;
58
+ /** List all currently connected Studio sessions. */
59
+ listSessions(): SessionInfo[];
60
+ /**
61
+ * List unique Studio instances. Each instance groups 1-3 context sessions
62
+ * that share the same instanceId.
63
+ */
64
+ listInstances(): InstanceInfo[];
65
+ /** Get a session handle by ID. Returns undefined if not connected. */
66
+ getSession(sessionId: string): BridgeSession | undefined;
67
+ /**
68
+ * Resolve a session for command execution. Instance-aware: groups sessions
69
+ * by instanceId and auto-selects context within an instance.
70
+ *
71
+ * Algorithm (from tech-spec 07, section 6.7):
72
+ * 1. If sessionId -> return that specific session.
73
+ * 2. If instanceId -> select that instance, then apply context selection.
74
+ * 3. Collect unique instances.
75
+ * 4. 0 instances -> throw SessionNotFoundError.
76
+ * 5. 1 instance:
77
+ * a. If context -> return matching context. Throw ContextNotFoundError if not found.
78
+ * b. If 1 context -> return it.
79
+ * c. If N contexts (Play mode) -> return Edit context by default.
80
+ * 6. N instances -> throw SessionNotFoundError with instance list.
81
+ */
82
+ resolveSessionAsync(sessionId?: string, context?: SessionContext, instanceId?: string): Promise<BridgeSession>;
83
+ /** Resolves with the first connected session. Rejects after timeout. */
84
+ waitForSessionAsync(timeout?: number): Promise<BridgeSession>;
85
+ /**
86
+ * Ensure that session discovery has completed at least once for this
87
+ * host connection. No-op if already settled, not a host, or sessions
88
+ * are already connected.
89
+ */
90
+ private _ensureSettledAsync;
91
+ /**
92
+ * Wait for all active Studios to discover this host and connect. Waits for
93
+ * the first session, then keeps waiting until no new sessions arrive for a
94
+ * full plugin poll cycle (~2.5s). Guarantees all polling plugins have had
95
+ * a chance to find the host. Safe to call when not a host (returns immediately).
96
+ */
97
+ waitForSessionsToSettleAsync(options?: {
98
+ /** Max time to wait for the first session (ms). Default: 5000 */
99
+ firstSessionTimeout?: number;
100
+ /** How long to wait after the last connection before considering settled (ms). Default: 4000 */
101
+ settleMs?: number;
102
+ /** Absolute max wait time (ms). Default: 15000 */
103
+ maxMs?: number;
104
+ }): Promise<void>;
105
+ private _initHostAsync;
106
+ private _initClientAsync;
107
+ private static _deriveContext;
108
+ private _resolveByInstance;
109
+ private _resetIdleTimer;
110
+ private _clearIdleTimer;
111
+ }
112
+ //# sourceMappingURL=bridge-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-connection.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridge-connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAMpD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI5E,MAAM,WAAW,uBAAuB;IACtC,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AA+CD,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,WAAW,CAAkB;IAGrC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,YAAY,CAA+C;IAGnE,OAAO,CAAC,OAAO,CAA2B;IAG1C,OAAO,CAAC,UAAU,CAA4C;IAE9D,OAAO;IASP;;;;;;;;OAQG;WACU,YAAY,CACvB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,gBAAgB,CAAC;IAgGtB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAmCtC,uDAAuD;IACvD,IAAI,IAAI,IAAI,MAAM,GAAG,QAAQ,CAE5B;IAED,kDAAkD;IAClD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,8EAA8E;IAC9E,IAAI,IAAI,IAAI,MAAM,CAKjB;IAED,oDAAoD;IACpD,YAAY,IAAI,WAAW,EAAE;IAY7B;;;OAGG;IACH,aAAa,IAAI,YAAY,EAAE;IAY/B,sEAAsE;IACtE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAYxD;;;;;;;;;;;;;;OAcG;IACG,mBAAmB,CACvB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,EACxB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC;IAuCzB,wEAAwE;IAClE,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkCnE;;;;OAIG;YACW,mBAAmB;IAuBjC;;;;;OAKG;IACG,4BAA4B,CAAC,OAAO,CAAC,EAAE;QAC3C,iEAAiE;QACjE,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,gGAAgG;QAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,kDAAkD;QAClD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,IAAI,CAAC;YAsCH,cAAc;YAyGd,gBAAgB;IA2B9B,OAAO,CAAC,MAAM,CAAC,cAAc;IAM7B,OAAO,CAAC,kBAAkB;IAsD1B,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,eAAe;CAMxB"}
@@ -0,0 +1,528 @@
1
+ /**
2
+ * Public entry point for connecting to the studio-bridge network. Handles
3
+ * host/client role detection transparently. Consumers never create a
4
+ * BridgeHost, BridgeClient, TransportServer, or any other internal type.
5
+ *
6
+ * Use the static factory `connectAsync()` to create instances.
7
+ */
8
+ import { EventEmitter } from 'events';
9
+ import { BridgeHost } from './internal/bridge-host.js';
10
+ import { BridgeClient } from './internal/bridge-client.js';
11
+ import { SessionTracker, } from './internal/session-tracker.js';
12
+ import { detectRoleAsync, getDefaultRemoteHost, } from './internal/environment-detection.js';
13
+ import { BridgeSession } from './bridge-session.js';
14
+ import { SessionNotFoundError, ContextNotFoundError } from './types.js';
15
+ import { OutputHelper } from '@quenty/cli-output-helpers';
16
+ const DEFAULT_PORT = 38741;
17
+ const DEFAULT_TIMEOUT_MS = 30_000;
18
+ const IDLE_EXIT_GRACE_MS = 5_000;
19
+ /**
20
+ * Transport handle that relays messages to a plugin's WebSocket via BridgeHost.
21
+ * Used by SessionTracker in host mode so that BridgeSession.sendActionAsync()
22
+ * works the same way whether we're a host or a client.
23
+ */
24
+ class HostTransportHandle extends EventEmitter {
25
+ _connected = true;
26
+ _sessionId;
27
+ _host;
28
+ constructor(sessionId, host) {
29
+ super();
30
+ this._sessionId = sessionId;
31
+ this._host = host;
32
+ }
33
+ get isConnected() {
34
+ return this._connected;
35
+ }
36
+ async sendActionAsync(message, timeoutMs) {
37
+ return this._host.sendToPluginAsync(this._sessionId, message, timeoutMs);
38
+ }
39
+ sendMessage(message) {
40
+ this._host.sendToPlugin(this._sessionId, message);
41
+ }
42
+ markDisconnected() {
43
+ this._connected = false;
44
+ this.emit('disconnected');
45
+ }
46
+ }
47
+ export class BridgeConnection extends EventEmitter {
48
+ _role;
49
+ _isConnected = false;
50
+ _keepAlive;
51
+ _hasSettled = false;
52
+ // Host mode internals
53
+ _host;
54
+ _tracker;
55
+ _hostSessions = new Map();
56
+ _hostHandles = new Map();
57
+ // Client mode internals
58
+ _client;
59
+ // Idle exit
60
+ _idleTimer;
61
+ constructor(role, keepAlive) {
62
+ super();
63
+ this._role = role;
64
+ this._keepAlive = keepAlive;
65
+ // keepAlive connections (serve mode) manage their own lifecycle —
66
+ // don't auto-settle in resolveSessionAsync
67
+ this._hasSettled = keepAlive;
68
+ }
69
+ /**
70
+ * Connect to the studio-bridge network and return a ready-to-use
71
+ * BridgeConnection.
72
+ *
73
+ * - If remoteHost is specified: connects directly as a client.
74
+ * - If local is specified: skips devcontainer auto-detection, uses local mode.
75
+ * - If no host is running: binds the port, becomes the host.
76
+ * - If a host is running: connects as a client.
77
+ */
78
+ static async connectAsync(options) {
79
+ const keepAlive = options?.keepAlive ?? false;
80
+ const remoteHost = options?.remoteHost;
81
+ let parsedRemoteHost;
82
+ let port = options?.port ?? DEFAULT_PORT;
83
+ if (remoteHost) {
84
+ if (remoteHost.includes(':')) {
85
+ const parts = remoteHost.split(':');
86
+ parsedRemoteHost = remoteHost;
87
+ port = parseInt(parts[parts.length - 1], 10) || DEFAULT_PORT;
88
+ }
89
+ else {
90
+ parsedRemoteHost = `${remoteHost}:${port}`;
91
+ }
92
+ }
93
+ // Devcontainer auto-detection: if no explicit remoteHost and not forced local,
94
+ // try connecting to the default remote host with a short timeout before falling
95
+ // back to local mode.
96
+ if (!parsedRemoteHost && !options?.local) {
97
+ const autoRemoteHost = getDefaultRemoteHost();
98
+ if (autoRemoteHost) {
99
+ const AUTO_DETECT_TIMEOUT_MS = 3_000;
100
+ try {
101
+ const autoConn = new BridgeConnection('client', keepAlive);
102
+ const autoHost = autoRemoteHost.split(':')[0];
103
+ const autoPort = parseInt(autoRemoteHost.split(':')[1], 10) || DEFAULT_PORT;
104
+ await Promise.race([
105
+ autoConn._initClientAsync(autoPort, autoHost),
106
+ new Promise((_, reject) => setTimeout(() => reject(new Error('Auto-detection timed out')), AUTO_DETECT_TIMEOUT_MS)),
107
+ ]);
108
+ return autoConn;
109
+ }
110
+ catch {
111
+ console.warn(`Devcontainer detected, but could not connect to bridge host at ${autoRemoteHost}. ` +
112
+ `Falling back to local mode. Run \`studio-bridge serve\` on the host OS, ` +
113
+ `or use --remote to specify a different address.`);
114
+ }
115
+ }
116
+ }
117
+ const detection = await detectRoleAsync({
118
+ port,
119
+ remoteHost: parsedRemoteHost,
120
+ });
121
+ const conn = new BridgeConnection(detection.role, keepAlive);
122
+ OutputHelper.verbose(`[bridge] Role: ${detection.role}, port: ${detection.port}`);
123
+ if (detection.role === 'host') {
124
+ await conn._initHostAsync(detection.port);
125
+ }
126
+ else {
127
+ try {
128
+ await conn._initClientAsync(detection.port, parsedRemoteHost);
129
+ }
130
+ catch (err) {
131
+ if (parsedRemoteHost && err instanceof Error) {
132
+ const code = err.code;
133
+ if (code === 'ECONNREFUSED') {
134
+ throw new Error(`Could not connect to bridge host at ${parsedRemoteHost}. ` +
135
+ `Is \`studio-bridge serve\` running on the host?`);
136
+ }
137
+ if (err.message.includes('timed out') ||
138
+ err.message.includes('timeout')) {
139
+ throw new Error(`Connection to bridge host at ${parsedRemoteHost} timed out after 5 seconds.`);
140
+ }
141
+ }
142
+ throw err;
143
+ }
144
+ }
145
+ // If requested, wait for active Studios to discover this host and connect
146
+ if (conn._role === 'host' && options?.waitForSessions) {
147
+ await conn._ensureSettledAsync();
148
+ }
149
+ return conn;
150
+ }
151
+ async disconnectAsync() {
152
+ if (!this._isConnected) {
153
+ return;
154
+ }
155
+ OutputHelper.verbose(`[bridge] disconnectAsync called (role=${this._role})`);
156
+ OutputHelper.verbose(`[bridge] disconnect stack: ${new Error().stack
157
+ ?.split('\n')
158
+ .slice(1, 5)
159
+ .map((s) => s.trim())
160
+ .join(' <- ')}`);
161
+ this._clearIdleTimer();
162
+ this._isConnected = false;
163
+ if (this._role === 'host' && this._host) {
164
+ for (const handle of this._hostHandles.values()) {
165
+ handle.markDisconnected();
166
+ }
167
+ await this._host.shutdownAsync();
168
+ this._host = undefined;
169
+ this._tracker = undefined;
170
+ this._hostSessions.clear();
171
+ this._hostHandles.clear();
172
+ }
173
+ if (this._role === 'client' && this._client) {
174
+ await this._client.disconnectAsync();
175
+ this._client = undefined;
176
+ }
177
+ }
178
+ /** Whether this process ended up as host or client. */
179
+ get role() {
180
+ return this._role;
181
+ }
182
+ /** Whether the connection is currently active. */
183
+ get isConnected() {
184
+ return this._isConnected;
185
+ }
186
+ /** The actual port the bridge is bound to (host) or connected to (client). */
187
+ get port() {
188
+ if (this._role === 'host' && this._host) {
189
+ return this._host.port;
190
+ }
191
+ return 0;
192
+ }
193
+ /** List all currently connected Studio sessions. */
194
+ listSessions() {
195
+ if (this._role === 'host' && this._tracker) {
196
+ return this._tracker.listSessions();
197
+ }
198
+ if (this._role === 'client' && this._client) {
199
+ return this._client.listSessions();
200
+ }
201
+ return [];
202
+ }
203
+ /**
204
+ * List unique Studio instances. Each instance groups 1-3 context sessions
205
+ * that share the same instanceId.
206
+ */
207
+ listInstances() {
208
+ if (this._role === 'host' && this._tracker) {
209
+ return this._tracker.listInstances();
210
+ }
211
+ if (this._role === 'client' && this._client) {
212
+ return this._client.listInstances();
213
+ }
214
+ return [];
215
+ }
216
+ /** Get a session handle by ID. Returns undefined if not connected. */
217
+ getSession(sessionId) {
218
+ if (this._role === 'host') {
219
+ return this._hostSessions.get(sessionId);
220
+ }
221
+ if (this._role === 'client' && this._client) {
222
+ return this._client.getSession(sessionId);
223
+ }
224
+ return undefined;
225
+ }
226
+ /**
227
+ * Resolve a session for command execution. Instance-aware: groups sessions
228
+ * by instanceId and auto-selects context within an instance.
229
+ *
230
+ * Algorithm (from tech-spec 07, section 6.7):
231
+ * 1. If sessionId -> return that specific session.
232
+ * 2. If instanceId -> select that instance, then apply context selection.
233
+ * 3. Collect unique instances.
234
+ * 4. 0 instances -> throw SessionNotFoundError.
235
+ * 5. 1 instance:
236
+ * a. If context -> return matching context. Throw ContextNotFoundError if not found.
237
+ * b. If 1 context -> return it.
238
+ * c. If N contexts (Play mode) -> return Edit context by default.
239
+ * 6. N instances -> throw SessionNotFoundError with instance list.
240
+ */
241
+ async resolveSessionAsync(sessionId, context, instanceId) {
242
+ // Fresh host hasn't settled yet — wait for persistent plugins to discover us
243
+ await this._ensureSettledAsync();
244
+ if (sessionId) {
245
+ const session = this.getSession(sessionId);
246
+ if (session) {
247
+ return session;
248
+ }
249
+ throw new SessionNotFoundError(`Session '${sessionId}' not found`, sessionId);
250
+ }
251
+ if (instanceId) {
252
+ return this._resolveByInstance(instanceId, context);
253
+ }
254
+ const instances = this.listInstances();
255
+ if (instances.length === 0) {
256
+ throw new SessionNotFoundError('No sessions connected');
257
+ }
258
+ if (instances.length === 1) {
259
+ return this._resolveByInstance(instances[0].instanceId, context);
260
+ }
261
+ // Multiple instances: list session IDs so the user can copy one into --session
262
+ const sessionList = this.listSessions()
263
+ .map((s) => ` - ${s.sessionId}: ${s.placeName} (${s.context})`)
264
+ .join('\n');
265
+ throw new SessionNotFoundError(`Multiple Studio instances connected. Use --session <id> to select one.\n${sessionList}`);
266
+ }
267
+ /** Resolves with the first connected session. Rejects after timeout. */
268
+ async waitForSessionAsync(timeout) {
269
+ const sessions = this.listSessions();
270
+ if (sessions.length > 0) {
271
+ const session = this.getSession(sessions[0].sessionId);
272
+ if (session) {
273
+ return session;
274
+ }
275
+ }
276
+ const timeoutMs = timeout ?? DEFAULT_TIMEOUT_MS;
277
+ return new Promise((resolve, reject) => {
278
+ let timer;
279
+ const onSession = (session) => {
280
+ if (timer) {
281
+ clearTimeout(timer);
282
+ }
283
+ resolve(session);
284
+ };
285
+ timer = setTimeout(() => {
286
+ this.off('session-connected', onSession);
287
+ reject(new Error(`Timed out waiting for a session to connect (${timeoutMs}ms)`));
288
+ }, timeoutMs);
289
+ this.once('session-connected', onSession);
290
+ });
291
+ }
292
+ /**
293
+ * Ensure that session discovery has completed at least once for this
294
+ * host connection. No-op if already settled, not a host, or sessions
295
+ * are already connected.
296
+ */
297
+ async _ensureSettledAsync() {
298
+ if (this._hasSettled ||
299
+ this._role !== 'host' ||
300
+ this.listSessions().length > 0) {
301
+ return;
302
+ }
303
+ OutputHelper.verbose('[bridge] No sessions yet — waiting for plugins to discover us');
304
+ await this.waitForSessionsToSettleAsync();
305
+ this._hasSettled = true;
306
+ const settled = this.listSessions();
307
+ OutputHelper.verbose(`[bridge] Settled with ${settled.length} session(s)${settled.length > 0
308
+ ? ': ' + settled.map((s) => s.sessionId).join(', ')
309
+ : ''}`);
310
+ }
311
+ /**
312
+ * Wait for all active Studios to discover this host and connect. Waits for
313
+ * the first session, then keeps waiting until no new sessions arrive for a
314
+ * full plugin poll cycle (~2.5s). Guarantees all polling plugins have had
315
+ * a chance to find the host. Safe to call when not a host (returns immediately).
316
+ */
317
+ async waitForSessionsToSettleAsync(options) {
318
+ if (this._role !== 'host') {
319
+ return;
320
+ }
321
+ const firstTimeout = options?.firstSessionTimeout ?? 5_000;
322
+ const settleMs = options?.settleMs ?? 4_000;
323
+ const maxMs = options?.maxMs ?? 15_000;
324
+ // Wait for the first session
325
+ try {
326
+ await this.waitForSessionAsync(firstTimeout);
327
+ }
328
+ catch {
329
+ // No session appeared — nothing to settle
330
+ return;
331
+ }
332
+ // Wait for sessions to stabilize: reset timer on each new connection
333
+ await new Promise((resolve) => {
334
+ const cleanup = () => {
335
+ clearTimeout(settleTimer);
336
+ clearTimeout(maxTimer);
337
+ this.off('session-connected', onSession);
338
+ resolve();
339
+ };
340
+ const onSession = () => {
341
+ clearTimeout(settleTimer);
342
+ settleTimer = setTimeout(cleanup, settleMs);
343
+ };
344
+ let settleTimer = setTimeout(cleanup, settleMs);
345
+ const maxTimer = setTimeout(cleanup, maxMs);
346
+ this.on('session-connected', onSession);
347
+ });
348
+ }
349
+ async _initHostAsync(port) {
350
+ this._host = new BridgeHost();
351
+ this._tracker = new SessionTracker();
352
+ this._tracker.on('session-added', (tracked) => {
353
+ const session = new BridgeSession(tracked.info, tracked.handle);
354
+ this._hostSessions.set(tracked.info.sessionId, session);
355
+ this.emit('session-connected', session);
356
+ this._resetIdleTimer();
357
+ this._host?.broadcastToClients({
358
+ type: 'session-event',
359
+ event: 'connected',
360
+ sessionId: tracked.info.sessionId,
361
+ session: tracked.info,
362
+ context: tracked.info.context,
363
+ instanceId: tracked.info.instanceId,
364
+ });
365
+ });
366
+ this._tracker.on('session-removed', (sessionId) => {
367
+ const removed = this._hostSessions.get(sessionId);
368
+ this._hostSessions.delete(sessionId);
369
+ this._hostHandles.delete(sessionId);
370
+ this.emit('session-disconnected', sessionId);
371
+ this._resetIdleTimer();
372
+ this._host?.broadcastToClients({
373
+ type: 'session-event',
374
+ event: 'disconnected',
375
+ sessionId,
376
+ context: removed?.info.context ?? 'edit',
377
+ instanceId: removed?.info.instanceId ?? sessionId,
378
+ });
379
+ });
380
+ this._tracker.on('instance-added', (instance) => {
381
+ this.emit('instance-connected', instance);
382
+ });
383
+ this._tracker.on('instance-removed', (instanceId) => {
384
+ this.emit('instance-disconnected', instanceId);
385
+ });
386
+ this._host.on('plugin-connected', (info) => {
387
+ const state = info.state ?? 'Edit';
388
+ const context = BridgeConnection._deriveContext(state);
389
+ const sessionInfo = {
390
+ sessionId: info.sessionId,
391
+ placeName: info.placeName ?? '',
392
+ placeFile: info.placeFile,
393
+ state: state,
394
+ pluginVersion: info.pluginVersion ?? '',
395
+ capabilities: info.capabilities,
396
+ connectedAt: new Date(),
397
+ origin: 'user',
398
+ context,
399
+ instanceId: info.instanceId ?? info.sessionId,
400
+ placeId: 0,
401
+ gameId: 0,
402
+ };
403
+ const handle = new HostTransportHandle(info.sessionId, this._host);
404
+ this._hostHandles.set(info.sessionId, handle);
405
+ this._tracker.addSession(info.sessionId, sessionInfo, handle);
406
+ });
407
+ this._host.on('plugin-disconnected', (sessionId) => {
408
+ const handle = this._hostHandles.get(sessionId);
409
+ if (handle) {
410
+ handle.markDisconnected();
411
+ }
412
+ this._tracker.removeSession(sessionId);
413
+ });
414
+ // Handle client protocol messages (list-sessions, list-instances, etc.)
415
+ this._host.on('client-message', (msg, reply) => {
416
+ if (msg.type === 'list-sessions') {
417
+ const req = msg;
418
+ reply({
419
+ type: 'list-sessions-response',
420
+ requestId: req.requestId,
421
+ sessions: this._tracker.listSessions(),
422
+ });
423
+ }
424
+ else if (msg.type === 'list-instances') {
425
+ const req = msg;
426
+ reply({
427
+ type: 'list-instances-response',
428
+ requestId: req.requestId,
429
+ instances: this._tracker.listInstances(),
430
+ });
431
+ }
432
+ });
433
+ await this._host.startAsync({ port });
434
+ this._isConnected = true;
435
+ // Don't start idle timer on init -- callers like `sessions` manage their
436
+ // own lifecycle via disconnectAsync(). The idle timer should only fire
437
+ // when sessions are removed (going from >0 to 0).
438
+ }
439
+ async _initClientAsync(port, remoteHost) {
440
+ this._client = new BridgeClient();
441
+ this._client.on('session-connected', (session) => {
442
+ this.emit('session-connected', session);
443
+ });
444
+ this._client.on('session-disconnected', (sessionId) => {
445
+ this.emit('session-disconnected', sessionId);
446
+ });
447
+ this._client.on('disconnected', () => {
448
+ this._isConnected = false;
449
+ });
450
+ this._client.on('host-promoted', () => {
451
+ this._role = 'host';
452
+ });
453
+ const host = remoteHost ? remoteHost.split(':')[0] : undefined;
454
+ await this._client.connectAsync(port, host);
455
+ this._isConnected = true;
456
+ }
457
+ static _deriveContext(state) {
458
+ if (state === 'Server')
459
+ return 'server';
460
+ if (state === 'Client')
461
+ return 'client';
462
+ return 'edit';
463
+ }
464
+ _resolveByInstance(instanceId, context) {
465
+ const sessions = this.listSessions().filter((s) => s.instanceId === instanceId);
466
+ if (sessions.length === 0) {
467
+ throw new SessionNotFoundError(`Instance '${instanceId}' not found`);
468
+ }
469
+ const contexts = sessions.map((s) => s.context);
470
+ // 5a: Context specified
471
+ if (context) {
472
+ const match = sessions.find((s) => s.context === context);
473
+ if (match) {
474
+ const session = this.getSession(match.sessionId);
475
+ if (session) {
476
+ return session;
477
+ }
478
+ }
479
+ throw new ContextNotFoundError(context, instanceId, contexts);
480
+ }
481
+ // 5b: Single context
482
+ if (sessions.length === 1) {
483
+ const session = this.getSession(sessions[0].sessionId);
484
+ if (session) {
485
+ return session;
486
+ }
487
+ }
488
+ // 5c: Multiple contexts -> return Edit
489
+ const editSession = sessions.find((s) => s.context === 'edit');
490
+ if (editSession) {
491
+ const session = this.getSession(editSession.sessionId);
492
+ if (session) {
493
+ return session;
494
+ }
495
+ }
496
+ // Fallback: return first session
497
+ const fallback = this.getSession(sessions[0].sessionId);
498
+ if (fallback) {
499
+ return fallback;
500
+ }
501
+ throw new SessionNotFoundError(`No session found for instance '${instanceId}'`);
502
+ }
503
+ _resetIdleTimer() {
504
+ if (this._keepAlive) {
505
+ return;
506
+ }
507
+ this._clearIdleTimer();
508
+ // Only start idle timer if we're the host and have no sessions
509
+ if (this._role === 'host' && this._tracker) {
510
+ if (this._tracker.sessionCount === 0) {
511
+ OutputHelper.verbose(`[bridge] Starting idle exit timer (${IDLE_EXIT_GRACE_MS}ms, sessionCount=0)`);
512
+ this._idleTimer = setTimeout(() => {
513
+ OutputHelper.verbose('[bridge] Idle exit timer fired — disconnecting');
514
+ this.disconnectAsync().catch(() => {
515
+ // Ignore disconnect errors during idle shutdown
516
+ });
517
+ }, IDLE_EXIT_GRACE_MS);
518
+ }
519
+ }
520
+ }
521
+ _clearIdleTimer() {
522
+ if (this._idleTimer !== undefined) {
523
+ clearTimeout(this._idleTimer);
524
+ this._idleTimer = undefined;
525
+ }
526
+ }
527
+ }
528
+ //# sourceMappingURL=bridge-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-connection.js","sourceRoot":"","sources":["../../../src/bridge/bridge-connection.ts"],"names":[],"mappings":"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"}