rnxsim 0.1.499 → 0.1.500

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 (55) hide show
  1. package/cli/bridge-flow-runner.ts +6 -2
  2. package/cli/commands/inspect/core.ts +2 -0
  3. package/cli/ws-bridge.ts +18 -19
  4. package/dist-lib/agent-daemon-client.cjs +1 -1
  5. package/dist-lib/agent-events.cjs +1 -1
  6. package/dist-lib/agent-identity.cjs +1 -1
  7. package/dist-lib/agent-sessions.cjs +1 -1
  8. package/dist-lib/attached-projects.cjs +1 -1
  9. package/dist-lib/auth/shared-session.cjs +1 -1
  10. package/dist-lib/backend-origin.cjs +1 -1
  11. package/dist-lib/beta.cjs +1 -1
  12. package/dist-lib/beta.mjs +1 -1
  13. package/dist-lib/bridge-constants.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.cjs +1 -1
  15. package/dist-lib/bridge-contract-input.mjs +1 -1
  16. package/dist-lib/bridge-contract.cjs +1 -1
  17. package/dist-lib/bridge-contract.mjs +1 -1
  18. package/dist-lib/capture-contract.cjs +1 -1
  19. package/dist-lib/capture-contract.mjs +1 -1
  20. package/dist-lib/cli-constants.cjs +1 -1
  21. package/dist-lib/cloud-contract.cjs +1 -1
  22. package/dist-lib/cloud-contract.mjs +1 -1
  23. package/dist-lib/cloud.cjs +1 -1
  24. package/dist-lib/cloud.mjs +1 -1
  25. package/dist-lib/config.cjs +1 -1
  26. package/dist-lib/detox/index.cjs +1 -1
  27. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  28. package/dist-lib/home-paths.cjs +1 -1
  29. package/dist-lib/host/bridge-host.cjs +1 -1
  30. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  31. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  32. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  33. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  34. package/dist-lib/host/websocket-proxy.cjs +1 -1
  35. package/dist-lib/index.cjs +14 -11
  36. package/dist-lib/jump-to-source-babel.cjs +1 -1
  37. package/dist-lib/jump-to-source-native.cjs +1 -1
  38. package/dist-lib/menu.cjs +1 -1
  39. package/dist-lib/menu.mjs +1 -1
  40. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  41. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  42. package/dist-lib/metro-production-bundle.cjs +1 -1
  43. package/dist-lib/metro-production-bundle.mjs +1 -1
  44. package/dist-lib/metro.cjs +1 -1
  45. package/dist-lib/profiles.cjs +1 -1
  46. package/dist-lib/public-brand.cjs +1 -1
  47. package/dist-lib/react-native-host-modules.cjs +1 -1
  48. package/dist-lib/react-native-host-modules.mjs +1 -1
  49. package/dist-lib/render-mode.cjs +1 -1
  50. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  51. package/dist-lib/sdk.cjs +2 -1
  52. package/dist-lib/sdk.mjs +2 -1
  53. package/dist-lib/skills.cjs +20 -13
  54. package/dist-lib/vite.cjs +1 -1
  55. package/package.json +1 -1
@@ -483,7 +483,9 @@ export class SootSimBridgeFlowRunner {
483
483
  }
484
484
 
485
485
  async waitForTree(timeout: number = DEFAULT_TIMEOUT) {
486
- let status = await inspectWaitReady(this.bridge, scaledTimeout(timeout))
486
+ let status = await inspectWaitReady(this.bridge, scaledTimeout(timeout), {
487
+ simId: this.opts.simId,
488
+ })
487
489
  if (status.ready) return
488
490
  if (status.externalError) {
489
491
  throw new Error(`app failed to load: ${status.externalError}`)
@@ -512,7 +514,9 @@ export class SootSimBridgeFlowRunner {
512
514
  )
513
515
  this.opts.simId = successor
514
516
  saveCurrentSimId(successor)
515
- status = await inspectWaitReady(this.bridge, scaledTimeout(timeout))
517
+ status = await inspectWaitReady(this.bridge, scaledTimeout(timeout), {
518
+ simId: this.opts.simId,
519
+ })
516
520
  if (status.ready) return
517
521
  }
518
522
  }
