rnxsim 0.1.477 → 0.1.479

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 (54) hide show
  1. package/cli/commands/agent-wrapper.ts +65 -31
  2. package/dist-lib/agent-daemon-client.cjs +1 -1
  3. package/dist-lib/agent-events.cjs +1 -1
  4. package/dist-lib/agent-identity.cjs +1 -1
  5. package/dist-lib/agent-sessions.cjs +1 -1
  6. package/dist-lib/attached-projects.cjs +1 -1
  7. package/dist-lib/auth/shared-session.cjs +1 -1
  8. package/dist-lib/backend-origin.cjs +1 -1
  9. package/dist-lib/beta.cjs +1 -1
  10. package/dist-lib/beta.mjs +1 -1
  11. package/dist-lib/bridge-constants.cjs +1 -1
  12. package/dist-lib/bridge-contract-input.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.mjs +1 -1
  14. package/dist-lib/bridge-contract.cjs +1 -1
  15. package/dist-lib/bridge-contract.mjs +1 -1
  16. package/dist-lib/capture-contract.cjs +1 -1
  17. package/dist-lib/capture-contract.mjs +1 -1
  18. package/dist-lib/cli-constants.cjs +1 -1
  19. package/dist-lib/cloud-contract.cjs +1 -1
  20. package/dist-lib/cloud-contract.mjs +1 -1
  21. package/dist-lib/cloud.cjs +1 -1
  22. package/dist-lib/cloud.mjs +1 -1
  23. package/dist-lib/config.cjs +1 -1
  24. package/dist-lib/detox/index.cjs +1 -1
  25. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  26. package/dist-lib/home-paths.cjs +1 -1
  27. package/dist-lib/host/bridge-host.cjs +13 -1
  28. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  29. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  30. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  31. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  32. package/dist-lib/host/websocket-proxy.cjs +1 -1
  33. package/dist-lib/index.cjs +1 -1
  34. package/dist-lib/jump-to-source-babel.cjs +1 -1
  35. package/dist-lib/jump-to-source-native.cjs +1 -1
  36. package/dist-lib/menu.cjs +1 -1
  37. package/dist-lib/menu.mjs +1 -1
  38. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  39. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  40. package/dist-lib/metro-production-bundle.cjs +1 -1
  41. package/dist-lib/metro-production-bundle.mjs +1 -1
  42. package/dist-lib/metro.cjs +1 -1
  43. package/dist-lib/profiles.cjs +1 -1
  44. package/dist-lib/public-brand.cjs +1 -1
  45. package/dist-lib/react-native-host-modules.cjs +1 -1
  46. package/dist-lib/react-native-host-modules.mjs +1 -1
  47. package/dist-lib/render-mode.cjs +1 -1
  48. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  49. package/dist-lib/sdk.cjs +1 -1
  50. package/dist-lib/sdk.mjs +1 -1
  51. package/dist-lib/skills.cjs +32 -20
  52. package/dist-lib/vite.cjs +1 -1
  53. package/package.json +1 -1
  54. package/src/bridge-contract.ts +1 -1
@@ -23,7 +23,7 @@
23
23
  // claude still uses the stage 3 per-turn spawn via `claude -p`; stage 8
24
24
  // replaces it with `--output-format stream-json --verbose --resume`.
25
25
 
26
- import { execFile, spawn, type ChildProcess } from 'node:child_process'
26
+ import { execFile, spawn } from 'node:child_process'
27
27
  import { randomUUID } from 'node:crypto'
