rnxsim 0.1.407 → 0.1.409

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +11 -10
  2. package/cli/bin.ts +16 -643
  3. package/cli/commands/assert.ts +6 -6
  4. package/cli/commands/box/rnx-command.ts +3 -11
  5. package/cli/commands/control.ts +3 -9
  6. package/cli/commands/daemon-mac-app.ts +5 -11
  7. package/cli/commands/daemon.ts +63 -113
  8. package/cli/drivers/playwright-provisioning.ts +33 -29
  9. package/cli/drivers/playwright-sim-host.ts +501 -0
  10. package/cli/drivers/playwright.ts +35 -522
  11. package/cli/hints.ts +2 -4
  12. package/cli/internal-child.ts +176 -0
  13. package/cli/maestro-js.ts +28 -39
  14. package/cli/main.ts +645 -0
  15. package/cli/outbound-endpoints.ts +8 -0
  16. package/cli/self-invocation.ts +34 -0
  17. package/dist-lib/agent-daemon-client.cjs +35 -25
  18. package/dist-lib/agent-events.cjs +1 -1
  19. package/dist-lib/agent-identity.cjs +1 -1
  20. package/dist-lib/agent-sessions.cjs +35 -25
  21. package/dist-lib/attached-projects.cjs +1 -1
  22. package/dist-lib/auth/shared-session.cjs +1 -1
  23. package/dist-lib/backend-origin.cjs +1 -1
  24. package/dist-lib/beta.cjs +1 -1
  25. package/dist-lib/beta.mjs +1 -1
  26. package/dist-lib/bridge-constants.cjs +1 -1
  27. package/dist-lib/bridge-contract-input.cjs +1 -1
  28. package/dist-lib/bridge-contract-input.mjs +1 -1
  29. package/dist-lib/bridge-contract.cjs +1 -1
  30. package/dist-lib/bridge-contract.mjs +1 -1
  31. package/dist-lib/capture-contract.cjs +2 -2
  32. package/dist-lib/capture-contract.mjs +2 -2
  33. package/dist-lib/cli-constants.cjs +1 -1
  34. package/dist-lib/cloud-contract.cjs +1 -4
  35. package/dist-lib/cloud-contract.mjs +1 -3
  36. package/dist-lib/config.cjs +1 -1
  37. package/dist-lib/detox/index.cjs +1 -1
  38. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  39. package/dist-lib/home-paths.cjs +1 -1
  40. package/dist-lib/host/bridge-host.cjs +25 -15
  41. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  42. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  43. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  44. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  45. package/dist-lib/host/websocket-proxy.cjs +1 -1
  46. package/dist-lib/index.cjs +2 -2
  47. package/dist-lib/jump-to-source-babel.cjs +1 -1
  48. package/dist-lib/menu.cjs +1 -1
  49. package/dist-lib/menu.mjs +1 -1
  50. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  51. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  52. package/dist-lib/metro-production-bundle.cjs +1 -1
  53. package/dist-lib/metro-production-bundle.mjs +1 -1
  54. package/dist-lib/metro.cjs +1 -1
  55. package/dist-lib/profiles.cjs +1 -1
  56. package/dist-lib/public-brand.cjs +1 -1
  57. package/dist-lib/react-native-host-modules.cjs +1 -1
  58. package/dist-lib/react-native-host-modules.mjs +1 -1
  59. package/dist-lib/render-mode.cjs +1 -1
  60. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  61. package/dist-lib/sdk.cjs +1 -1
  62. package/dist-lib/sdk.mjs +1 -1
  63. package/dist-lib/skills.cjs +134 -608
  64. package/dist-lib/vite.cjs +1 -1
  65. package/package.json +1 -1
  66. package/src/agent-daemon-client.ts +2 -2
  67. package/src/agent-sessions.ts +29 -24
  68. package/src/capture-contract.ts +3 -0
  69. package/src/cloud-contract.ts +0 -1
  70. package/src/vite-plugin.ts +62 -0
