rnxsim 0.1.455 → 0.1.457

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 (62) hide show
  1. package/cli/cloud-client.ts +3 -1
  2. package/cli/cloud-dispatch.ts +17 -0
  3. package/cli/commands/do-chain.ts +1 -4
  4. package/cli/commands/inspect/actions.ts +63 -14
  5. package/cli/commands/inspect.ts +66 -5
  6. package/cli/ws-bridge.ts +3 -0
  7. package/dist-lib/agent-daemon-client.cjs +1 -1
  8. package/dist-lib/agent-events.cjs +1 -1
  9. package/dist-lib/agent-identity.cjs +1 -1
  10. package/dist-lib/agent-sessions.cjs +1 -1
  11. package/dist-lib/attached-projects.cjs +1 -1
  12. package/dist-lib/auth/shared-session.cjs +1 -1
  13. package/dist-lib/backend-origin.cjs +1 -1
  14. package/dist-lib/beta.cjs +1 -1
  15. package/dist-lib/beta.mjs +1 -1
  16. package/dist-lib/bridge-constants.cjs +1 -1
  17. package/dist-lib/bridge-contract-input.cjs +1 -1
  18. package/dist-lib/bridge-contract-input.mjs +1 -1
  19. package/dist-lib/bridge-contract.cjs +1 -1
  20. package/dist-lib/bridge-contract.mjs +1 -1
  21. package/dist-lib/capture-contract.cjs +1 -1
  22. package/dist-lib/capture-contract.mjs +1 -1
  23. package/dist-lib/cli-constants.cjs +1 -1
  24. package/dist-lib/cloud-contract.cjs +1 -1
  25. package/dist-lib/cloud-contract.mjs +1 -1
  26. package/dist-lib/cloud.cjs +1 -1
  27. package/dist-lib/cloud.mjs +1 -1
  28. package/dist-lib/config.cjs +1 -1
  29. package/dist-lib/detox/index.cjs +1 -1
  30. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  31. package/dist-lib/home-paths.cjs +1 -1
  32. package/dist-lib/host/bridge-host.cjs +1 -1
  33. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  34. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  35. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  36. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  37. package/dist-lib/host/websocket-proxy.cjs +1 -1
  38. package/dist-lib/index.cjs +583 -241
  39. package/dist-lib/jump-to-source-babel.cjs +1 -1
  40. package/dist-lib/jump-to-source-native.cjs +1 -1
  41. package/dist-lib/menu.cjs +1 -1
  42. package/dist-lib/menu.mjs +1 -1
  43. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  44. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  45. package/dist-lib/metro-production-bundle.cjs +1 -1
  46. package/dist-lib/metro-production-bundle.mjs +1 -1
  47. package/dist-lib/metro.cjs +1 -1
  48. package/dist-lib/profiles.cjs +1 -1
  49. package/dist-lib/public-brand.cjs +1 -1
  50. package/dist-lib/react-native-host-modules.cjs +1 -1
  51. package/dist-lib/react-native-host-modules.mjs +1 -1
  52. package/dist-lib/render-mode.cjs +1 -1
  53. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  54. package/dist-lib/sdk.cjs +43 -15
  55. package/dist-lib/sdk.mjs +43 -15
  56. package/dist-lib/skills.cjs +1118 -85
  57. package/dist-lib/vite.cjs +1 -1
  58. package/package.json +1 -1
  59. package/skills/rnx-debug/SKILL.md +1 -1
  60. package/src/bridge-contract.ts +2 -1
  61. package/src/connect.ts +18 -0
  62. package/src/sim-client.ts +4 -0
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/public-brand.ts
4
4
  var name = "rnx";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-fingerprint-registry.ts
4
4
  var RNX_METRO_FINGERPRINT_SCHEMA_VERSION = 2;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-production-bundle.ts
4
4
  var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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;
