@quenty/studio-bridge 0.7.1 → 0.8.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 +12 -44
  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 +109 -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 +38 -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 +168 -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 +57 -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
package/CHANGELOG.md CHANGED
@@ -3,90 +3,58 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [0.7.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.7.0...@quenty/studio-bridge@0.7.1) (2026-04-27)
7
-
8
- **Note:** Version bump only for package @quenty/studio-bridge
6
+ # [0.8.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.7.1...@quenty/studio-bridge@0.8.0) (2026-05-14)
9
7
 
8
+ ### Features
10
9
 
10
+ - **studio-bridge:** persistent sessions and Linux/Wine support ([#669](https://github.com/Quenty/NevermoreEngine/issues/669)) ([51514c9](https://github.com/Quenty/NevermoreEngine/commit/51514c90cfe438ad1217dabb7fd64fd7350097a9))
11
11
 
12
+ ## [0.7.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.7.0...@quenty/studio-bridge@0.7.1) (2026-04-27)
12
13
 
14
+ **Note:** Version bump only for package @quenty/studio-bridge
13
15
 
14
16
  # [0.7.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.6.0...@quenty/studio-bridge@0.7.0) (2026-02-23)
15
17
 
16
18
  **Note:** Version bump only for package @quenty/studio-bridge
17
19
 
18
-
19
-
20
-
21
-
22
20
  # [0.6.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.5.0...@quenty/studio-bridge@0.6.0) (2026-02-19)
23
21
 
24
22
  **Note:** Version bump only for package @quenty/studio-bridge
25
23
 
26
-
27
-
28
-
29
-
30
24
  # [0.5.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.4.0...@quenty/studio-bridge@0.5.0) (2026-02-18)
31
25
 
32
26
  **Note:** Version bump only for package @quenty/studio-bridge
33
27
 
34
-
35
-
36
-
37
-
38
28
  # [0.4.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.3.0...@quenty/studio-bridge@0.4.0) (2026-02-18)
39
29
 
40
30
  **Note:** Version bump only for package @quenty/studio-bridge
41
31
 
42
-
43
-
44
-
45
-
46
32
  # [0.3.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.2.2...@quenty/studio-bridge@0.3.0) (2026-02-17)
47
33
 
48
34
  **Note:** Version bump only for package @quenty/studio-bridge
49
35
 
50
-
51
-
52
-
53
-
54
36
  ## [0.2.2](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.2.1...@quenty/studio-bridge@0.2.2) (2026-02-17)
55
37
 
56
38
  **Note:** Version bump only for package @quenty/studio-bridge
57
39
 
58
-
59
-
60
-
61
-
62
40
  ## [0.2.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.2.0...@quenty/studio-bridge@0.2.1) (2026-02-17)
63
41
 
64
42
  **Note:** Version bump only for package @quenty/studio-bridge
65
43
 
66
-
67
-
68
-
69
-
70
44
  # 0.2.0 (2026-02-17)
71
45
 
72
-
73
46
  ### Bug Fixes
74
47
 
75
- * Fix spinner design showing stuff ([814cd91](https://github.com/Quenty/NevermoreEngine/commit/814cd915358079f7d628a9739d0cd56e472b52f6))
76
- * Local testing works consistently and in batch mode ([67d6ba1](https://github.com/Quenty/NevermoreEngine/commit/67d6ba1d3625dc76f7a54ac13e75da2cc82ccc64))
77
-
48
+ - Fix spinner design showing stuff ([814cd91](https://github.com/Quenty/NevermoreEngine/commit/814cd915358079f7d628a9739d0cd56e472b52f6))
49
+ - Local testing works consistently and in batch mode ([67d6ba1](https://github.com/Quenty/NevermoreEngine/commit/67d6ba1d3625dc76f7a54ac13e75da2cc82ccc64))
78
50
 
79
51
  ### Features
80
52
 
81
- * Add a terminal mode to studio-bridge for easier debugging ([92cdca9](https://github.com/Quenty/NevermoreEngine/commit/92cdca97ee6ece9a8622559f8846f59b831788de))
82
- * Add initial studio-bridge package that can replace run-in-roblox ([aec737f](https://github.com/Quenty/NevermoreEngine/commit/aec737fd0eb3f2b045fc469a2b46f833de84a24b))
83
- * Refactor studio bridge ([8afe642](https://github.com/Quenty/NevermoreEngine/commit/8afe6424b6635eaa0155734c085934051de88da6))
84
- * Use reporting system for studio bridge too (a bit ugly) ([20b675c](https://github.com/Quenty/NevermoreEngine/commit/20b675cb22cb46c88b556f4afdda2700dd1258dd))
85
- * Use yargs in studio-bridge cli ([2203601](https://github.com/Quenty/NevermoreEngine/commit/220360168e79d57cd576150134949d8f2325a38f))
86
-
87
-
88
-
89
-
53
+ - Add a terminal mode to studio-bridge for easier debugging ([92cdca9](https://github.com/Quenty/NevermoreEngine/commit/92cdca97ee6ece9a8622559f8846f59b831788de))
54
+ - Add initial studio-bridge package that can replace run-in-roblox ([aec737f](https://github.com/Quenty/NevermoreEngine/commit/aec737fd0eb3f2b045fc469a2b46f833de84a24b))
55
+ - Refactor studio bridge ([8afe642](https://github.com/Quenty/NevermoreEngine/commit/8afe6424b6635eaa0155734c085934051de88da6))
56
+ - Use reporting system for studio bridge too (a bit ugly) ([20b675c](https://github.com/Quenty/NevermoreEngine/commit/20b675cb22cb46c88b556f4afdda2700dd1258dd))
57
+ - Use yargs in studio-bridge cli ([2203601](https://github.com/Quenty/NevermoreEngine/commit/220360168e79d57cd576150134949d8f2325a38f))
90
58
 
91
59
  # v0.2.0 (Tue Feb 17 2026)
92
60
 
package/README.md CHANGED
@@ -1,169 +1,225 @@
1
1
  # @quenty/studio-bridge
2
2
 
3
- WebSocket-based bridge for running Luau scripts in Roblox Studio.
3
+ Persistent WebSocket bridge between Node.js and Roblox Studio. Install a plugin once, then execute Luau, capture screenshots, query the DataModel, and stream logs — all from the CLI or programmatically.
4
4
 
5
- ## How It Works
5
+ ## Architecture
6
6
 
7
7
  ```
8
- ┌─────────────┐ WebSocket ┌──────────────────┐
9
- │ Node.js │◄───────────────►│ Studio Plugin │
10
- │ Server │ ws://localhost │ (auto-injected) │
11
- │ │ │ │
12
- │ 1. Start WS │ │ 4. Connect + hello│
13
- │ 2. Inject │ │ 5. Run script │
14
- │ plugin │ │ 6. Stream output │
15
- │ 3. Launch │ │ 7. scriptComplete │
16
- │ Studio │ │ │
17
- └─────────────┘ └──────────────────┘
8
+ ┌──────────────────────────┐
9
+ │ Roblox Studio (1..N) │
10
+ │ ┌────────────────────┐ │
11
+ │ │ Persistent Plugin │ │
12
+ │ │ (port scan → connect│ │
13
+ │ │ via /health) │ │
14
+ │ └────────┬───────────┘ │
15
+ └───────────┼──────────────┘
16
+ WebSocket /plugin │
17
+ ┌───────────┴──────────────┐
18
+ │ Bridge Host │
19
+ │ ┌──────────────────────┐│
20
+ │ │ SessionTracker ││
21
+ │ │ (groups by instance) ││
22
+ │ └──────────────────────┘│
23
+ │ /health /plugin /client│
24
+ └──┬───────────────────┬───┘
25
+ WebSocket /client │
26
+ ┌──────────┘
27
+ │
28
+ ┌──────┴──────┐
29
+ │ CLI Client │
30
+ │ (exec, run, │
31
+ │ query…) │
32
+ └─────────────┘
18
33
  ```
19
34
 
20
- 1. Start WebSocket server on a random port
21
- 2. Build a `.rbxm` plugin via `rojo build --plugin` with the port and session ID baked in
22
- 3. Plugin is placed in Studio's plugins folder, launch Studio
23
- 4. Plugin connects, handshakes with session ID
24
- 5. Server sends `execute` with Luau script, plugin runs it via `loadstring()` + `xpcall()`
25
- 6. Plugin streams `LogService` output back as batched messages
26
- 7. Plugin sends `scriptComplete` — server can send another `execute` or `shutdown`
35
+ **Host** — A single process binds port 38741, accepts plugin and client connections, and tracks sessions. Any CLI invocation auto-promotes to host if the port is free.
27
36
 
28
- The session ID (random UUID) prevents stale plugins from previous runs from interfering.
37
+ **Plugin** — A persistent Roblox Studio plugin that discovers the host by polling `GET /health`, then connects via WebSocket. Survives Studio restarts. Actions are pushed dynamically over the wire on connect.
29
38
 
30
- ## CLI
39
+ **Client** — CLI commands connect as clients when a host is already running. Actions are relayed through the host to the target plugin.
40
+
41
+ ## Quick Start
31
42
 
32
43
  ```bash
33
- # Run a script file
34
- studio-bridge run test.lua
44
+ # 1. Install the persistent Studio plugin (one-time)
45
+ studio-bridge plugin install
46
+
47
+ # 2. Start a bridge host (or let any command auto-start one)
48
+ studio-bridge serve
35
49
 
36
- # Run inline script
37
- studio-bridge exec 'print("hello world")'
50
+ # 3. Open Roblox Studio — the plugin connects automatically
38
51
 
39
- # With a specific place file (builds a minimal place via rojo if omitted)
40
- studio-bridge run test.lua --place build/test.rbxl
52
+ # 4. Execute Luau code
53
+ studio-bridge console exec 'print("hello from the bridge")'
41
54
 
42
- # Interactive terminal mode (keeps Studio alive between executions)
43
- studio-bridge terminal
55
+ # 5. Query the DataModel
56
+ studio-bridge explorer query Workspace --children
57
+ ```
44
58
 
45
- # Terminal mode with initial script
46
- studio-bridge terminal --place build/test.rbxl --script init.lua
59
+ ## CLI Commands
47
60
 
48
- # Debug output
49
- studio-bridge run test.lua --verbose
61
+ ```
62
+ studio-bridge <command> [options]
63
+
64
+ Execution:
65
+ console <command> Execute code and view logs
66
+ explorer <command> Query and modify the DataModel
67
+ viewport <command> Screenshots and camera control
68
+ action <name> Invoke a Studio action
69
+
70
+ Infrastructure:
71
+ process <command> Manage Studio processes
72
+ plugin <command> Manage the bridge plugin
73
+ serve Start the bridge server
50
74
  ```
51
75
 
52
- ### Global Options
76
+ ### `console exec`
53
77
 
54
- | Option | Alias | Default | Description |
55
- |--------|-------|---------|-------------|
56
- | `--place` | `-p` | — | Path to a `.rbxl` place file (builds minimal place via rojo if omitted) |
57
- | `--timeout` | — | `120000` | Timeout in milliseconds |
58
- | `--verbose` | — | `false` | Show internal debug output |
59
- | `--logs` / `--no-logs` | — | `true` | Show execution logs in spinner mode |
78
+ ```bash
79
+ studio-bridge console exec 'print(workspace:GetChildren())'
80
+ studio-bridge console exec --file test.lua
81
+ studio-bridge console exec 'return game.PlaceId' --format json
82
+ ```
60
83
 
61
- ### Terminal Mode
84
+ | Option | Alias | Description |
85
+ |--------|-------|-------------|
86
+ | `--file` | `-f` | Path to a Luau script file |
87
+ | `--target` | `-t` | Target session ID |
88
+ | `--context` | — | Target context (`edit`, `client`, `server`) |
62
89
 
63
- Keeps Studio alive and provides an interactive REPL. Type Luau, see results, repeat — no re-launch between executions.
90
+ ### `console logs`
64
91
 
92
+ ```bash
93
+ studio-bridge console logs
94
+ studio-bridge console logs --count 100 --direction head
95
+ studio-bridge console logs --levels Error,Warning
65
96
  ```
66
- $ studio-bridge terminal --place build/test.rbxl
67
- Studio connected.
68
97
 
69
- ────────────────────────────────────────────────────────
70
- ❯ print("hello")
71
- ────────────────────────────────────────────────────────
72
- ctrl+enter to run · ctrl+c to clear · .help for commands
98
+ | Option | Alias | Description |
99
+ |--------|-------|-------------|
100
+ | `--count` | `-n` | Number of entries (default: 50) |
101
+ | `--direction` | `-d` | `head` or `tail` (default: `tail`) |
102
+ | `--levels` | `-l` | Filter by level (comma-separated) |
103
+ | `--includeInternal` | — | Include internal bridge messages |
104
+
105
+ ### `explorer query`
106
+
107
+ ```bash
108
+ studio-bridge explorer query Workspace
109
+ studio-bridge explorer query Workspace.SpawnLocation --children --depth 3
73
110
  ```
74
111
 
75
- | Key | Action |
76
- |-----|--------|
77
- | Enter | New line |
78
- | Ctrl+Enter | Execute buffer |
79
- | Ctrl+C | Clear buffer (exit if empty) |
80
- | Ctrl+D | Exit |
112
+ | Option | Description |
113
+ |--------|-------------|
114
+ | `--children` | Include direct children |
115
+ | `--depth` | Max depth (default: 0) |
116
+ | `--properties` | Include instance properties |
117
+ | `--attributes` | Include instance attributes |
81
118
 
82
- | Command | Description |
83
- |---------|-------------|
84
- | `.help` | Show keybindings and commands |
85
- | `.exit` | Exit terminal mode |
86
- | `.run <file>` | Execute a Luau file |
87
- | `.clear` | Clear the editor buffer |
119
+ ### `viewport screenshot`
88
120
 
89
- ## API
121
+ ```bash
122
+ studio-bridge viewport screenshot --output viewport.png
123
+ ```
124
+
125
+ | Option | Alias | Description |
126
+ |--------|-------|-------------|
127
+ | `--output` | `-o` | Write PNG to file |
90
128
 
91
- ```typescript
92
- import { StudioBridge } from '@quenty/studio-bridge';
129
+ ### `process list`
93
130
 
94
- const bridge = new StudioBridge({ placePath: './build/test.rbxl' });
95
- await bridge.startAsync();
131
+ ```bash
132
+ studio-bridge process list
133
+ ```
96
134
 
97
- const result = await bridge.executeAsync({
98
- scriptContent: 'print("Hello from studio-bridge!")',
99
- timeoutMs: 90_000,
100
- onOutput: (level, body) => console.log(`[${level}] ${body}`),
101
- });
135
+ Lists all active sessions with their ID, place, context, state, and origin.
102
136
 
103
- console.log(result.success); // boolean
104
- console.log(result.logs); // all captured output, newline-separated
137
+ ### `process info`
105
138
 
106
- // Can call executeAsync() again without relaunching Studio
107
- await bridge.stopAsync();
139
+ ```bash
140
+ studio-bridge process info
108
141
  ```
109
142
 
110
- ### `StudioBridgeServerOptions`
143
+ Returns the Studio mode (`Edit`, `Play`, `Run`, etc.), place name, place ID, and game ID.
111
144
 
112
- | Field | Type | Default | Description |
113
- |-------|------|---------|-------------|
114
- | `placePath` | `string` | — | Path to `.rbxl` file (auto-builds via rojo if omitted) |
115
- | `timeoutMs` | `number` | `120_000` | Default timeout for operations |
116
- | `onPhase` | `(phase) => void` | — | Progress callback: `building`, `launching`, `connecting`, `executing`, `done` |
117
- | `sessionId` | `string` | auto UUID | Session ID for concurrent isolation |
145
+ ### `process launch`
118
146
 
119
- ### `ExecuteOptions`
147
+ ```bash
148
+ studio-bridge process launch
149
+ studio-bridge process launch --place ./build/test.rbxl
150
+ ```
120
151
 
121
- | Field | Type | Default | Description |
122
- |-------|------|---------|-------------|
123
- | `scriptContent` | `string` | required | Luau source code to execute |
124
- | `timeoutMs` | `number` | inherited | Timeout for this execution |
125
- | `onOutput` | `(level, body) => void` | — | Called for each log message |
152
+ ### `process run`
126
153
 
127
- ### `StudioBridgeResult`
154
+ ```bash
155
+ studio-bridge process run 'print("hello")'
156
+ studio-bridge process run --file test.lua --place ./build/test.rbxl
157
+ ```
128
158
 
129
- | Field | Type | Description |
130
- |-------|------|-------------|
131
- | `success` | `boolean` | `true` if the script ran without errors |
132
- | `logs` | `string` | All captured output, newline-separated |
159
+ Explicit ephemeral mode: launches Studio, executes the script, and shuts down.
133
160
 
134
- ## WebSocket Protocol
161
+ ### `process close`
135
162
 
136
- All messages are JSON: `{ "type": string, "payload": object }`.
163
+ ```bash
164
+ studio-bridge process close --target session-id
165
+ ```
166
+
167
+ Send a shutdown message to a connected Studio session.
137
168
 
138
- **Plugin to Server:**
169
+ ### `plugin install` / `plugin uninstall`
170
+
171
+ ```bash
172
+ studio-bridge plugin install
173
+ studio-bridge plugin uninstall
174
+ ```
139
175
 
140
- | Type | Payload | Description |
141
- |------|---------|-------------|
142
- | `hello` | `{ sessionId }` | Handshake |
143
- | `output` | `{ messages: [{ level, body }] }` | Batched log output |
144
- | `scriptComplete` | `{ success, error? }` | Script finished |
176
+ ### `serve`
145
177
 
146
- Output levels: `"Print"`, `"Info"`, `"Warning"`, `"Error"` (matches `Enum.MessageType`).
178
+ ```bash
179
+ studio-bridge serve
180
+ studio-bridge serve --port 9000
181
+ ```
147
182
 
148
- **Server to Plugin:**
183
+ ### `action`
149
184
 
150
- | Type | Payload | Description |
151
- |------|---------|-------------|
152
- | `welcome` | `{ sessionId }` | Handshake accepted |
153
- | `execute` | `{ script }` | Luau script to run |
154
- | `shutdown` | `{}` | Disconnect |
185
+ ```bash
186
+ studio-bridge action <name> [--payload '{"key": "value"}']
187
+ ```
188
+
189
+ Invoke a named Studio action on the connected session.
190
+
191
+ ## Global Options
192
+
193
+ | Option | Default | Description |
194
+ |--------|---------|-------------|
195
+ | `--timeout` | `120000` | Timeout in milliseconds |
196
+ | `--verbose` | `false` | Show internal debug output |
197
+ | `--remote` | — | Connect to a remote bridge host (`host:port`) |
198
+ | `--local` | `false` | Force local mode (skip devcontainer auto-detection) |
199
+
200
+ ### Target Selection
201
+
202
+ Commands that target a session accept `--target` and `--context`:
203
+
204
+ - **No flags** — auto-resolves if only one session exists
205
+ - **`--target <id>`** — target a specific session by ID
206
+ - **`--context <ctx>`** — select context within an instance (`edit`, `client`, `server`)
207
+
208
+ When Studio is in Play mode, a single instance has multiple contexts (Edit + Client + Server). The default is `edit`.
155
209
 
156
210
  ## Testing
157
211
 
158
212
  ```bash
159
- pnpm test # Unit tests (no Studio needed)
213
+ pnpm test # Unit tests (Vitest, no Studio needed)
160
214
  pnpm test:watch # Watch mode
161
- pnpm test:integration # End-to-end (requires Studio)
215
+ pnpm test:plugin # Lune-based plugin tests
216
+ pnpm test:integration # End-to-end smoke test (requires Studio)
162
217
  ```
163
218
 
164
219
  | Layer | What it tests | Studio? |
165
220
  |-------|--------------|---------|
166
- | Unit (`pnpm test`) | Protocol, template substitution, path resolution, WebSocket lifecycle | No |
221
+ | Unit (`pnpm test`) | Protocol, bridge connection, session tracking, command handlers, WebSocket lifecycle | No |
222
+ | Plugin (`pnpm test:plugin`) | Luau plugin logic via Lune runner | No |
167
223
  | Integration (`pnpm test:integration`) | Full pipeline: rojo build, plugin injection, Studio launch, output capture | Yes |
168
224
 
169
225
  ## Platform Support
@@ -172,8 +228,3 @@ pnpm test:integration # End-to-end (requires Studio)
172
228
  |----------|----------------|----------------|
173
229
  | Windows | `%LOCALAPPDATA%\Roblox\Versions\*\RobloxStudioBeta.exe` | `%LOCALAPPDATA%\Roblox\Plugins\` |
174
230
  | macOS | `/Applications/RobloxStudio.app/Contents/MacOS/RobloxStudioBeta` | `~/Documents/Roblox/Plugins/` |
175
-
176
- ## Future Plans
177
-
178
- - **StudioTestService integration** — Use `ExecuteRunModeAsync()` / `EndTest()` for better isolation vs. `loadstring()`
179
- - **Structured test results** — Protocol extension for typed result messages instead of log parsing
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for remote connection support in BridgeConnection --
3
+ * validates remoteHost parsing, default port behavior, ECONNREFUSED
4
+ * error handling, and client-only connection mode.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=bridge-connection-remote.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-connection-remote.test.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridge-connection-remote.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Unit tests for remote connection support in BridgeConnection --
3
+ * validates remoteHost parsing, default port behavior, ECONNREFUSED
4
+ * error handling, and client-only connection mode.
5
+ */
6
+ import { describe, it, expect, afterEach } from 'vitest';
7
+ import { WebSocketServer } from 'ws';
8
+ import { BridgeConnection } from './bridge-connection.js';
9
+ import { encodeHostMessage, decodeHostMessage, } from './internal/host-protocol.js';
10
+ /**
11
+ * Create a mock bridge host WebSocket server that serves on /client
12
+ * and responds to list-sessions requests (matching the host protocol).
13
+ */
14
+ async function createMockHostAsync() {
15
+ const receivedMessages = [];
16
+ const wss = new WebSocketServer({ port: 0, path: '/client' });
17
+ const port = await new Promise((resolve) => {
18
+ wss.on('listening', () => {
19
+ const addr = wss.address();
20
+ if (typeof addr === 'object' && addr !== null) {
21
+ resolve(addr.port);
22
+ }
23
+ });
24
+ });
25
+ wss.on('connection', (ws) => {
26
+ ws.on('message', (raw) => {
27
+ const data = typeof raw === 'string' ? raw : raw.toString('utf-8');
28
+ const msg = decodeHostMessage(data);
29
+ if (msg) {
30
+ receivedMessages.push(msg);
31
+ // Auto-respond to list-sessions with empty list
32
+ if (msg.type === 'list-sessions') {
33
+ ws.send(encodeHostMessage({
34
+ type: 'list-sessions-response',
35
+ requestId: msg.requestId,
36
+ sessions: [],
37
+ }));
38
+ }
39
+ }
40
+ });
41
+ });
42
+ return { wss, port, receivedMessages };
43
+ }
44
+ async function closeHostAsync(host) {
45
+ for (const client of host.wss.clients) {
46
+ client.terminate();
47
+ }
48
+ await new Promise((resolve) => {
49
+ host.wss.close(() => resolve());
50
+ });
51
+ }
52
+ describe('BridgeConnection remote mode', () => {
53
+ let host;
54
+ const connections = [];
55
+ afterEach(async () => {
56
+ for (const conn of [...connections].reverse()) {
57
+ await conn.disconnectAsync();
58
+ }
59
+ connections.length = 0;
60
+ if (host) {
61
+ await closeHostAsync(host);
62
+ host = undefined;
63
+ }
64
+ });
65
+ describe('remoteHost parsing', () => {
66
+ it('connects as client when remoteHost points to a running host', async () => {
67
+ host = await createMockHostAsync();
68
+ const conn = await BridgeConnection.connectAsync({
69
+ remoteHost: `localhost:${host.port}`,
70
+ });
71
+ connections.push(conn);
72
+ expect(conn.role).toBe('client');
73
+ expect(conn.isConnected).toBe(true);
74
+ });
75
+ it('appends default port when no colon in remoteHost', async () => {
76
+ // We can't easily test against default port 38741,
77
+ // but we can verify parsing by using port option to override
78
+ host = await createMockHostAsync();
79
+ // When remoteHost has no colon, port comes from options.port
80
+ const conn = await BridgeConnection.connectAsync({
81
+ port: host.port,
82
+ remoteHost: 'localhost',
83
+ });
84
+ connections.push(conn);
85
+ expect(conn.role).toBe('client');
86
+ expect(conn.isConnected).toBe(true);
87
+ });
88
+ it('extracts port from remoteHost when colon is present', async () => {
89
+ host = await createMockHostAsync();
90
+ const conn = await BridgeConnection.connectAsync({
91
+ remoteHost: `localhost:${host.port}`,
92
+ });
93
+ connections.push(conn);
94
+ expect(conn.role).toBe('client');
95
+ expect(conn.isConnected).toBe(true);
96
+ });
97
+ });
98
+ describe('error handling', () => {
99
+ it('throws clear error on ECONNREFUSED for remote host', async () => {
100
+ await expect(BridgeConnection.connectAsync({
101
+ remoteHost: 'localhost:19999',
102
+ })).rejects.toThrow(/Could not connect to bridge host at localhost:19999/);
103
+ });
104
+ it('includes helpful suggestion in ECONNREFUSED error', async () => {
105
+ await expect(BridgeConnection.connectAsync({
106
+ remoteHost: 'localhost:19998',
107
+ })).rejects.toThrow(/studio-bridge serve/);
108
+ });
109
+ });
110
+ describe('client-only mode', () => {
111
+ it('does not become host when remoteHost is specified', async () => {
112
+ // When remoteHost is set but nothing is listening, it should
113
+ // NOT fall back to host mode -- it should throw
114
+ await expect(BridgeConnection.connectAsync({
115
+ remoteHost: 'localhost:19997',
116
+ })).rejects.toThrow();
117
+ });
118
+ it('remote client can list sessions from host', async () => {
119
+ host = await createMockHostAsync();
120
+ const conn = await BridgeConnection.connectAsync({
121
+ remoteHost: `localhost:${host.port}`,
122
+ });
123
+ connections.push(conn);
124
+ // No plugins connected, so sessions should be empty
125
+ const sessions = conn.listSessions();
126
+ expect(sessions).toEqual([]);
127
+ });
128
+ });
129
+ describe('local option', () => {
130
+ it('local option is accepted without error', async () => {
131
+ // local: true just skips devcontainer detection -- in a normal
132
+ // environment it should behave like the default path (try bind)
133
+ const conn = await BridgeConnection.connectAsync({
134
+ port: 0,
135
+ keepAlive: true,
136
+ local: true,
137
+ });
138
+ connections.push(conn);
139
+ // Should work normally in local mode
140
+ expect(conn.isConnected).toBe(true);
141
+ });
142
+ });
143
+ });
144
+ //# sourceMappingURL=bridge-connection-remote.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-connection-remote.test.js","sourceRoot":"","sources":["../../../src/bridge/bridge-connection-remote.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAElB,MAAM,6BAA6B,CAAC;AAQrC;;;GAGG;AACH,KAAK,UAAU,mBAAmB;IAChC,MAAM,gBAAgB,GAA0B,EAAE,CAAC;IAEnD,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAE9D,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACjD,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YACvB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC9C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,EAAE,EAAE,EAAE;QAC1B,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,MAAM,IAAI,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACnE,MAAM,GAAG,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,GAAG,EAAE,CAAC;gBACR,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAE3B,gDAAgD;gBAChD,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBACjC,EAAE,CAAC,IAAI,CACL,iBAAiB,CAAC;wBAChB,IAAI,EAAE,wBAAwB;wBAC9B,SAAS,EAAE,GAAG,CAAC,SAAS;wBACxB,QAAQ,EAAE,EAAE;qBACb,CAAC,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAc;IAC1C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,CAAC,SAAS,EAAE,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,IAAI,IAA0B,CAAC;IAC/B,MAAM,WAAW,GAAuB,EAAE,CAAC;IAE3C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QAC/B,CAAC;QACD,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvB,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,IAAI,GAAG,MAAM,mBAAmB,EAAE,CAAC;YAEnC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC;gBAC/C,UAAU,EAAE,aAAa,IAAI,CAAC,IAAI,EAAE;aACrC,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,mDAAmD;YACnD,6DAA6D;YAC7D,IAAI,GAAG,MAAM,mBAAmB,EAAE,CAAC;YAEnC,6DAA6D;YAC7D,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC;gBAC/C,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,UAAU,EAAE,WAAW;aACxB,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,IAAI,GAAG,MAAM,mBAAmB,EAAE,CAAC;YAEnC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC;gBAC/C,UAAU,EAAE,aAAa,IAAI,CAAC,IAAI,EAAE;aACrC,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEvB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,MAAM,CACV,gBAAgB,CAAC,YAAY,CAAC;gBAC5B,UAAU,EAAE,iBAAiB;aAC9B,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,qDAAqD,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,MAAM,CACV,gBAAgB,CAAC,YAAY,CAAC;gBAC5B,UAAU,EAAE,iBAAiB;aAC9B,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,6DAA6D;YAC7D,gDAAgD;YAChD,MAAM,MAAM,CACV,gBAAgB,CAAC,YAAY,CAAC;gBAC5B,UAAU,EAAE,iBAAiB;aAC9B,CAAC,CACH,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,IAAI,GAAG,MAAM,mBAAmB,EAAE,CAAC;YAEnC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC;gBAC/C,UAAU,EAAE,aAAa,IAAI,CAAC,IAAI,EAAE;aACrC,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEvB,oDAAoD;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACrC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,+DAA+D;YAC/D,gEAAgE;YAChE,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC;gBAC/C,IAAI,EAAE,CAAC;gBACP,SAAS,EAAE,IAAI;gBACf,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEvB,qCAAqC;YACrC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}