rnxsim 0.1.559 → 0.1.561

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/README.md +20 -20
  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 +1 -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 +2 -2
  52. package/dist-lib/swift-submit.cjs +1 -1
  53. package/dist-lib/swift-submit.mjs +1 -1
  54. package/dist-lib/swift.cjs +1 -1
  55. package/dist-lib/vite.cjs +1 -1
  56. package/package.json +1 -1
  57. package/skills/contrast/SKILL.md +9 -9
  58. package/skills/rnx-debug/SKILL.md +5 -5
  59. package/skills/rnx-perf/SKILL.md +5 -5
  60. package/skills/rnx-setup/SKILL.md +11 -11
  61. package/skills/rnx-test/SKILL.md +11 -11
  62. package/skills/rnx-visual/SKILL.md +6 -6
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # rnx
1
+ # Peach
2
2
 
3
3
  The source owner for the standalone `rnx` executable and the public `rnxsim`
4
4
  integration library used to drive a browser-native React Native simulator.
@@ -202,7 +202,7 @@ bridge always addresses the **shell worker**, never an undifferentiated sim.
202
202
 
203
203
  | component | role | key files |
204
204
  | --- | --- | --- |
205
- | rnx CLI (bin + dispatcher) | Short-lived terminal entry point. Parses argv, owns the private-by-default one-time choice, lazy-imports one command per run, and routes direct open/runtime/inspection flows. | `cli/bin.ts`, `cli/main.ts`, `cli/privacy.ts`, `cli/parse-args.ts`, `cli/help.ts`, `cli/commands/setup.ts`, `cli/commands/control.ts` |
205
+ | Peach CLI (bin + dispatcher) | Short-lived terminal entry point. Parses argv, owns the private-by-default one-time choice, lazy-imports one command per run, and routes direct open/runtime/inspection flows. | `cli/bin.ts`, `cli/main.ts`, `cli/privacy.ts`, `cli/parse-args.ts`, `cli/help.ts`, `cli/commands/setup.ts`, `cli/commands/control.ts` |
206
206
  | WsBridge client | Client side of the CLI→daemon link. Resolves the daemon port from the lockfile, opens a WS to `:7668`, sends JSON commands and awaits `{id,result}`/`{id,error}`. Used by every interactive command. | `cli/ws-bridge.ts`, `src/bridge-constants.ts`, `cli/current-sim.ts` |
207
207
  | inspect / SDK command surface | Runtime inspection + interaction verbs (describe, find, do tap, get errors, wait, layout, settle). Re-exported as `rnxsim/sdk` so programmatic callers drive a sim the same way the CLI does. | `cli/commands/inspect/core.ts`, `cli/commands/inspect/actions.ts`, `cli/commands/inspect.ts`, `src/sdk.ts` |
208
208
  | bridge-contract input parsers | Turn untrusted JSON into typed bridge-contract arguments, so a transport in front of a sim validates request bodies once instead of writing a second reader. | `src/bridge-contract-input.ts`, `src/bridge-contract.ts` |
@@ -211,11 +211,11 @@ bridge always addresses the **shell worker**, never an undifferentiated sim.
211
211
  | SootSimBridgeHost (serve/daemon) | The bridge process (`rnx serve`, or autostarted as the daemon via launchd/systemd). HTTP+WS hub on `:7668`: relays commands between CLI clients and registered sims; also serves runtime HTTP, `/__server-scan`, and fetch/WS proxies. | `src/host/bridge-host.ts`, `cli/commands/serve.ts`, `cli/commands/daemon.ts`, `src/home-paths.ts` |
212
212
  | AgentHost + sessions | Agent-routing extension of the host: owns the single FIFO reader per agent session and fans `agent:event`/`session-status` pushes to every WS subscriber. Backed by agent-sessions + attached-projects stores. | `src/host/agent-host.ts`, `src/agent-sessions.ts`, `src/attached-projects.ts`, `src/agent-daemon-client.ts` |
213
213
  | host proxies + dev-server scan | Host-side helpers so a cross-origin tenant worker can reach local dev servers and same-origin APIs: `/__server-scan` discovers running metro/expo/vxrn/one servers; fetch + websocket proxies relay guest-app network through the daemon. | `src/host/fetch-proxy-handler.ts`, `src/host/websocket-proxy.ts`, `scripts/dev-server-scanner.ts`, `src/dev-bundle-resolution.ts` |