@@ -1632,8 +1632,15 @@ async function tapResolvedTarget(bridge, args) {
1632
1632
  let attempts = 0;
1633
1633
  let lastPayload = null;
1634
1634
  let lastResult = null;
1635
- const canWaitForIdle = bridge.plane !== "cloud" && timing.initialWaitMs > 0;
1636
- if (canWaitForIdle) {
1635
+ const settleCloud = async () => {
1636
+ try {
1637
+ await bridge.send({ type: "settle" });
1638
+ } catch {
1639
+ }
1640
+ };
1641
+ if (bridge.plane === "cloud") {
1642
+ await settleCloud();
1643
+ } else if (timing.initialWaitMs > 0) {
1637
1644
  try {
1638
1645
  await waitForSootsimIdle({
1639
1646
  bridge,
@@ -1673,34 +1680,45 @@ async function tapResolvedTarget(bridge, args) {
1673
1680
  lastOffscreenAt = null;
1674
1681
  const requestedTarget = tapTargetFromPayload(payload, args.textFallback);
1675
1682
  const { tree } = await inspectTree(bridge, 50);
1683
+ let moved = false;
1676
1684
  if (Array.isArray(tree) && tree.length > 0) {
1677
1685
  const hit = hitTestSemanticTree(tree, payload.cx, payload.cy);
1678
1686
  const matched = hit !== null && (nodeMatchesRequested(hit.node, requestedTarget) || hit.ancestors.some(
1679
1687
  (ancestor) => nodeMatchesRequested(ancestor, requestedTarget)
1680
1688
  ));
1681
- if (hit && !matched) {
1689
+ const blocks = hit !== null && (hit.node.type === "text" || hit.node.pressable === true || hit.ancestors.some((ancestor) => ancestor.pressable === true));
1690
+ if (hit && !matched && blocks) {
1691
+ moved = subtreeMatchesRequested(hit.node, requestedTarget);
1682
1692
  lastResult = {
1683
1693
  hit: false,
1684
- reason: "target-covered",
1694
+ reason: moved ? "target-moved" : "target-covered",
1685
1695
  requestedTarget,
1686
1696
  coordinateTarget: coveringNodeSummary(hit.node)
1687
1697
  };
1688
- return { payload, result: lastResult, attempts, failure: "missed" };
1698
+ if (!moved)
1699
+ return { payload, result: lastResult, attempts, failure: "missed" };
1689
1700
  }
1690
1701
  }
1691
- const result = await tapCoordinates(
1692
- bridge,
1693
- payload.cx,
1694
- payload.cy,
1695
- requestedTarget
1696
- );
1697
- lastResult = result;
1698
- if (isTapSuccess(result)) return { payload, result, attempts };
1702
+ if (!moved) {
1703
+ const result = await tapCoordinates(
1704
+ bridge,
1705
+ payload.cx,
1706
+ payload.cy,
1707
+ requestedTarget
1708
+ );
1709
+ lastResult = result;
1710
+ if (isTapSuccess(result)) return { payload, result, attempts };
1711
+ }
1699
1712
  }
1700
1713
  }
1701
1714
  const remaining = deadline - Date.now();
1702
1715
  if (remaining <= 0) break;
1703
- if (bridge.plane === "cloud" || timing.retryWaitMs <= 0) break;
1716
+ if (bridge.plane === "cloud") {
1717
+ if (lastResult?.reason !== "target-moved" || attempts >= 3) break;
1718
+ await settleCloud();
1719
+ continue;
1720
+ }
1721
+ if (timing.retryWaitMs <= 0) break;
1704
1722
  try {
1705
1723
  await waitForSootsimIdle({
1706
1724
  bridge,
@@ -1719,6 +1737,13 @@ async function tapResolvedTarget(bridge, args) {
1719
1737
  failure: lastPayload && typeof lastPayload.cx === "number" ? "missed" : "not-found"
1720
1738
  };
1721
1739
  }
1740
+ function subtreeMatchesRequested(node, requested) {
1741
+ for (const child of node.children ?? []) {
1742
+ if (nodeMatchesRequested(child, requested) || subtreeMatchesRequested(child, requested))
1743
+ return true;
1744
+ }
1745
+ return false;
1746
+ }
1722
1747
  async function tapCoordinates(bridge, x, y, target) {
1723
1748
  return bridge.send({
1724
1749
  type: "tap",
@@ -2017,6 +2042,9 @@ var SimClient = class {
2017
2042
  this.bridge = bridge;
2018
2043
  this.simId = simId;
2019
2044
  }
2045
+ get plane() {
2046
+ return this.bridge.plane;
2047
+ }
2020
2048
  // --- transport (WsBridge/InspectBridge) ---
2021
2049
  send(cmd, opts) {
2022
2050
  if (this.closed) {
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.455 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.457 | (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);
@@ -1536,8 +1536,15 @@ async function tapResolvedTarget(bridge, args) {
1536
1536
  let attempts = 0;
1537
1537
  let lastPayload = null;
1538
1538
  let lastResult = null;
1539
- const canWaitForIdle = bridge.plane !== "cloud" && timing.initialWaitMs > 0;
1540
- if (canWaitForIdle) {
1539
+ const settleCloud = async () => {
1540
+ try {
1541
+ await bridge.send({ type: "settle" });
1542
+ } catch {
1543
+ }
1544
+ };
1545
+ if (bridge.plane === "cloud") {
1546
+ await settleCloud();
1547
+ } else if (timing.initialWaitMs > 0) {
1541
1548
  try {
1542
1549
  await waitForSootsimIdle({
1543
1550
  bridge,
@@ -1577,34 +1584,45 @@ async function tapResolvedTarget(bridge, args) {
1577
1584
  lastOffscreenAt = null;
1578
1585
  const requestedTarget = tapTargetFromPayload(payload, args.textFallback);
1579
1586
  const { tree } = await inspectTree(bridge, 50);
1587
+ let moved = false;
1580
1588
  if (Array.isArray(tree) && tree.length > 0) {
1581
1589
  const hit = hitTestSemanticTree(tree, payload.cx, payload.cy);
1582
1590
  const matched = hit !== null && (nodeMatchesRequested(hit.node, requestedTarget) || hit.ancestors.some(
1583
1591
  (ancestor) => nodeMatchesRequested(ancestor, requestedTarget)
1584
1592
  ));
1585
- if (hit && !matched) {
1593
+ const blocks = hit !== null && (hit.node.type === "text" || hit.node.pressable === true || hit.ancestors.some((ancestor) => ancestor.pressable === true));
1594
+ if (hit && !matched && blocks) {
1595
+ moved = subtreeMatchesRequested(hit.node, requestedTarget);
1586
1596
  lastResult = {
1587
1597
  hit: false,
1588
- reason: "target-covered",
1598
+ reason: moved ? "target-moved" : "target-covered",
1589
1599
  requestedTarget,
1590
1600
  coordinateTarget: coveringNodeSummary(hit.node)
1591
1601
  };
1592
- return { payload, result: lastResult, attempts, failure: "missed" };
1602
+ if (!moved)
1603
+ return { payload, result: lastResult, attempts, failure: "missed" };
1593
1604
  }
1594
1605
  }
1595
- const result = await tapCoordinates(
1596
- bridge,
1597
- payload.cx,
1598
- payload.cy,
1599
- requestedTarget
1600
- );
1601
- lastResult = result;
1602
- if (isTapSuccess(result)) return { payload, result, attempts };
1606
+ if (!moved) {
1607
+ const result = await tapCoordinates(
1608
+ bridge,
1609
+ payload.cx,
1610
+ payload.cy,
1611
+ requestedTarget
1612
+ );
1613
+ lastResult = result;
1614
+ if (isTapSuccess(result)) return { payload, result, attempts };
1615
+ }
1603
1616
  }
1604
1617
  }
1605
1618
  const remaining = deadline - Date.now();
1606
1619
  if (remaining <= 0) break;
1607
- if (bridge.plane === "cloud" || timing.retryWaitMs <= 0) break;
1620
+ if (bridge.plane === "cloud") {
1621
+ if (lastResult?.reason !== "target-moved" || attempts >= 3) break;
1622
+ await settleCloud();
1623
+ continue;
1624
+ }
1625
+ if (timing.retryWaitMs <= 0) break;
1608
1626
  try {
1609
1627
  await waitForSootsimIdle({
1610
1628
  bridge,
@@ -1623,6 +1641,13 @@ async function tapResolvedTarget(bridge, args) {
1623
1641
  failure: lastPayload && typeof lastPayload.cx === "number" ? "missed" : "not-found"
1624
1642
  };
1625
1643
  }
1644
+ function subtreeMatchesRequested(node, requested) {
1645
+ for (const child of node.children ?? []) {
1646
+ if (nodeMatchesRequested(child, requested) || subtreeMatchesRequested(child, requested))
1647
+ return true;
1648
+ }
1649
+ return false;
1650
+ }
1626
1651
  async function tapCoordinates(bridge, x, y, target) {
1627
1652
  return bridge.send({
1628
1653
  type: "tap",
@@ -1921,6 +1946,9 @@ var SimClient = class {
1921
1946
  this.bridge = bridge;
1922
1947
  this.simId = simId;
1923
1948
  }
1949
+ get plane() {
1950
+ return this.bridge.plane;
1951
+ }
1924
1952
  // --- transport (WsBridge/InspectBridge) ---
1925
1953
  send(cmd, opts) {
1926
1954
  if (this.closed) {