@@ -0,0 +1,34 @@
1
+ // how this CLI re-invokes itself as a child process.
2
+ //
3
+ // two shapes exist and only the build decides which one is running:
4
+ //
5
+ // standalone the bun-compiled executable IS the entry point. it takes the
6
+ // CLI argv directly and there is no script to hand it.
7
+ // entry script every other shape (dev checkout, the repository dist-cli
8
+ // bundle) runs through the javascript runtime executing now,
9
+ // with the script as its first argument.
10
+ //
11
+ // a presence check cannot tell them apart. inside the compiled binary
12
+ // `process.argv[1]` is a path in bun's virtual filesystem (`/$bunfs/root/...`)
13
+ // that passes `existsSync` in-process, so every site that probed argv[1]
14
+ // re-invoked itself as `rnx <bunfs path> <command>` and the child died on
15
+ // `unknown command`. the build-time constant is the only honest signal.
16
+
17
+ import { rnxPublicBrand } from '../src/public-brand'
18
+ import { IS_STANDALONE } from './standalone'
19
+
20
+ export interface RnxSelfInvocation {
21
+ /** absolute path to spawn. */
22
+ executable: string
23
+ /** arguments that precede the CLI's own argv. */
24
+ prefixArgs: string[]
25
+ }
26
+
27
+ export function rnxSelfInvocation(): RnxSelfInvocation {
28
+ if (IS_STANDALONE) return { executable: process.execPath, prefixArgs: [] }
29
+ const entry = process.argv[1]
30
+ if (!entry) {
31
+ throw new Error(`could not locate the ${rnxPublicBrand.commandName} entry script`)
32
+ }
33
+ return { executable: process.execPath, prefixArgs: [entry] }
34
+ }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -47,6 +47,29 @@ var import_ws = require("ws");
47
47
  var import_node_fs2 = __toESM(require("node:fs"), 1);
48
48
  var import_node_path2 = __toESM(require("node:path"), 1);
49
49
 
50
+ // src/public-brand.ts
51
+ var name = "rnx";
52
+ var rnxPublicBrand = Object.freeze({
53
+ name,
54
+ packageName: "rnxsim",
55
+ commandName: "rnx",
56
+ domain: "rnxsim.com",
57
+ origin: "https://rnxsim.com"
58
+ });
59
+
60
+ // cli/standalone.ts
61
+ var IS_STANDALONE = typeof __SOOTSIM_STANDALONE__ !== "undefined" && __SOOTSIM_STANDALONE__;
62
+
63
+ // cli/self-invocation.ts
64
+ function rnxSelfInvocation() {
65
+ if (IS_STANDALONE) return { executable: process.execPath, prefixArgs: [] };
66
+ const entry = process.argv[1];
67
+ if (!entry) {
68
+ throw new Error(`could not locate the ${rnxPublicBrand.commandName} entry script`);
69
+ }
70
+ return { executable: process.execPath, prefixArgs: [entry] };
71
+ }
72
+
50
73
  // src/home-paths.ts
51
74
  var import_node_fs = __toESM(require("node:fs"), 1);
52
75
  var import_node_path = __toESM(require("node:path"), 1);
@@ -76,21 +99,12 @@ var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
76
99
  // src/attached-projects.ts
77
100
  var COST_HISTORY_MAX_AGE_MS = 14 * 24 * 60 * 60 * 1e3;
78
101
 
79
- // src/public-brand.ts
80
- var name = "rnx";
81
- var rnxPublicBrand = Object.freeze({
82
- name,
83
- packageName: "rnxsim",
84
- commandName: "rnx",
85
- domain: "rnxsim.com",
86
- origin: "https://rnxsim.com"
87
- });
88
-
89
102
  // src/agent-sessions.ts