214
- | runtime delivery + rnx home | Versioned engine runtime management. The shared machinery owns manifest fetch, sha256 verification, channels, and auto-update. rnx binds it to `https://contrast.dev` and `~/.rnx/runtimes/<version>`. A repo can select `runtimeVersion` without changing the machine default. | `src/runtime-delivery.ts`, `packages/contrast-runtime-delivery/`, `src/home-paths.ts`, `src/runtime-assets.ts` |
214
+ | runtime delivery + Peach home | Versioned engine runtime management. The shared machinery owns manifest fetch, sha256 verification, channels, and auto-update. Peach binds it to `https://contrast.dev` and `~/.rnx/runtimes/<version>`. A repo can select `runtimeVersion` without changing the machine default. | `src/runtime-delivery.ts`, `packages/contrast-runtime-delivery/`, `src/home-paths.ts`, `src/runtime-assets.ts` |
215
215
  | standalone CLI delivery | Cached stable-version checks, bounded interactive notices, and verified atomic executable replacement. | `cli/cli-update.ts`, `cli/commands/upgrade.ts`, `cli/commands/version.ts`, `src/cli-version.ts` |
216
216
  | `rnxsim/vite` + `rnxsim/metro` (runtime serving) | Published bundler plugins. Both serve the installed engine runtime at `/__soot/` from `~/.rnx/runtimes/<version>` so an app's own dev server can host the sim shell; the Vite plugin can opt into a named Electron window. | `src/vite-plugin-one.ts`, `src/metro-plugin.ts`, `src/runtime-assets.ts` |
217
217
  | `sootsim()` vite resolver plugin (internal) | The large RN-resolution / native-stub vite plugin: aliases `react-native` to the engine shim, native packages to `@sootsim/compat` stubs, applies worklets/babel transforms, and instantiates `SootSimBridgeHost` in its dev server. Distinct from the published `rnxsim/vite` export. | `src/vite-plugin.ts`, `src/worklets-babel.ts`, `packages/compat/src/stub-manifest.ts` |
218
- | skills registry | rnx agent skills (`rnx-setup`, `rnx-debug`, `rnx-test`, `rnx-visual`, and the generated `contrast` index) installable with `rnx skill`. | `skills/*.md`, `src/skills/registry.ts`, `src/skills/types.ts` |
218
+ | skills registry | Peach agent skills (`rnx-setup`, `rnx-debug`, `rnx-test`, `rnx-visual`, and the generated `contrast` index) installable with `rnx skill`. | `skills/*.md`, `src/skills/registry.ts`, `src/skills/types.ts` |
219
219
 
220
220
  ## Getting started
221
221
 
@@ -245,7 +245,7 @@ The `rnxsim` npm package contains bundler plugins and library exports, not a CLI
245
245
  binary. Start your Metro, Expo, or One dev server the way you already do, then
246
246
  open it from the CLI. There is no iOS native build in the inner loop; Metro alone is
247
247
  enough. The manifest bundle path and query remain authoritative. When both the
248
- discovery request and manifest target are loopback addresses, RNX keeps the
248
+ discovery request and manifest target are loopback addresses, Peach keeps the
249
249
  loopback host that answered discovery so an IPv6-only listener is not reopened
250
250
  through an unreachable IPv4 address. `rnx open` starts a local bridge when no
251
251
  daemon is reachable. The background service is strongly recommended for local
@@ -253,7 +253,7 @@ agent work because inspect, interaction, and test commands reuse one ready bridg
253
253
  and runtime. Enable it at any time with `rnx daemon install`; it is never required
254
254
  in CI. The packaged Desktop app is optional and available through first-run
255
255
  onboarding or `rnx desktop install`. A downloaded app starts its own bundled
256
- daemon on first launch, then offers **Install the rnx command** over the running
256
+ daemon on first launch, then offers **Install the Peach command** over the running
257
257
  simulator. That action installs `~/.local/bin/rnx`, updates shell startup, and
