rnxsim 0.1.381 → 0.1.382

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 (138) hide show
  1. package/README.md +19 -6
  2. package/cli/app-fonts.ts +1 -1
  3. package/cli/bin.ts +118 -26
  4. package/cli/bridge-diagnostics.ts +1 -1
  5. package/cli/bridge-flow-runner.ts +9 -9
  6. package/cli/browser-evals.ts +3 -3
  7. package/cli/cli-update.ts +261 -0
  8. package/cli/cloud-client.ts +407 -0
  9. package/cli/cloud-dispatch.ts +165 -0
  10. package/cli/cloud-session.ts +156 -0
  11. package/cli/command-contract.ts +2 -2
  12. package/cli/command-registry.ts +9 -0
  13. package/cli/commands/agent-wrapper.ts +4 -4
  14. package/cli/commands/agent.ts +3 -3
  15. package/cli/commands/box/checkout-plane.ts +16 -8
  16. package/cli/commands/box/rnx-command.ts +2 -2
  17. package/cli/commands/box/search-command.ts +2 -2
  18. package/cli/commands/box.ts +123 -70
  19. package/cli/commands/config.ts +3 -2
  20. package/cli/commands/control.ts +6 -6
  21. package/cli/commands/cpu-profile.ts +2 -2
  22. package/cli/commands/daemon.ts +7 -7
  23. package/cli/commands/debug.ts +2 -2
  24. package/cli/commands/detox.ts +7 -7
  25. package/cli/commands/diagnose.ts +1 -1
  26. package/cli/commands/electron.ts +1 -1
  27. package/cli/commands/film.ts +1 -1
  28. package/cli/commands/flow.ts +4 -4
  29. package/cli/commands/inspect/core.ts +58 -7
  30. package/cli/commands/inspect/env.ts +5 -3
  31. package/cli/commands/inspect/shared.ts +2 -1
  32. package/cli/commands/inspect/wait-event.ts +1 -1
  33. package/cli/commands/inspect/wait-ready.ts +15 -5
  34. package/cli/commands/inspect.ts +31 -9
  35. package/cli/commands/install-desktop.ts +2 -2
  36. package/cli/commands/maestro.ts +3 -3
  37. package/cli/commands/permissions.ts +1 -1
  38. package/cli/commands/platform.ts +91 -0
  39. package/cli/commands/record.ts +3 -3
  40. package/cli/commands/report-issue.ts +1 -1
  41. package/cli/commands/runtime.ts +1 -1
  42. package/cli/commands/screenshot-mode.ts +1 -1
  43. package/cli/commands/screenshot.ts +25 -0
  44. package/cli/commands/serve.ts +1 -1
  45. package/cli/commands/skills.ts +1 -1
  46. package/cli/commands/timeline.ts +1 -1
  47. package/cli/commands/upgrade.ts +8 -34
  48. package/cli/commands/upload.ts +3 -3
  49. package/cli/commands/version.ts +14 -3
  50. package/cli/commands/what-happened.ts +2 -2
  51. package/cli/current-sim.ts +43 -30
  52. package/cli/desktop-companion.ts +1 -1
  53. package/cli/drivers/electron.ts +1 -1
  54. package/cli/drivers/playwright.ts +3 -3
  55. package/cli/drivers/types.ts +4 -4
  56. package/cli/flow-file.ts +3 -3
  57. package/cli/help-core.ts +18 -11
  58. package/cli/hidden-runtime-alias.ts +1 -1
  59. package/cli/hints.ts +2 -2
  60. package/cli/maestro-js.ts +2 -2
  61. package/cli/outbound-endpoints.ts +40 -6
  62. package/cli/parse-args.ts +1 -1
  63. package/cli/registry.ts +1 -1
  64. package/cli/resolve-assets.ts +2 -2
  65. package/cli/secure-file.ts +31 -0
  66. package/cli/shell-init.ts +98 -0
  67. package/cli/ws-bridge.ts +18 -8
  68. package/detox/expectations.ts +1 -1
  69. package/detox/gestures.ts +3 -3
  70. package/detox/index.ts +3 -3
  71. package/dist-lib/agent-daemon-client.cjs +1 -1
  72. package/dist-lib/agent-events.cjs +1 -1
  73. package/dist-lib/agent-identity.cjs +1 -1
  74. package/dist-lib/agent-sessions.cjs +1 -1
  75. package/dist-lib/attached-projects.cjs +1 -1
  76. package/dist-lib/auth/shared-session.cjs +1 -1
  77. package/dist-lib/backend-origin.cjs +1 -1
  78. package/dist-lib/beta.cjs +1 -1
  79. package/dist-lib/beta.mjs +1 -1
  80. package/dist-lib/bridge-constants.cjs +1 -1
  81. package/dist-lib/bridge-contract-input.cjs +15 -8
  82. package/dist-lib/bridge-contract-input.mjs +15 -8
  83. package/dist-lib/bridge-contract.cjs +1 -1
  84. package/dist-lib/bridge-contract.mjs +1 -1
  85. package/dist-lib/capture-contract.cjs +107 -0
  86. package/dist-lib/capture-contract.mjs +80 -0
  87. package/dist-lib/cli-constants.cjs +1 -1
  88. package/dist-lib/cloud-contract.cjs +32 -0
  89. package/dist-lib/cloud-contract.mjs +7 -0
  90. package/dist-lib/config.cjs +1 -1
  91. package/dist-lib/detox/index.cjs +4 -4
  92. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  93. package/dist-lib/home-paths.cjs +9 -1
  94. package/dist-lib/host/bridge-host.cjs +15 -10
  95. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  96. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  97. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  98. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  99. package/dist-lib/host/websocket-proxy.cjs +1 -1
  100. package/dist-lib/index.cjs +248 -73
  101. package/dist-lib/jump-to-source-babel.cjs +1 -1
  102. package/dist-lib/menu.cjs +1 -1
  103. package/dist-lib/menu.mjs +1 -1
  104. package/dist-lib/metro-production-bundle.cjs +1 -1
  105. package/dist-lib/metro-production-bundle.mjs +1 -1
  106. package/dist-lib/metro.cjs +1 -1
  107. package/dist-lib/profiles.cjs +1 -1
  108. package/dist-lib/public-brand.cjs +1 -1
  109. package/dist-lib/react-native-host-modules.cjs +1 -1
  110. package/dist-lib/react-native-host-modules.mjs +1 -1
  111. package/dist-lib/render-mode.cjs +1 -1
  112. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  113. package/dist-lib/sdk.cjs +44 -6
  114. package/dist-lib/sdk.mjs +44 -6
  115. package/dist-lib/skills.cjs +435 -155
  116. package/dist-lib/vite.cjs +1 -1
  117. package/package.json +20 -4
  118. package/scripts/dev-server-scanner.ts +3 -3
  119. package/skills/contrast/SKILL.md +1 -1
  120. package/skills/rnx-perf/SKILL.md +68 -52
  121. package/src/app-url.ts +2 -3
  122. package/src/bridge-contract-input.ts +17 -6
  123. package/src/bridge-contract.ts +25 -4
  124. package/src/capture-contract.ts +423 -0
  125. package/src/cloud-contract.ts +15 -0
  126. package/src/home-paths.ts +9 -3
  127. package/src/host/agent-host.ts +1 -1
  128. package/src/host/bridge-host.ts +13 -11
  129. package/src/host/plane-host.ts +2 -2
  130. package/src/index.ts +21 -0
  131. package/src/native-dev-bundle-url.ts +2 -2
  132. package/src/screenshots/orchestrate.ts +1 -1
  133. package/src/screenshots/org-deck.ts +1 -1
  134. package/src/settings-bundle.ts +1 -1
  135. package/src/sim-client.ts +4 -0
  136. package/src/vite-plugin-one.ts +2 -2
  137. package/src/vite-plugin.ts +1 -1
  138. package/cli/commands/box/cloud-box.ts +0 -294
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.381 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.382 | (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.381 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.382 | (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.381 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.382 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/react-native-host-modules.ts
4
4
  var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.381 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.382 | (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.381 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.382 | (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;
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.381 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.382 | (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;
@@ -1428,7 +1428,10 @@ async function inspectWaitSelector(bridge, testId, timeoutMs = 5e3, opts = {}) {
1428
1428
  {
1429
1429
  type: "waitFor",
1430
1430
  waitForOptions: {
1431
- condition: { type: gone ? "absent" : "present", testID: testId },
1431
+ condition: {
1432
+ type: gone ? "absent" : "present",
1433
+ selector: { testID: testId }
1434
+ },
1432
1435
  timeoutMs
1433
1436
  }
1434
1437
  },
@@ -1544,6 +1547,39 @@ async function inspectScrollStateAt(bridge, x, y) {
1544
1547
  };
1545
1548
  }
1546
1549
  async function inspectLogs(bridge) {
1550
+ if (bridge.plane === "cloud") {
1551
+ const state = await bridge.send({
1552
+ type: "state",
1553
+ stateOptions: {
1554
+ screenshot: false,
1555
+ tree: false,
1556
+ route: false,
1557
+ errors: false,
1558
+ logs: true,
1559
+ logLimit: 100
1560
+ }
1561
+ });
1562
+ const recentLogs = state && typeof state === "object" && Array.isArray(Reflect.get(state, "recentLogs")) ? Reflect.get(state, "recentLogs") : [];
1563
+ return recentLogs.flatMap((entry, index) => {
1564
+ if (!entry || typeof entry !== "object") return [];
1565
+ const text = Reflect.get(entry, "text");
1566
+ const rawLevel = Reflect.get(entry, "level");
1567
+ if (typeof text !== "string") return [];
1568
+ const level = rawLevel === "log" || rawLevel === "info" || rawLevel === "warn" || rawLevel === "error" || rawLevel === "debug" ? rawLevel : "error";
1569
+ const at = Reflect.get(entry, "at");
1570
+ const ts = typeof at === "number" && Number.isFinite(at) ? at : 0;
1571
+ return [
1572
+ {
1573
+ id: `cloud-${ts}-${index}`,
1574
+ source: "rnx-cloud",
1575
+ level,
1576
+ ts,
1577
+ args: [text],
1578
+ stack: null
1579
+ }
1580
+ ];
1581
+ });
1582
+ }
1547
1583
  const res = await bridge.send({
1548
1584
  type: "evaluate",
1549
1585
  code: `(() => {
@@ -1584,7 +1620,7 @@ function filterLogEntries(entries, opts = {}) {
1584
1620
  if (!opts.showInternal) {
1585
1621
  out = out.filter((e) => {
1586
1622
  const first = e.args[0];
1587
- return !(typeof first === "string" && first.startsWith("[rnx]"));
1623
+ return !(typeof first === "string" && /^\[(?:rnx|sootsim)(?:\s[^\]]*)?\]/.test(first));
1588
1624
  });
1589
1625
  }
1590
1626
  if (opts.level) out = out.filter((e) => opts.level.has(e.level));
@@ -1946,9 +1982,8 @@ function normalizeAppUrlTarget(target) {
1946
1982
  async function openAppUrl(bridge, target) {
1947
1983
  const normalized = normalizeAppUrlTarget(target);
1948
1984
  const result = await bridge.send({
1949
- type: "call",
1950
- path: "SootSim.bridges.test.openDeepLink",
1951
- args: [normalized]
1985
+ type: "openUrl",
1986
+ url: normalized
1952
1987
  });
1953
1988
  if (result !== null && typeof result === "object" && Reflect.get(result, "ok") === false) {
1954
1989
  const error = Reflect.get(result, "error");
@@ -2121,6 +2156,9 @@ var SimClient = class {
2121
2156
  openUrl(target) {
2122
2157
  return openAppUrl(this, target);
2123
2158
  }
2159
+ async setAppearance(appearance) {
2160
+ await this.send({ type: "setAppearance", appearance });
2161
+ }
2124
2162
  /**
2125
2163
  * block until the guest app has mounted and painted real content.
2126
2164
  * throws SimReadyTimeoutError (with the last probe status) on timeout.
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.381 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.382 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1333,7 +1333,10 @@ async function inspectWaitSelector(bridge, testId, timeoutMs = 5e3, opts = {}) {
1333
1333
  {
1334
1334
  type: "waitFor",
1335
1335
  waitForOptions: {
1336
- condition: { type: gone ? "absent" : "present", testID: testId },
1336
+ condition: {
1337
+ type: gone ? "absent" : "present",
1338
+ selector: { testID: testId }
1339
+ },
1337
1340
  timeoutMs
1338
1341
  }
1339
1342
  },
@@ -1449,6 +1452,39 @@ async function inspectScrollStateAt(bridge, x, y) {
1449
1452
  };
1450
1453
  }
1451
1454
  async function inspectLogs(bridge) {
1455
+ if (bridge.plane === "cloud") {
1456
+ const state = await bridge.send({
1457
+ type: "state",
1458
+ stateOptions: {
1459
+ screenshot: false,
1460
+ tree: false,
1461
+ route: false,
1462
+ errors: false,
1463
+ logs: true,
1464
+ logLimit: 100
1465
+ }
1466
+ });
1467
+ const recentLogs = state && typeof state === "object" && Array.isArray(Reflect.get(state, "recentLogs")) ? Reflect.get(state, "recentLogs") : [];
1468
+ return recentLogs.flatMap((entry, index) => {
1469
+ if (!entry || typeof entry !== "object") return [];
1470
+ const text = Reflect.get(entry, "text");
1471
+ const rawLevel = Reflect.get(entry, "level");
1472
+ if (typeof text !== "string") return [];
1473
+ const level = rawLevel === "log" || rawLevel === "info" || rawLevel === "warn" || rawLevel === "error" || rawLevel === "debug" ? rawLevel : "error";
1474
+ const at = Reflect.get(entry, "at");
1475
+ const ts = typeof at === "number" && Number.isFinite(at) ? at : 0;
1476
+ return [
1477
+ {
1478
+ id: `cloud-${ts}-${index}`,
1479
+ source: "rnx-cloud",
1480
+ level,
1481
+ ts,
1482
+ args: [text],
1483
+ stack: null
1484
+ }
1485
+ ];
1486
+ });
1487
+ }
1452
1488
  const res = await bridge.send({
1453
1489
  type: "evaluate",
1454
1490
  code: `(() => {
@@ -1489,7 +1525,7 @@ function filterLogEntries(entries, opts = {}) {
1489
1525
  if (!opts.showInternal) {
1490
1526
  out = out.filter((e) => {
1491
1527
  const first = e.args[0];
1492
- return !(typeof first === "string" && first.startsWith("[rnx]"));
1528
+ return !(typeof first === "string" && /^\[(?:rnx|sootsim)(?:\s[^\]]*)?\]/.test(first));
1493
1529
  });
1494
1530
  }
1495
1531
  if (opts.level) out = out.filter((e) => opts.level.has(e.level));
@@ -1851,9 +1887,8 @@ function normalizeAppUrlTarget(target) {
1851
1887
  async function openAppUrl(bridge, target) {
1852
1888
  const normalized = normalizeAppUrlTarget(target);
1853
1889
  const result = await bridge.send({
1854
- type: "call",
1855
- path: "SootSim.bridges.test.openDeepLink",
1856
- args: [normalized]
1890
+ type: "openUrl",
1891
+ url: normalized
1857
1892
  });
1858
1893
  if (result !== null && typeof result === "object" && Reflect.get(result, "ok") === false) {
1859
1894
  const error = Reflect.get(result, "error");
@@ -2026,6 +2061,9 @@ var SimClient = class {
2026
2061
  openUrl(target) {
2027
2062
  return openAppUrl(this, target);
2028
2063
  }
2064
+ async setAppearance(appearance) {
2065
+ await this.send({ type: "setAppearance", appearance });
2066
+ }
2029
2067
  /**
2030
2068
  * block until the guest app has mounted and painted real content.
2031
2069
  * throws SimReadyTimeoutError (with the last probe status) on timeout.