90
103
  function resolveSootsimInvocation() {
91
104
  if (process.env.RNX_BIN) {
92
- return { cmd: process.env.RNX_BIN, prefixArgs: [] };
105
+ return { executable: process.env.RNX_BIN, prefixArgs: [] };
93
106
  }
107
+ if (IS_STANDALONE) return rnxSelfInvocation();
94
108
  if (process.versions.electron) {
95
109
  const resourcesPath = process.resourcesPath;
96
110
  if (resourcesPath) {
@@ -99,23 +113,19 @@ function resolveSootsimInvocation() {
99
113
  import_node_path2.default.join(resourcesPath, "bin", `sootsim-${process.platform}-${process.arch}`)
100
114
  ];
101
115
  for (const c of candidates) {
102
- if (import_node_fs2.default.existsSync(c)) return { cmd: c, prefixArgs: [] };
116
+ if (import_node_fs2.default.existsSync(c)) return { executable: c, prefixArgs: [] };
103
117
  }
104
118
  }
105
119
  }
106
120
  const workspace = tryWorkspaceSootsim();
107
121
  if (workspace) return workspace;
108
- const argv0 = process.argv[0];
109
122
  const argv1 = process.argv[1];
110
123
  if (argv1 && /\.(ts|tsx|mjs|cjs|js)$/.test(argv1)) {
111
- return { cmd: argv0, prefixArgs: [argv1] };
124
+ return { executable: process.argv[0], prefixArgs: [argv1] };
112
125
  }
113
- if (!argv1 || argv1.includes("/.bin/")) {
114
- throw new Error(
115
- "rnx CLI not found. set RNX_BIN to the path of the rnx binary, or build the workspace CLI via `bun run --cwd packages/sootsim build:cli`."
116
- );
117
- }
118
- return { cmd: argv0, prefixArgs: [] };
126
+ throw new Error(
127
+ "rnx CLI not found. set RNX_BIN to the path of the rnx binary, or build the workspace CLI via `bun run --cwd packages/sootsim build:cli`."
128
+ );
119
129
  }