258
258
  hands the daemon to launchd or systemd without reloading the window. Windows
259
259
  keeps the desktop-owned daemon because it has no daemon service yet. Native Electron windows created by `rnx open` belong to that CLI
@@ -264,7 +264,7 @@ window for a selected device (same device list as the `Window >` menu).
264
264
 
265
265
  ### Privacy
266
266
 
267
- rnx sends no analytics, crash report, command event, app data, project data, or
267
+ Peach sends no analytics, crash report, command event, app data, project data, or
268
268
  identity by default. An unsigned-in interactive run may request the runtime it
269
269
  is about to execute and the stable standalone CLI version document. The latter
270
270
  runs after the command in a detached process at most once every 20 hours and can
@@ -275,7 +275,7 @@ consuming the later human choice. Legacy browser and Electron telemetry senders
275
275
  are removed rather than being enabled by this consent.
276
276
 
277
277
  Opt-in diagnostics are limited to package name/version/unsupported API or error
278
- class. rnx never sends source, file paths, project names, app content, commands,
278
+ class. Peach never sends source, file paths, project names, app content, commands,
279
279
  identity, screenshots, or recordings as diagnostics. Cloud commands such as
280
280
  login, upload, billing, issue reporting, generated flows, and screenshot decks
281
281
  contact their documented service only when explicitly invoked. The complete
@@ -335,7 +335,7 @@ For One's `nativeTransformModules`, export
335
335
 
336
336
  ## CLI
337
337
 
338
- The CLI is the primary debugging surface for rnx — use it first for runtime
338
+ The CLI is the primary debugging surface for Peach — use it first for runtime
339
339
  inspection, interaction, animation debugging, shell tracing, screenshots, and
340
340
  flow capture, not just as a test runner.
341
341
 
@@ -381,7 +381,7 @@ rnx do tap email --then type user@example.com --then tap submit
381
381
 
382
382
  ## Bundler plugins (`rnxsim/vite` and `rnxsim/metro`)
383
383
 
384
- The Vite plugin serves the installed RNX runtime from your existing dev server.
384
+ The Vite plugin serves the installed Peach runtime from your existing dev server.
385
385
 
386
386
  ```ts
387
387
  // vite.config.ts
@@ -402,10 +402,10 @@ const config = getDefaultConfig(__dirname)
402
402
  module.exports = withRNX(config)
403
403
  ```
404
404
 
405
- rnx works directly with regular, unannotated Metro production JavaScript bundles
405
+ Peach works directly with regular, unannotated Metro production JavaScript bundles
406
406
  out of the box. It identifies modules by matching package graph fingerprints
407
407
  against a separately updated, integrity-checked registry. Hermes bytecode is not
408
- a supported input; pass rnx the JavaScript bundle produced before Hermes
408
+ a supported input; pass Peach the JavaScript bundle produced before Hermes
409
409
  compilation.
410
410
 
411
411
  If an app has unusual dependencies or fingerprint inference fails, you can
@@ -417,7 +417,7 @@ options and enables two integrations:
417
417
  bundle. Resolution, transforms, minification, and source maps stay the app's
418
418
  own, so the annotated bundle is the exact bundle you ship: the footer assigns
419
419
  one unused global on a device, and Hermes drops it during bytecode compilation.
420
- 2. **In-browser dev shell:** serves the rnx simulator shell at `/__soot/` on
420
+ 2. **In-browser dev shell:** serves the Peach simulator shell at `/__soot/` on
421
421
  the Metro dev server.
422
422
 
423
423
  The URL helpers request ordinary Metro graphs: `dev=false&minify=true` for
