@quenty/studio-bridge 0.21.0 → 0.22.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 -0
- package/README.md +109 -17
- package/build-scripts/transform-add-session-attribute.lua +1 -0
- package/deploy.nevermore.json +10 -0
- package/dist/src/bridge/bridge-connection.d.ts +26 -2
- package/dist/src/bridge/bridge-connection.d.ts.map +1 -1
- package/dist/src/bridge/bridge-connection.js +159 -14
- package/dist/src/bridge/bridge-connection.js.map +1 -1
- package/dist/src/bridge/bridge-connection.test.js +81 -0
- package/dist/src/bridge/bridge-connection.test.js.map +1 -1
- package/dist/src/bridge/bridge-session.d.ts +35 -2
- package/dist/src/bridge/bridge-session.d.ts.map +1 -1
- package/dist/src/bridge/bridge-session.js +185 -28
- package/dist/src/bridge/bridge-session.js.map +1 -1
- package/dist/src/bridge/bridge-session.test.js +6 -4
- package/dist/src/bridge/bridge-session.test.js.map +1 -1
- package/dist/src/bridge/index.d.ts +1 -1
- package/dist/src/bridge/index.d.ts.map +1 -1
- package/dist/src/bridge/index.js.map +1 -1
- package/dist/src/bridge/internal/bridge-client.d.ts +4 -0
- package/dist/src/bridge/internal/bridge-client.d.ts.map +1 -1
- package/dist/src/bridge/internal/bridge-client.js +20 -7
- package/dist/src/bridge/internal/bridge-client.js.map +1 -1
- package/dist/src/bridge/internal/bridge-client.test.js +18 -0
- package/dist/src/bridge/internal/bridge-client.test.js.map +1 -1
- package/dist/src/bridge/internal/bridge-host.d.ts +13 -1
- package/dist/src/bridge/internal/bridge-host.d.ts.map +1 -1
- package/dist/src/bridge/internal/bridge-host.js +35 -0
- package/dist/src/bridge/internal/bridge-host.js.map +1 -1
- package/dist/src/bridge/internal/bridge-host.test.js +31 -0
- package/dist/src/bridge/internal/bridge-host.test.js.map +1 -1
- package/dist/src/bridge/internal/hand-off.d.ts.map +1 -1
- package/dist/src/bridge/internal/hand-off.js +4 -1
- package/dist/src/bridge/internal/hand-off.js.map +1 -1
- package/dist/src/bridge/internal/host-protocol.d.ts +8 -0
- package/dist/src/bridge/internal/host-protocol.d.ts.map +1 -1
- package/dist/src/bridge/internal/host-protocol.js +120 -13
- package/dist/src/bridge/internal/host-protocol.js.map +1 -1
- package/dist/src/bridge/internal/host-protocol.test.js +13 -0
- package/dist/src/bridge/internal/host-protocol.test.js.map +1 -1
- package/dist/src/bridge/internal/instance-state.d.ts +9 -0
- package/dist/src/bridge/internal/instance-state.d.ts.map +1 -0
- package/dist/src/bridge/internal/instance-state.js +28 -0
- package/dist/src/bridge/internal/instance-state.js.map +1 -0
- package/dist/src/bridge/internal/transport-client.d.ts.map +1 -1
- package/dist/src/bridge/internal/transport-client.js +2 -1
- package/dist/src/bridge/internal/transport-client.js.map +1 -1
- package/dist/src/bridge/internal/transport-server.d.ts.map +1 -1
- package/dist/src/bridge/internal/transport-server.js +5 -1
- package/dist/src/bridge/internal/transport-server.js.map +1 -1
- package/dist/src/bridge/types.d.ts +43 -4
- package/dist/src/bridge/types.d.ts.map +1 -1
- package/dist/src/bridge/types.js.map +1 -1
- package/dist/src/cli/adapters/cli-command-adapter-handler.test.js +24 -0
- package/dist/src/cli/adapters/cli-command-adapter-handler.test.js.map +1 -1
- package/dist/src/cli/adapters/cli-command-adapter.d.ts +6 -0
- package/dist/src/cli/adapters/cli-command-adapter.d.ts.map +1 -1
- package/dist/src/cli/adapters/cli-command-adapter.js +107 -11
- package/dist/src/cli/adapters/cli-command-adapter.js.map +1 -1
- package/dist/src/cli/adapters/group-builder.d.ts +3 -0
- package/dist/src/cli/adapters/group-builder.d.ts.map +1 -1
- package/dist/src/cli/adapters/group-builder.js +34 -15
- package/dist/src/cli/adapters/group-builder.js.map +1 -1
- package/dist/src/cli/adapters/group-builder.test.js +26 -2
- package/dist/src/cli/adapters/group-builder.test.js.map +1 -1
- package/dist/src/cli/adapters/help-formatter.d.ts.map +1 -1
- package/dist/src/cli/adapters/help-formatter.js +4 -3
- package/dist/src/cli/adapters/help-formatter.js.map +1 -1
- package/dist/src/cli/adapters/help-formatter.test.js +1 -1
- package/dist/src/cli/adapters/help-formatter.test.js.map +1 -1
- package/dist/src/cli/adapters/playtest-edit-guard.test.d.ts +2 -0
- package/dist/src/cli/adapters/playtest-edit-guard.test.d.ts.map +1 -0
- package/dist/src/cli/adapters/playtest-edit-guard.test.js +28 -0
- package/dist/src/cli/adapters/playtest-edit-guard.test.js.map +1 -0
- package/dist/src/cli/args/global-args.d.ts +1 -1
- package/dist/src/cli/args/global-args.d.ts.map +1 -1
- package/dist/src/cli/cli-output-context.d.ts +14 -0
- package/dist/src/cli/cli-output-context.d.ts.map +1 -0
- package/dist/src/cli/cli-output-context.js +39 -0
- package/dist/src/cli/cli-output-context.js.map +1 -0
- package/dist/src/cli/cli-output-context.test.d.ts +2 -0
- package/dist/src/cli/cli-output-context.test.d.ts.map +1 -0
- package/dist/src/cli/cli-output-context.test.js +38 -0
- package/dist/src/cli/cli-output-context.test.js.map +1 -0
- package/dist/src/cli/cli.js +40 -17
- package/dist/src/cli/cli.js.map +1 -1
- package/dist/src/cli/managed-studio-run.d.ts +21 -0
- package/dist/src/cli/managed-studio-run.d.ts.map +1 -0
- package/dist/src/cli/managed-studio-run.js +75 -0
- package/dist/src/cli/managed-studio-run.js.map +1 -0
- package/dist/src/cli/managed-studio-run.test.d.ts +2 -0
- package/dist/src/cli/managed-studio-run.test.d.ts.map +1 -0
- package/dist/src/cli/managed-studio-run.test.js +52 -0
- package/dist/src/cli/managed-studio-run.test.js.map +1 -0
- package/dist/src/cli/resolve-session.js +1 -1
- package/dist/src/cli/resolve-session.js.map +1 -1
- package/dist/src/cli/resolve-session.test.js +1 -1
- package/dist/src/cli/resolve-session.test.js.map +1 -1
- package/dist/src/cli/script-executor.d.ts +13 -1
- package/dist/src/cli/script-executor.d.ts.map +1 -1
- package/dist/src/cli/script-executor.js +77 -47
- package/dist/src/cli/script-executor.js.map +1 -1
- package/dist/src/commands/console/exec/exec.d.ts +17 -0
- package/dist/src/commands/console/exec/exec.d.ts.map +1 -1
- package/dist/src/commands/console/exec/exec.js +39 -7
- package/dist/src/commands/console/exec/exec.js.map +1 -1
- package/dist/src/commands/console/exec/exec.test.js +62 -3
- package/dist/src/commands/console/exec/exec.test.js.map +1 -1
- package/dist/src/commands/console/logs/logs.d.ts +30 -2
- package/dist/src/commands/console/logs/logs.d.ts.map +1 -1
- package/dist/src/commands/console/logs/logs.js +82 -7
- package/dist/src/commands/console/logs/logs.js.map +1 -1
- package/dist/src/commands/console/logs/logs.test.js +63 -4
- package/dist/src/commands/console/logs/logs.test.js.map +1 -1
- package/dist/src/commands/explorer/export/export.d.ts +19 -0
- package/dist/src/commands/explorer/export/export.d.ts.map +1 -0
- package/dist/src/commands/explorer/export/export.js +37 -0
- package/dist/src/commands/explorer/export/export.js.map +1 -0
- package/dist/src/commands/explorer/export/export.test.d.ts +2 -0
- package/dist/src/commands/explorer/export/export.test.d.ts.map +1 -0
- package/dist/src/commands/explorer/export/export.test.js +25 -0
- package/dist/src/commands/explorer/export/export.test.js.map +1 -0
- package/dist/src/commands/explorer/find/find.d.ts +28 -0
- package/dist/src/commands/explorer/find/find.d.ts.map +1 -0
- package/dist/src/commands/explorer/find/find.js +75 -0
- package/dist/src/commands/explorer/find/find.js.map +1 -0
- package/dist/src/commands/explorer/find/find.test.d.ts +2 -0
- package/dist/src/commands/explorer/find/find.test.d.ts.map +1 -0
- package/dist/src/commands/explorer/find/find.test.js +44 -0
- package/dist/src/commands/explorer/find/find.test.js.map +1 -0
- package/dist/src/commands/explorer/grep/grep.d.ts +24 -0
- package/dist/src/commands/explorer/grep/grep.d.ts.map +1 -0
- package/dist/src/commands/explorer/grep/grep.js +63 -0
- package/dist/src/commands/explorer/grep/grep.js.map +1 -0
- package/dist/src/commands/explorer/grep/grep.test.d.ts +2 -0
- package/dist/src/commands/explorer/grep/grep.test.d.ts.map +1 -0
- package/dist/src/commands/explorer/grep/grep.test.js +42 -0
- package/dist/src/commands/explorer/grep/grep.test.js.map +1 -0
- package/dist/src/commands/explorer/import/import.d.ts +21 -0
- package/dist/src/commands/explorer/import/import.d.ts.map +1 -0
- package/dist/src/commands/explorer/import/import.js +37 -0
- package/dist/src/commands/explorer/import/import.js.map +1 -0
- package/dist/src/commands/explorer/import/import.test.d.ts +2 -0
- package/dist/src/commands/explorer/import/import.test.d.ts.map +1 -0
- package/dist/src/commands/explorer/import/import.test.js +45 -0
- package/dist/src/commands/explorer/import/import.test.js.map +1 -0
- package/dist/src/commands/formatters.test.js +7 -1
- package/dist/src/commands/formatters.test.js.map +1 -1
- package/dist/src/commands/framework/action-loader.d.ts +5 -1
- package/dist/src/commands/framework/action-loader.d.ts.map +1 -1
- package/dist/src/commands/framework/action-loader.js +9 -2
- package/dist/src/commands/framework/action-loader.js.map +1 -1
- package/dist/src/commands/framework/action-loader.test.js +23 -0
- package/dist/src/commands/framework/action-loader.test.js.map +1 -1
- package/dist/src/commands/framework/arg-builder.d.ts +15 -2
- package/dist/src/commands/framework/arg-builder.d.ts.map +1 -1
- package/dist/src/commands/framework/arg-builder.js +22 -2
- package/dist/src/commands/framework/arg-builder.js.map +1 -1
- package/dist/src/commands/framework/define-command.d.ts +19 -3
- package/dist/src/commands/framework/define-command.d.ts.map +1 -1
- package/dist/src/commands/framework/define-command.js.map +1 -1
- package/dist/src/commands/framework/index.d.ts +1 -1
- package/dist/src/commands/framework/index.d.ts.map +1 -1
- package/dist/src/commands/framework/index.js.map +1 -1
- package/dist/src/commands/index.d.ts +11 -0
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +11 -0
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/linux/inject-credentials/inject-credentials.d.ts.map +1 -1
- package/dist/src/commands/linux/inject-credentials/inject-credentials.js +1 -3
- package/dist/src/commands/linux/inject-credentials/inject-credentials.js.map +1 -1
- package/dist/src/commands/linux/setup/setup.d.ts.map +1 -1
- package/dist/src/commands/linux/setup/setup.js +1 -3
- package/dist/src/commands/linux/setup/setup.js.map +1 -1
- package/dist/src/commands/linux/status/status.d.ts +9 -1
- package/dist/src/commands/linux/status/status.d.ts.map +1 -1
- package/dist/src/commands/linux/status/status.js +66 -86
- package/dist/src/commands/linux/status/status.js.map +1 -1
- package/dist/src/commands/playtest/player/add/add.d.ts +17 -0
- package/dist/src/commands/playtest/player/add/add.d.ts.map +1 -0
- package/dist/src/commands/playtest/player/add/add.js +45 -0
- package/dist/src/commands/playtest/player/add/add.js.map +1 -0
- package/dist/src/commands/playtest/player/list/list.d.ts +13 -0
- package/dist/src/commands/playtest/player/list/list.d.ts.map +1 -0
- package/dist/src/commands/playtest/player/list/list.js +33 -0
- package/dist/src/commands/playtest/player/list/list.js.map +1 -0
- package/dist/src/commands/playtest/player/playtest-players.d.ts +36 -0
- package/dist/src/commands/playtest/player/playtest-players.d.ts.map +1 -0
- package/dist/src/commands/playtest/player/playtest-players.js +187 -0
- package/dist/src/commands/playtest/player/playtest-players.js.map +1 -0
- package/dist/src/commands/playtest/player/playtest-players.test.d.ts +2 -0
- package/dist/src/commands/playtest/player/playtest-players.test.d.ts.map +1 -0
- package/dist/src/commands/playtest/player/playtest-players.test.js +89 -0
- package/dist/src/commands/playtest/player/playtest-players.test.js.map +1 -0
- package/dist/src/commands/playtest/player/remove/remove.d.ts +17 -0
- package/dist/src/commands/playtest/player/remove/remove.d.ts.map +1 -0
- package/dist/src/commands/playtest/player/remove/remove.js +42 -0
- package/dist/src/commands/playtest/player/remove/remove.js.map +1 -0
- package/dist/src/commands/playtest/playtest-sessions.d.ts +49 -0
- package/dist/src/commands/playtest/playtest-sessions.d.ts.map +1 -0
- package/dist/src/commands/playtest/playtest-sessions.js +283 -0
- package/dist/src/commands/playtest/playtest-sessions.js.map +1 -0
- package/dist/src/commands/playtest/playtest-sessions.test.d.ts +2 -0
- package/dist/src/commands/playtest/playtest-sessions.test.d.ts.map +1 -0
- package/dist/src/commands/playtest/playtest-sessions.test.js +87 -0
- package/dist/src/commands/playtest/playtest-sessions.test.js.map +1 -0
- package/dist/src/commands/playtest/restart/restart.d.ts +23 -0
- package/dist/src/commands/playtest/restart/restart.d.ts.map +1 -0
- package/dist/src/commands/playtest/restart/restart.js +105 -0
- package/dist/src/commands/playtest/restart/restart.js.map +1 -0
- package/dist/src/commands/playtest/run/run.d.ts +47 -0
- package/dist/src/commands/playtest/run/run.d.ts.map +1 -0
- package/dist/src/commands/playtest/run/run.js +137 -0
- package/dist/src/commands/playtest/run/run.js.map +1 -0
- package/dist/src/commands/playtest/start/start.d.ts +42 -0
- package/dist/src/commands/playtest/start/start.d.ts.map +1 -0
- package/dist/src/commands/playtest/start/start.js +70 -0
- package/dist/src/commands/playtest/start/start.js.map +1 -0
- package/dist/src/commands/playtest/stop/stop.d.ts +15 -0
- package/dist/src/commands/playtest/stop/stop.d.ts.map +1 -0
- package/dist/src/commands/playtest/stop/stop.js +24 -0
- package/dist/src/commands/playtest/stop/stop.js.map +1 -0
- package/dist/src/commands/process/close/close.d.ts +19 -10
- package/dist/src/commands/process/close/close.d.ts.map +1 -1
- package/dist/src/commands/process/close/close.js +118 -15
- package/dist/src/commands/process/close/close.js.map +1 -1
- package/dist/src/commands/process/close/close.test.d.ts +2 -0
- package/dist/src/commands/process/close/close.test.d.ts.map +1 -0
- package/dist/src/commands/process/close/close.test.js +190 -0
- package/dist/src/commands/process/close/close.test.js.map +1 -0
- package/dist/src/commands/process/info/info.d.ts +45 -5
- package/dist/src/commands/process/info/info.d.ts.map +1 -1
- package/dist/src/commands/process/info/info.js +117 -13
- package/dist/src/commands/process/info/info.js.map +1 -1
- package/dist/src/commands/process/info/info.test.js +140 -38
- package/dist/src/commands/process/info/info.test.js.map +1 -1
- package/dist/src/commands/process/launch/launch.d.ts +11 -1
- package/dist/src/commands/process/launch/launch.d.ts.map +1 -1
- package/dist/src/commands/process/launch/launch.js +37 -7
- package/dist/src/commands/process/launch/launch.js.map +1 -1
- package/dist/src/commands/process/launch/launch.test.js +99 -20
- package/dist/src/commands/process/launch/launch.test.js.map +1 -1
- package/dist/src/commands/process/list/list.d.ts +2 -1
- package/dist/src/commands/process/list/list.d.ts.map +1 -1
- package/dist/src/commands/process/list/list.js +9 -6
- package/dist/src/commands/process/list/list.js.map +1 -1
- package/dist/src/commands/process/list/list.test.js +1 -0
- package/dist/src/commands/process/list/list.test.js.map +1 -1
- package/dist/src/commands/process/run/run.d.ts +9 -0
- package/dist/src/commands/process/run/run.d.ts.map +1 -1
- package/dist/src/commands/process/run/run.js +15 -5
- package/dist/src/commands/process/run/run.js.map +1 -1
- package/dist/src/commands/serve/serve.d.ts +2 -0
- package/dist/src/commands/serve/serve.d.ts.map +1 -1
- package/dist/src/commands/serve/serve.js +17 -4
- package/dist/src/commands/serve/serve.js.map +1 -1
- package/dist/src/commands/serve/serve.test.js +9 -2
- package/dist/src/commands/serve/serve.test.js.map +1 -1
- package/dist/src/commands/viewport/screenshot/screenshot.d.ts.map +1 -1
- package/dist/src/commands/viewport/screenshot/screenshot.js +4 -1
- package/dist/src/commands/viewport/screenshot/screenshot.js.map +1 -1
- package/dist/src/commands/viewport/screenshot/screenshot.test.js +5 -9
- package/dist/src/commands/viewport/screenshot/screenshot.test.js.map +1 -1
- package/dist/src/deploy/deploy-places.d.ts +39 -0
- package/dist/src/deploy/deploy-places.d.ts.map +1 -0
- package/dist/src/deploy/deploy-places.js +162 -0
- package/dist/src/deploy/deploy-places.js.map +1 -0
- package/dist/src/deploy/deploy-places.test.d.ts +2 -0
- package/dist/src/deploy/deploy-places.test.d.ts.map +1 -0
- package/dist/src/deploy/deploy-places.test.js +96 -0
- package/dist/src/deploy/deploy-places.test.js.map +1 -0
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/linux/linux-studio-launcher.d.ts.map +1 -1
- package/dist/src/linux/linux-studio-launcher.js +10 -0
- package/dist/src/linux/linux-studio-launcher.js.map +1 -1
- package/dist/src/linux/linux-studio-launcher.test.d.ts +2 -0
- package/dist/src/linux/linux-studio-launcher.test.d.ts.map +1 -0
- package/dist/src/linux/linux-studio-launcher.test.js +68 -0
- package/dist/src/linux/linux-studio-launcher.test.js.map +1 -0
- package/dist/src/plugin/persistent-plugin-installer.d.ts.map +1 -1
- package/dist/src/plugin/persistent-plugin-installer.js +2 -1
- package/dist/src/plugin/persistent-plugin-installer.js.map +1 -1
- package/dist/src/plugin/persistent-plugin-installer.test.js +3 -0
- package/dist/src/plugin/persistent-plugin-installer.test.js.map +1 -1
- package/dist/src/plugin/plugin-build-version.d.ts +7 -0
- package/dist/src/plugin/plugin-build-version.d.ts.map +1 -0
- package/dist/src/plugin/plugin-build-version.js +42 -0
- package/dist/src/plugin/plugin-build-version.js.map +1 -0
- package/dist/src/plugin/plugin-build-version.test.d.ts +2 -0
- package/dist/src/plugin/plugin-build-version.test.d.ts.map +1 -0
- package/dist/src/plugin/plugin-build-version.test.js +41 -0
- package/dist/src/plugin/plugin-build-version.test.js.map +1 -0
- package/dist/src/plugin/plugin-injector.d.ts.map +1 -1
- package/dist/src/plugin/plugin-injector.js +7 -1
- package/dist/src/plugin/plugin-injector.js.map +1 -1
- package/dist/src/process/studio-process-closer.d.ts +35 -0
- package/dist/src/process/studio-process-closer.d.ts.map +1 -0
- package/dist/src/process/studio-process-closer.js +129 -0
- package/dist/src/process/studio-process-closer.js.map +1 -0
- package/dist/src/process/studio-process-closer.test.d.ts +2 -0
- package/dist/src/process/studio-process-closer.test.d.ts.map +1 -0
- package/dist/src/process/studio-process-closer.test.js +80 -0
- package/dist/src/process/studio-process-closer.test.js.map +1 -0
- package/dist/src/process/studio-settings.d.ts +14 -0
- package/dist/src/process/studio-settings.d.ts.map +1 -0
- package/dist/src/process/studio-settings.js +50 -0
- package/dist/src/process/studio-settings.js.map +1 -0
- package/dist/src/process/studio-settings.test.d.ts +2 -0
- package/dist/src/process/studio-settings.test.d.ts.map +1 -0
- package/dist/src/process/studio-settings.test.js +16 -0
- package/dist/src/process/studio-settings.test.js.map +1 -0
- package/dist/src/process/studio-window-state.d.ts +13 -0
- package/dist/src/process/studio-window-state.d.ts.map +1 -0
- package/dist/src/process/studio-window-state.js +48 -0
- package/dist/src/process/studio-window-state.js.map +1 -0
- package/dist/src/server/studio-bridge-server.d.ts +3 -1
- package/dist/src/server/studio-bridge-server.d.ts.map +1 -1
- package/dist/src/server/studio-bridge-server.js +12 -4
- package/dist/src/server/studio-bridge-server.js.map +1 -1
- package/dist/src/server/web-socket-protocol.d.ts +173 -6
- package/dist/src/server/web-socket-protocol.d.ts.map +1 -1
- package/dist/src/server/web-socket-protocol.js +244 -1
- package/dist/src/server/web-socket-protocol.js.map +1 -1
- package/dist/src/server/web-socket-protocol.test.js +48 -0
- package/dist/src/server/web-socket-protocol.test.js.map +1 -1
- package/dist/src/test/e2e/persistent-session.test.js +121 -0
- package/dist/src/test/e2e/persistent-session.test.js.map +1 -1
- package/dist/src/test/e2e/split-server.test.d.ts +3 -5
- package/dist/src/test/e2e/split-server.test.d.ts.map +1 -1
- package/dist/src/test/e2e/split-server.test.js +3 -5
- package/dist/src/test/e2e/split-server.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docker/Dockerfile +3 -0
- package/package.json +8 -6
- package/src/bridge/bridge-connection.test.ts +126 -0
- package/src/bridge/bridge-connection.ts +217 -22
- package/src/bridge/bridge-session.test.ts +6 -4
- package/src/bridge/bridge-session.ts +273 -28
- package/src/bridge/index.ts +3 -0
- package/src/bridge/internal/bridge-client.test.ts +23 -0
- package/src/bridge/internal/bridge-client.ts +25 -7
- package/src/bridge/internal/bridge-host.test.ts +38 -0
- package/src/bridge/internal/bridge-host.ts +47 -0
- package/src/bridge/internal/hand-off.ts +4 -1
- package/src/bridge/internal/host-protocol.test.ts +15 -0
- package/src/bridge/internal/host-protocol.ts +148 -37
- package/src/bridge/internal/instance-state.ts +34 -0
- package/src/bridge/internal/transport-client.ts +2 -1
- package/src/bridge/internal/transport-server.ts +5 -1
- package/src/bridge/types.ts +47 -2
- package/src/cli/adapters/cli-command-adapter-handler.test.ts +28 -0
- package/src/cli/adapters/cli-command-adapter.ts +150 -18
- package/src/cli/adapters/group-builder.test.ts +34 -2
- package/src/cli/adapters/group-builder.ts +52 -20
- package/src/cli/adapters/help-formatter.test.ts +1 -1
- package/src/cli/adapters/help-formatter.ts +4 -3
- package/src/cli/adapters/playtest-edit-guard.test.ts +54 -0
- package/src/cli/args/global-args.ts +1 -1
- package/src/cli/cli-output-context.test.ts +55 -0
- package/src/cli/cli-output-context.ts +50 -0
- package/src/cli/cli.ts +49 -17
- package/src/cli/managed-studio-run.test.ts +71 -0
- package/src/cli/managed-studio-run.ts +135 -0
- package/src/cli/resolve-session.test.ts +1 -1
- package/src/cli/resolve-session.ts +1 -1
- package/src/cli/script-executor.ts +99 -51
- package/src/commands/console/exec/exec.test.ts +96 -3
- package/src/commands/console/exec/exec.ts +59 -6
- package/src/commands/console/exec/execute.lua +356 -240
- package/src/commands/console/exec/execute.spec.lua +286 -0
- package/src/commands/console/logs/logs.test.ts +76 -4
- package/src/commands/console/logs/logs.ts +132 -17
- package/src/commands/console/logs/query-logs.lua +85 -52
- package/src/commands/console/logs/query-logs.spec.lua +132 -0
- package/src/commands/explorer/export/export-instances.lua +108 -0
- package/src/commands/explorer/export/export-instances.spec.lua +87 -0
- package/src/commands/explorer/export/export.test.ts +27 -0
- package/src/commands/explorer/export/export.ts +60 -0
- package/src/commands/explorer/find/find-instances.lua +174 -0
- package/src/commands/explorer/find/find-instances.spec.lua +122 -0
- package/src/commands/explorer/find/find.test.ts +53 -0
- package/src/commands/explorer/find/find.ts +113 -0
- package/src/commands/explorer/grep/grep-scripts.lua +214 -0
- package/src/commands/explorer/grep/grep-scripts.spec.lua +130 -0
- package/src/commands/explorer/grep/grep.test.ts +45 -0
- package/src/commands/explorer/grep/grep.ts +93 -0
- package/src/commands/explorer/import/import-instances.lua +106 -0
- package/src/commands/explorer/import/import-instances.spec.lua +84 -0
- package/src/commands/explorer/import/import.test.ts +60 -0
- package/src/commands/explorer/import/import.ts +66 -0
- package/src/commands/explorer/query/query-data-model.lua +124 -152
- package/src/commands/explorer/query/query-data-model.spec.lua +150 -0
- package/src/commands/formatters.test.ts +7 -1
- package/src/commands/framework/action-loader.test.ts +28 -0
- package/src/commands/framework/action-loader.ts +10 -2
- package/src/commands/framework/arg-builder.ts +26 -3
- package/src/commands/framework/define-command.ts +32 -3
- package/src/commands/framework/index.ts +1 -0
- package/src/commands/index.ts +50 -0
- package/src/commands/linux/inject-credentials/inject-credentials.ts +1 -3
- package/src/commands/linux/setup/setup.ts +1 -3
- package/src/commands/linux/status/status.ts +105 -98
- package/src/commands/playtest/player/add/add.ts +85 -0
- package/src/commands/playtest/player/list/list.ts +57 -0
- package/src/commands/playtest/player/playtest-players.test.ts +146 -0
- package/src/commands/playtest/player/playtest-players.ts +270 -0
- package/src/commands/playtest/player/remove/remove.ts +78 -0
- package/src/commands/playtest/playtest-sessions.test.ts +143 -0
- package/src/commands/playtest/playtest-sessions.ts +417 -0
- package/src/commands/playtest/restart/restart.ts +199 -0
- package/src/commands/playtest/run/playtest-runner.luau +264 -0
- package/src/commands/playtest/run/playtest-runner.spec.lua +71 -0
- package/src/commands/playtest/run/run-playtest-script.lua +139 -0
- package/src/commands/playtest/run/run-playtest-script.spec.lua +43 -0
- package/src/commands/playtest/run/run.ts +239 -0
- package/src/commands/playtest/start/start-playtest.lua +108 -0
- package/src/commands/playtest/start/start.ts +138 -0
- package/src/commands/playtest/stop/end-playtest.lua +47 -0
- package/src/commands/playtest/stop/stop.ts +51 -0
- package/src/commands/process/close/close.test.ts +250 -0
- package/src/commands/process/close/close.ts +183 -17
- package/src/commands/process/info/info.test.ts +198 -44
- package/src/commands/process/info/info.ts +204 -15
- package/src/commands/process/info/query-state.lua +42 -29
- package/src/commands/process/info/query-state.spec.lua +39 -0
- package/src/commands/process/launch/launch.test.ts +138 -21
- package/src/commands/process/launch/launch.ts +69 -9
- package/src/commands/process/list/list.test.ts +1 -0
- package/src/commands/process/list/list.ts +14 -6
- package/src/commands/process/run/run.ts +26 -5
- package/src/commands/serve/serve.test.ts +17 -2
- package/src/commands/serve/serve.ts +25 -6
- package/src/commands/viewport/screenshot/capture-screenshot.lua +175 -182
- package/src/commands/viewport/screenshot/capture-screenshot.spec.lua +129 -0
- package/src/commands/viewport/screenshot/screenshot.test.ts +7 -10
- package/src/commands/viewport/screenshot/screenshot.ts +6 -1
- package/src/deploy/deploy-places.test.ts +127 -0
- package/src/deploy/deploy-places.ts +229 -0
- package/src/index.ts +11 -0
- package/src/linux/linux-studio-launcher.test.ts +89 -0
- package/src/linux/linux-studio-launcher.ts +11 -0
- package/src/plugin/persistent-plugin-installer.test.ts +4 -0
- package/src/plugin/persistent-plugin-installer.ts +2 -1
- package/src/plugin/plugin-build-version.test.ts +55 -0
- package/src/plugin/plugin-build-version.ts +53 -0
- package/src/plugin/plugin-injector.ts +7 -1
- package/src/process/studio-process-closer.test.ts +107 -0
- package/src/process/studio-process-closer.ts +187 -0
- package/src/process/studio-settings.test.ts +18 -0
- package/src/process/studio-settings.ts +61 -0
- package/src/process/studio-window-state.ts +65 -0
- package/src/server/studio-bridge-server.ts +15 -4
- package/src/server/web-socket-protocol.test.ts +55 -0
- package/src/server/web-socket-protocol.ts +468 -8
- package/src/test/e2e/persistent-session.test.ts +137 -0
- package/src/test/e2e/split-server.test.ts +3 -5
- package/templates/studio-bridge-plugin/default.project.json +3 -0
- package/templates/studio-bridge-plugin/src/Shared/ActionRouter.lua +208 -159
- package/templates/studio-bridge-plugin/src/Shared/ActionRouter.spec.lua +418 -0
- package/templates/studio-bridge-plugin/src/Shared/BuiltInActions.lua +94 -0
- package/templates/studio-bridge-plugin/src/Shared/BuiltInActions.spec.lua +166 -0
- package/templates/studio-bridge-plugin/src/Shared/DiscoveryStateMachine.lua +118 -137
- package/templates/studio-bridge-plugin/src/Shared/DiscoveryStateMachine.spec.lua +228 -0
- package/templates/studio-bridge-plugin/src/Shared/MessageBuffer.lua +80 -109
- package/templates/studio-bridge-plugin/src/Shared/MessageBuffer.spec.lua +116 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeConnection.lua +233 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeConnection.spec.lua +239 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeLogUtils.lua +53 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeLogUtils.spec.lua +27 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeSessionUtils.lua +164 -0
- package/templates/studio-bridge-plugin/src/Shared/StudioBridgeSessionUtils.spec.lua +159 -0
- package/templates/studio-bridge-plugin/src/StudioBridgePlugin.server.lua +266 -368
- package/templates/studio-bridge-plugin/src/Vendor/png.lua +8 -2
- package/test/default.project.json +41 -0
- package/test/jest.config.lua +3 -0
- package/test/scripts/Server/ServerMain.server.lua +10 -0
- package/tsconfig.json +1 -0
- package/templates/studio-bridge-plugin/src/Shared/Protocol.lua +0 -132
- package/templates/studio-bridge-plugin-test/test/actions.test.lua +0 -580
- package/templates/studio-bridge-plugin-test/test/discovery.test.lua +0 -622
- package/templates/studio-bridge-plugin-test/test/execute-handler.test.lua +0 -517
- package/templates/studio-bridge-plugin-test/test/hash-lifecycle.test.lua +0 -814
- package/templates/studio-bridge-plugin-test/test/integration.test.lua +0 -1020
- package/templates/studio-bridge-plugin-test/test/new-actions.test.lua +0 -339
- package/templates/studio-bridge-plugin-test/test/plugin-entry.test.lua +0 -493
- package/templates/studio-bridge-plugin-test/test/protocol.test.lua +0 -506
- package/templates/studio-bridge-plugin-test/test/roblox-mocks.lua +0 -108
- package/templates/studio-bridge-plugin-test/test/test-runner.lua +0 -112
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
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.22.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.21.1...@quenty/studio-bridge@0.22.0) (2026-10-28)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- **studio-bridge:** multiplayer playtests, Studio launching, search, and CLI fixes ([#851](https://github.com/Quenty/NevermoreEngine/issues/851)) ([e63f878](https://github.com/Quenty/NevermoreEngine/commit/e63f878764807773d1bb1bf96d582d6e6640af88))
|
|
11
|
+
|
|
12
|
+
## [0.21.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.21.0...@quenty/studio-bridge@0.21.1) (2026-10-22)
|
|
13
|
+
|
|
14
|
+
### Bug Fixes
|
|
15
|
+
|
|
16
|
+
- Unref tail stdout pipe so Linux Studio launch can exit ([cdde05e](https://github.com/Quenty/NevermoreEngine/commit/cdde05e977c6bacb600b73a9cbd0024893f8af5b))
|
|
17
|
+
|
|
6
18
|
# [0.21.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/studio-bridge@0.20.0...@quenty/studio-bridge@0.21.0) (2026-10-14)
|
|
7
19
|
|
|
8
20
|
**Note:** Version bump only for package @quenty/studio-bridge
|
package/README.md
CHANGED
|
@@ -79,6 +79,7 @@ Infrastructure:
|
|
|
79
79
|
studio-bridge console exec 'print(workspace:GetChildren())'
|
|
80
80
|
studio-bridge console exec --file test.lua
|
|
81
81
|
studio-bridge console exec 'return game.PlaceId' --format json
|
|
82
|
+
studio-bridge console exec -f spawn-npc.lua -- Goblin 3
|
|
82
83
|
```
|
|
83
84
|
|
|
84
85
|
| Option | Alias | Description |
|
|
@@ -86,21 +87,33 @@ studio-bridge console exec 'return game.PlaceId' --format json
|
|
|
86
87
|
| `--file` | `-f` | Path to a Luau script file |
|
|
87
88
|
| `--target` | `-t` | Target session ID |
|
|
88
89
|
| `--context` | — | Target context (`edit`, `client`, `server`) |
|
|
90
|
+
| `--timeout` | — | Cancel the script after this many milliseconds (default: 120000) |
|
|
91
|
+
| `--allow-edit` | — | Change Edit even while a playtest of it runs |
|
|
92
|
+
| `-- <args..>` | — | Passed to the script as `...`, as strings (`local name, count = ...`) |
|
|
93
|
+
|
|
94
|
+
Output includes everything logged while the script runs, including prints from modules it requires and from threads it starts. A runtime error comes with a traceback. A script that runs past `--timeout` is cancelled, so the scripts queued behind it still run. While a playtest is running, `exec` on Edit is refused, since the playtest runs a copy and would not see the change; target the playtest with `--context server` or `--context client` instead.
|
|
89
95
|
|
|
90
96
|
### `console logs`
|
|
91
97
|
|
|
92
98
|
```bash
|
|
93
99
|
studio-bridge console logs
|
|
94
100
|
studio-bridge console logs --count 100 --direction head
|
|
95
|
-
studio-bridge console logs --levels Error
|
|
101
|
+
studio-bridge console logs --levels Error Warning
|
|
102
|
+
studio-bridge console logs --context server --since-restart
|
|
103
|
+
studio-bridge console logs --since 5m
|
|
96
104
|
```
|
|
97
105
|
|
|
98
106
|
| Option | Alias | Description |
|
|
99
107
|
|--------|-------|-------------|
|
|
100
108
|
| `--count` | `-n` | Number of entries (default: 50) |
|
|
101
|
-
| `--direction` |
|
|
102
|
-
| `--levels` |
|
|
103
|
-
| `--
|
|
109
|
+
| `--direction` | — | `head` or `tail` (default: `tail`) |
|
|
110
|
+
| `--levels` | — | Filter by level (`Print`, `Info`, `Warning`, `Error`) |
|
|
111
|
+
| `--include-internal` | — | Include internal bridge messages |
|
|
112
|
+
| `--since` | — | Only entries since a duration ago (`30s`, `5m`, `2h`, `1d`) or a date |
|
|
113
|
+
| `--since-restart` | — | Only entries since the running playtest started |
|
|
114
|
+
| `--no-group-repeats` | — | Keep identical consecutive entries separate |
|
|
115
|
+
|
|
116
|
+
Identical consecutive entries are collapsed into one with a repeat count (`repeats` and `lastTimestamp` in JSON), before `--count` applies, so `-n 20` shows 20 distinct lines. Each playtest DataModel keeps its own log, so `--context server` or `--context client` already reads only the running playtest and `--since-restart` keeps all of it; on Edit, `--since-restart` keeps what was logged since that playtest started.
|
|
104
117
|
|
|
105
118
|
### `explorer query`
|
|
106
119
|
|
|
@@ -116,6 +129,28 @@ studio-bridge explorer query Workspace.SpawnLocation --children --depth 3
|
|
|
116
129
|
| `--properties` | Include instance properties |
|
|
117
130
|
| `--attributes` | Include instance attributes |
|
|
118
131
|
|
|
132
|
+
### `explorer find` / `explorer grep`
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
studio-bridge explorer find spawn
|
|
136
|
+
studio-bridge explorer find --class BasePart --tag Hazard --root Workspace.Map
|
|
137
|
+
studio-bridge explorer grep TakeDamage
|
|
138
|
+
studio-bridge explorer grep "^local %w+ = require" --lua-pattern --root ReplicatedStorage
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
`find` lists instances whose name contains the text (case-insensitive; `--exact` for the whole name), narrowed by `--class` (matched with `IsA`, so `BasePart` finds every part) and `--tag`. `grep` prints every script line containing the text as `path:line: text`. It reads open editor tabs, so unsaved edits are searched. Text matches plainly and case-insensitively; `--lua-pattern` and `--case-sensitive` change that.
|
|
142
|
+
|
|
143
|
+
Both search the whole place by default, skipping Studio's own services such as CoreGui; `--root` narrows the search to a path, and `--limit` (default 200) caps the results, with `truncated` set when there were more.
|
|
144
|
+
|
|
145
|
+
### `explorer export` / `explorer import`
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
studio-bridge explorer export Workspace.Map Lighting -o map.rbxm
|
|
149
|
+
studio-bridge explorer import map.rbxm --parent ServerStorage
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
`export` saves instances as a binary model (`.rbxm`) through `SerializationService`, and writes it with `-o`. `import` inserts a `.rbxm` under `--parent` (default: `Workspace`).
|
|
153
|
+
|
|
119
154
|
### `viewport screenshot`
|
|
120
155
|
|
|
121
156
|
```bash
|
|
@@ -132,7 +167,7 @@ studio-bridge viewport screenshot --output viewport.png
|
|
|
132
167
|
studio-bridge process list
|
|
133
168
|
```
|
|
134
169
|
|
|
135
|
-
Lists
|
|
170
|
+
Lists the connected sessions with their ID, context, place, and state. `--target` and `--context` narrow the list. While a playtest studio-bridge started is running, every session of that Studio shows `Play` (or `Run` without a client).
|
|
136
171
|
|
|
137
172
|
### `process info`
|
|
138
173
|
|
|
@@ -140,31 +175,82 @@ Lists all active sessions with their ID, place, context, state, and origin.
|
|
|
140
175
|
studio-bridge process info
|
|
141
176
|
```
|
|
142
177
|
|
|
143
|
-
|
|
178
|
+
```text
|
|
179
|
+
Session: test-place-3f9a-edit (edit, user, connected 4m ago)
|
|
180
|
+
Mode: Edit
|
|
181
|
+
Playtest: running (multiplayer, 2 players): test-place-3f9a-server, test-place-3f9a-client-player1, test-place-3f9a-client-player2
|
|
182
|
+
Place: test-place.rbxl (PlaceId 0, GameId 0)
|
|
183
|
+
Viewport: 849x1003
|
|
184
|
+
Window: pid 31876, open, not focused
|
|
185
|
+
Studio: 0.744.0.7441077
|
|
186
|
+
Plugin: 6c751ae59131 (up to date)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Reports on one session: its ID, context and origin; the run mode of its own DataModel; the playtest running in its Studio (mode, player count, and the playtest's sessions, when they are connected); the place; the viewport size; the Studio window, when exactly one window shows it; the Studio version; and whether its plugin matches the one this CLI installs. The two clients of a multiplayer test share a window title, so they report no window.
|
|
144
190
|
|
|
145
191
|
### `process launch`
|
|
146
192
|
|
|
147
193
|
```bash
|
|
148
|
-
studio-bridge process launch
|
|
194
|
+
studio-bridge process launch # default target of the nearest deploy.nevermore.json
|
|
195
|
+
studio-bridge process launch integration.places.hub # a named target, or one place of it
|
|
149
196
|
studio-bridge process launch --place ./build/test.rbxl
|
|
197
|
+
studio-bridge process launch --place-id 123 --universe-id 456
|
|
150
198
|
```
|
|
151
199
|
|
|
200
|
+
Without `--place` or `--place-id`, opens the cloud place of a target from the nearest `deploy.nevermore.json` (in the current directory or a parent), so running it in a package or game folder opens that project's place. With no target it uses the config's default (`integration`, then `test`). Outside any `deploy.nevermore.json` it opens Studio with no place.
|
|
201
|
+
|
|
152
202
|
### `process run`
|
|
153
203
|
|
|
154
204
|
```bash
|
|
155
205
|
studio-bridge process run 'print("hello")'
|
|
156
|
-
studio-bridge process run --file test.lua --place ./build/test.rbxl
|
|
206
|
+
studio-bridge process run --file test.lua --place ./build/test.rbxl -- arg1 arg2
|
|
157
207
|
```
|
|
158
208
|
|
|
159
|
-
|
|
209
|
+
Launches Studio on a copy of the place, runs the script there and nowhere else, then closes that Studio. Other open Studios are never used. While the script runs, the launched Studio is a session like any other, so `process list` shows it (origin `managed`) and other commands can target it.
|
|
160
210
|
|
|
161
211
|
### `process close`
|
|
162
212
|
|
|
163
213
|
```bash
|
|
164
|
-
studio-bridge process close --target
|
|
214
|
+
studio-bridge process close --target test-place
|
|
215
|
+
studio-bridge process close --target test-place --force
|
|
216
|
+
studio-bridge process close integration.places.hub # the Studio showing a deploy.nevermore.json target
|
|
165
217
|
```
|
|
166
218
|
|
|
167
|
-
|
|
219
|
+
Closes the Studio process showing the session's place, found by its window title, or for a cloud place by the place id Studio was launched with. Given a `deploy.nevermore.json` target instead, closes the Studio showing that target's place, whether or not its plugin is connected. Studio usually asks to save a local place first, so without `--force` the command reports that Studio is still open; `--force` kills it without saving. When several windows show the same place, pick one with `--pid`.
|
|
220
|
+
|
|
221
|
+
### `playtest run` / `playtest start` / `playtest restart` / `playtest stop`
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
studio-bridge playtest run 'return #game:GetService("Players"):GetPlayers()'
|
|
225
|
+
studio-bridge playtest run --context client 'return game:GetService("Players").LocalPlayer.Name'
|
|
226
|
+
studio-bridge playtest run --file spawn-test.lua -- Goblin 3
|
|
227
|
+
studio-bridge playtest start --mode run
|
|
228
|
+
studio-bridge console exec --context server 'print("in the playtest")'
|
|
229
|
+
studio-bridge playtest restart
|
|
230
|
+
studio-bridge playtest stop
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
Starts a playtest through `StudioTestService` in the open Studio. `--mode play` (the default) runs a server and a client with a player; `--mode run` runs only the server.
|
|
234
|
+
|
|
235
|
+
`playtest run` executes the code in a fresh playtest's server, returns its output and values like `console exec`, then stops the playtest. It plants a temporary runner script in the playtest to do so, so it works whatever Studio's **Load user plugins on playtest** setting says. `--context client` runs the code in the playtest's client instead, which needs that setting on.
|
|
236
|
+
|
|
237
|
+
`playtest start` leaves the playtest running, so other commands can target it with `--context server` or `--context client`. `playtest restart` stops it and starts a new one in the same mode, picking up code changed since it started; with none running, it starts one. `playtest stop` ends it.
|
|
238
|
+
|
|
239
|
+
`start`, `restart`, and `stop` talk to the playtest's own server and client, which only connect when **Load user plugins on playtest** is on. With it off, `playtest start` still starts the playtest but reports that its sessions never connected, and the playtest has to be stopped in Studio.
|
|
240
|
+
|
|
241
|
+
### Multiplayer tests: `playtest start --players` / `playtest player`
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
studio-bridge playtest start --players 2
|
|
245
|
+
studio-bridge playtest player list
|
|
246
|
+
studio-bridge playtest player add 2
|
|
247
|
+
studio-bridge playtest player remove Player2
|
|
248
|
+
studio-bridge console exec --target test-place-3f9a-client-player1 'return game.Players.LocalPlayer.Name'
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
`playtest start --players N` starts a multiplayer test: a server and a client per player, each in its own Studio window. Each client's session ID ends in its player's name (`<instance>-client-player1`), so `--context client` alone is ambiguous; pick a client with `--target`. `playtest restart` keeps the number of players in the test, counting any added since it started. Multiplayer tests need the current plugin (`studio-bridge plugin install`), and `--players` refuses to start with an older one.
|
|
252
|
+
|
|
253
|
+
`playtest player list` shows each player with its client session. `add` adds players to a multiplayer test and waits for them to join. `remove` has each player's client leave the test, which closes its window; a player without a connected client session is kicked instead, and its window stays open.
|
|
168
254
|
|
|
169
255
|
### `plugin install` / `plugin uninstall`
|
|
170
256
|
|
|
@@ -192,17 +278,23 @@ Invoke a named Studio action on the connected session.
|
|
|
192
278
|
|
|
193
279
|
| Option | Default | Description |
|
|
194
280
|
|--------|---------|-------------|
|
|
195
|
-
| `--timeout` | `
|
|
281
|
+
| `--timeout` | `5000` | How long to wait for a Studio session to connect, in milliseconds |
|
|
196
282
|
| `--verbose` | `false` | Show internal debug output |
|
|
197
283
|
| `--remote` | — | Connect to a remote bridge host (`host:port`) |
|
|
198
284
|
| `--local` | `false` | Force local mode (skip devcontainer auto-detection) |
|
|
199
285
|
|
|
286
|
+
### Output
|
|
287
|
+
|
|
288
|
+
Every command accepts `--format text|json` and `-o <file>`. stdout carries only the result; progress and warnings go to stderr. With `--format json`, failures print `{"success": false, "error": ...}` and exit with code 1, and warnings (an outdated CLI, or a Studio plugin older than the CLI) are kept in the result's `_warnings` field.
|
|
289
|
+
|
|
290
|
+
A single reply from Studio can carry up to 256 MiB. A larger one, such as a script returning a huge string, fails that request with `RESULT_TOO_LARGE` and leaves the connection and every other request alone.
|
|
291
|
+
|
|
200
292
|
### Target Selection
|
|
201
293
|
|
|
202
|
-
Commands that target a session accept `--target` and `--context`:
|
|
294
|
+
Session IDs are the place name plus a short suffix and the context, like `test-place-a05a-edit`. They stay the same until Studio closes, including across plugin reinstalls. Commands that target a session accept `--target` and `--context`:
|
|
203
295
|
|
|
204
|
-
- **No flags** — auto-resolves if only one
|
|
205
|
-
- **`--target <id>`** —
|
|
296
|
+
- **No flags** — auto-resolves if only one Studio is connected. With several, uses the one that has a place of the nearest `deploy.nevermore.json` open (and says which), so a command run in a package or game folder reaches that project's Studio.
|
|
297
|
+
- **`--target <id>`** — a session ID, an instance ID (`test-place-a05a`), or any unique prefix of one (`test-place`)
|
|
206
298
|
- **`--context <ctx>`** — select context within an instance (`edit`, `client`, `server`)
|
|
207
299
|
|
|
208
300
|
When Studio is in Play mode, a single instance has multiple contexts (Edit + Client + Server). The default is `edit`.
|
|
@@ -212,14 +304,14 @@ When Studio is in Play mode, a single instance has multiple contexts (Edit + Cli
|
|
|
212
304
|
```bash
|
|
213
305
|
pnpm test # Unit tests (Vitest, no Studio needed)
|
|
214
306
|
pnpm test:watch # Watch mode
|
|
215
|
-
|
|
307
|
+
nevermore test --cloud # Jest specs for the plugin, in a Roblox cloud place
|
|
216
308
|
pnpm test:integration # End-to-end smoke test (requires Studio)
|
|
217
309
|
```
|
|
218
310
|
|
|
219
311
|
| Layer | What it tests | Studio? |
|
|
220
312
|
|-------|--------------|---------|
|
|
221
313
|
| Unit (`pnpm test`) | Protocol, bridge connection, session tracking, command handlers, WebSocket lifecycle | No |
|
|
222
|
-
| Plugin (`
|
|
314
|
+
| Plugin (`nevermore test --cloud`) | Plugin modules and action scripts, via the `*.spec.lua` beside them in `templates/studio-bridge-plugin/src/Shared` and `src/commands`, in a real engine built from `test/default.project.json` | No |
|
|
223
315
|
| Integration (`pnpm test:integration`) | Full pipeline: rojo build, plugin injection, Studio launch, output capture | Yes |
|
|
224
316
|
|
|
225
317
|
## Platform Support
|
|
@@ -11,7 +11,7 @@ import type { SessionInfo, SessionContext, InstanceInfo } from './types.js';
|
|
|
11
11
|
export interface BridgeConnectionOptions {
|
|
12
12
|
/** Port for the bridge host. Default: 38741. */
|
|
13
13
|
port?: number;
|
|
14
|
-
/** Max time to wait for
|
|
14
|
+
/** Max time to wait for the first Studio session to connect. Default: 5_000ms. */
|
|
15
15
|
timeoutMs?: number;
|
|
16
16
|
/** Keep the host alive even when idle. Default: false. */
|
|
17
17
|
keepAlive?: boolean;
|
|
@@ -28,14 +28,18 @@ export interface BridgeConnectionOptions {
|
|
|
28
28
|
}
|
|
29
29
|
export declare class BridgeConnection extends EventEmitter {
|
|
30
30
|
private _role;
|
|
31
|
+
private _isRemote;
|
|
31
32
|
private _isConnected;
|
|
32
33
|
private _keepAlive;
|
|
33
34
|
private _hasSettled;
|
|
35
|
+
private _firstSessionTimeoutMs;
|
|
36
|
+
private _pendingRelays;
|
|
34
37
|
private _host;
|
|
35
38
|
private _tracker;
|
|
36
39
|
private _hostSessions;
|
|
37
40
|
private _hostHandles;
|
|
38
41
|
private _client;
|
|
42
|
+
private _clientPort;
|
|
39
43
|
private _idleTimer;
|
|
40
44
|
private constructor();
|
|
41
45
|
/**
|
|
@@ -48,15 +52,29 @@ export declare class BridgeConnection extends EventEmitter {
|
|
|
48
52
|
* - If a host is running: connects as a client.
|
|
49
53
|
*/
|
|
50
54
|
static connectAsync(options?: BridgeConnectionOptions): Promise<BridgeConnection>;
|
|
51
|
-
disconnectAsync(
|
|
55
|
+
disconnectAsync(options?: {
|
|
56
|
+
relayDrainTimeoutMs?: number;
|
|
57
|
+
}): Promise<void>;
|
|
52
58
|
/** Whether this process ended up as host or client. */
|
|
53
59
|
get role(): 'host' | 'client';
|
|
54
60
|
/** Whether the connection is currently active. */
|
|
55
61
|
get isConnected(): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* True when this is a client relaying through a host from an older
|
|
64
|
+
* studio-bridge, which may not pass on options or actions it predates.
|
|
65
|
+
*/
|
|
66
|
+
get isHostOutdated(): boolean;
|
|
56
67
|
/** The actual port the bridge is bound to (host) or connected to (client). */
|
|
68
|
+
/** Whether the bridge host, and so Studio, runs on another machine. */
|
|
69
|
+
get isRemote(): boolean;
|
|
57
70
|
get port(): number;
|
|
58
71
|
/** List all currently connected Studio sessions. */
|
|
59
72
|
listSessions(): SessionInfo[];
|
|
73
|
+
/**
|
|
74
|
+
* Sessions matching `--target` and `--context`. A target matches a
|
|
75
|
+
* session id or an instance id exactly, or else as a prefix.
|
|
76
|
+
*/
|
|
77
|
+
findSessions(target?: string, context?: SessionContext): SessionInfo[];
|
|
60
78
|
/**
|
|
61
79
|
* List unique Studio instances. Each instance groups 1-3 context sessions
|
|
62
80
|
* that share the same instanceId.
|
|
@@ -64,6 +82,11 @@ export declare class BridgeConnection extends EventEmitter {
|
|
|
64
82
|
listInstances(): InstanceInfo[];
|
|
65
83
|
/** Get a session handle by ID. Returns undefined if not connected. */
|
|
66
84
|
getSession(sessionId: string): BridgeSession | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Instances whose id, or one of whose session ids, is `target`. Falls
|
|
87
|
+
* back to ids that start with `target` when nothing matches exactly.
|
|
88
|
+
*/
|
|
89
|
+
private _matchInstanceIds;
|
|
67
90
|
/**
|
|
68
91
|
* Resolve a session for command execution. Instance-aware: groups sessions
|
|
69
92
|
* by instanceId and auto-selects context within an instance.
|
|
@@ -103,6 +126,7 @@ export declare class BridgeConnection extends EventEmitter {
|
|
|
103
126
|
maxMs?: number;
|
|
104
127
|
}): Promise<void>;
|
|
105
128
|
private _initHostAsync;
|
|
129
|
+
private _relayEnvelopeAsync;
|
|
106
130
|
private _initClientAsync;
|
|
107
131
|
private static _deriveContext;
|
|
108
132
|
private _resolveByInstance;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge-connection.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridge-connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"bridge-connection.d.ts","sourceRoot":"","sources":["../../../src/bridge/bridge-connection.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAWtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQpD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ5E,MAAM,WAAW,uBAAuB;IACtC,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAiDD,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,sBAAsB,CAAqB;IACnD,OAAO,CAAC,cAAc,CAA4B;IAGlD,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,YAAY,CAA+C;IAGnE,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,WAAW,CAAK;IAGxB,OAAO,CAAC,UAAU,CAA4C;IAE9D,OAAO;IASP;;;;;;;;OAQG;WACU,YAAY,CACvB,OAAO,CAAC,EAAE,uBAAuB,GAChC,OAAO,CAAC,gBAAgB,CAAC;IAmGtB,eAAe,CACnB,OAAO,GAAE;QAAE,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAO,GAC7C,OAAO,CAAC,IAAI,CAAC;IAqDhB,uDAAuD;IACvD,IAAI,IAAI,IAAI,MAAM,GAAG,QAAQ,CAE5B;IAED,kDAAkD;IAClD,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;OAGG;IACH,IAAI,cAAc,IAAI,OAAO,CAK5B;IAED,8EAA8E;IAC9E,uEAAuE;IACvE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,IAAI,IAAI,MAAM,CAKjB;IAED,oDAAoD;IACpD,YAAY,IAAI,WAAW,EAAE;IAY7B;;;OAGG;IACH,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,WAAW,EAAE;IAiBtE;;;OAGG;IACH,aAAa,IAAI,YAAY,EAAE;IAY/B,sEAAsE;IACtE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAYxD;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;;;;;;;;;;;;;OAcG;IACG,mBAAmB,CACvB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,cAAc,EACxB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,aAAa,CAAC;IA4EzB,wEAAwE;IAClE,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkCnE;;;;OAIG;YACW,mBAAmB;IAyBjC;;;;;OAKG;IACG,4BAA4B,CAAC,OAAO,CAAC,EAAE;QAC3C,iEAAiE;QACjE,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,gGAAgG;QAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,kDAAkD;QAClD,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,IAAI,CAAC;YAsCH,cAAc;YAgHd,mBAAmB;YA2CnB,gBAAgB;IA4B9B,OAAO,CAAC,MAAM,CAAC,cAAc;IAM7B,OAAO,CAAC,kBAAkB;IA8D1B,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,eAAe;CAMxB"}
|