120
130
  function tryWorkspaceSootsim() {
121
131
  try {
@@ -123,7 +133,7 @@ function tryWorkspaceSootsim() {
123
133
  if (!sootsimDir) return null;
124
134
  const binaryName = `rnx-${process.platform === "win32" ? "windows" : process.platform}-${process.arch}${process.platform === "win32" ? ".exe" : ""}`;
125
135
  const distBinary = import_node_path2.default.join(sootsimDir, "dist-bin", binaryName);
126
- if (import_node_fs2.default.existsSync(distBinary)) return { cmd: distBinary, prefixArgs: [] };
136
+ if (import_node_fs2.default.existsSync(distBinary)) return { executable: distBinary, prefixArgs: [] };
127
137
  const distBin = import_node_path2.default.join(sootsimDir, "dist-cli", "bin.js");
128
138
  if (import_node_fs2.default.existsSync(distBin)) {
129
139
  try {
@@ -139,7 +149,7 @@ function tryWorkspaceSootsim() {
139
149
  }
140
150
  } catch {
141
151
  }
142
- return { cmd: process.execPath, prefixArgs: [distBin] };
152
+ return { executable: process.execPath, prefixArgs: [distBin] };
143
153
  }
144
154
  return null;
145
155
  } catch {
@@ -422,12 +432,12 @@ async function ensureDaemonRunning(opts = {}) {
422
432
  "DEV_HOST_REFUSED"
423
433
  );
424
434
  }
425
- const { cmd, prefixArgs } = resolveSootsimInvocation();
435
+ const { executable, prefixArgs } = resolveSootsimInvocation();
426
436
  const args = [...prefixArgs, "serve", "--quiet"];
427
437
  if (port !== DEFAULT_SOOTSIM_BRIDGE_PORT) {
428
438
  args.push("--port", String(port));
429
439
  }
430
- const child = (0, import_node_child_process.spawn)(cmd, args, {
440
+ const child = (0, import_node_child_process.spawn)(executable, args, {
431
441
  detached: true,
432
442
  stdio: "ignore",
433
443
  env: process.env,
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -52,6 +52,29 @@ var import_node_fs2 = __toESM(require("node:fs"), 1);
52
52
  var import_node_path3 = __toESM(require("node:path"), 1);
53
53
  var import_node_readline = __toESM(require("node:readline"), 1);
54
54
 
55
+ // src/public-brand.ts
56
+ var name = "rnx";
57
+ var rnxPublicBrand = Object.freeze({
58
+ name,
59
+ packageName: "rnxsim",
60
+ commandName: "rnx",
61
+ domain: "rnxsim.com",
62
+ origin: "https://rnxsim.com"
63
+ });
64
+
65
+ // cli/standalone.ts
66
+ var IS_STANDALONE = typeof __SOOTSIM_STANDALONE__ !== "undefined" && __SOOTSIM_STANDALONE__;
67
+
68
+ // cli/self-invocation.ts
69
+ function rnxSelfInvocation() {
70
+ if (IS_STANDALONE) return { executable: process.execPath, prefixArgs: [] };
71
+ const entry = process.argv[1];
72
+ if (!entry) {
73
+ throw new Error(`could not locate the ${rnxPublicBrand.commandName} entry script`);
74
+ }
75
+ return { executable: process.execPath, prefixArgs: [entry] };
76
+ }
77
+
55
78
  // src/agent-events.ts
56
79
  function isAgentEvent(value) {
57
80
  if (!value || typeof value !== "object") return false;
@@ -275,16 +298,6 @@ function updateSessionStatus(id, patch) {
275
298
  updateSessionStatuses([{ id, patch }]);
276
299
  }
277
300
 
278
- // src/public-brand.ts
279
- var name = "rnx";
280
- var rnxPublicBrand = Object.freeze({
281
- name,
282
- packageName: "rnxsim",
283
- commandName: "rnx",
284
- domain: "rnxsim.com",
285
- origin: "https://rnxsim.com"
286
- });
287
-
288
301
  // src/agent-sessions.ts
289
302
  function sessionDir(sessionId) {
290
303
  return import_node_path3.default.join(getUserDataDir(), "sessions", sessionId);
@@ -312,8 +325,9 @@ function pidIsAlive(pid, sessionId) {
312
325
  }
313
326
  function resolveSootsimInvocation() {
314
327
  if (process.env.RNX_BIN) {
315
- return { cmd: process.env.RNX_BIN, prefixArgs: [] };
328
+ return { executable: process.env.RNX_BIN, prefixArgs: [] };
316
329
  }
330
+ if (IS_STANDALONE) return rnxSelfInvocation();
317
331
  if (process.versions.electron) {
318
332
  const resourcesPath = process.resourcesPath;
319
333
  if (resourcesPath) {
@@ -322,23 +336,19 @@ function resolveSootsimInvocation() {
322
336
  import_node_path3.default.join(resourcesPath, "bin", `sootsim-${process.platform}-${process.arch}`)
323
337
  ];
324
338
  for (const c of candidates) {
325
- if (import_node_fs2.default.existsSync(c)) return { cmd: c, prefixArgs: [] };
339
+ if (import_node_fs2.default.existsSync(c)) return { executable: c, prefixArgs: [] };
326
340
  }
327
341
  }
328
342
  }
329
343
  const workspace = tryWorkspaceSootsim();
330
344
  if (workspace) return workspace;
331
- const argv0 = process.argv[0];
332
345
  const argv1 = process.argv[1];
333
346
  if (argv1 && /\.(ts|tsx|mjs|cjs|js)$/.test(argv1)) {
334
- return { cmd: argv0, prefixArgs: [argv1] };
335
- }
336
- if (!argv1 || argv1.includes("/.bin/")) {
337
- throw new Error(
338
- "rnx CLI not found. set RNX_BIN to the path of the rnx binary, or build the workspace CLI via `bun run --cwd packages/sootsim build:cli`."
339
- );
347
+ return { executable: process.argv[0], prefixArgs: [argv1] };
340
348
  }
341
- return { cmd: argv0, prefixArgs: [] };
349
+ throw new Error(
350
+ "rnx CLI not found. set RNX_BIN to the path of the rnx binary, or build the workspace CLI via `bun run --cwd packages/sootsim build:cli`."
351
+ );
342
352
  }
343
353
  function tryWorkspaceSootsim() {
344
354
  try {
@@ -346,7 +356,7 @@ function tryWorkspaceSootsim() {
346
356
  if (!sootsimDir) return null;
347
357
  const binaryName = `rnx-${process.platform === "win32" ? "windows" : process.platform}-${process.arch}${process.platform === "win32" ? ".exe" : ""}`;
348
358
  const distBinary = import_node_path3.default.join(sootsimDir, "dist-bin", binaryName);
349
- if (import_node_fs2.default.existsSync(distBinary)) return { cmd: distBinary, prefixArgs: [] };
359
+ if (import_node_fs2.default.existsSync(distBinary)) return { executable: distBinary, prefixArgs: [] };
350
360
  const distBin = import_node_path3.default.join(sootsimDir, "dist-cli", "bin.js");
351
361
  if (import_node_fs2.default.existsSync(distBin)) {
352
362
  try {
@@ -362,7 +372,7 @@ function tryWorkspaceSootsim() {
362
372
  }
363
373
  } catch {
364
374
  }
365
- return { cmd: process.execPath, prefixArgs: [distBin] };
375
+ return { executable: process.execPath, prefixArgs: [distBin] };
366
376
  }
367
377
  return null;
368
378
  } catch {
@@ -531,7 +541,7 @@ async function startSession(opts) {
531
541
  import_node_fs2.default.chmodSync(transcriptDir, 448);
532
542
  } catch {
533
543
  }
534
- const { cmd, prefixArgs } = resolveSootsimInvocation();
544
+ const { executable, prefixArgs } = resolveSootsimInvocation();
535
545
  const wrapperArgs = [
536
546
  ...prefixArgs,
537
547
  "agent-wrapper",
@@ -556,7 +566,7 @@ async function startSession(opts) {
556
566
  if (claudeSessionUuid) {
557
567
  wrapperArgs.push("--claude-session-uuid", claudeSessionUuid);
558
568
  }
559
- const child = (0, import_node_child_process.spawn)(cmd, wrapperArgs, {
569
+ const child = (0, import_node_child_process.spawn)(executable, wrapperArgs, {
560
570
  detached: true,
561
571
  stdio: "ignore",
562
572
  env: {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_MAX_MS = 5e3;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_DEFAULT_MS = 500;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -190,7 +190,7 @@ function isRnxScreenCapture(value) {
190
190
  }
191
191
  const tree = value.tree;
192
192
  const visual = value.visual;
193
- return captureRecord(tree.viewport) && captureInteger(tree.viewport.width) && tree.viewport.width > 0 && captureInteger(tree.viewport.height) && tree.viewport.height > 0 && captureInteger(tree.rootNodeId) && Array.isArray(tree.nodes) && tree.nodes.every(captureNode) && (visual === void 0 || visual.kind === "png" && (visual.producer === "headless-cpu-app-surface" || visual.producer === "browser-compositor-app-surface") && typeof visual.dataUri === "string" && visual.dataUri.startsWith("data:image/png;base64,") && captureInteger(visual.pixelWidth) && visual.pixelWidth > 0 && captureInteger(visual.pixelHeight) && visual.pixelHeight > 0);
193
+ return captureRecord(tree.viewport) && captureInteger(tree.viewport.width) && tree.viewport.width > 0 && captureInteger(tree.viewport.height) && tree.viewport.height > 0 && captureInteger(tree.rootNodeId) && (tree.commitRevision === void 0 || captureInteger(tree.commitRevision)) && Array.isArray(tree.nodes) && tree.nodes.every(captureNode) && (visual === void 0 || visual.kind === "png" && (visual.producer === "headless-cpu-app-surface" || visual.producer === "browser-compositor-app-surface") && typeof visual.dataUri === "string" && visual.dataUri.startsWith("data:image/png;base64,") && captureInteger(visual.pixelWidth) && visual.pixelWidth > 0 && captureInteger(visual.pixelHeight) && visual.pixelHeight > 0);
194
194
  }
195
195
  function isRnxCaptureRegionAtlas(value) {
196
196
  if (!captureRecord(value) || value.kind !== "png-atlas" || value.producer !== "headless-cpu-app-surface" || typeof value.dataUri !== "string" || !value.dataUri.startsWith("data:image/png;base64,") || !captureNumber(value.width) || value.width <= 0 || !captureNumber(value.height) || value.height <= 0 || !captureInteger(value.pixelWidth) || value.pixelWidth <= 0 || !captureInteger(value.pixelHeight) || value.pixelHeight <= 0 || !Array.isArray(value.regions) || value.regions.length === 0 || value.regions.length > 256) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/capture-contract.ts
4
4
  var RNX_SCREEN_CAPTURE_VERSION = 1;
@@ -161,7 +161,7 @@ function isRnxScreenCapture(value) {
161
161
  }
162
162
  const tree = value.tree;
163
163
  const visual = value.visual;
164
- return captureRecord(tree.viewport) && captureInteger(tree.viewport.width) && tree.viewport.width > 0 && captureInteger(tree.viewport.height) && tree.viewport.height > 0 && captureInteger(tree.rootNodeId) && Array.isArray(tree.nodes) && tree.nodes.every(captureNode) && (visual === void 0 || visual.kind === "png" && (visual.producer === "headless-cpu-app-surface" || visual.producer === "browser-compositor-app-surface") && typeof visual.dataUri === "string" && visual.dataUri.startsWith("data:image/png;base64,") && captureInteger(visual.pixelWidth) && visual.pixelWidth > 0 && captureInteger(visual.pixelHeight) && visual.pixelHeight > 0);
164
+ return captureRecord(tree.viewport) && captureInteger(tree.viewport.width) && tree.viewport.width > 0 && captureInteger(tree.viewport.height) && tree.viewport.height > 0 && captureInteger(tree.rootNodeId) && (tree.commitRevision === void 0 || captureInteger(tree.commitRevision)) && Array.isArray(tree.nodes) && tree.nodes.every(captureNode) && (visual === void 0 || visual.kind === "png" && (visual.producer === "headless-cpu-app-surface" || visual.producer === "browser-compositor-app-surface") && typeof visual.dataUri === "string" && visual.dataUri.startsWith("data:image/png;base64,") && captureInteger(visual.pixelWidth) && visual.pixelWidth > 0 && captureInteger(visual.pixelHeight) && visual.pixelHeight > 0);
165
165
  }
166
166
  function isRnxCaptureRegionAtlas(value) {
167
167
  if (!captureRecord(value) || value.kind !== "png-atlas" || value.producer !== "headless-cpu-app-surface" || typeof value.dataUri !== "string" || !value.dataUri.startsWith("data:image/png;base64,") || !captureNumber(value.width) || value.width <= 0 || !captureNumber(value.height) || value.height <= 0 || !captureInteger(value.pixelWidth) || value.pixelWidth <= 0 || !captureInteger(value.pixelHeight) || value.pixelHeight <= 0 || !Array.isArray(value.regions) || value.regions.length === 0 || value.regions.length > 256) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -25,13 +25,11 @@ __export(cloud_contract_exports, {
25
25
  RNX_CLOUD_COMMAND_TYPES: () => RNX_CLOUD_COMMAND_TYPES,
26
26
  RNX_CLOUD_DESIGN_MAX_STORAGE_BYTES: () => RNX_CLOUD_DESIGN_MAX_STORAGE_BYTES,
27
27
  RNX_CLOUD_DESIGN_MAX_STORAGE_ENTRIES: () => RNX_CLOUD_DESIGN_MAX_STORAGE_ENTRIES,
28
- RNX_CLOUD_DESIGN_PARALLEL_JOB_LIMIT: () => RNX_CLOUD_DESIGN_PARALLEL_JOB_LIMIT,
29
28
  RNX_CLOUD_MAX_ARTIFACT_BYTES: () => RNX_CLOUD_MAX_ARTIFACT_BYTES,
30
29
  isRnxCloudCommandType: () => isRnxCloudCommandType
31
30
  });
32
31
  module.exports = __toCommonJS(cloud_contract_exports);
33
32
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 20 * 1024 * 1024;
34
- var RNX_CLOUD_DESIGN_PARALLEL_JOB_LIMIT = 16;
35
33
  var RNX_CLOUD_DESIGN_MAX_STORAGE_ENTRIES = 256;
36
34
  var RNX_CLOUD_DESIGN_MAX_STORAGE_BYTES = 1024 * 1024;
37
35
  var RNX_CLOUD_COMMAND_TYPES = Object.freeze([
@@ -62,7 +60,6 @@ function isRnxCloudCommandType(value) {
62
60
  RNX_CLOUD_COMMAND_TYPES,
63
61
  RNX_CLOUD_DESIGN_MAX_STORAGE_BYTES,
64
62
  RNX_CLOUD_DESIGN_MAX_STORAGE_ENTRIES,
65
- RNX_CLOUD_DESIGN_PARALLEL_JOB_LIMIT,
66
63
  RNX_CLOUD_MAX_ARTIFACT_BYTES,
67
64
  isRnxCloudCommandType
68
65
  });
@@ -1,8 +1,7 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/cloud-contract.ts
4
4
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 20 * 1024 * 1024;
5
- var RNX_CLOUD_DESIGN_PARALLEL_JOB_LIMIT = 16;
6
5
  var RNX_CLOUD_DESIGN_MAX_STORAGE_ENTRIES = 256;
7
6
  var RNX_CLOUD_DESIGN_MAX_STORAGE_BYTES = 1024 * 1024;
8
7
  var RNX_CLOUD_COMMAND_TYPES = Object.freeze([
@@ -32,7 +31,6 @@ export {
32
31
  RNX_CLOUD_COMMAND_TYPES,
33
32
  RNX_CLOUD_DESIGN_MAX_STORAGE_BYTES,
34
33
  RNX_CLOUD_DESIGN_MAX_STORAGE_ENTRIES,
35
- RNX_CLOUD_DESIGN_PARALLEL_JOB_LIMIT,
36
34
  RNX_CLOUD_MAX_ARTIFACT_BYTES,
37
35
  isRnxCloudCommandType
38
36
  };
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -2061,6 +2061,19 @@ var import_node_fs8 = __toESM(require("node:fs"), 1);
2061
2061
  var import_node_path8 = __toESM(require("node:path"), 1);
2062
2062
  var import_node_readline = __toESM(require("node:readline"), 1);
2063
2063
 
2064
+ // cli/standalone.ts
2065
+ var IS_STANDALONE = typeof __SOOTSIM_STANDALONE__ !== "undefined" && __SOOTSIM_STANDALONE__;
2066
+
2067
+ // cli/self-invocation.ts
2068
+ function rnxSelfInvocation() {
2069
+ if (IS_STANDALONE) return { executable: process.execPath, prefixArgs: [] };
2070
+ const entry = process.argv[1];
2071
+ if (!entry) {
2072
+ throw new Error(`could not locate the ${rnxPublicBrand.commandName} entry script`);
2073
+ }
2074
+ return { executable: process.execPath, prefixArgs: [entry] };
2075
+ }
2076
+
2064
2077
  // src/agent-events.ts
2065
2078
  function isAgentEvent(value) {
2066
2079
  if (!value || typeof value !== "object") return false;
@@ -2403,8 +2416,9 @@ function pidIsAlive(pid, sessionId) {
2403
2416
  }
2404
2417
  function resolveSootsimInvocation() {
2405
2418
  if (process.env.RNX_BIN) {
2406
- return { cmd: process.env.RNX_BIN, prefixArgs: [] };
2419
+ return { executable: process.env.RNX_BIN, prefixArgs: [] };
2407
2420
  }
2421
+ if (IS_STANDALONE) return rnxSelfInvocation();
2408
2422
  if (process.versions.electron) {
2409
2423
  const resourcesPath = process.resourcesPath;
2410
2424
  if (resourcesPath) {
@@ -2413,23 +2427,19 @@ function resolveSootsimInvocation() {
2413
2427
  import_node_path8.default.join(resourcesPath, "bin", `sootsim-${process.platform}-${process.arch}`)
2414
2428
  ];
2415
2429
  for (const c of candidates) {
2416
- if (import_node_fs8.default.existsSync(c)) return { cmd: c, prefixArgs: [] };
2430
+ if (import_node_fs8.default.existsSync(c)) return { executable: c, prefixArgs: [] };
2417
2431
  }
2418
2432
  }
2419
2433
  }
2420
2434
  const workspace = tryWorkspaceSootsim();
2421
2435
  if (workspace) return workspace;
2422
- const argv0 = process.argv[0];
2423
2436
  const argv1 = process.argv[1];
2424
2437
  if (argv1 && /\.(ts|tsx|mjs|cjs|js)$/.test(argv1)) {
2425
- return { cmd: argv0, prefixArgs: [argv1] };
2438
+ return { executable: process.argv[0], prefixArgs: [argv1] };
2426
2439
  }
2427
- if (!argv1 || argv1.includes("/.bin/")) {
2428
- throw new Error(
2429
- "rnx CLI not found. set RNX_BIN to the path of the rnx binary, or build the workspace CLI via `bun run --cwd packages/sootsim build:cli`."
2430
- );
2431
- }
2432
- return { cmd: argv0, prefixArgs: [] };
2440
+ throw new Error(
2441
+ "rnx CLI not found. set RNX_BIN to the path of the rnx binary, or build the workspace CLI via `bun run --cwd packages/sootsim build:cli`."
2442
+ );
2433
2443
  }
2434
2444
  function tryWorkspaceSootsim() {
2435
2445
  try {
@@ -2437,7 +2447,7 @@ function tryWorkspaceSootsim() {
2437
2447
  if (!sootsimDir) return null;
2438
2448
  const binaryName = `rnx-${process.platform === "win32" ? "windows" : process.platform}-${process.arch}${process.platform === "win32" ? ".exe" : ""}`;
2439
2449
  const distBinary = import_node_path8.default.join(sootsimDir, "dist-bin", binaryName);
2440
- if (import_node_fs8.default.existsSync(distBinary)) return { cmd: distBinary, prefixArgs: [] };
2450
+ if (import_node_fs8.default.existsSync(distBinary)) return { executable: distBinary, prefixArgs: [] };
2441
2451
  const distBin = import_node_path8.default.join(sootsimDir, "dist-cli", "bin.js");
2442
2452
  if (import_node_fs8.default.existsSync(distBin)) {
2443
2453
  try {
@@ -2453,7 +2463,7 @@ function tryWorkspaceSootsim() {
2453
2463
  }
2454
2464
  } catch {
2455
2465
  }
2456
- return { cmd: process.execPath, prefixArgs: [distBin] };
2466
+ return { executable: process.execPath, prefixArgs: [distBin] };
2457
2467
  }
2458
2468
  return null;
2459
2469
  } catch {
@@ -2622,7 +2632,7 @@ async function startSession(opts) {
2622
2632
  import_node_fs8.default.chmodSync(transcriptDir, 448);
2623
2633
  } catch {
2624
2634
  }
2625
- const { cmd, prefixArgs } = resolveSootsimInvocation();
2635
+ const { executable, prefixArgs } = resolveSootsimInvocation();
2626
2636
  const wrapperArgs = [
2627
2637
  ...prefixArgs,
2628
2638
  "agent-wrapper",
@@ -2647,7 +2657,7 @@ async function startSession(opts) {
2647
2657
  if (claudeSessionUuid) {
2648
2658
  wrapperArgs.push("--claude-session-uuid", claudeSessionUuid);
2649
2659
  }
2650
- const child = (0, import_node_child_process2.spawn)(cmd, wrapperArgs, {
2660
+ const child = (0, import_node_child_process2.spawn)(executable, wrapperArgs, {
2651
2661
  detached: true,
2652
2662
  stdio: "ignore",
2653
2663
  env: {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
4
  var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.407 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.409 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;