28
28
  import {
29
29
  constants as fsConstants,
@@ -45,6 +45,8 @@ const CODEX_THREAD_SANDBOX = 'danger-full-access'
45
45
  const CODEX_TURN_SANDBOX_POLICY = { type: 'dangerFullAccess' } as const
46
46
  const CODEX_SERVICE_TIER = 'fast' as const
47
47
  const CODEX_REASONING_EFFORT = 'medium' as const
48
+ const CODEX_READY_TIMEOUT_MS = 5_000
49
+ const CODEX_THREAD_SETUP_TIMEOUT_MS = 10_000
48
50
 
49
51
  const execFileP = promisify(execFile)
50
52
 
@@ -87,6 +89,15 @@ interface WrapperArgs {
87
89
  freshThread?: boolean
88
90
  }
89
91
 
92
+ interface KillableChildProcess {
93
+ kill(signal?: 'SIGTERM'): boolean
94
+ }
95
+
96
+ interface AgentTranscriptStream {
97
+ write(chunk: string): unknown
98
+ end(): unknown
99
+ }
100
+
90
101
  function parseWrapperArgs(argv: string[]): WrapperArgs {
91
102
  const map: Record<string, keyof WrapperArgs> = {
92
103
  '--session-id': 'sessionId',
@@ -176,7 +187,7 @@ export async function runAgentWrapper(argv: string[]): Promise<number> {
176
187
  }
177
188
 
178
189
  // transcript is optional; append mode so multiple turns accumulate.
179
- let transcriptStream: ReturnType<typeof createWriteStream> | null = null
190
+ let transcriptStream: AgentTranscriptStream | null = null
180
191
  if (args.transcript) {
181
192
  try {
182
193
  await fs.mkdir(path.dirname(args.transcript), { recursive: true })
@@ -248,22 +259,16 @@ export async function runAgentWrapper(argv: string[]): Promise<number> {
248
259
  shutdown(5)
249
260
  }
250
261
  })
251
- // 30s cap on the boot sequence if codex hangs on init/thread setup,
252
- // emit an error instead of silently never advertising ready.
262
+ // only app-server initialization gates ready. thread lookup can take
263
+ // several seconds on a healthy codex install, so the first prompt owns
264
+ // that work below instead of making session startup wait for it.
253
265
  await withTimeout(
254
- (async () => {
255
- await codexClient!.request('initialize', {
256
- clientInfo: { name: 'sootsim', title: null, version: '0.1.0' },
257
- capabilities: null,
258
- })
259
- // prefer an existing non-archived thread for this cwd unless the
260
- // caller explicitly asked for a fresh one.
261
- codexThreadId = await resolveCodexThread(codexClient!, cwd, {
262
- fresh: args.freshThread === true,
263
- })
264
- })(),
265
- 30_000,
266
- 'codex app-server boot timed out after 30s',
266
+ codexClient.request('initialize', {
267
+ clientInfo: { name: 'sootsim', title: null, version: '0.1.0' },
268
+ capabilities: null,
269
+ }),
270
+ CODEX_READY_TIMEOUT_MS,
271
+ `codex app-server initialize timed out after ${CODEX_READY_TIMEOUT_MS}ms`,
267
272
  )
268
273
  } catch (err) {
269
274
  const message = err instanceof Error ? err.message : String(err)
@@ -291,7 +296,7 @@ export async function runAgentWrapper(argv: string[]): Promise<number> {
291
296
  // flight. both codex and claude serialize per-session internally, but
292
297
  // gating here keeps wrapper event ordering honest.
293
298
  let turnInFlight = false
294
- let currentClaudeChild: ChildProcess | null = null
299
+ let currentClaudeChild: KillableChildProcess | null = null
295
300
  const pendingPrompts: string[] = []
296
301
 
297
302
  const { promise: exitPromise, resolve: resolveExit } = createDeferred<number>()
@@ -361,8 +366,17 @@ export async function runAgentWrapper(argv: string[]): Promise<number> {
361
366
  provider === 'codex' && codexClient
362
367
  ? buildCodexTurnRunner({
363
368
  client: codexClient,
364
- getThreadId: () => codexThreadId,
365
- setThreadId: (id) => (codexThreadId = id),
369
+ resolveThreadId: async () => {
370
+ if (codexThreadId) return codexThreadId
371
+ codexThreadId = await withTimeout(
372
+ resolveCodexThread(codexClient, cwd, {
373
+ fresh: args.freshThread === true,
374
+ }),
375
+ CODEX_THREAD_SETUP_TIMEOUT_MS,
376
+ `codex thread setup timed out after ${CODEX_THREAD_SETUP_TIMEOUT_MS}ms`,
377
+ )
378
+ return codexThreadId
379
+ },
366
380
  emit,
367
381
  transcript: transcriptStream,
368
382
  onTurnSettled: () => {
@@ -449,6 +463,16 @@ export function extractCodexThreadId(
449
463
  return started?.threadId ?? started?.thread?.id ?? null
450
464
  }
451
465
 
466
+ export function extractCodexThreadListId(response: unknown): string | null {
467
+ if (typeof response !== 'object' || response === null) return null
468
+ const data = Reflect.get(response, 'data')
469
+ if (!Array.isArray(data)) return null
470
+ const first = data[0]
471
+ if (typeof first !== 'object' || first === null) return null
472
+ const id = Reflect.get(first, 'id')
473
+ return typeof id === 'string' && id.length > 0 ? id : null
474
+ }
475
+
452
476
  async function resolveCodexThread(
453
477
  client: CodexClient,
454
478
  cwd: string,
@@ -458,12 +482,12 @@ async function resolveCodexThread(
458
482
  // goes wrong, or the caller requested a fresh thread, use thread/start.
459
483
  if (!opts.fresh) {
460
484
  try {
461
- const res = (await client.request('thread/list', {
485
+ const res = await client.request('thread/list', {
462
486
  cwd,
463
487
  limit: 1,
464
488
  archived: false,
465
- })) as { threads?: Array<{ id: string }> } | undefined
466
- const existing = res?.threads?.[0]?.id
489
+ })
490
+ const existing = extractCodexThreadListId(res)
467
491
  if (existing) {
468
492
  try {
469
493
  await client.request('thread/resume', {
@@ -505,10 +529,9 @@ async function resolveCodexThread(
505
529
 
506
530
  interface CodexTurnDeps {
507
531
  client: CodexClient
508
- getThreadId: () => string | null
509
- setThreadId: (id: string) => void
532
+ resolveThreadId: () => Promise<string>
510
533
  emit: (event: Partial<AgentEvent> & { type: AgentEvent['type'] }) => void
511
- transcript: ReturnType<typeof createWriteStream> | null
534
+ transcript: AgentTranscriptStream | null
512
535
  onTurnSettled: () => void
513
536
  }
514
537
 
@@ -684,9 +707,20 @@ function buildCodexTurnRunner(deps: CodexTurnDeps): TurnRunner {
684
707
  })
685
708
 
686
709
  return async function codexRunTurn(text: string): Promise<void> {
687
- const threadId = deps.getThreadId()
688
- if (!threadId) {
689
- emit({ type: 'error', message: 'no active codex thread' } as AgentEvent)
710
+ let threadId: string
711
+ try {
712
+ threadId = await deps.resolveThreadId()
713
+ } catch (err) {
714
+ const message = err instanceof Error ? err.message : String(err)
715
+ emit({
716
+ type: 'error',
717
+ message: `codex thread setup failed: ${message}`,
718
+ } as AgentEvent)
719
+ emit({
720
+ type: 'turn-completed',
721
+ filesTouched: [] as string[],
722
+ durationMs: 0,
723
+ })
690
724
  deps.onTurnSettled()
691
725
  return
692
726
  }
@@ -789,8 +823,8 @@ interface ClaudeTurnDeps {
789
823
  claudeSessionUuid: string
790
824
  cwd: string
791
825
  emit: (event: Partial<AgentEvent> & { type: AgentEvent['type'] }) => void
792
- transcript: ReturnType<typeof createWriteStream> | null
793
- setChild: (child: ChildProcess | null) => void
826
+ transcript: AgentTranscriptStream | null
827
+ setChild: (child: KillableChildProcess | null) => void
794
828
  onTurnSettled: () => void
795
829
  }
796
830
 
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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;
@@ -2638,6 +2638,18 @@ var init_stub_manifest = __esm({
2638
2638
  runtimeTier: "core",
2639
2639
  buildResolvers: ["vite", "dep-prebundle"]
2640
2640
  },
2641
+ nativeEventEmitter: {
2642
+ specifier: "react-native/Libraries/EventEmitter/NativeEventEmitter",
2643
+ stubFile: "rn-libraries/NativeEventEmitter.ts",
2644
+ runtimeTier: "core",
2645
+ buildResolvers: ["vite", "dep-prebundle"]
2646
+ },
2647
+ rctDeviceEventEmitter: {
2648
+ specifier: "react-native/Libraries/EventEmitter/RCTDeviceEventEmitter",
2649
+ stubFile: "rn-libraries/RCTDeviceEventEmitter.ts",
2650
+ runtimeTier: "core",
2651
+ buildResolvers: ["vite", "dep-prebundle"]
2652
+ },
2641
2653
  pressability: {
2642
2654
  specifier: "react-native/Libraries/Pressability/Pressability",
2643
2655
  stubFile: "rn-libraries/Pressability.ts",
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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;
@@ -2079,8 +2079,8 @@ var init_capability_inventory_coverage = __esm({
2079
2079
  combined: {
2080
2080
  raw: {
2081
2081
  covered: 7,
2082
- ratio: 0.00443599493029,
2083
- total: 1578
2082
+ ratio: 0.00443037974684,
2083
+ total: 1580
2084
2084
  },
2085
2085
  weighted: {
2086
2086
  covered: 118040527248e-15,
@@ -2091,8 +2091,8 @@ var init_capability_inventory_coverage = __esm({
2091
2091
  semantic: {
2092
2092
  raw: {
2093
2093
  covered: 7,
2094
- ratio: 0.00622775800712,
2095
- total: 1124
2094
+ ratio: 0.00621669626998,
2095
+ total: 1126
2096
2096
  },
2097
2097
  weighted: {
2098
2098
  covered: 118040527248e-15,
@@ -2118,7 +2118,7 @@ var init_capability_inventory_coverage = __esm({
2118
2118
  raw: {
2119
2119
  covered: 0,
2120
2120
  ratio: 0,
2121
- total: 1376
2121
+ total: 1378
2122
2122
  },
2123
2123
  weighted: {
2124
2124
  covered: 0,
@@ -2130,7 +2130,7 @@ var init_capability_inventory_coverage = __esm({
2130
2130
  raw: {
2131
2131
  covered: 0,
2132
2132
  ratio: 0,
2133
- total: 970
2133
+ total: 972
2134
2134
  },
2135
2135
  weighted: {
2136
2136
  covered: 0,
@@ -2155,8 +2155,8 @@ var init_capability_inventory_coverage = __esm({
2155
2155
  combined: {
2156
2156
  raw: {
2157
2157
  covered: 235,
2158
- ratio: 0.168700646088,
2159
- total: 1393
2158
+ ratio: 0.168458781362,
2159
+ total: 1395
2160
2160
  },
2161
2161
  weighted: {
2162
2162
  covered: 0.602400157387,
@@ -2167,8 +2167,8 @@ var init_capability_inventory_coverage = __esm({
2167
2167
  semantic: {
2168
2168
  raw: {
2169
2169
  covered: 235,
2170
- ratio: 0.235707121364,
2171
- total: 997
2170
+ ratio: 0.235235235235,
2171
+ total: 999
2172
2172
  },
2173
2173
  weighted: {
2174
2174
  covered: 0.602400157387,
@@ -3690,8 +3690,8 @@ var init_capability_outcomes2 = __esm({
3690
3690
  android: {
3691
3691
  passedWeight: 0,
3692
3692
  failedWeight: 0,
3693
- unassessedWeight: 1196,
3694
- totalWeight: 1196,
3693
+ unassessedWeight: 1198,
3694
+ totalWeight: 1198,
3695
3695
  assessedWeight: 0,
3696
3696
  compatibility: null,
3697
3697
  assessed: 0
@@ -3699,11 +3699,11 @@ var init_capability_outcomes2 = __esm({
3699
3699
  ios: {
3700
3700
  passedWeight: 180,
3701
3701
  failedWeight: 0,
3702
- unassessedWeight: 1025,
3703
- totalWeight: 1205,
3702
+ unassessedWeight: 1027,
3703
+ totalWeight: 1207,
3704
3704
  assessedWeight: 180,
3705
3705
  compatibility: 1,
3706
- assessed: 0.14937759336099585
3706
+ assessed: 0.1491300745650373
3707
3707
  }
3708
3708
  },
3709
3709
  usage: {
@@ -3757,8 +3757,8 @@ var init_capability_outcomes2 = __esm({
3757
3757
  android: {
3758
3758
  passedWeight: 0,
3759
3759
  failedWeight: 0,
3760
- unassessedWeight: 1196,
3761
- totalWeight: 1196,
3760
+ unassessedWeight: 1198,
3761
+ totalWeight: 1198,
3762
3762
  assessedWeight: 0,
3763
3763
  compatibility: null,
3764
3764
  assessed: 0
@@ -3766,8 +3766,8 @@ var init_capability_outcomes2 = __esm({
3766
3766
  ios: {
3767
3767
  passedWeight: 0,
3768
3768
  failedWeight: 0,
3769
- unassessedWeight: 1205,
3770
- totalWeight: 1205,
3769
+ unassessedWeight: 1207,
3770
+ totalWeight: 1207,
3771
3771
  assessedWeight: 0,
3772
3772
  compatibility: null,
3773
3773
  assessed: 0
@@ -26708,6 +26708,18 @@ var init_stub_manifest = __esm({
26708
26708
  runtimeTier: "core",
26709
26709
  buildResolvers: ["vite", "dep-prebundle"]
26710
26710
  },
26711
+ nativeEventEmitter: {
26712
+ specifier: "react-native/Libraries/EventEmitter/NativeEventEmitter",
26713
+ stubFile: "rn-libraries/NativeEventEmitter.ts",
26714
+ runtimeTier: "core",
26715
+ buildResolvers: ["vite", "dep-prebundle"]
26716
+ },
26717
+ rctDeviceEventEmitter: {
26718
+ specifier: "react-native/Libraries/EventEmitter/RCTDeviceEventEmitter",
26719
+ stubFile: "rn-libraries/RCTDeviceEventEmitter.ts",
26720
+ runtimeTier: "core",
26721
+ buildResolvers: ["vite", "dep-prebundle"]
26722
+ },
26711
26723
  pressability: {
26712
26724
  specifier: "react-native/Libraries/Pressability/Pressability",
26713
26725
  stubFile: "rn-libraries/Pressability.ts",
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.477 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.479 | (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.477",
3
+ "version": "0.1.479",
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",
@@ -384,7 +384,7 @@ export interface SimSemanticResolveResult {
384
384
  // ---------------------------------------------------------------------------
385
385
 
386
386
  // 'data' clears what a user could clear from inside the app: async storage,
387
- // sqlite, cache dirs. 'full' also clears what only a fresh install would:
387
+ // MMKV, sqlite, cache dirs. 'full' also clears what only a fresh install would:
388
388
  // simulated keychain, user defaults, granted permissions.
389
389
  //
390
390
  // an in-worker remount is preferred over restarting the tenant worker, because