@@ -1025,6 +1025,7 @@ export interface WaitReadyStatus {
1025
1025
  export interface WaitReadyOptions {
1026
1026
  progressIntervalMs?: number
1027
1027
  onProgress?: (status: WaitReadyStatus) => void
1028
+ simId?: string
1028
1029
  }
1029
1030
 
1030
1031
  export function waitReadyReason(
@@ -1091,6 +1092,7 @@ export async function inspectWaitReady(
1091
1092
  result = await bridge.send(
1092
1093
  {
1093
1094
  type: 'waitFor',
1095
+ ...(options.simId ? { simId: options.simId } : {}),
1094
1096
  waitForOptions: { condition: { type: 'ready' }, timeoutMs },
1095
1097
  },
1096
1098
  { timeoutMs: timeoutMs + 1_000 },
package/cli/ws-bridge.ts CHANGED
@@ -324,9 +324,9 @@ export interface WsBridge {
324
324
  opts?: { timeoutMs?: number },
325
325
  ): Promise<any>
326
326
  listSims(): Promise<BridgeSimInfo[]>
327
- // a guest reload retires the sim id and re-registers the same page under a
328
- // new one. a caller that pins an id resolves the successor here; null means
329
- // nothing proves what replaced it.
327
+ // a guest reload retires the socket and the same page reconnects under a new
328
+ // or restored id. a caller that pins an id resolves that target here; null
329
+ // means nothing proves what replaced it.
330
330
  resolveReloadedSim(retiredSimId: string): Promise<string | null>
331
331
  focusSim(simId?: string): Promise<any>
332
332
  closeSim(simId?: string): Promise<any>
@@ -621,21 +621,20 @@ export function createBridge(wsPort: number, opts: WsBridgeOptions = {}): WsBrid
621
621
  const hostPidBySimId = new Map<string, number>()
622
622
  const lineageLookupBySimId = new Map<string, Promise<void>>()
623
623
 
624
- // a reload retires the sim id but keeps the browser host, so a successor
625
- // sharing that host pid IS the same page lineage rather than a guess. only
626
- // an unambiguous match counts; callers fail closed on null.
627
- function pickReloadedSuccessor(sims: unknown, retiredSimId: string): string | null {
624
+ // a reload retires the socket but keeps the browser host. the replacement
625
+ // can receive a new sim id or restore the prior one from session storage.
626
+ // the restored id is definitive; a new id must be the only same-host match.
627
+ function pickReloadedTarget(sims: unknown, retiredSimId: string): string | null {
628
628
  const pinnedHostPid = hostPidBySimId.get(retiredSimId)
629
629
  if (pinnedHostPid === undefined) return null
630
- const successors = (Array.isArray(sims) ? (sims as BridgeSimInfo[]) : []).filter(
631
- (sim) =>
632
- sim.id !== retiredSimId &&
633
- sim.readyState === 'open' &&
634
- sim.meta?.sootsimHostPid === pinnedHostPid,
630
+ const matches = (Array.isArray(sims) ? (sims as BridgeSimInfo[]) : []).filter(
631
+ (sim) => sim.readyState === 'open' && sim.meta?.sootsimHostPid === pinnedHostPid,
635
632
  )
636
- if (successors.length !== 1) return null
637
- hostPidBySimId.set(successors[0].id, pinnedHostPid)
638
- return successors[0].id
633
+ const restored = matches.find((sim) => sim.id === retiredSimId)
634
+ if (restored) return restored.id
635
+ if (matches.length !== 1) return null
636
+ hostPidBySimId.set(matches[0].id, pinnedHostPid)
637
+ return matches[0].id
639
638
  }
640
639
 
641
640
  // print a one-line notice on first sim-scoped command so agents/users see
@@ -801,7 +800,7 @@ export function createBridge(wsPort: number, opts: WsBridgeOptions = {}): WsBrid
801
800
  // a reload retires the sim id but keeps the browser host, so the
802
801
  // successor with the same host pid IS the same page lineage — not a
803
802
  // guess. adopt only that, and only when it is unambiguous.
804
- const successor = pickReloadedSuccessor(
803
+ const successor = pickReloadedTarget(
805
804
  await sendOnce(undefined, { type: 'bridge:list-sims' }),
806
805
  sentSimId,
807
806
  )
@@ -831,10 +830,10 @@ export function createBridge(wsPort: number, opts: WsBridgeOptions = {}): WsBrid
831
830
  },
832
831
  // a caller holding its own pinned sim id (a flow runner sets simId on every
833
832
  // command, so it never reaches the pin-following path in send) asks here
834
- // after a reload retires that id. null means nothing proves what replaced
835
- // it, and the caller must fail rather than guess.
833
+ // after a reload retires its socket. the page can reconnect under a new id
834
+ // or restore the old id; null means no unique same-host target exists.
836
835
  async resolveReloadedSim(retiredSimId: string) {
837
- return pickReloadedSuccessor(await this.listSims(), retiredSimId)
836
+ return pickReloadedTarget(await this.listSims(), retiredSimId)
838
837
  },
839
838
  async focusSim(simId?: string) {
840
839
  return this.send({ type: 'focus', simId })
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/capture-contract.ts
4
4
  var RNX_SCREEN_CAPTURE_VERSION = 1;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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;
@@ -1065,15 +1065,17 @@ function createBridge(wsPort, opts = {}) {
1065
1065
  let noticedTarget = false;
1066
1066
  const hostPidBySimId = /* @__PURE__ */ new Map();
1067
1067
  const lineageLookupBySimId = /* @__PURE__ */ new Map();
1068
- function pickReloadedSuccessor(sims, retiredSimId) {
1068
+ function pickReloadedTarget(sims, retiredSimId) {
1069
1069
  const pinnedHostPid = hostPidBySimId.get(retiredSimId);
1070
1070
  if (pinnedHostPid === void 0) return null;
1071
- const successors = (Array.isArray(sims) ? sims : []).filter(
1072
- (sim) => sim.id !== retiredSimId && sim.readyState === "open" && sim.meta?.sootsimHostPid === pinnedHostPid
1071
+ const matches = (Array.isArray(sims) ? sims : []).filter(
1072
+ (sim) => sim.readyState === "open" && sim.meta?.sootsimHostPid === pinnedHostPid
1073
1073
  );
1074
- if (successors.length !== 1) return null;
1075
- hostPidBySimId.set(successors[0].id, pinnedHostPid);
1076
- return successors[0].id;
1074
+ const restored = matches.find((sim) => sim.id === retiredSimId);
1075
+ if (restored) return restored.id;
1076
+ if (matches.length !== 1) return null;
1077
+ hostPidBySimId.set(matches[0].id, pinnedHostPid);
1078
+ return matches[0].id;
1077
1079
  }
1078
1080
  function maybeNoticeTarget(cmdType, simId) {
1079
1081
  if (noticedTarget) return;
@@ -1191,7 +1193,7 @@ function createBridge(wsPort, opts = {}) {
1191
1193
  const message = error instanceof Error ? error.message : String(error);
1192
1194
  const missingSimMessage = `no sim connected with id ${sentSimId}`;
1193
1195
  if (opts.simIdSource !== "flag" && sentSimId && cmd.simId === void 0 && (message === missingSimMessage || message.startsWith(`${missingSimMessage};`))) {
1194
- const successor = pickReloadedSuccessor(
1196
+ const successor = pickReloadedTarget(
1195
1197
  await sendOnce(void 0, { type: "bridge:list-sims" }),
1196
1198
  sentSimId
1197
1199
  );
@@ -1217,10 +1219,10 @@ function createBridge(wsPort, opts = {}) {
1217
1219
  },
1218
1220
  // a caller holding its own pinned sim id (a flow runner sets simId on every
1219
1221
  // command, so it never reaches the pin-following path in send) asks here
1220
- // after a reload retires that id. null means nothing proves what replaced
1221
- // it, and the caller must fail rather than guess.
1222
+ // after a reload retires its socket. the page can reconnect under a new id
1223
+ // or restore the old id; null means no unique same-host target exists.
1222
1224
  async resolveReloadedSim(retiredSimId) {
1223
- return pickReloadedSuccessor(await this.listSims(), retiredSimId);
1225
+ return pickReloadedTarget(await this.listSims(), retiredSimId);
1224
1226
  },
1225
1227
  async focusSim(simId) {
1226
1228
  return this.send({ type: "focus", simId });
@@ -1739,6 +1741,7 @@ async function inspectWaitReady(bridge, timeoutMs = 2e4, options = {}) {
1739
1741
  result = await bridge.send(
1740
1742
  {
1741
1743
  type: "waitFor",
1744
+ ...options.simId ? { simId: options.simId } : {},
1742
1745
  waitForOptions: { condition: { type: "ready" }, timeoutMs }
1743
1746
  },
1744
1747
  { timeoutMs: timeoutMs + 1e3 }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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;
@@ -742,6 +742,7 @@ async function inspectWaitReady(bridge, timeoutMs = 2e4, options = {}) {
742
742
  result = await bridge.send(
743
743
  {
744
744
  type: "waitFor",
745
+ ...options.simId ? { simId: options.simId } : {},
745
746
  waitForOptions: { condition: { type: "ready" }, timeoutMs }
746
747
  },
747
748
  { timeoutMs: timeoutMs + 1e3 }
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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);
@@ -646,6 +646,7 @@ async function inspectWaitReady(bridge, timeoutMs = 2e4, options = {}) {
646
646
  result = await bridge.send(
647
647
  {
648
648
  type: "waitFor",
649
+ ...options.simId ? { simId: options.simId } : {},
649
650
  waitForOptions: { condition: { type: "ready" }, timeoutMs }
650
651
  },
651
652
  { timeoutMs: timeoutMs + 1e3 }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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;
@@ -31103,15 +31103,17 @@ function createBridge(wsPort, opts = {}) {
31103
31103
  let noticedTarget = false;
31104
31104
  const hostPidBySimId = /* @__PURE__ */ new Map();
31105
31105
  const lineageLookupBySimId = /* @__PURE__ */ new Map();
31106
- function pickReloadedSuccessor(sims, retiredSimId) {
31106
+ function pickReloadedTarget(sims, retiredSimId) {
31107
31107
  const pinnedHostPid = hostPidBySimId.get(retiredSimId);
31108
31108
  if (pinnedHostPid === void 0) return null;
31109
- const successors = (Array.isArray(sims) ? sims : []).filter(
31110
- (sim) => sim.id !== retiredSimId && sim.readyState === "open" && sim.meta?.sootsimHostPid === pinnedHostPid
31109
+ const matches = (Array.isArray(sims) ? sims : []).filter(
31110
+ (sim) => sim.readyState === "open" && sim.meta?.sootsimHostPid === pinnedHostPid
31111
31111
  );
31112
- if (successors.length !== 1) return null;
31113
- hostPidBySimId.set(successors[0].id, pinnedHostPid);
31114
- return successors[0].id;
31112
+ const restored = matches.find((sim) => sim.id === retiredSimId);
31113
+ if (restored) return restored.id;
31114
+ if (matches.length !== 1) return null;
31115
+ hostPidBySimId.set(matches[0].id, pinnedHostPid);
31116
+ return matches[0].id;
31115
31117
  }
31116
31118
  function maybeNoticeTarget(cmdType, simId) {
31117
31119
  if (noticedTarget) return;
@@ -31229,7 +31231,7 @@ function createBridge(wsPort, opts = {}) {
31229
31231
  const message = error instanceof Error ? error.message : String(error);
31230
31232
  const missingSimMessage = `no sim connected with id ${sentSimId}`;
31231
31233
  if (opts.simIdSource !== "flag" && sentSimId && cmd.simId === void 0 && (message === missingSimMessage || message.startsWith(`${missingSimMessage};`))) {
31232
- const successor = pickReloadedSuccessor(
31234
+ const successor = pickReloadedTarget(
31233
31235
  await sendOnce(void 0, { type: "bridge:list-sims" }),
31234
31236
  sentSimId
31235
31237
  );
@@ -31255,10 +31257,10 @@ function createBridge(wsPort, opts = {}) {
31255
31257
  },
31256
31258
  // a caller holding its own pinned sim id (a flow runner sets simId on every
31257
31259
  // command, so it never reaches the pin-following path in send) asks here
31258
- // after a reload retires that id. null means nothing proves what replaced
31259
- // it, and the caller must fail rather than guess.
31260
+ // after a reload retires its socket. the page can reconnect under a new id
31261
+ // or restore the old id; null means no unique same-host target exists.
31260
31262
  async resolveReloadedSim(retiredSimId) {
31261
- return pickReloadedSuccessor(await this.listSims(), retiredSimId);
31263
+ return pickReloadedTarget(await this.listSims(), retiredSimId);
31262
31264
  },
31263
31265
  async focusSim(simId) {
31264
31266
  return this.send({ type: "focus", simId });
@@ -32574,6 +32576,7 @@ async function inspectWaitReady(bridge, timeoutMs = 2e4, options = {}) {
32574
32576
  result = await bridge.send(
32575
32577
  {
32576
32578
  type: "waitFor",
32579
+ ...options.simId ? { simId: options.simId } : {},
32577
32580
  waitForOptions: { condition: { type: "ready" }, timeoutMs }
32578
32581
  },
32579
32582
  { timeoutMs: timeoutMs + 1e3 }
@@ -36562,7 +36565,9 @@ var init_bridge_flow_runner = __esm({
36562
36565
  });
36563
36566
  }
36564
36567
  async waitForTree(timeout = DEFAULT_TIMEOUT) {
36565
- let status = await inspectWaitReady(this.bridge, scaledTimeout(timeout));
36568
+ let status = await inspectWaitReady(this.bridge, scaledTimeout(timeout), {
36569
+ simId: this.opts.simId
36570
+ });
36566
36571
  if (status.ready) return;
36567
36572
  if (status.externalError) {
36568
36573
  throw new Error(`app failed to load: ${status.externalError}`);
@@ -36584,7 +36589,9 @@ var init_bridge_flow_runner = __esm({
36584
36589
  );
36585
36590
  this.opts.simId = successor;
36586
36591
  saveCurrentSimId(successor);
36587
- status = await inspectWaitReady(this.bridge, scaledTimeout(timeout));
36592
+ status = await inspectWaitReady(this.bridge, scaledTimeout(timeout), {
36593
+ simId: this.opts.simId
36594
+ });
36588
36595
  if (status.ready) return;
36589
36596
  }
36590
36597
  }
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.499 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.500 | (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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rnxsim",
3
- "version": "0.1.499",
3
+ "version": "0.1.500",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for rnx.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",