@@ -439,8 +439,8 @@ const developmentUrl = toRNXDevelopmentBundleUrl(
439
439
 
440
440
  ## Coming from Detox
441
441
 
442
- rnx ships a drop-in Detox driver. Existing Detox test files
443
- (`import { by, element, expect, device } from 'detox'`) run against rnx with
442
+ Peach ships a drop-in Detox driver. Existing Detox test files
443
+ (`import { by, element, expect, device } from 'detox'`) run against Peach with
444
444
  no code changes — just add one line to your jest config:
445
445
 
446
446
  ```js
@@ -459,7 +459,7 @@ See `../../docs/migrating-from-detox.md` for details.
459
459
 
460
460
  ## Coming from Maestro
461
461
 
462
- Maestro is rnx's single YAML test surface. Point it at your existing
462
+ Maestro is Peach's single YAML test surface. Point it at your existing
463
463
  `.maestro/` directory, generate a test, or author one from live actions:
464
464
 
465
465
  ```sh
@@ -489,7 +489,7 @@ rnx screenshot --with-frame --output /tmp/rnx-framed.png
489
489
  rnx record --duration 5 --output /tmp/rnx-anim.mp4
490
490
  ```
491
491
 
492
- `rnx screenshot --with-frame` composes the real rnx shell device chrome
492
+ `rnx screenshot --with-frame` composes the real Peach shell device chrome
493
493
  around the raw screen bitmap (reusing the shell bezel/button geometry, excluding
494
494
  the Electron top bar, rail gutter, and other window chrome). Flows can request
495
495
  the framed export inline without changing Maestro syntax:
@@ -553,7 +553,7 @@ frame for quick art-direction passes.
553
553
 
554
554
  ## Skills registry
555
555
 
556
- `rnx skill install` installs rnx agent skills in the standard
556
+ `rnx skill install` installs Peach agent skills in the standard
557
557
  `<skill-name>/SKILL.md` layout used by Codex and Claude Code. The bundled
558
558
  skills cover setup, debugging/perf/accessibility, testing, visual review, and
559
559
  the generated `contrast` command index. The published CLI registry and generated
@@ -568,10 +568,10 @@ When command docs or examples drift, update `packages/rnx-skills/` and run:
568
568
  bun run generate:sootsim-docs
569
569
  ```
570
570
 
571
- ## Runtime delivery (the rnx home and CDN)
571
+ ## Runtime delivery (the Peach home and CDN)
572
572
 
573
573
  The engine never ships inside this package. `runtime-delivery.ts` names
574
- rnx's CDN origin (default `https://contrast.dev`, overridable in
574
+ Peach's CDN origin (default `https://contrast.dev`, overridable in
575
575
  `config.json`), its `SOOTSIM_*` env overrides, and its hosted paths, then hands
576
576
  them to the shared delivery machinery in `@contrast/runtime-delivery` — an
