@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.
- package/CHANGELOG.md +12 -44
- package/README.md +166 -115
- package/dist/src/bridge/bridge-connection-remote.test.d.ts +7 -0
- package/dist/src/bridge/bridge-connection-remote.test.d.ts.map +1 -0
- package/dist/src/bridge/bridge-connection-remote.test.js +144 -0
- package/dist/src/bridge/bridge-connection-remote.test.js.map +1 -0
- package/dist/src/bridge/bridge-connection.d.ts +112 -0
- package/dist/src/bridge/bridge-connection.d.ts.map +1 -0
- package/dist/src/bridge/bridge-connection.js +528 -0
- package/dist/src/bridge/bridge-connection.js.map +1 -0
- package/dist/src/bridge/bridge-connection.test.d.ts +6 -0
- package/dist/src/bridge/bridge-connection.test.d.ts.map +1 -0
- package/dist/src/bridge/bridge-connection.test.js +773 -0
- package/dist/src/bridge/bridge-connection.test.js.map +1 -0
- package/dist/src/bridge/bridge-session.d.ts +38 -0
- package/dist/src/bridge/bridge-session.d.ts.map +1 -0
- package/dist/src/bridge/bridge-session.js +259 -0
- package/dist/src/bridge/bridge-session.js.map +1 -0
- package/dist/src/bridge/bridge-session.test.d.ts +6 -0
- package/dist/src/bridge/bridge-session.test.d.ts.map +1 -0
- package/dist/src/bridge/bridge-session.test.js +264 -0
- package/dist/src/bridge/bridge-session.test.js.map +1 -0
- package/dist/src/bridge/index.d.ts +13 -0
- package/dist/src/bridge/index.d.ts.map +1 -0
- package/dist/src/bridge/index.js +13 -0
- package/dist/src/bridge/index.js.map +1 -0
- package/dist/src/bridge/internal/__tests__/failover-crash.test.d.ts +9 -0
- package/dist/src/bridge/internal/__tests__/failover-crash.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/__tests__/failover-crash.test.js +159 -0
- package/dist/src/bridge/internal/__tests__/failover-crash.test.js.map +1 -0
- package/dist/src/bridge/internal/__tests__/failover-graceful.test.d.ts +9 -0
- package/dist/src/bridge/internal/__tests__/failover-graceful.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/__tests__/failover-graceful.test.js +218 -0
- package/dist/src/bridge/internal/__tests__/failover-graceful.test.js.map +1 -0
- package/dist/src/bridge/internal/__tests__/failover-inflight.test.d.ts +9 -0
- package/dist/src/bridge/internal/__tests__/failover-inflight.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/__tests__/failover-inflight.test.js +246 -0
- package/dist/src/bridge/internal/__tests__/failover-inflight.test.js.map +1 -0
- package/dist/src/bridge/internal/__tests__/host-client-integration.test.d.ts +10 -0
- package/dist/src/bridge/internal/__tests__/host-client-integration.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/__tests__/host-client-integration.test.js +298 -0
- package/dist/src/bridge/internal/__tests__/host-client-integration.test.js.map +1 -0
- package/dist/src/bridge/internal/bridge-client.d.ts +70 -0
- package/dist/src/bridge/internal/bridge-client.d.ts.map +1 -0
- package/dist/src/bridge/internal/bridge-client.js +344 -0
- package/dist/src/bridge/internal/bridge-client.js.map +1 -0
- package/dist/src/bridge/internal/bridge-client.test.d.ts +7 -0
- package/dist/src/bridge/internal/bridge-client.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/bridge-client.test.js +301 -0
- package/dist/src/bridge/internal/bridge-client.test.js.map +1 -0
- package/dist/src/bridge/internal/bridge-host.d.ts +78 -0
- package/dist/src/bridge/internal/bridge-host.d.ts.map +1 -0
- package/dist/src/bridge/internal/bridge-host.js +383 -0
- package/dist/src/bridge/internal/bridge-host.js.map +1 -0
- package/dist/src/bridge/internal/bridge-host.test.d.ts +7 -0
- package/dist/src/bridge/internal/bridge-host.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/bridge-host.test.js +377 -0
- package/dist/src/bridge/internal/bridge-host.test.js.map +1 -0
- package/dist/src/bridge/internal/environment-detection.d.ts +44 -0
- package/dist/src/bridge/internal/environment-detection.d.ts.map +1 -0
- package/dist/src/bridge/internal/environment-detection.js +91 -0
- package/dist/src/bridge/internal/environment-detection.js.map +1 -0
- package/dist/src/bridge/internal/environment-detection.test.d.ts +7 -0
- package/dist/src/bridge/internal/environment-detection.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/environment-detection.test.js +150 -0
- package/dist/src/bridge/internal/environment-detection.test.js.map +1 -0
- package/dist/src/bridge/internal/hand-off.d.ts +69 -0
- package/dist/src/bridge/internal/hand-off.d.ts.map +1 -0
- package/dist/src/bridge/internal/hand-off.js +178 -0
- package/dist/src/bridge/internal/hand-off.js.map +1 -0
- package/dist/src/bridge/internal/hand-off.test.d.ts +7 -0
- package/dist/src/bridge/internal/hand-off.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/hand-off.test.js +325 -0
- package/dist/src/bridge/internal/hand-off.test.js.map +1 -0
- package/dist/src/bridge/internal/health-endpoint.d.ts +32 -0
- package/dist/src/bridge/internal/health-endpoint.d.ts.map +1 -0
- package/dist/src/bridge/internal/health-endpoint.js +73 -0
- package/dist/src/bridge/internal/health-endpoint.js.map +1 -0
- package/dist/src/bridge/internal/health-endpoint.test.d.ts +6 -0
- package/dist/src/bridge/internal/health-endpoint.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/health-endpoint.test.js +122 -0
- package/dist/src/bridge/internal/health-endpoint.test.js.map +1 -0
- package/dist/src/bridge/internal/host-protocol.d.ts +60 -0
- package/dist/src/bridge/internal/host-protocol.d.ts.map +1 -0
- package/dist/src/bridge/internal/host-protocol.js +184 -0
- package/dist/src/bridge/internal/host-protocol.js.map +1 -0
- package/dist/src/bridge/internal/host-protocol.test.d.ts +6 -0
- package/dist/src/bridge/internal/host-protocol.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/host-protocol.test.js +307 -0
- package/dist/src/bridge/internal/host-protocol.test.js.map +1 -0
- package/dist/src/bridge/internal/session-tracker.d.ts +67 -0
- package/dist/src/bridge/internal/session-tracker.d.ts.map +1 -0
- package/dist/src/bridge/internal/session-tracker.js +138 -0
- package/dist/src/bridge/internal/session-tracker.js.map +1 -0
- package/dist/src/bridge/internal/session-tracker.test.d.ts +6 -0
- package/dist/src/bridge/internal/session-tracker.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/session-tracker.test.js +342 -0
- package/dist/src/bridge/internal/session-tracker.test.js.map +1 -0
- package/dist/src/bridge/internal/transport-client.d.ts +43 -0
- package/dist/src/bridge/internal/transport-client.d.ts.map +1 -0
- package/dist/src/bridge/internal/transport-client.js +146 -0
- package/dist/src/bridge/internal/transport-client.js.map +1 -0
- package/dist/src/bridge/internal/transport-client.test.d.ts +6 -0
- package/dist/src/bridge/internal/transport-client.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/transport-client.test.js +176 -0
- package/dist/src/bridge/internal/transport-client.test.js.map +1 -0
- package/dist/src/bridge/internal/transport-server.d.ts +59 -0
- package/dist/src/bridge/internal/transport-server.d.ts.map +1 -0
- package/dist/src/bridge/internal/transport-server.js +189 -0
- package/dist/src/bridge/internal/transport-server.js.map +1 -0
- package/dist/src/bridge/internal/transport-server.test.d.ts +6 -0
- package/dist/src/bridge/internal/transport-server.test.d.ts.map +1 -0
- package/dist/src/bridge/internal/transport-server.test.js +171 -0
- package/dist/src/bridge/internal/transport-server.test.js.map +1 -0
- package/dist/src/bridge/types.d.ts +117 -0
- package/dist/src/bridge/types.d.ts.map +1 -0
- package/dist/src/bridge/types.js +68 -0
- package/dist/src/bridge/types.js.map +1 -0
- package/dist/src/cli/adapters/cli-command-adapter-handler.test.d.ts +6 -0
- package/dist/src/cli/adapters/cli-command-adapter-handler.test.d.ts.map +1 -0
- package/dist/src/cli/adapters/cli-command-adapter-handler.test.js +260 -0
- package/dist/src/cli/adapters/cli-command-adapter-handler.test.js.map +1 -0
- package/dist/src/cli/adapters/cli-command-adapter.d.ts +39 -0
- package/dist/src/cli/adapters/cli-command-adapter.d.ts.map +1 -0
- package/dist/src/cli/adapters/cli-command-adapter.js +241 -0
- package/dist/src/cli/adapters/cli-command-adapter.js.map +1 -0
- package/dist/src/cli/adapters/cli-command-adapter.test.d.ts +5 -0
- package/dist/src/cli/adapters/cli-command-adapter.test.d.ts.map +1 -0
- package/dist/src/cli/adapters/cli-command-adapter.test.js +188 -0
- package/dist/src/cli/adapters/cli-command-adapter.test.js.map +1 -0
- package/dist/src/cli/adapters/group-builder.d.ts +29 -0
- package/dist/src/cli/adapters/group-builder.d.ts.map +1 -0
- package/dist/src/cli/adapters/group-builder.js +54 -0
- package/dist/src/cli/adapters/group-builder.js.map +1 -0
- package/dist/src/cli/adapters/group-builder.test.d.ts +5 -0
- package/dist/src/cli/adapters/group-builder.test.d.ts.map +1 -0
- package/dist/src/cli/adapters/group-builder.test.js +108 -0
- package/dist/src/cli/adapters/group-builder.test.js.map +1 -0
- package/dist/src/cli/adapters/help-formatter.d.ts +11 -0
- package/dist/src/cli/adapters/help-formatter.d.ts.map +1 -0
- package/dist/src/cli/adapters/help-formatter.js +78 -0
- package/dist/src/cli/adapters/help-formatter.js.map +1 -0
- package/dist/src/cli/adapters/help-formatter.test.d.ts +5 -0
- package/dist/src/cli/adapters/help-formatter.test.d.ts.map +1 -0
- package/dist/src/cli/adapters/help-formatter.test.js +79 -0
- package/dist/src/cli/adapters/help-formatter.test.js.map +1 -0
- package/dist/src/cli/adapters/target-resolver.d.ts +54 -0
- package/dist/src/cli/adapters/target-resolver.d.ts.map +1 -0
- package/dist/src/cli/adapters/target-resolver.js +90 -0
- package/dist/src/cli/adapters/target-resolver.js.map +1 -0
- package/dist/src/cli/adapters/target-resolver.test.d.ts +5 -0
- package/dist/src/cli/adapters/target-resolver.test.d.ts.map +1 -0
- package/dist/src/cli/adapters/target-resolver.test.js +169 -0
- package/dist/src/cli/adapters/target-resolver.test.js.map +1 -0
- package/dist/src/cli/args/global-args.d.ts +2 -0
- package/dist/src/cli/args/global-args.d.ts.map +1 -1
- package/dist/src/cli/cli.d.ts +6 -3
- package/dist/src/cli/cli.d.ts.map +1 -1
- package/dist/src/cli/cli.js +82 -20
- package/dist/src/cli/cli.js.map +1 -1
- package/dist/src/cli/resolve-script-content.d.ts +19 -0
- package/dist/src/cli/resolve-script-content.d.ts.map +1 -0
- package/dist/src/cli/resolve-script-content.js +22 -0
- package/dist/src/cli/resolve-script-content.js.map +1 -0
- package/dist/src/cli/resolve-session.d.ts +21 -0
- package/dist/src/cli/resolve-session.d.ts.map +1 -0
- package/dist/src/cli/resolve-session.js +40 -0
- package/dist/src/cli/resolve-session.js.map +1 -0
- package/dist/src/cli/resolve-session.test.d.ts +5 -0
- package/dist/src/cli/resolve-session.test.d.ts.map +1 -0
- package/dist/src/cli/resolve-session.test.js +112 -0
- package/dist/src/cli/resolve-session.test.js.map +1 -0
- package/dist/src/cli/script-executor.d.ts +1 -0
- package/dist/src/cli/script-executor.d.ts.map +1 -1
- package/dist/src/cli/script-executor.js +7 -1
- package/dist/src/cli/script-executor.js.map +1 -1
- package/dist/src/cli/types.d.ts +11 -0
- package/dist/src/cli/types.d.ts.map +1 -0
- package/dist/src/cli/types.js +5 -0
- package/dist/src/cli/types.js.map +1 -0
- package/dist/src/commands/connect.d.ts +16 -0
- package/dist/src/commands/connect.d.ts.map +1 -0
- package/dist/src/commands/connect.js +15 -0
- package/dist/src/commands/connect.js.map +1 -0
- package/dist/src/commands/connect.test.d.ts +5 -0
- package/dist/src/commands/connect.test.d.ts.map +1 -0
- package/dist/src/commands/connect.test.js +46 -0
- package/dist/src/commands/connect.test.js.map +1 -0
- package/dist/src/commands/console/exec/exec.d.ts +43 -0
- package/dist/src/commands/console/exec/exec.d.ts.map +1 -0
- package/dist/src/commands/console/exec/exec.js +79 -0
- package/dist/src/commands/console/exec/exec.js.map +1 -0
- package/dist/src/commands/console/exec/exec.test.d.ts +5 -0
- package/dist/src/commands/console/exec/exec.test.d.ts.map +1 -0
- package/dist/src/commands/console/exec/exec.test.js +191 -0
- package/dist/src/commands/console/exec/exec.test.js.map +1 -0
- package/dist/src/commands/console/logs/logs.d.ts +23 -0
- package/dist/src/commands/console/logs/logs.d.ts.map +1 -0
- package/dist/src/commands/console/logs/logs.js +80 -0
- package/dist/src/commands/console/logs/logs.js.map +1 -0
- package/dist/src/commands/console/logs/logs.test.d.ts +5 -0
- package/dist/src/commands/console/logs/logs.test.d.ts.map +1 -0
- package/dist/src/commands/console/logs/logs.test.js +111 -0
- package/dist/src/commands/console/logs/logs.test.js.map +1 -0
- package/dist/src/commands/disconnect.d.ts +9 -0
- package/dist/src/commands/disconnect.d.ts.map +1 -0
- package/dist/src/commands/disconnect.js +8 -0
- package/dist/src/commands/disconnect.js.map +1 -0
- package/dist/src/commands/disconnect.test.d.ts +5 -0
- package/dist/src/commands/disconnect.test.d.ts.map +1 -0
- package/dist/src/commands/disconnect.test.js +17 -0
- package/dist/src/commands/disconnect.test.js.map +1 -0
- package/dist/src/commands/explorer/query/query.d.ts +31 -0
- package/dist/src/commands/explorer/query/query.d.ts.map +1 -0
- package/dist/src/commands/explorer/query/query.js +106 -0
- package/dist/src/commands/explorer/query/query.js.map +1 -0
- package/dist/src/commands/explorer/query/query.test.d.ts +5 -0
- package/dist/src/commands/explorer/query/query.test.d.ts.map +1 -0
- package/dist/src/commands/explorer/query/query.test.js +228 -0
- package/dist/src/commands/explorer/query/query.test.js.map +1 -0
- package/dist/src/commands/formatters.test.d.ts +6 -0
- package/dist/src/commands/formatters.test.d.ts.map +1 -0
- package/dist/src/commands/formatters.test.js +211 -0
- package/dist/src/commands/formatters.test.js.map +1 -0
- package/dist/src/commands/framework/action-loader.d.ts +25 -0
- package/dist/src/commands/framework/action-loader.d.ts.map +1 -0
- package/dist/src/commands/framework/action-loader.js +46 -0
- package/dist/src/commands/framework/action-loader.js.map +1 -0
- package/dist/src/commands/framework/action-loader.test.d.ts +5 -0
- package/dist/src/commands/framework/action-loader.test.d.ts.map +1 -0
- package/dist/src/commands/framework/action-loader.test.js +89 -0
- package/dist/src/commands/framework/action-loader.test.js.map +1 -0
- package/dist/src/commands/framework/arg-builder.d.ts +92 -0
- package/dist/src/commands/framework/arg-builder.d.ts.map +1 -0
- package/dist/src/commands/framework/arg-builder.js +137 -0
- package/dist/src/commands/framework/arg-builder.js.map +1 -0
- package/dist/src/commands/framework/arg-builder.test.d.ts +5 -0
- package/dist/src/commands/framework/arg-builder.test.d.ts.map +1 -0
- package/dist/src/commands/framework/arg-builder.test.js +246 -0
- package/dist/src/commands/framework/arg-builder.test.js.map +1 -0
- package/dist/src/commands/framework/command-registry.d.ts +23 -0
- package/dist/src/commands/framework/command-registry.d.ts.map +1 -0
- package/dist/src/commands/framework/command-registry.js +42 -0
- package/dist/src/commands/framework/command-registry.js.map +1 -0
- package/dist/src/commands/framework/command-registry.test.d.ts +5 -0
- package/dist/src/commands/framework/command-registry.test.d.ts.map +1 -0
- package/dist/src/commands/framework/command-registry.test.js +158 -0
- package/dist/src/commands/framework/command-registry.test.js.map +1 -0
- package/dist/src/commands/framework/define-command.d.ts +76 -0
- package/dist/src/commands/framework/define-command.d.ts.map +1 -0
- package/dist/src/commands/framework/define-command.js +28 -0
- package/dist/src/commands/framework/define-command.js.map +1 -0
- package/dist/src/commands/framework/define-command.test.d.ts +5 -0
- package/dist/src/commands/framework/define-command.test.d.ts.map +1 -0
- package/dist/src/commands/framework/define-command.test.js +135 -0
- package/dist/src/commands/framework/define-command.test.js.map +1 -0
- package/dist/src/commands/framework/index.d.ts +8 -0
- package/dist/src/commands/framework/index.d.ts.map +1 -0
- package/dist/src/commands/framework/index.js +8 -0
- package/dist/src/commands/framework/index.js.map +1 -0
- package/dist/src/commands/index.d.ts +20 -0
- package/dist/src/commands/index.d.ts.map +1 -0
- package/dist/src/commands/index.js +20 -0
- package/dist/src/commands/index.js.map +1 -0
- package/dist/src/commands/linux/inject-credentials/inject-credentials.d.ts +15 -0
- package/dist/src/commands/linux/inject-credentials/inject-credentials.d.ts.map +1 -0
- package/dist/src/commands/linux/inject-credentials/inject-credentials.js +88 -0
- package/dist/src/commands/linux/inject-credentials/inject-credentials.js.map +1 -0
- package/dist/src/commands/linux/setup/setup.d.ts +19 -0
- package/dist/src/commands/linux/setup/setup.d.ts.map +1 -0
- package/dist/src/commands/linux/setup/setup.js +107 -0
- package/dist/src/commands/linux/setup/setup.js.map +1 -0
- package/dist/src/commands/linux/status/status.d.ts +34 -0
- package/dist/src/commands/linux/status/status.d.ts.map +1 -0
- package/dist/src/commands/linux/status/status.js +134 -0
- package/dist/src/commands/linux/status/status.js.map +1 -0
- package/dist/src/commands/plugin/install/install.d.ts +10 -0
- package/dist/src/commands/plugin/install/install.d.ts.map +1 -0
- package/dist/src/commands/plugin/install/install.js +23 -0
- package/dist/src/commands/plugin/install/install.js.map +1 -0
- package/dist/src/commands/plugin/uninstall/uninstall.d.ts +9 -0
- package/dist/src/commands/plugin/uninstall/uninstall.d.ts.map +1 -0
- package/dist/src/commands/plugin/uninstall/uninstall.js +41 -0
- package/dist/src/commands/plugin/uninstall/uninstall.js.map +1 -0
- package/dist/src/commands/process/close/close.d.ts +22 -0
- package/dist/src/commands/process/close/close.d.ts.map +1 -0
- package/dist/src/commands/process/close/close.js +34 -0
- package/dist/src/commands/process/close/close.js.map +1 -0
- package/dist/src/commands/process/format-state.d.ts +7 -0
- package/dist/src/commands/process/format-state.d.ts.map +1 -0
- package/dist/src/commands/process/format-state.js +19 -0
- package/dist/src/commands/process/format-state.js.map +1 -0
- package/dist/src/commands/process/info/info.d.ts +17 -0
- package/dist/src/commands/process/info/info.d.ts.map +1 -0
- package/dist/src/commands/process/info/info.js +38 -0
- package/dist/src/commands/process/info/info.js.map +1 -0
- package/dist/src/commands/process/info/info.test.d.ts +5 -0
- package/dist/src/commands/process/info/info.test.d.ts.map +1 -0
- package/dist/src/commands/process/info/info.test.js +58 -0
- package/dist/src/commands/process/info/info.test.js.map +1 -0
- package/dist/src/commands/process/launch/launch.d.ts +17 -0
- package/dist/src/commands/process/launch/launch.d.ts.map +1 -0
- package/dist/src/commands/process/launch/launch.js +26 -0
- package/dist/src/commands/process/launch/launch.js.map +1 -0
- package/dist/src/commands/process/launch/launch.test.d.ts +5 -0
- package/dist/src/commands/process/launch/launch.test.d.ts.map +1 -0
- package/dist/src/commands/process/launch/launch.test.js +49 -0
- package/dist/src/commands/process/launch/launch.test.js.map +1 -0
- package/dist/src/commands/process/list/list.d.ts +16 -0
- package/dist/src/commands/process/list/list.d.ts.map +1 -0
- package/dist/src/commands/process/list/list.js +56 -0
- package/dist/src/commands/process/list/list.js.map +1 -0
- package/dist/src/commands/process/list/list.test.d.ts +5 -0
- package/dist/src/commands/process/list/list.test.d.ts.map +1 -0
- package/dist/src/commands/process/list/list.test.js +71 -0
- package/dist/src/commands/process/list/list.test.js.map +1 -0
- package/dist/src/commands/process/run/run.d.ts +31 -0
- package/dist/src/commands/process/run/run.d.ts.map +1 -0
- package/dist/src/commands/process/run/run.js +63 -0
- package/dist/src/commands/process/run/run.js.map +1 -0
- package/dist/src/commands/rgba-to-png.d.ts +17 -0
- package/dist/src/commands/rgba-to-png.d.ts.map +1 -0
- package/dist/src/commands/rgba-to-png.js +85 -0
- package/dist/src/commands/rgba-to-png.js.map +1 -0
- package/dist/src/commands/serve/serve.d.ts +17 -0
- package/dist/src/commands/serve/serve.d.ts.map +1 -0
- package/dist/src/commands/serve/serve.js +128 -0
- package/dist/src/commands/serve/serve.js.map +1 -0
- package/dist/src/commands/serve/serve.test.d.ts +5 -0
- package/dist/src/commands/serve/serve.test.d.ts.map +1 -0
- package/dist/src/commands/serve/serve.test.js +100 -0
- package/dist/src/commands/serve/serve.test.js.map +1 -0
- package/dist/src/commands/viewport/screenshot/screenshot.d.ts +17 -0
- package/dist/src/commands/viewport/screenshot/screenshot.d.ts.map +1 -0
- package/dist/src/commands/viewport/screenshot/screenshot.js +45 -0
- package/dist/src/commands/viewport/screenshot/screenshot.js.map +1 -0
- package/dist/src/commands/viewport/screenshot/screenshot.test.d.ts +5 -0
- package/dist/src/commands/viewport/screenshot/screenshot.test.d.ts.map +1 -0
- package/dist/src/commands/viewport/screenshot/screenshot.test.js +143 -0
- package/dist/src/commands/viewport/screenshot/screenshot.test.js.map +1 -0
- package/dist/src/docker/docker-delegator.d.ts +30 -0
- package/dist/src/docker/docker-delegator.d.ts.map +1 -0
- package/dist/src/docker/docker-delegator.js +201 -0
- package/dist/src/docker/docker-delegator.js.map +1 -0
- package/dist/src/docker/docker-delegator.test.d.ts +2 -0
- package/dist/src/docker/docker-delegator.test.d.ts.map +1 -0
- package/dist/src/docker/docker-delegator.test.js +132 -0
- package/dist/src/docker/docker-delegator.test.js.map +1 -0
- package/dist/src/index.d.ts +9 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/index.test.d.ts +2 -0
- package/dist/src/index.test.d.ts.map +1 -0
- package/dist/src/index.test.js +51 -0
- package/dist/src/index.test.js.map +1 -0
- package/dist/src/linux/index.d.ts +12 -0
- package/dist/src/linux/index.d.ts.map +1 -0
- package/dist/src/linux/index.js +11 -0
- package/dist/src/linux/index.js.map +1 -0
- package/dist/src/linux/linux-config.d.ts +37 -0
- package/dist/src/linux/linux-config.d.ts.map +1 -0
- package/dist/src/linux/linux-config.js +70 -0
- package/dist/src/linux/linux-config.js.map +1 -0
- package/dist/src/linux/linux-config.test.d.ts +2 -0
- package/dist/src/linux/linux-config.test.d.ts.map +1 -0
- package/dist/src/linux/linux-config.test.js +54 -0
- package/dist/src/linux/linux-config.test.js.map +1 -0
- package/dist/src/linux/linux-credential-writer.d.ts +35 -0
- package/dist/src/linux/linux-credential-writer.d.ts.map +1 -0
- package/dist/src/linux/linux-credential-writer.js +300 -0
- package/dist/src/linux/linux-credential-writer.js.map +1 -0
- package/dist/src/linux/linux-display-manager.d.ts +24 -0
- package/dist/src/linux/linux-display-manager.d.ts.map +1 -0
- package/dist/src/linux/linux-display-manager.js +92 -0
- package/dist/src/linux/linux-display-manager.js.map +1 -0
- package/dist/src/linux/linux-env-guard.d.ts +13 -0
- package/dist/src/linux/linux-env-guard.d.ts.map +1 -0
- package/dist/src/linux/linux-env-guard.js +31 -0
- package/dist/src/linux/linux-env-guard.js.map +1 -0
- package/dist/src/linux/linux-env-guard.test.d.ts +2 -0
- package/dist/src/linux/linux-env-guard.test.d.ts.map +1 -0
- package/dist/src/linux/linux-env-guard.test.js +48 -0
- package/dist/src/linux/linux-env-guard.test.js.map +1 -0
- package/dist/src/linux/linux-fflags.d.ts +17 -0
- package/dist/src/linux/linux-fflags.d.ts.map +1 -0
- package/dist/src/linux/linux-fflags.js +33 -0
- package/dist/src/linux/linux-fflags.js.map +1 -0
- package/dist/src/linux/linux-fflags.test.d.ts +2 -0
- package/dist/src/linux/linux-fflags.test.d.ts.map +1 -0
- package/dist/src/linux/linux-fflags.test.js +55 -0
- package/dist/src/linux/linux-fflags.test.js.map +1 -0
- package/dist/src/linux/linux-prerequisites.d.ts +24 -0
- package/dist/src/linux/linux-prerequisites.d.ts.map +1 -0
- package/dist/src/linux/linux-prerequisites.js +118 -0
- package/dist/src/linux/linux-prerequisites.js.map +1 -0
- package/dist/src/linux/linux-shader-patcher.d.ts +17 -0
- package/dist/src/linux/linux-shader-patcher.d.ts.map +1 -0
- package/dist/src/linux/linux-shader-patcher.js +48 -0
- package/dist/src/linux/linux-shader-patcher.js.map +1 -0
- package/dist/src/linux/linux-shader-patcher.test.d.ts +2 -0
- package/dist/src/linux/linux-shader-patcher.test.d.ts.map +1 -0
- package/dist/src/linux/linux-shader-patcher.test.js +55 -0
- package/dist/src/linux/linux-shader-patcher.test.js.map +1 -0
- package/dist/src/linux/linux-studio-installer.d.ts +10 -0
- package/dist/src/linux/linux-studio-installer.d.ts.map +1 -0
- package/dist/src/linux/linux-studio-installer.js +79 -0
- package/dist/src/linux/linux-studio-installer.js.map +1 -0
- package/dist/src/linux/linux-studio-launcher.d.ts +10 -0
- package/dist/src/linux/linux-studio-launcher.d.ts.map +1 -0
- package/dist/src/linux/linux-studio-launcher.js +73 -0
- package/dist/src/linux/linux-studio-launcher.js.map +1 -0
- package/dist/src/linux/linux-version-resolver.d.ts +18 -0
- package/dist/src/linux/linux-version-resolver.d.ts.map +1 -0
- package/dist/src/linux/linux-version-resolver.js +49 -0
- package/dist/src/linux/linux-version-resolver.js.map +1 -0
- package/dist/src/linux/linux-wine-env.d.ts +11 -0
- package/dist/src/linux/linux-wine-env.d.ts.map +1 -0
- package/dist/src/linux/linux-wine-env.js +33 -0
- package/dist/src/linux/linux-wine-env.js.map +1 -0
- package/dist/src/linux/linux-wine-env.test.d.ts +2 -0
- package/dist/src/linux/linux-wine-env.test.d.ts.map +1 -0
- package/dist/src/linux/linux-wine-env.test.js +47 -0
- package/dist/src/linux/linux-wine-env.test.js.map +1 -0
- package/dist/src/plugin/persistent-plugin-installer.d.ts +21 -0
- package/dist/src/plugin/persistent-plugin-installer.d.ts.map +1 -0
- package/dist/src/plugin/persistent-plugin-installer.js +69 -0
- package/dist/src/plugin/persistent-plugin-installer.js.map +1 -0
- package/dist/src/plugin/persistent-plugin-installer.test.d.ts +5 -0
- package/dist/src/plugin/persistent-plugin-installer.test.d.ts.map +1 -0
- package/dist/src/plugin/persistent-plugin-installer.test.js +109 -0
- package/dist/src/plugin/persistent-plugin-installer.test.js.map +1 -0
- package/dist/src/plugin/plugin-discovery.d.ts +7 -0
- package/dist/src/plugin/plugin-discovery.d.ts.map +1 -0
- package/dist/src/plugin/plugin-discovery.js +18 -0
- package/dist/src/plugin/plugin-discovery.js.map +1 -0
- package/dist/src/plugin/plugin-discovery.test.d.ts +5 -0
- package/dist/src/plugin/plugin-discovery.test.d.ts.map +1 -0
- package/dist/src/plugin/plugin-discovery.test.js +55 -0
- package/dist/src/plugin/plugin-discovery.test.js.map +1 -0
- package/dist/src/plugin/plugin-injector.js +1 -1
- package/dist/src/plugin/plugin-injector.js.map +1 -1
- package/dist/src/process/studio-process-manager.d.ts +7 -3
- package/dist/src/process/studio-process-manager.d.ts.map +1 -1
- package/dist/src/process/studio-process-manager.js +38 -11
- package/dist/src/process/studio-process-manager.js.map +1 -1
- package/dist/src/process/studio-process-manager.test.js +18 -1
- package/dist/src/process/studio-process-manager.test.js.map +1 -1
- package/dist/src/server/action-dispatcher.d.ts +35 -0
- package/dist/src/server/action-dispatcher.d.ts.map +1 -0
- package/dist/src/server/action-dispatcher.js +67 -0
- package/dist/src/server/action-dispatcher.js.map +1 -0
- package/dist/src/server/action-dispatcher.test.d.ts +6 -0
- package/dist/src/server/action-dispatcher.test.d.ts.map +1 -0
- package/dist/src/server/action-dispatcher.test.js +173 -0
- package/dist/src/server/action-dispatcher.test.js.map +1 -0
- package/dist/src/server/index.d.ts +1 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/pending-request-map.d.ts +33 -0
- package/dist/src/server/pending-request-map.d.ts.map +1 -0
- package/dist/src/server/pending-request-map.js +69 -0
- package/dist/src/server/pending-request-map.js.map +1 -0
- package/dist/src/server/pending-request-map.test.d.ts +2 -0
- package/dist/src/server/pending-request-map.test.d.ts.map +1 -0
- package/dist/src/server/pending-request-map.test.js +192 -0
- package/dist/src/server/pending-request-map.test.js.map +1 -0
- package/dist/src/server/plugin-detection.test.d.ts +7 -0
- package/dist/src/server/plugin-detection.test.d.ts.map +1 -0
- package/dist/src/server/plugin-detection.test.js +154 -0
- package/dist/src/server/plugin-detection.test.js.map +1 -0
- package/dist/src/server/studio-bridge-server.d.ts +44 -7
- package/dist/src/server/studio-bridge-server.d.ts.map +1 -1
- package/dist/src/server/studio-bridge-server.js +341 -91
- package/dist/src/server/studio-bridge-server.js.map +1 -1
- package/dist/src/server/studio-bridge-server.test.js +231 -207
- package/dist/src/server/studio-bridge-server.test.js.map +1 -1
- package/dist/src/server/web-socket-protocol-basic.test.d.ts +2 -0
- package/dist/src/server/web-socket-protocol-basic.test.d.ts.map +1 -0
- package/dist/src/server/web-socket-protocol-basic.test.js +98 -0
- package/dist/src/server/web-socket-protocol-basic.test.js.map +1 -0
- package/dist/src/server/web-socket-protocol.d.ts +218 -20
- package/dist/src/server/web-socket-protocol.d.ts.map +1 -1
- package/dist/src/server/web-socket-protocol.js +346 -20
- package/dist/src/server/web-socket-protocol.js.map +1 -1
- package/dist/src/server/web-socket-protocol.test.js +572 -146
- package/dist/src/server/web-socket-protocol.test.js.map +1 -1
- package/dist/src/test/e2e/hand-off.test.d.ts +9 -0
- package/dist/src/test/e2e/hand-off.test.d.ts.map +1 -0
- package/dist/src/test/e2e/hand-off.test.js +274 -0
- package/dist/src/test/e2e/hand-off.test.js.map +1 -0
- package/dist/src/test/e2e/persistent-session.test.d.ts +11 -0
- package/dist/src/test/e2e/persistent-session.test.d.ts.map +1 -0
- package/dist/src/test/e2e/persistent-session.test.js +367 -0
- package/dist/src/test/e2e/persistent-session.test.js.map +1 -0
- package/dist/src/test/e2e/split-server.test.d.ts +14 -0
- package/dist/src/test/e2e/split-server.test.d.ts.map +1 -0
- package/dist/src/test/e2e/split-server.test.js +230 -0
- package/dist/src/test/e2e/split-server.test.js.map +1 -0
- package/dist/src/test/helpers/mock-plugin-client.d.ts +69 -0
- package/dist/src/test/helpers/mock-plugin-client.d.ts.map +1 -0
- package/dist/src/test/helpers/mock-plugin-client.js +213 -0
- package/dist/src/test/helpers/mock-plugin-client.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docker/.dockerignore +2 -0
- package/docker/Dockerfile +113 -0
- package/docker/docker-compose.yml +20 -0
- package/docker/entrypoint.sh +19 -0
- package/package.json +8 -6
- package/src/bridge/bridge-connection-remote.test.ts +189 -0
- package/src/bridge/bridge-connection.test.ts +1076 -0
- package/src/bridge/bridge-connection.ts +718 -0
- package/src/bridge/bridge-session.test.ts +336 -0
- package/src/bridge/bridge-session.ts +365 -0
- package/src/bridge/index.ts +42 -0
- package/src/bridge/internal/__tests__/failover-crash.test.ts +191 -0
- package/src/bridge/internal/__tests__/failover-graceful.test.ts +268 -0
- package/src/bridge/internal/__tests__/failover-inflight.test.ts +329 -0
- package/src/bridge/internal/__tests__/host-client-integration.test.ts +387 -0
- package/src/bridge/internal/bridge-client.test.ts +399 -0
- package/src/bridge/internal/bridge-client.ts +434 -0
- package/src/bridge/internal/bridge-host.test.ts +501 -0
- package/src/bridge/internal/bridge-host.ts +531 -0
- package/src/bridge/internal/environment-detection.test.ts +180 -0
- package/src/bridge/internal/environment-detection.ts +119 -0
- package/src/bridge/internal/hand-off.test.ts +408 -0
- package/src/bridge/internal/hand-off.ts +275 -0
- package/src/bridge/internal/health-endpoint.test.ts +147 -0
- package/src/bridge/internal/health-endpoint.ts +100 -0
- package/src/bridge/internal/host-protocol.test.ts +415 -0
- package/src/bridge/internal/host-protocol.ts +255 -0
- package/src/bridge/internal/session-tracker.test.ts +535 -0
- package/src/bridge/internal/session-tracker.ts +198 -0
- package/src/bridge/internal/transport-client.test.ts +241 -0
- package/src/bridge/internal/transport-client.ts +194 -0
- package/src/bridge/internal/transport-server.test.ts +220 -0
- package/src/bridge/internal/transport-server.ts +242 -0
- package/src/bridge/types.ts +161 -0
- package/src/cli/adapters/cli-command-adapter-handler.test.ts +318 -0
- package/src/cli/adapters/cli-command-adapter.test.ts +221 -0
- package/src/cli/adapters/cli-command-adapter.ts +342 -0
- package/src/cli/adapters/group-builder.test.ts +146 -0
- package/src/cli/adapters/group-builder.ts +81 -0
- package/src/cli/adapters/help-formatter.test.ts +97 -0
- package/src/cli/adapters/help-formatter.ts +86 -0
- package/src/cli/adapters/target-resolver.test.ts +222 -0
- package/src/cli/adapters/target-resolver.ts +144 -0
- package/src/cli/args/global-args.ts +2 -0
- package/src/cli/cli.ts +100 -21
- package/src/cli/resolve-script-content.ts +36 -0
- package/src/cli/resolve-session.test.ts +141 -0
- package/src/cli/resolve-session.ts +66 -0
- package/src/cli/script-executor.ts +22 -4
- package/src/cli/types.ts +11 -0
- package/src/commands/connect.test.ts +61 -0
- package/src/commands/connect.ts +32 -0
- package/src/commands/console/exec/exec.test.ts +258 -0
- package/src/commands/console/exec/exec.ts +130 -0
- package/src/commands/console/exec/execute.luau +202 -0
- package/src/commands/console/logs/logs.test.ts +138 -0
- package/src/commands/console/logs/logs.ts +115 -0
- package/src/commands/console/logs/query-logs.luau +76 -0
- package/src/commands/disconnect.test.ts +21 -0
- package/src/commands/disconnect.ts +12 -0
- package/src/commands/explorer/query/query-data-model.luau +206 -0
- package/src/commands/explorer/query/query.test.ts +297 -0
- package/src/commands/explorer/query/query.ts +157 -0
- package/src/commands/formatters.test.ts +237 -0
- package/src/commands/framework/action-loader.test.ts +118 -0
- package/src/commands/framework/action-loader.ts +65 -0
- package/src/commands/framework/arg-builder.test.ts +298 -0
- package/src/commands/framework/arg-builder.ts +203 -0
- package/src/commands/framework/command-registry.test.ts +204 -0
- package/src/commands/framework/command-registry.ts +51 -0
- package/src/commands/framework/define-command.test.ts +161 -0
- package/src/commands/framework/define-command.ts +114 -0
- package/src/commands/framework/index.ts +33 -0
- package/src/commands/index.ts +72 -0
- package/src/commands/linux/inject-credentials/inject-credentials.ts +118 -0
- package/src/commands/linux/setup/setup.ts +145 -0
- package/src/commands/linux/status/status.ts +180 -0
- package/src/commands/plugin/install/install.ts +31 -0
- package/src/commands/plugin/uninstall/uninstall.ts +54 -0
- package/src/commands/process/close/close.ts +52 -0
- package/src/commands/process/format-state.ts +21 -0
- package/src/commands/process/info/info.test.ts +76 -0
- package/src/commands/process/info/info.ts +54 -0
- package/src/commands/process/info/query-state.luau +48 -0
- package/src/commands/process/launch/launch.test.ts +65 -0
- package/src/commands/process/launch/launch.ts +45 -0
- package/src/commands/process/list/list.test.ts +82 -0
- package/src/commands/process/list/list.ts +75 -0
- package/src/commands/process/run/run.ts +98 -0
- package/src/commands/rgba-to-png.ts +98 -0
- package/src/commands/serve/serve.test.ts +139 -0
- package/src/commands/serve/serve.ts +161 -0
- package/src/commands/viewport/screenshot/capture-screenshot.luau +247 -0
- package/src/commands/viewport/screenshot/screenshot.test.ts +181 -0
- package/src/commands/viewport/screenshot/screenshot.ts +71 -0
- package/src/docker/docker-delegator.test.ts +159 -0
- package/src/docker/docker-delegator.ts +240 -0
- package/src/index.test.ts +58 -0
- package/src/index.ts +104 -3
- package/src/linux/README.md +130 -0
- package/src/linux/index.ts +25 -0
- package/src/linux/linux-config.test.ts +66 -0
- package/src/linux/linux-config.ts +102 -0
- package/src/linux/linux-credential-writer.ts +421 -0
- package/src/linux/linux-display-manager.ts +106 -0
- package/src/linux/linux-env-guard.test.ts +62 -0
- package/src/linux/linux-env-guard.ts +38 -0
- package/src/linux/linux-fflags.test.ts +78 -0
- package/src/linux/linux-fflags.ts +48 -0
- package/src/linux/linux-prerequisites.ts +152 -0
- package/src/linux/linux-shader-patcher.test.ts +76 -0
- package/src/linux/linux-shader-patcher.ts +56 -0
- package/src/linux/linux-studio-installer.ts +113 -0
- package/src/linux/linux-studio-launcher.ts +90 -0
- package/src/linux/linux-version-resolver.ts +74 -0
- package/src/linux/linux-wine-env.test.ts +56 -0
- package/src/linux/linux-wine-env.ts +38 -0
- package/src/linux/write-cred.c +48 -0
- package/src/plugin/persistent-plugin-installer.test.ts +168 -0
- package/src/plugin/persistent-plugin-installer.ts +90 -0
- package/src/plugin/plugin-discovery.test.ts +70 -0
- package/src/plugin/plugin-discovery.ts +21 -0
- package/src/plugin/plugin-injector.ts +1 -1
- package/src/process/studio-process-manager.test.ts +22 -1
- package/src/process/studio-process-manager.ts +57 -18
- package/src/server/action-dispatcher.test.ts +240 -0
- package/src/server/action-dispatcher.ts +89 -0
- package/src/server/index.ts +0 -3
- package/src/server/pending-request-map.test.ts +261 -0
- package/src/server/pending-request-map.ts +87 -0
- package/src/server/plugin-detection.test.ts +195 -0
- package/src/server/studio-bridge-server.test.ts +321 -283
- package/src/server/studio-bridge-server.ts +469 -111
- package/src/server/web-socket-protocol-basic.test.ts +131 -0
- package/src/server/web-socket-protocol.test.ts +658 -159
- package/src/server/web-socket-protocol.ts +668 -58
- package/src/test/e2e/hand-off.test.ts +338 -0
- package/src/test/e2e/persistent-session.test.ts +442 -0
- package/src/test/e2e/split-server.test.ts +290 -0
- package/src/test/helpers/mock-plugin-client.ts +276 -0
- package/templates/studio-bridge-plugin/src/Shared/ActionRouter.luau +245 -0
- package/templates/studio-bridge-plugin/src/Shared/DiscoveryStateMachine.luau +203 -0
- package/templates/studio-bridge-plugin/src/Shared/MessageBuffer.luau +144 -0
- package/templates/studio-bridge-plugin/src/Shared/Protocol.luau +132 -0
- package/templates/studio-bridge-plugin/src/StudioBridgePlugin.server.lua +364 -133
- package/templates/studio-bridge-plugin/src/Vendor/png.luau +1247 -0
- package/templates/studio-bridge-plugin-test/test/actions.test.luau +580 -0
- package/templates/studio-bridge-plugin-test/test/discovery.test.luau +622 -0
- package/templates/studio-bridge-plugin-test/test/execute-handler.test.luau +406 -0
- package/templates/studio-bridge-plugin-test/test/hash-lifecycle.test.luau +814 -0
- package/templates/studio-bridge-plugin-test/test/integration.test.luau +1020 -0
- package/templates/studio-bridge-plugin-test/test/new-actions.test.luau +339 -0
- package/templates/studio-bridge-plugin-test/test/plugin-entry.test.luau +493 -0
- package/templates/studio-bridge-plugin-test/test/protocol.test.luau +506 -0
- package/templates/studio-bridge-plugin-test/test/roblox-mocks.luau +108 -0
- package/templates/studio-bridge-plugin-test/test/test-runner.luau +112 -0
- package/dist/src/cli/commands/exec-command.d.ts +0 -15
- package/dist/src/cli/commands/exec-command.d.ts.map +0 -1
- package/dist/src/cli/commands/exec-command.js +0 -35
- package/dist/src/cli/commands/exec-command.js.map +0 -1
- package/dist/src/cli/commands/run-command.d.ts +0 -15
- package/dist/src/cli/commands/run-command.d.ts.map +0 -1
- package/dist/src/cli/commands/run-command.js +0 -47
- package/dist/src/cli/commands/run-command.js.map +0 -1
- package/dist/src/cli/commands/terminal/terminal-command.d.ts +0 -17
- package/dist/src/cli/commands/terminal/terminal-command.d.ts.map +0 -1
- package/dist/src/cli/commands/terminal/terminal-command.js +0 -41
- package/dist/src/cli/commands/terminal/terminal-command.js.map +0 -1
- package/dist/src/cli/commands/terminal/terminal-editor.d.ts +0 -43
- package/dist/src/cli/commands/terminal/terminal-editor.d.ts.map +0 -1
- package/dist/src/cli/commands/terminal/terminal-editor.js +0 -430
- package/dist/src/cli/commands/terminal/terminal-editor.js.map +0 -1
- package/dist/src/cli/commands/terminal/terminal-mode.d.ts +0 -13
- package/dist/src/cli/commands/terminal/terminal-mode.d.ts.map +0 -1
- package/dist/src/cli/commands/terminal/terminal-mode.js +0 -141
- package/dist/src/cli/commands/terminal/terminal-mode.js.map +0 -1
- package/dist/src/server/web-socket-protocol.smoke.test.d.ts +0 -6
- package/dist/src/server/web-socket-protocol.smoke.test.d.ts.map +0 -1
- package/dist/src/server/web-socket-protocol.smoke.test.js +0 -196
- package/dist/src/server/web-socket-protocol.smoke.test.js.map +0 -1
- package/src/cli/commands/exec-command.ts +0 -48
- package/src/cli/commands/run-command.ts +0 -63
- package/src/cli/commands/terminal/terminal-command.ts +0 -54
- package/src/cli/commands/terminal/terminal-editor.ts +0 -500
- package/src/cli/commands/terminal/terminal-mode.ts +0 -184
- 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
|
-
|
|
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
|
-
|
|
76
|
-
|
|
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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
|
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
|
-
##
|
|
5
|
+
## Architecture
|
|
6
6
|
|
|
7
7
|
```
|
|
8
|
-
|
|
9
|
-
│
|
|
10
|
-
│
|
|
11
|
-
│
|
|
12
|
-
│
|
|
13
|
-
│
|
|
14
|
-
│
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
34
|
-
studio-bridge
|
|
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
|
-
#
|
|
37
|
-
studio-bridge exec 'print("hello world")'
|
|
50
|
+
# 3. Open Roblox Studio — the plugin connects automatically
|
|
38
51
|
|
|
39
|
-
#
|
|
40
|
-
studio-bridge
|
|
52
|
+
# 4. Execute Luau code
|
|
53
|
+
studio-bridge console exec 'print("hello from the bridge")'
|
|
41
54
|
|
|
42
|
-
#
|
|
43
|
-
studio-bridge
|
|
55
|
+
# 5. Query the DataModel
|
|
56
|
+
studio-bridge explorer query Workspace --children
|
|
57
|
+
```
|
|
44
58
|
|
|
45
|
-
|
|
46
|
-
studio-bridge terminal --place build/test.rbxl --script init.lua
|
|
59
|
+
## CLI Commands
|
|
47
60
|
|
|
48
|
-
|
|
49
|
-
studio-bridge
|
|
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
|
-
###
|
|
76
|
+
### `console exec`
|
|
53
77
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
|
76
|
-
|
|
77
|
-
|
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
92
|
-
import { StudioBridge } from '@quenty/studio-bridge';
|
|
129
|
+
### `process list`
|
|
93
130
|
|
|
94
|
-
|
|
95
|
-
|
|
131
|
+
```bash
|
|
132
|
+
studio-bridge process list
|
|
133
|
+
```
|
|
96
134
|
|
|
97
|
-
|
|
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
|
-
|
|
104
|
-
console.log(result.logs); // all captured output, newline-separated
|
|
137
|
+
### `process info`
|
|
105
138
|
|
|
106
|
-
|
|
107
|
-
|
|
139
|
+
```bash
|
|
140
|
+
studio-bridge process info
|
|
108
141
|
```
|
|
109
142
|
|
|
110
|
-
|
|
143
|
+
Returns the Studio mode (`Edit`, `Play`, `Run`, etc.), place name, place ID, and game ID.
|
|
111
144
|
|
|
112
|
-
|
|
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
|
-
|
|
147
|
+
```bash
|
|
148
|
+
studio-bridge process launch
|
|
149
|
+
studio-bridge process launch --place ./build/test.rbxl
|
|
150
|
+
```
|
|
120
151
|
|
|
121
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
161
|
+
### `process close`
|
|
135
162
|
|
|
136
|
-
|
|
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
|
-
|
|
169
|
+
### `plugin install` / `plugin uninstall`
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
studio-bridge plugin install
|
|
173
|
+
studio-bridge plugin uninstall
|
|
174
|
+
```
|
|
139
175
|
|
|
140
|
-
|
|
141
|
-
|------|---------|-------------|
|
|
142
|
-
| `hello` | `{ sessionId }` | Handshake |
|
|
143
|
-
| `output` | `{ messages: [{ level, body }] }` | Batched log output |
|
|
144
|
-
| `scriptComplete` | `{ success, error? }` | Script finished |
|
|
176
|
+
### `serve`
|
|
145
177
|
|
|
146
|
-
|
|
178
|
+
```bash
|
|
179
|
+
studio-bridge serve
|
|
180
|
+
studio-bridge serve --port 9000
|
|
181
|
+
```
|
|
147
182
|
|
|
148
|
-
|
|
183
|
+
### `action`
|
|
149
184
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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:
|
|
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,
|
|
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":"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"}
|