577
577
  internal workspace package the CLI bundles, so a published install has it
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var REFUSED_PERFORM_STEP_TYPES = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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;
@@ -5008,7 +5008,7 @@ var init_supported_native_packages = __esm({
5008
5008
  "expo-store-review",
5009
5009
  // visual-proof+coverage
5010
5010
  "expo-symbols",
5011
- // preset+coverage
5011
+ // coverage
5012
5012
  "expo-system-ui",
5013
5013
  // seam+coverage
5014
5014
  "expo-task-manager",
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/swift-submit.ts
4
4
  var SWIFT_COMPILE_PATH = "/api/swift-compile";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.559 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.561 | (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.559",
3
+ "version": "0.1.561",
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",
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: contrast
3
3
  description: >-
4
- index of all Contrast and rnx agent skills and CLI commands.
4
+ index of all Contrast and Peach agent skills and CLI commands.
5
5
  auto-generated from the CLI info registry — do not edit by hand.
6
6
  ---
7
7
 
@@ -12,7 +12,7 @@ overview of all available skills and CLI commands in this repo.
12
12
  > this file is auto-generated by `bun scripts/generate-contrast-skill.ts`.
13
13
  > to update, edit the source registries and re-run the generator.
14
14
 
15
- ## rnx CLI commands
15
+ ## Peach CLI commands
16
16
 
17
17
  the `rnx` CLI is the operational surface for booting shells, driving
18
18
  automation, inspecting the render tree, and managing sims.
@@ -87,17 +87,17 @@ run `rnx --help` to see the full list under each group.
87
87
  - `-t, --theme <scheme>` — override light, dark, or auto color scheme
88
88
  - `--headless` — run browser automation without a visible window where supported
89
89
 
90
- ## bundled rnx agent skills
90
+ ## bundled Peach agent skills
91
91
 
92
- skills for working with the rnx native preview engine:
92
+ skills for working with the Peach native preview engine:
93
93
 
94
94
  | skill | description |
95
95
  | --- | --- |
96
- | `/rnx-debug` | Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under rnx. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the rnx CLI debug tooling first, not screenshots or ad-hoc logging. |
97
- | `/rnx-perf` | Optimize rnx engine and app performance — scroll jank, dropped frames, slow animation, idle CPU, memory growth, and "smooth normally but laggy under load" (video calls, busy machines). Covers measuring on the right thread with the right browser, proving each perf tier actually engages via its counters, a CPU-contention test harness, and the map of existing perf machinery so you improve it instead of reinventing it. For general app debugging load /rnx-debug first. |
98
- | `/rnx-setup` | Get rnx connected to your React Native app with no project setup |
99
- | `/rnx-test` | Run automated tests against your React Native app under rnx with Maestro YAML or Detox/Jest |
100
- | `/rnx-visual` | Pixel-level rendering comparison between rnx and native iOS — fonts, gradients, shadows, image fidelity |
96
+ | `/rnx-debug` | Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under Peach. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the rnx CLI debug tooling first, not screenshots or ad-hoc logging. |
97
+ | `/rnx-perf` | Optimize Peach engine and app performance — scroll jank, dropped frames, slow animation, idle CPU, memory growth, and "smooth normally but laggy under load" (video calls, busy machines). Covers measuring on the right thread with the right browser, proving each perf tier actually engages via its counters, a CPU-contention test harness, and the map of existing perf machinery so you improve it instead of reinventing it. For general app debugging load /rnx-debug first. |
98
+ | `/rnx-setup` | Get Peach connected to your React Native app with no project setup |
99
+ | `/rnx-test` | Run automated tests against your React Native app under Peach with Maestro YAML or Detox/Jest |
100
+ | `/rnx-visual` | Pixel-level rendering comparison between Peach and native iOS — fonts, gradients, shadows, image fidelity |
101
101
 
102
102
  ## automatic settling
103
103
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: rnx-debug
3
- description: Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under rnx. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the rnx CLI debug tooling first, not screenshots or ad-hoc logging.
3
+ description: Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under Peach. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the rnx CLI debug tooling first, not screenshots or ad-hoc logging.
4
4
  ---
5
5
 
6
- # rnx debug
6
+ # Peach debug
7
7
 
8
- the foundational skill for "something is wrong with my app in rnx".
8
+ the foundational skill for "something is wrong with my app in Peach".
9
9
  covers debugging, performance, and accessibility — three branches that
10
10
  share the same CLI primitives, the same auto-settling contract, and the
11
11
  same diff/snapshot workflow. start here for any rendering, interaction,
@@ -49,7 +49,7 @@ regression test. a pile of ad-hoc logs helps no one and gets deleted.
49
49
 
50
50
  ## anti-patterns (apply to every branch)
51
51
 
52
- - **`a1`/`a2`/`b0` style ids mean rnx sims, never browser tabs.** when a user
52
+ - **`a1`/`a2`/`b0` style ids mean Peach sims, never browser tabs.** when a user
53
53
  says "look at a3", that's the `rnx list` sim id. do not open chrome
54
54
  MCP unless the user explicitly says "use chrome" — the canvas has no
55
55
  DOM to inspect anyway.
@@ -84,7 +84,7 @@ regression test. a pile of ad-hoc logs helps no one and gets deleted.
84
84
  - **after an unexplained restart, re-establish which sim you are on.** a sim
85
85
  that reconnected, or a dev stack that came back on a port another process now
86
86
  holds, is a fresh instrument; a port answering 200 says something is
87
- listening, not that it is yours. every rnx command prints its own `→ <sim>`
87
+ listening, not that it is yours. every Peach command prints its own `→ <sim>`
88
88
  line, so reading that line is the check.
89
89
 
90
90
  ## the timeline ("what happened")
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: rnx-perf
3
- description: Optimize rnx engine and app performance — scroll jank, dropped frames, slow animation, idle CPU, memory growth, and "smooth normally but laggy under load" (video calls, busy machines). Covers measuring on the right thread with the right browser, proving each perf tier actually engages via its counters, a CPU-contention test harness, and the map of existing perf machinery so you improve it instead of reinventing it. For general app debugging load /rnx-debug first.
3
+ description: Optimize Peach engine and app performance — scroll jank, dropped frames, slow animation, idle CPU, memory growth, and "smooth normally but laggy under load" (video calls, busy machines). Covers measuring on the right thread with the right browser, proving each perf tier actually engages via its counters, a CPU-contention test harness, and the map of existing perf machinery so you improve it instead of reinventing it. For general app debugging load /rnx-debug first.
4
4
  ---
5
5
 
6
- # rnx performance
6
+ # Peach performance
7
7
 
8
- optimize performance in rnx: the shell frame pipeline, the compositor
8
+ optimize performance in Peach: the shell frame pipeline, the compositor
9
9
  tiers, and the guest app. this skill exists because every real perf win in
10
10
  this engine followed the same loop — measure on the right thread, read the
11
11
  counters that prove machinery engaged, fix the one thing the counters
@@ -384,7 +384,7 @@ tier fire on feeds came entirely from rejection counters.
384
384
  - `Animated.Value` on `width`/`height` forces layout per frame — use
385
385
  `transform` (scale/translate).
386
386
  - per-frame React work from reanimated-style code is an engine conformance
387
- bug (valid worklet apps must not commit per frame) — fix rnx core,
387
+ bug (valid worklet apps must not commit per frame) — fix Peach core,
388
388
  never add a divergent fast-path (upstream alignment overrides perf; see
389
389
  the `shouldFreezeOffscreenStackContent` incident).
390
390
  - render-storm loops (poll → remount) show up as commit-rate repaints and
@@ -396,4 +396,4 @@ done means: a named hot path + the counter or split that indicts it + the
396
396
  same capture re-run showing the number moved + no new errors (`get errors`)
397
397
  + nothing torn down left running (close sims you opened, kill load loops).
398
398
  for engine changes, run the affected integration tests exposed by the installed
399
- rnx version and capture stable screenshots of surfaces you touched.
399
+ Peach version and capture stable screenshots of surfaces you touched.
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: rnx-setup
3
- description: Get rnx connected to your React Native app with no project setup
3
+ description: Get Peach connected to your React Native app with no project setup
4
4
  ---
5
5
 
6
- # rnx setup
6
+ # Peach setup
7
7
 
8
- you want to drive a React Native app with rnx from the CLI. this skill
8
+ you want to drive a React Native app with Peach from the CLI. this skill
9
9
  takes you from a running development server to a connected, pinned sim that
10
- every other rnx skill assumes exists. rnx requires no project setup or per-app
10
+ every other Peach skill assumes exists. Peach requires no project setup or per-app
11
11
  install. if
12
12
  `rnx describe` already
13
13
  returns a tree, you're past this skill — load `/rnx-debug` for
@@ -21,7 +21,7 @@ debugging or `/rnx-test` for writing tests.
21
21
  - **don't switch sims mid-investigation.** pin once with `rnx use
22
22
  <id>` and keep it pinned. an unpinned command refuses to choose when more
23
23
  than one driveable sim is live.
24
- - **an empty `rnx list` is not "broken rnx".** it usually means the
24
+ - **an empty `rnx list` is not "broken Peach".** it usually means the
25
25
  daemon is down, the dev server port is wrong, or the runtime is missing.
26
26
  walk the recovery checklist before reinstalling.
27
27
  - **keep one sim for your whole session.** the first `rnx open <port>`
@@ -53,7 +53,7 @@ debugging or `/rnx-test` for writing tests.
53
53
  - **never retry-loop `rnx open` against a wedged or slow stack.** a
54
54
  connect timeout means diagnose the stack. do not retry. if the first launch
55
55
  never connects, each retry can create another browser tree before there is a
56
- saved sim to reuse. verify the development server and rnx runtime, then
56
+ saved sim to reuse. verify the development server and Peach runtime, then
57
57
  retry once after fixing the cause.
58
58
 
59
59
  ## first move
@@ -69,7 +69,7 @@ rnx describe # smoke test — should print a render tree
69
69
  ```
70
70
 
71
71
  the background service keeps the local bridge and runtime ready between
72
- commands. without it, rnx still works by starting an on-demand bridge, but
72
+ commands. without it, Peach still works by starting an on-demand bridge, but
73
73
  inspect, interaction, and test commands pay repeated startup cost. if the user
74
74
  declined it during onboarding, `rnx daemon install` is the direct way to enable
75
75
  it. CI does not need or install the service.
@@ -100,8 +100,8 @@ rnx open https://my-app.local # load a hosted bundle
100
100
  ## compatibility feedback requires approval
101
101
 
102
102
  run `rnx compat --json` from the app project root during setup. if the scan
103
- identifies a plausible missing rnx seam, or the running app gives concrete
104
- evidence that behavior is missing or broken specifically in rnx, summarize
103
+ identifies a plausible missing Peach seam, or the running app gives concrete
104
+ evidence that behavior is missing or broken specifically in Peach, summarize
105
105
  the package, expected behavior, actual behavior, and runtime evidence for the
106
106
  user. then offer to send that finding with `rnx report-issue`.
107
107
 
@@ -133,7 +133,7 @@ if the daemon is not installed: run `rnx daemon install`. if the registered
133
133
  daemon is down, run `rnx daemon restart`, or `rnx serve` in another shell for
134
134
  a foreground bridge. if no runtime is installed, `rnx open` installs it
135
135
  before launching. if open errors with "port unreachable": confirm your dev
136
- server is actually serving — the bundler has to be up before rnx can
136
+ server is actually serving — the bundler has to be up before Peach can
137
137
  attach.
138
138
 
139
139
  **two sims appear unexpectedly.** an earlier `rnx claim` didn't
@@ -151,7 +151,7 @@ Run `rnx runtime install`, then retry `rnx open <port>`.
151
151
  do not retry in a loop. verify the development server first: `__soot/` must
152
152
  respond and the engine watchers must be running. inspect the driver diagnostic
153
153
  path printed by the failed command. restart the broken development stack at its
154
- supervisor, then retry once. rnx owns the isolated browser profile and its
154
+ supervisor, then retry once. Peach owns the isolated browser profile and its
155
155
  process tree; do not open the shell URL through an operating-system browser.
156
156
 
157
157
  **bridge disconnects mid-sim.** the WebSocket dropped (laptop slept,
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: rnx-test
3
- description: Run automated tests against your React Native app under rnx with Maestro YAML or Detox/Jest
3
+ description: Run automated tests against your React Native app under Peach with Maestro YAML or Detox/Jest
4
4
  ---
5
5
 
6
- # rnx tests
6
+ # Peach tests
7
7
 
8
- rnx has two test runners. Maestro owns every YAML test, whether it was
8
+ Peach has two test runners. Maestro owns every YAML test, whether it was
9
9
  hand-authored, generated from a goal, or recorded from live CLI actions.
10
- Detox runs existing imperative Jest suites through the rnx driver.
10
+ Detox runs existing imperative Jest suites through the Peach driver.
11
11
 
12
12
  > needs a connected, pinned sim. if `rnx describe` errors, load
13
13
  > `/rnx-setup` first.
@@ -165,7 +165,7 @@ rnx maestro test .maestro/login.yaml
165
165
  ```
166
166
 
167
167
  no test rewrites, no detox config, no simulator. the runtime auto-launches
168
- an rnx shell if one isn't running.
168
+ a Peach shell if one isn't running.
169
169
 
170
170
  ```sh
171
171
  rnx maestro # auto-discover .maestro/ or maestro/
@@ -190,10 +190,10 @@ interpolation.
190
190
 
191
191
  ### partial
192
192
 
193
- - `clearKeychain` — no keychain in rnx; logs a warning and continues.
193
+ - `clearKeychain` — no keychain in Peach; logs a warning and continues.
194
194
  if a test depends on keychain state being reset, add an explicit
195
195
  in-app "sign out" step instead.
196
- - `when.platform` — rnx emulates iOS; android branches are skipped.
196
+ - `when.platform` — Peach emulates iOS; android branches are skipped.
197
197
  - `openLink`: app routing works; there is no OS-level browser fallback.
198
198
 
199
199
  `stopApp` keeps the guest runtime stopped. The next `launchApp` starts a fresh
@@ -216,7 +216,7 @@ these throw `unsupported maestro verb: X`:
216
216
  - **"missing environment variable for flow placeholder: FOO"** — pass
217
217
  `--env FOO=bar` or export it. pick one mechanism per repo and document
218
218
  it in the flow directory's README.
219
- - **flow can't find an element** — rnx's matcher uses testID + visible
219
+ - **flow can't find an element** — Peach's matcher uses testID + visible
220
220
  text. UIKit-only labels that real maestro scrapes from the host OS won't
221
221
  resolve here; switch to testID.
222
222
  - **flow runs but nothing renders** — confirm the bundler your flow
@@ -225,7 +225,7 @@ these throw `unsupported maestro verb: X`:
225
225
 
226
226
  ## branch — detox drop-in
227
227
 
228
- an existing detox suite runs against rnx with **one line** of jest
228
+ an existing detox suite runs against Peach with **one line** of jest
229
229
  config and zero test changes.
230
230
 
231
231
  `import { by, device, element, expect, waitFor } from 'detox'` is
@@ -271,7 +271,7 @@ rnx detox init # scaffold config + e2e/example.test.ts
271
271
 
272
272
  ### compat surface
273
273
 
274
- | detox API | rnx |
274
+ | detox API | Peach |
275
275
  | ---------------------------------- | ------- |
276
276
  | `element(by.id(...))` | supported |
277
277
  | `element(by.text(...))` | supported — but prefer `by.id` |
@@ -291,7 +291,7 @@ rnx detox init # scaffold config + e2e/example.test.ts
291
291
 
292
292
  ### troubleshooting
293
293
 
294
- - **"no rnx shell reachable"** — start one yourself
294
+ - **"no Peach shell reachable"** — start one yourself
295
295
  (`rnx open <port>`) or pass `--port <n>`.
296
296
  - **"jest cannot find module 'detox'"** — the preset isn't wired. confirm
297
297
  `preset: 'rnxsim/detox'` is in the jest config jest
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: rnx-visual
3
- description: Pixel-level rendering comparison between rnx and native iOS — fonts, gradients, shadows, image fidelity
3
+ description: Pixel-level rendering comparison between Peach and native iOS — fonts, gradients, shadows, image fidelity
4
4
  ---
5
5
 
6
- # rnx visual fidelity
6
+ # Peach visual fidelity
7
7
 
8
- pixel-level rendering fidelity: does the rnx canvas match native iOS
8
+ pixel-level rendering fidelity: does the Peach canvas match native iOS
9
9
  for text, gradients, shadows, blur, and image rendering? the `rnx`
10
10
  CLI gives you two primitives — **canvas capture** (`rnx screenshot`)
11
11
  and **structural diff** (`rnx debug snapshot`/`diff`). pixel
@@ -23,7 +23,7 @@ the capture step is the hard part and it's fully reproducible.
23
23
  diff` is faster, deterministic, and tells you *why*.
24
24
  - visual change (color, gradient, shadow, font metric, blur, image)? →
25
25
  continue here.
26
- - comparing rnx to your iOS simulator for fidelity? → continue.
26
+ - comparing Peach to your iOS simulator for fidelity? → continue.
27
27
  - regressing your own app against itself across commits? → continue.
28
28
 
29
29
  ## anti-patterns (read first)
@@ -64,7 +64,7 @@ screen you want to inspect and capture it with a distinct output filename.
64
64
 
65
65
  capture both sides to PNGs, then diff with any standard image tool.
66
66
 
67
- **rnx vs rnx (regression across your own commits):**
67
+ **Peach vs Peach (regression across your own commits):**
68
68
 
69
69
  ```sh
70
70
  rnx screenshot -o before.png # baseline, before your change
@@ -74,7 +74,7 @@ npx pixelmatch before.png after.png diff.png 0.1 # writes diff.png
74
74
  # or: magick compare before.png after.png diff.png
75
75
  ```
76
76
 
77
- **rnx vs native iOS (fidelity to the real thing):**
77
+ **Peach vs native iOS (fidelity to the real thing):**
78
78
 
79
79
  ```sh
80
80
  # native side: lifecycle and UI use xcodebuildmcp with one claimed simulator