peachsim 0.1.571 → 0.1.573

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 (235) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +106 -106
  3. package/cli/app-config.ts +1 -1
  4. package/cli/app-fonts.ts +4 -4
  5. package/cli/auth.ts +11 -11
  6. package/cli/bin.ts +4 -4
  7. package/cli/bridge-flow-runner.ts +13 -13
  8. package/cli/browser-evals.ts +2 -2
  9. package/cli/cli-update.ts +6 -6
  10. package/cli/cloud-client.ts +16 -16
  11. package/cli/cloud-dispatch.ts +2 -2
  12. package/cli/cloud-session.ts +12 -12
  13. package/cli/cloud-test-tunnel.ts +4 -4
  14. package/cli/command-registry.ts +7 -7
  15. package/cli/commands/agent-wrapper.ts +7 -7
  16. package/cli/commands/agent.ts +16 -16
  17. package/cli/commands/app-fonts.ts +3 -3
  18. package/cli/commands/assert.ts +10 -10
  19. package/cli/commands/auth.ts +5 -5
  20. package/cli/commands/box/checkout-plane.ts +1 -1
  21. package/cli/commands/box/plane-share.ts +2 -2
  22. package/cli/commands/box/rnx-command.ts +5 -5
  23. package/cli/commands/box.ts +38 -38
  24. package/cli/commands/camera.ts +13 -13
  25. package/cli/commands/cleanup.ts +13 -13
  26. package/cli/commands/compat.ts +7 -7
  27. package/cli/commands/config.ts +5 -5
  28. package/cli/commands/control.ts +63 -63
  29. package/cli/commands/cpu-profile.ts +11 -11
  30. package/cli/commands/daemon-mac-app.ts +10 -10
  31. package/cli/commands/daemon.ts +29 -27
  32. package/cli/commands/debug.ts +35 -35
  33. package/cli/commands/desktop.ts +3 -3
  34. package/cli/commands/detox.ts +33 -33
  35. package/cli/commands/device.ts +9 -9
  36. package/cli/commands/diagnose.ts +17 -17
  37. package/cli/commands/do-chain.ts +4 -4
  38. package/cli/commands/electron.ts +9 -9
  39. package/cli/commands/film.ts +9 -9
  40. package/cli/commands/flow.ts +49 -49
  41. package/cli/commands/inspect/core.ts +12 -12
  42. package/cli/commands/inspect/count.ts +1 -1
  43. package/cli/commands/inspect/describe.ts +1 -1
  44. package/cli/commands/inspect/env.ts +2 -2
  45. package/cli/commands/inspect/find.ts +2 -2
  46. package/cli/commands/inspect/get-layout.ts +2 -2
  47. package/cli/commands/inspect/keyboard.ts +1 -1
  48. package/cli/commands/inspect/list.ts +4 -4
  49. package/cli/commands/inspect/memory.ts +1 -1
  50. package/cli/commands/inspect/resolve-target.ts +1 -1
  51. package/cli/commands/inspect/screens.ts +1 -1
  52. package/cli/commands/inspect/shared.ts +1 -1
  53. package/cli/commands/inspect/tree.ts +1 -1
  54. package/cli/commands/inspect/url.ts +1 -1
  55. package/cli/commands/inspect/wait-event.ts +5 -5
  56. package/cli/commands/inspect.ts +82 -82
  57. package/cli/commands/install-cli.ts +16 -16
  58. package/cli/commands/install-desktop.ts +26 -26
  59. package/cli/commands/login.ts +11 -11
  60. package/cli/commands/maestro-generate.ts +10 -10
  61. package/cli/commands/maestro.ts +77 -67
  62. package/cli/commands/mode.ts +4 -4
  63. package/cli/commands/no-bridge-hint.ts +12 -12
  64. package/cli/commands/perf.ts +11 -11
  65. package/cli/commands/permissions.ts +5 -5
  66. package/cli/commands/platform.ts +21 -21
  67. package/cli/commands/preview.ts +5 -5
  68. package/cli/commands/profile.ts +12 -12
  69. package/cli/commands/react.ts +15 -15
  70. package/cli/commands/record.ts +31 -31
  71. package/cli/commands/report-issue.ts +4 -4
  72. package/cli/commands/reset.ts +2 -2
  73. package/cli/commands/runtime.ts +23 -23
  74. package/cli/commands/screenshot-command.ts +2 -2
  75. package/cli/commands/screenshot-layers.ts +5 -5
  76. package/cli/commands/screenshot-mode.ts +7 -7
  77. package/cli/commands/screenshot.ts +24 -24
  78. package/cli/commands/screenshots-capture.ts +13 -13
  79. package/cli/commands/screenshots.ts +6 -6
  80. package/cli/commands/serve.ts +12 -12
  81. package/cli/commands/setup.ts +25 -25
  82. package/cli/commands/skills.ts +30 -23
  83. package/cli/commands/slides.ts +20 -20
  84. package/cli/commands/state.ts +2 -2
  85. package/cli/commands/storage.ts +3 -3
  86. package/cli/commands/telemetry.ts +2 -2
  87. package/cli/commands/test.ts +15 -15
  88. package/cli/commands/three-mode.ts +17 -17
  89. package/cli/commands/timeline.ts +12 -12
  90. package/cli/commands/upgrade.ts +11 -11
  91. package/cli/commands/upload.ts +26 -26
  92. package/cli/commands/version.ts +7 -7
  93. package/cli/commands/what-happened.ts +20 -20
  94. package/cli/current-sim.ts +3 -3
  95. package/cli/desktop-companion.ts +16 -16
  96. package/cli/drivers/electron.ts +4 -4
  97. package/cli/drivers/playwright-sim-host.ts +7 -7
  98. package/cli/drivers/playwright.ts +4 -4
  99. package/cli/drivers/registry.ts +1 -1
  100. package/cli/drivers/types.ts +5 -5
  101. package/cli/flow-export.ts +1 -1
  102. package/cli/flow-file.ts +5 -5
  103. package/cli/flow-session.ts +1 -1
  104. package/cli/help-core.ts +13 -13
  105. package/cli/hints.ts +14 -14
  106. package/cli/inspect-notice-state.ts +1 -1
  107. package/cli/internal-child.ts +2 -2
  108. package/cli/maestro-js.ts +4 -4
  109. package/cli/maestro-report.ts +1 -1
  110. package/cli/main.ts +14 -14
  111. package/cli/outbound-endpoints.ts +30 -30
  112. package/cli/parse-args.ts +7 -7
  113. package/cli/privacy.ts +1 -1
  114. package/cli/recording-access.ts +10 -10
  115. package/cli/resolve-assets.ts +2 -2
  116. package/cli/rnx-in-process.ts +5 -5
  117. package/cli/run-registry.ts +1 -1
  118. package/cli/run-rnx-core.ts +3 -3
  119. package/cli/run-rnx.ts +1 -1
  120. package/cli/runtime-notes.ts +1 -1
  121. package/cli/self-invocation.ts +1 -1
  122. package/cli/send-to-box.ts +1 -1
  123. package/cli/shell-init.ts +40 -40
  124. package/cli/ui.ts +1 -1
  125. package/cli/ws-bridge.ts +22 -22
  126. package/detox/config-loader.ts +1 -1
  127. package/detox/index.ts +28 -28
  128. package/detox/navigation.ts +2 -2
  129. package/dist-lib/agent-daemon-client.cjs +12 -12
  130. package/dist-lib/agent-events.cjs +1 -1
  131. package/dist-lib/agent-identity.cjs +2 -2
  132. package/dist-lib/agent-sessions.cjs +12 -12
  133. package/dist-lib/attached-projects.cjs +4 -4
  134. package/dist-lib/auth/shared-session.cjs +4 -4
  135. package/dist-lib/backend-origin.cjs +1 -1
  136. package/dist-lib/beta.cjs +1 -1
  137. package/dist-lib/beta.mjs +1 -1
  138. package/dist-lib/bridge-constants.cjs +4 -4
  139. package/dist-lib/bridge-contract-input.cjs +1 -1
  140. package/dist-lib/bridge-contract-input.mjs +1 -1
  141. package/dist-lib/bridge-contract.cjs +2 -2
  142. package/dist-lib/bridge-contract.mjs +2 -2
  143. package/dist-lib/capture-contract.cjs +1 -1
  144. package/dist-lib/capture-contract.mjs +1 -1
  145. package/dist-lib/cli-constants.cjs +1 -1
  146. package/dist-lib/cloud-contract.cjs +1 -1
  147. package/dist-lib/cloud-contract.mjs +1 -1
  148. package/dist-lib/cloud-test-args.cjs +1 -1
  149. package/dist-lib/cloud-test-args.mjs +1 -1
  150. package/dist-lib/cloud.cjs +42 -42
  151. package/dist-lib/cloud.mjs +42 -42
  152. package/dist-lib/config.cjs +2 -2
  153. package/dist-lib/detox/index.cjs +29 -29
  154. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  155. package/dist-lib/home-paths.cjs +12 -12
  156. package/dist-lib/host/bridge-host.cjs +72 -71
  157. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  158. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  159. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  160. package/dist-lib/host/replacement-module-handler.cjs +6 -6
  161. package/dist-lib/host/websocket-proxy.cjs +1 -1
  162. package/dist-lib/index.cjs +48 -48
  163. package/dist-lib/jump-to-source-babel.cjs +1 -1
  164. package/dist-lib/jump-to-source-native.cjs +1 -1
  165. package/dist-lib/menu.cjs +5 -5
  166. package/dist-lib/menu.mjs +5 -5
  167. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  168. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  169. package/dist-lib/metro-production-bundle.cjs +1 -1
  170. package/dist-lib/metro-production-bundle.mjs +1 -1
  171. package/dist-lib/metro.cjs +15 -15
  172. package/dist-lib/profiles.cjs +4 -4
  173. package/dist-lib/public-brand.cjs +3 -3
  174. package/dist-lib/react-native-host-modules.cjs +1 -1
  175. package/dist-lib/react-native-host-modules.mjs +1 -1
  176. package/dist-lib/render-mode.cjs +1 -1
  177. package/dist-lib/scripts/dev-server-scanner.cjs +2 -1
  178. package/dist-lib/sdk.cjs +9 -9
  179. package/dist-lib/sdk.mjs +9 -9
  180. package/dist-lib/skills.cjs +416 -415
  181. package/dist-lib/swift-compile.cjs +1 -1
  182. package/dist-lib/swift-compile.mjs +1 -1
  183. package/dist-lib/swift-package.cjs +1 -1
  184. package/dist-lib/swift-package.mjs +1 -1
  185. package/dist-lib/swift-submit.cjs +1 -1
  186. package/dist-lib/swift-submit.mjs +1 -1
  187. package/dist-lib/swift.cjs +1 -1
  188. package/dist-lib/vite.cjs +24 -24
  189. package/package.json +1 -1
  190. package/scripts/dev-server-scanner.ts +4 -3
  191. package/skills/contrast/SKILL.md +75 -75
  192. package/skills/{rnx-debug → peach-debug}/SKILL.md +90 -90
  193. package/skills/{rnx-perf → peach-perf}/SKILL.md +13 -13
  194. package/skills/{rnx-setup → peach-setup}/SKILL.md +60 -60
  195. package/skills/{rnx-test → peach-test}/SKILL.md +44 -44
  196. package/skills/{rnx-visual → peach-visual}/SKILL.md +26 -26
  197. package/src/agent-daemon-client.ts +5 -5
  198. package/src/agent-events.ts +1 -1
  199. package/src/agent-identity.ts +1 -1
  200. package/src/agent-sessions.ts +13 -13
  201. package/src/attached-projects.ts +1 -1
  202. package/src/auth/shared-session.ts +1 -1
  203. package/src/bridge-constants.ts +3 -3
  204. package/src/bridge-contract-input.ts +1 -1
  205. package/src/bridge-contract.ts +3 -3
  206. package/src/cli-version.ts +6 -6
  207. package/src/cloud.ts +40 -40
  208. package/src/config.ts +1 -1
  209. package/src/connect.ts +6 -6
  210. package/src/dev-server-open.ts +8 -8
  211. package/src/disk-cleanup.ts +3 -3
  212. package/src/home-paths.ts +26 -26
  213. package/src/host/agent-host.ts +3 -3
  214. package/src/host/bridge-host.ts +33 -33
  215. package/src/host/fetch-proxy-handler.ts +1 -1
  216. package/src/host/plane-host.ts +2 -2
  217. package/src/host/replacement-module-handler.ts +2 -2
  218. package/src/menu.ts +2 -2
  219. package/src/metro-plugin.ts +7 -7
  220. package/src/metro-production-bundle.ts +2 -2
  221. package/src/native-dev-bundle-url.ts +2 -2
  222. package/src/playwright-host-log.ts +1 -1
  223. package/src/public-brand.ts +2 -2
  224. package/src/react-native-host-modules.ts +1 -1
  225. package/src/rolldown-plugin-swift.ts +3 -3
  226. package/src/runtime-assets.ts +11 -11
  227. package/src/runtime-delivery.ts +6 -6
  228. package/src/screenshots/orchestrate.ts +1 -1
  229. package/src/screenshots/org-deck.ts +1 -1
  230. package/src/screenshots/schema.ts +2 -2
  231. package/src/sim-client.ts +1 -1
  232. package/src/skills/builtin/compat-check.ts +2 -2
  233. package/src/vite-plugin-one.ts +8 -8
  234. package/src/vite-plugin-swift.ts +3 -3
  235. package/src/vite-plugin.ts +6 -19
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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;
@@ -160,11 +160,11 @@ ${RNXSIM_METRO_SOURCE_MAP_COMMENT}${detached.sourceMappingUrl}`;
160
160
  }
161
161
 
162
162
  // src/public-brand.ts
163
- var name = "rnx";
163
+ var name = "Peach";
164
164
  var rnxPublicBrand = Object.freeze({
165
165
  name,
166
166
  packageName: "peachsim",
167
- commandName: "rnx",
167
+ commandName: "peach",
168
168
  domain: "rnxsim.com",
169
169
  origin: "https://rnxsim.com"
170
170
  });
@@ -173,15 +173,15 @@ var rnxPublicBrand = Object.freeze({
173
173
  var import_node_fs = __toESM(require("node:fs"), 1);
174
174
  var import_node_os = require("node:os");
175
175
  var import_node_path = __toESM(require("node:path"), 1);
176
- var RNX_HOME_ENV = "RNX_HOME";
176
+ var PEACH_HOME_ENV = "PEACH_HOME";
177
177
  var ACTIVE_RUNTIME_FILE = "active";
178
178
  var DAEMON_LOCKFILE = "daemon.json";
179
179
  var DEV_BRIDGES_DIR = "dev-bridges";
180
180
  var DAEMON_HEARTBEAT_STALE_MS = 3e4;
181
181
  function rnxHomeDir() {
182
- const override = process.env[RNX_HOME_ENV];
182
+ const override = process.env[PEACH_HOME_ENV];
183
183
  if (override && override.length > 0) return import_node_path.default.resolve(override);
184
- return import_node_path.default.join((0, import_node_os.homedir)(), ".rnx");
184
+ return import_node_path.default.join((0, import_node_os.homedir)(), ".peach");
185
185
  }
186
186
  function runtimesDir() {
187
187
  return import_node_path.default.join(rnxHomeDir(), "runtimes");
@@ -293,12 +293,12 @@ var import_node_async_hooks = require("node:async_hooks");
293
293
  var sinks = new import_node_async_hooks.AsyncLocalStorage();
294
294
 
295
295
  // cli/auth.ts
296
- var CHOOSE_ACCOUNT_HINT = "this sign-in belongs to several accounts; run `rnx login --account <name>` to choose the one to bill";
296
+ var CHOOSE_ACCOUNT_HINT = "this sign-in belongs to several accounts; run `peach login --account <name>` to choose the one to bill";
297
297
 
298
298
  // cli/cloud-session.ts
299
299
  var CLOUD_SESSION_VERSION = 3;
300
300
  var MAX_ENCODED_SESSION_BYTES = 32 * 1024;
301
- var RNX_CLOUD_SESSION_ENV = "RNX_CLOUD_SESSION";
301
+ var PEACH_CLOUD_SESSION_ENV = "PEACH_CLOUD_SESSION";
302
302
  var RNX_SHELL_UPDATE_PREFIX = "__RNX_SHELL_UPDATE_V1__";
303
303
  var RNX_SHELL_UPDATE_SET_PREFIX = `${RNX_SHELL_UPDATE_PREFIX}set:`;
304
304
  var RNX_SHELL_UPDATE_UNSET = `${RNX_SHELL_UPDATE_PREFIX}unset`;
@@ -363,7 +363,7 @@ function createCloudBoxSession(input) {
363
363
  function parseCloudSession(encoded) {
364
364
  const value = encoded.trim();
365
365
  if (!value || value.length > MAX_ENCODED_SESSION_BYTES || !/^[A-Za-z0-9_-]+$/.test(value)) {
366
- throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
366
+ throw new Error(`${PEACH_CLOUD_SESSION_ENV} is invalid`);
367
367
  }
368
368
  let parsed;
369
369
  try {
@@ -373,14 +373,14 @@ function parseCloudSession(encoded) {
373
373
  }
374
374
  parsed = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
375
375
  } catch {
376
- throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
376
+ throw new Error(`${PEACH_CLOUD_SESSION_ENV} is invalid`);
377
377
  }
378
378
  if (!isRecord(parsed) || parsed.version !== CLOUD_SESSION_VERSION) {
379
- throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
379
+ throw new Error(`${PEACH_CLOUD_SESSION_ENV} is invalid`);
380
380
  }
381
381
  const apiOrigin = parsed.apiOrigin;
382
382
  if (typeof apiOrigin !== "string") {
383
- throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
383
+ throw new Error(`${PEACH_CLOUD_SESSION_ENV} is invalid`);
384
384
  }
385
385
  const platform = parsed.platform === "ios" || parsed.platform === "android" ? parsed.platform : void 0;
386
386
  const device = typeof parsed.device === "string" ? parsed.device : void 0;
@@ -422,11 +422,11 @@ function parseCloudSession(encoded) {
422
422
  boxToken
423
423
  });
424
424
  } catch {
425
- throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
425
+ throw new Error(`${PEACH_CLOUD_SESSION_ENV} is invalid`);
426
426
  }
427
427
  }
428
428
  function readCloudSession(environment = process.env) {
429
- const encoded = environment[RNX_CLOUD_SESSION_ENV];
429
+ const encoded = environment[PEACH_CLOUD_SESSION_ENV];
430
430
  return encoded?.trim() ? parseCloudSession(encoded) : null;
431
431
  }
432
432
 
@@ -625,7 +625,7 @@ var CloudBoxBridge = class {
625
625
  return Promise.resolve(null);
626
626
  }
627
627
  closeSim() {
628
- return Promise.reject(new Error("close a box simulator with rnx box stop"));
628
+ return Promise.reject(new Error("close a box simulator with peach box stop"));
629
629
  }
630
630
  claim() {
631
631
  return Promise.reject(
@@ -827,7 +827,7 @@ function writeSecureJsonAtomic(filepath, value) {
827
827
  var CURRENT_SIM_VERSION = 2;
828
828
  var CURRENT_SIM_PATH_ENV = "SOOTSIM_CLI_CURRENT_SIM_PATH";
829
829
  var IDENTITY_ENV_VARS = [
830
- "RNX_CLI_IDENTITY",
830
+ "PEACH_CLI_IDENTITY",
831
831
  // explicit override — fastest path, skips all pid lookups
832
832
  "TM_SESSION",
833
833
  // Team Machine session id; routes prompt-bar followups back to this agent
@@ -895,7 +895,7 @@ function getCurrentSimPath() {
895
895
  return (0, import_path.resolve)(process.env[CURRENT_SIM_PATH_ENV]);
896
896
  }
897
897
  const key = getCliIdentityKey();
898
- return (0, import_path.join)((0, import_os.tmpdir)(), `rnx-current-sim-${key}.json`);
898
+ return (0, import_path.join)((0, import_os.tmpdir)(), `peach-current-sim-${key}.json`);
899
899
  }
900
900
  function legacyCloudCredentialDirectory(filepath) {
901
901
  return (0, import_path.join)((0, import_path.dirname)(filepath), `${(0, import_path.basename)(filepath)}.credentials`);
@@ -1073,7 +1073,7 @@ var BridgeSimLockedError = class extends Error {
1073
1073
  };
1074
1074
  function describeSimIdSource(source) {
1075
1075
  if (source === "flag") return "via --sim";
1076
- if (source === "saved") return "saved via `rnx use`";
1076
+ if (source === "saved") return "saved via `peach use`";
1077
1077
  return "primary fallback \u2014 no sim pinned";
1078
1078
  }
1079
1079
  var BRIDGE_VALUE_FLAGS_TABLE = [
@@ -1094,7 +1094,7 @@ var BRIDGE_VALUE_FLAGS_TABLE = [
1094
1094
  },
1095
1095
  {
1096
1096
  // `--sim` is the canonical target flag; `--session` / `--tab` are
1097
- // documented aliases (CLAUDE.md, the rnx agent skills, and engine docs all
1097
+ // documented aliases (CLAUDE.md, the peach agent skills, and engine docs all
1098
1098
  // say `--session <id>`). without these aliases an agent following the docs
1099
1099
  // would have `--session ef` silently ignored and get the *currently
1100
1100
  // pinned* sim's tree instead — wrong-app data with no error.
@@ -1185,7 +1185,7 @@ function createBridge(wsPort, opts = {}) {
1185
1185
  \u26A0 ${msg._otherCliCount} other CLI identity/identities are driving this sim
1186
1186
  taps, scrolls, and keyboard input from multiple agents will collide on
1187
1187
  the same screen state (this is not a bridge throughput limit).
1188
- use \`rnx open --new\` for an isolated sim per agent.
1188
+ use \`peach open --new\` for an isolated sim per agent.
1189
1189
 
1190
1190
  `
1191
1191
  );
@@ -1289,7 +1289,7 @@ function createBridge(wsPort, opts = {}) {
1289
1289
  }
1290
1290
  clearCurrentSimId();
1291
1291
  throw new Error(
1292
- `saved sim ${sentSimId} is gone${message.slice(missingSimMessage.length)}; run \`rnx list\` and \`rnx use <sim>\`, or open a fresh sim`
1292
+ `saved sim ${sentSimId} is gone${message.slice(missingSimMessage.length)}; run \`peach list\` and \`peach use <sim>\`, or open a fresh sim`
1293
1293
  );
1294
1294
  }
1295
1295
  throw error;
@@ -1339,7 +1339,7 @@ function createBridge(wsPort, opts = {}) {
1339
1339
  }
1340
1340
 
1341
1341
  // src/bridge-contract.ts
1342
- var PUBLIC_NO_NETWORK_MARKER = "public RNX Cloud simulators have no network";
1342
+ var PUBLIC_NO_NETWORK_MARKER = "public Peach Cloud simulators have no network";
1343
1343
  var HEADLESS_TENANT_FETCH_HUNG_MARKER = "headless tenant fetch hung";
1344
1344
 
1345
1345
  // cli/commands/inspect/core.ts
@@ -1688,7 +1688,7 @@ function layoutGetNativeEval(opts = {}) {
1688
1688
 
1689
1689
  const screenshot = window.SootSim && window.SootSim.bridges && window.SootSim.bridges.screenshot
1690
1690
  if (typeof screenshot !== 'function') {
1691
- throw new Error('styled native layout requires the rnx capture bridge')
1691
+ throw new Error('styled native layout requires the peach capture bridge')
1692
1692
  }
1693
1693
  const device = list.find((node) => node && node.device)?.device || {}
1694
1694
  const width = Math.round(Number(device.width) || window.innerWidth || 0)
@@ -1810,7 +1810,7 @@ function waitReadyReason(status) {
1810
1810
  if (status.bridgeError.includes(HEADLESS_TENANT_FETCH_HUNG_MARKER) || status.bridgeError.includes(PUBLIC_NO_NETWORK_MARKER)) {
1811
1811
  return status.bridgeError;
1812
1812
  }
1813
- return `sim unreachable: ${status.bridgeError} \u2014 the target tab is closed or no sim is connected (check \`rnx list\`, reopen with \`rnx open\`)`;
1813
+ return `sim unreachable: ${status.bridgeError} \u2014 the target tab is closed or no sim is connected (check \`peach list\`, reopen with \`peach open\`)`;
1814
1814
  }
1815
1815
  const waitingOnGuestFetch = status.externalReady === false && /https?:\/\//.test(status.externalStatus);
1816
1816
  const base = status.externalError ? `guest app errored: ${status.externalError}` : waitingOnGuestFetch ? `waiting on a guest fetch: ${status.externalStatus}` : status.loadingText ? `still showing "${status.loadingText}"` : status.externalReady === false ? "guest app is still loading" : status.flag !== true && status.targets > 0 ? "native content is rendered but the ready signal has not settled" : status.flag !== true ? "guest app has not emitted sootsim:externalAppReady" : status.targets <= 0 ? "ready flag emitted but no visible app content is inspectable yet" : "node tree is still changing";
@@ -1927,7 +1927,7 @@ async function inspectLogs(bridge) {
1927
1927
  return [
1928
1928
  {
1929
1929
  id: `cloud-${ts}-${index}`,
1930
- source: "rnx-cloud",
1930
+ source: "peach-cloud",
1931
1931
  level,
1932
1932
  ts,
1933
1933
  args: [text],
@@ -1970,7 +1970,7 @@ function filterLogEntries(entries, opts = {}) {
1970
1970
  if (!opts.showInternal) {
1971
1971
  out = out.filter((e) => {
1972
1972
  const first = e.args[0];
1973
- return !(typeof first === "string" && /^\[(?:rnx|sootsim)(?:\s[^\]]*)?\]/.test(first));
1973
+ return !(typeof first === "string" && /^\[(?:peach|sootsim)(?:\s[^\]]*)?\]/.test(first));
1974
1974
  });
1975
1975
  }
1976
1976
  if (opts.level) out = out.filter((e) => opts.level.has(e.level));
@@ -3042,7 +3042,7 @@ function pickSim(sims, wanted, port) {
3042
3042
  const match = open.find((sim) => sim.id === wanted);
3043
3043
  if (!match) {
3044
3044
  throw new SimConnectError(
3045
- `no sim connected with id ${wanted} on bridge :${port}` + (open.length ? ` \u2014 connected: ${open.map((sim) => sim.id).join(", ")}` : " \u2014 no sims connected; open one with `rnx open <port>`")
3045
+ `no sim connected with id ${wanted} on bridge :${port}` + (open.length ? ` \u2014 connected: ${open.map((sim) => sim.id).join(", ")}` : " \u2014 no sims connected; open one with `peach open <port>`")
3046
3046
  );
3047
3047
  }
3048
3048
  return match;
@@ -3055,7 +3055,7 @@ function pickSim(sims, wanted, port) {
3055
3055
  const primary = open.find((sim) => sim.isPrimary) ?? open[0];
3056
3056
  if (!primary) {
3057
3057
  throw new SimConnectError(
3058
- `no sims connected on bridge :${port} \u2014 open one with \`rnx open <port>\``
3058
+ `no sims connected on bridge :${port} \u2014 open one with \`peach open <port>\``
3059
3059
  );
3060
3060
  }
3061
3061
  return primary;
@@ -3084,7 +3084,7 @@ async function connect(options = {}) {
3084
3084
  discovery.close();
3085
3085
  if (error instanceof SimConnectError) throw error;
3086
3086
  const message = error instanceof Error ? error.message : String(error);
3087
- throw new SimConnectError(`${message} \u2014 is the rnx daemon or dev shell running?`);
3087
+ throw new SimConnectError(`${message} \u2014 is the peach daemon or dev shell running?`);
3088
3088
  }
3089
3089
  discovery.close();
3090
3090
  const bridge = createBridge(port, {
@@ -3381,20 +3381,20 @@ function resolveRnxDesktopAppName(open, projectRoot) {
3381
3381
  if (!open) return null;
3382
3382
  if (typeof open === "object") {
3383
3383
  const appName = open.appName.trim();
3384
- if (!appName) throw new Error("rnx: open.appName must not be empty");
3384
+ if (!appName) throw new Error("peach: open.appName must not be empty");
3385
3385
  return appName;
3386
3386
  }
3387
3387
  const packageJsonPath = import_node_path4.default.join(projectRoot, "package.json");
3388
3388
  const packageJson = JSON.parse(import_node_fs4.default.readFileSync(packageJsonPath, "utf8"));
3389
3389
  const packageName = packageJson && typeof packageJson === "object" ? Reflect.get(packageJson, "name") : void 0;
3390
3390
  if (typeof packageName !== "string" || !packageName.trim()) {
3391
- throw new Error(`rnx: ${packageJsonPath} must declare a package name`);
3391
+ throw new Error(`peach: ${packageJsonPath} must declare a package name`);
3392
3392
  }
3393
3393
  return packageName.trim();
3394
3394
  }
3395
3395
  function tagRnxBundleForPlugin(bundleUrl, replacementOrigin, replacementToken, projectRoot, appName) {
3396
3396
  const absolute = /^[a-z][a-z\d+.-]*:\/\//i.test(bundleUrl);
3397
- const url = new URL(bundleUrl, absolute ? void 0 : "http://rnx.local");
3397
+ const url = new URL(bundleUrl, absolute ? void 0 : "http://peach.local");
3398
3398
  if (appName) {
3399
3399
  url.searchParams.set("rnxAppName", appName);
3400
3400
  url.searchParams.set(
@@ -3421,22 +3421,22 @@ function observeRnxDesktopLaunch(child, appName) {
3421
3421
  });
3422
3422
  child.once("error", (error) => {
3423
3423
  spawnFailed = true;
3424
- console.error(`[rnx] could not open ${appName}: ${error.message}`);
3424
+ console.error(`[peach] could not open ${appName}: ${error.message}`);
3425
3425
  });
3426
3426
  child.once("close", (code, signal) => {
3427
3427
  if (spawnFailed) return;
3428
3428
  if (code === 0) {
3429
- console.log(`[rnx] opened ${appName} in the desktop simulator`);
3429
+ console.log(`[peach] opened ${appName} in the desktop simulator`);
3430
3430
  return;
3431
3431
  }
3432
3432
  const detail = stderr.trim() || (signal ? `signal ${signal}` : `exit ${code}`);
3433
- console.error(`[rnx] could not open ${appName}: ${detail}`);
3433
+ console.error(`[peach] could not open ${appName}: ${detail}`);
3434
3434
  });
3435
3435
  }
3436
3436
  function launchRnxDesktop(bundleUrl, appName) {
3437
3437
  const packageRoot = import_node_path4.default.resolve(import_node_path4.default.dirname((0, import_node_url.fileURLToPath)(__sootsim_import_meta_url)), "..");
3438
3438
  const binPath = import_node_path4.default.join(packageRoot, "dist-cli", "bin.js");
3439
- console.log(`[rnx] opening ${appName} in the desktop simulator`);
3439
+ console.log(`[peach] opening ${appName} in the desktop simulator`);
3440
3440
  const child = (0, import_node_child_process.spawn)(
3441
3441
  process.execPath,
3442
3442
  [binPath, ...buildRnxDesktopOpenArgs(bundleUrl)],
@@ -3587,7 +3587,7 @@ function unsupportedSpecifier(specifier) {
3587
3587
  );
3588
3588
  }
3589
3589
  function bridgeDeclaration(name2, specifier) {
3590
- const notReady = (what) => JSON.stringify(`[rnx] replacement ${what} bridge is not ready`);
3590
+ const notReady = (what) => JSON.stringify(`[peach] replacement ${what} bridge is not ready`);
3591
3591
  if (specifier === "react") {
3592
3592
  return `const ${name2} = ${REACT_BRIDGE}; if (!${name2}) throw new Error(${notReady("React")});`;
3593
3593
  }
@@ -3595,12 +3595,12 @@ function bridgeDeclaration(name2, specifier) {
3595
3595
  return `const ${name2} = ${REACT_NATIVE_BRIDGE}; if (!${name2}) throw new Error(${notReady("React Native")});`;
3596
3596
  }
3597
3597
  if (isContrastKitSpecifier(specifier)) {
3598
- return `const ${name2} = (globalThis.__contrast_kit_modules && globalThis.__contrast_kit_modules[${JSON.stringify(specifier)}]) || (${PACKAGE_BRIDGES} || {})[${JSON.stringify(specifier)}]; if (!${name2}) throw new Error(${JSON.stringify(`[rnx] replacement package bridge ${specifier} is not ready`)});`;
3598
+ return `const ${name2} = (globalThis.__contrast_kit_modules && globalThis.__contrast_kit_modules[${JSON.stringify(specifier)}]) || (${PACKAGE_BRIDGES} || {})[${JSON.stringify(specifier)}]; if (!${name2}) throw new Error(${JSON.stringify(`[peach] replacement package bridge ${specifier} is not ready`)});`;
3599
3599
  }
3600
3600
  if (JSX_RUNTIME_SPECIFIERS.has(specifier)) {
3601
3601
  return `const ${name2} = (() => { const react = ${REACT_BRIDGE}; if (!react) throw new Error(${notReady("React")}); const jsx = (type, props, key) => react.createElement(type, key === undefined ? props : { ...props, key }); return { Fragment: react.Fragment, jsx, jsxs: jsx, jsxDEV: jsx }; })();`;
3602
3602
  }
3603
- return `const ${name2} = (${PACKAGE_BRIDGES} || {})[${JSON.stringify(specifier)}]; if (!${name2}) throw new Error(${JSON.stringify(`[rnx] replacement package bridge ${specifier} is not ready`)});`;
3603
+ return `const ${name2} = (${PACKAGE_BRIDGES} || {})[${JSON.stringify(specifier)}]; if (!${name2}) throw new Error(${JSON.stringify(`[peach] replacement package bridge ${specifier} is not ready`)});`;
3604
3604
  }
3605
3605
  var DEFAULT_INTEROP = "__rnxReplacementDefault";
3606
3606
  var DEFAULT_INTEROP_DECLARATION = `const ${DEFAULT_INTEROP} = (bridge) => (bridge && bridge.__esModule ? bridge.default : bridge);`;
@@ -3760,7 +3760,7 @@ function sendJavaScript(req, res, source) {
3760
3760
  function isReplacementModuleRequestUrl(rawUrl) {
3761
3761
  if (!rawUrl) return false;
3762
3762
  try {
3763
- const pathname = new URL(rawUrl, "http://rnx.local").pathname;
3763
+ const pathname = new URL(rawUrl, "http://peach.local").pathname;
3764
3764
  return pathname === REPLACEMENT_MODULE_ROUTE;
3765
3765
  } catch {
3766
3766
  return false;
@@ -3770,7 +3770,7 @@ async function handleReplacementModuleRequest(req, res, options = {}) {
3770
3770
  const rawUrl = req.url || "";
3771
3771
  let url;
3772
3772
  try {
3773
- url = new URL(rawUrl, "http://rnx.local");
3773
+ url = new URL(rawUrl, "http://peach.local");
3774
3774
  } catch {
3775
3775
  return false;
3776
3776
  }
@@ -3876,7 +3876,7 @@ function isValidRuntimeVersion(value) {
3876
3876
  }
3877
3877
 
3878
3878
  // src/runtime-assets.ts
3879
- var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[rnx] no engine runtime installed. run `rnx runtime install`";
3879
+ var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[peach] no engine runtime installed. run `peach runtime install`";
3880
3880
  var _monorepoRootCache;
3881
3881
  function findMonorepoRoot() {
3882
3882
  if (_monorepoRootCache !== void 0) return _monorepoRootCache;
@@ -3892,7 +3892,7 @@ function findMonorepoRoot() {
3892
3892
  return null;
3893
3893
  }
3894
3894
  function resolveDevCheckoutRuntimeRoot() {
3895
- if (process.env.RNX_HOME && readActiveRuntime()) return null;
3895
+ if (process.env.PEACH_HOME && readActiveRuntime()) return null;
3896
3896
  const root = findMonorepoRoot();
3897
3897
  if (!root) return null;
3898
3898
  const devBuild = import_path2.default.join(root, "public/sootsim");
@@ -4156,8 +4156,8 @@ function rnxPlugin(options = {}) {
4156
4156
  });
4157
4157
  const port = configuredPort;
4158
4158
  const sootsimUrl = `http://localhost:${port}${prefix2}/`;
4159
- console.log(`[rnx] serving at ${sootsimUrl}`);
4160
- if (appName && !process.env.CI && !process.env.RNX_NO_OPEN) {
4159
+ console.log(`[peach] serving at ${sootsimUrl}`);
4160
+ if (appName && !process.env.CI && !process.env.PEACH_NO_OPEN) {
4161
4161
  server.httpServer?.once("listening", () => {
4162
4162
  const openPort = listeningPort();
4163
4163
  launchRnxDesktop(
@@ -4280,7 +4280,7 @@ function withRNX(config) {
4280
4280
  try {
4281
4281
  connect2 = require("connect");
4282
4282
  } catch {
4283
- console.warn("[rnx] connect not available");
4283
+ console.warn("[peach] connect not available");
4284
4284
  return middleware;
4285
4285
  }
4286
4286
  const server = connect2();
@@ -4339,7 +4339,7 @@ function withRNX(config) {
4339
4339
  next();
4340
4340
  });
4341
4341
  server.use(middleware);
4342
- console.log(`[rnx] serving at ${prefix}/`);
4342
+ console.log(`[peach] serving at ${prefix}/`);
4343
4343
  return server;
4344
4344
  }
4345
4345
  };
@@ -4356,7 +4356,7 @@ function resolveMetroPort(server) {
4356
4356
  const rawPort = inlinePort || splitPort || process.env.RCT_METRO_PORT || server?.port || 8081;
4357
4357
  const port = Number(rawPort);
4358
4358
  if (!Number.isInteger(port) || port <= 0) {
4359
- throw new Error(`rnx: Metro port must be a positive integer, got ${rawPort}`);
4359
+ throw new Error(`peach: Metro port must be a positive integer, got ${rawPort}`);
4360
4360
  }
4361
4361
  return port;
4362
4362
  }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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;
@@ -42,11 +42,11 @@ __export(menu_exports, {
42
42
  module.exports = __toCommonJS(menu_exports);
43
43
 
44
44
  // src/public-brand.ts
45
- var name = "rnx";
45
+ var name = "Peach";
46
46
  var rnxPublicBrand = Object.freeze({
47
47
  name,
48
48
  packageName: "peachsim",
49
- commandName: "rnx",
49
+ commandName: "peach",
50
50
  domain: "rnxsim.com",
51
51
  origin: "https://rnxsim.com"
52
52
  });
@@ -129,7 +129,7 @@ function appMenu() {
129
129
  },
130
130
  { type: "separator" },
131
131
  {
132
- label: "Hide rnx",
132
+ label: `Hide ${rnxPublicBrand.name}`,
133
133
  accelerator: "CmdOrCtrl+H",
134
134
  action: "hide",
135
135
  hiddenIn: "browser"
@@ -143,7 +143,7 @@ function appMenu() {
143
143
  { label: "Show All", action: "unhide", hiddenIn: "browser" },
144
144
  { type: "separator" },
145
145
  {
146
- label: "Quit rnx",
146
+ label: `Quit ${rnxPublicBrand.name}`,
147
147
  accelerator: "CmdOrCtrl+Q",
148
148
  action: "quit",
149
149
  hiddenIn: "browser"
package/dist-lib/menu.mjs CHANGED
@@ -1,11 +1,11 @@
1
- /*! rnx v0.1.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/public-brand.ts
4
- var name = "rnx";
4
+ var name = "Peach";
5
5
  var rnxPublicBrand = Object.freeze({
6
6
  name,
7
7
  packageName: "peachsim",
8
- commandName: "rnx",
8
+ commandName: "peach",
9
9
  domain: "rnxsim.com",
10
10
  origin: "https://rnxsim.com"
11
11
  });
@@ -88,7 +88,7 @@ function appMenu() {
88
88
  },
89
89
  { type: "separator" },
90
90
  {
91
- label: "Hide rnx",
91
+ label: `Hide ${rnxPublicBrand.name}`,
92
92
  accelerator: "CmdOrCtrl+H",
93
93
  action: "hide",
94
94
  hiddenIn: "browser"
@@ -102,7 +102,7 @@ function appMenu() {
102
102
  { label: "Show All", action: "unhide", hiddenIn: "browser" },
103
103
  { type: "separator" },
104
104
  {
105
- label: "Quit rnx",
105
+ label: `Quit ${rnxPublicBrand.name}`,
106
106
  accelerator: "CmdOrCtrl+Q",
107
107
  action: "quit",
108
108
  hiddenIn: "browser"
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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;
@@ -48,7 +48,7 @@ var import_node_crypto = require("node:crypto");
48
48
  var import_node_fs = __toESM(require("node:fs"), 1);
49
49
  function tagRnxBundleForPlugin(bundleUrl, replacementOrigin, replacementToken, projectRoot, appName) {
50
50
  const absolute = /^[a-z][a-z\d+.-]*:\/\//i.test(bundleUrl);
51
- const url = new URL(bundleUrl, absolute ? void 0 : "http://rnx.local");
51
+ const url = new URL(bundleUrl, absolute ? void 0 : "http://peach.local");
52
52
  if (appName) {
53
53
  url.searchParams.set("rnxAppName", appName);
54
54
  url.searchParams.set(
@@ -200,7 +200,7 @@ function unsupportedSpecifier(specifier) {
200
200
  );
201
201
  }
202
202
  function bridgeDeclaration(name, specifier) {
203
- const notReady = (what) => JSON.stringify(`[rnx] replacement ${what} bridge is not ready`);
203
+ const notReady = (what) => JSON.stringify(`[peach] replacement ${what} bridge is not ready`);
204
204
  if (specifier === "react") {
205
205
  return `const ${name} = ${REACT_BRIDGE}; if (!${name}) throw new Error(${notReady("React")});`;
206
206
  }
@@ -208,12 +208,12 @@ function bridgeDeclaration(name, specifier) {
208
208
  return `const ${name} = ${REACT_NATIVE_BRIDGE}; if (!${name}) throw new Error(${notReady("React Native")});`;
209
209
  }
210
210
  if (isContrastKitSpecifier(specifier)) {
211
- return `const ${name} = (globalThis.__contrast_kit_modules && globalThis.__contrast_kit_modules[${JSON.stringify(specifier)}]) || (${PACKAGE_BRIDGES} || {})[${JSON.stringify(specifier)}]; if (!${name}) throw new Error(${JSON.stringify(`[rnx] replacement package bridge ${specifier} is not ready`)});`;
211
+ return `const ${name} = (globalThis.__contrast_kit_modules && globalThis.__contrast_kit_modules[${JSON.stringify(specifier)}]) || (${PACKAGE_BRIDGES} || {})[${JSON.stringify(specifier)}]; if (!${name}) throw new Error(${JSON.stringify(`[peach] replacement package bridge ${specifier} is not ready`)});`;
212
212
  }
213
213
  if (JSX_RUNTIME_SPECIFIERS.has(specifier)) {
214
214
  return `const ${name} = (() => { const react = ${REACT_BRIDGE}; if (!react) throw new Error(${notReady("React")}); const jsx = (type, props, key) => react.createElement(type, key === undefined ? props : { ...props, key }); return { Fragment: react.Fragment, jsx, jsxs: jsx, jsxDEV: jsx }; })();`;
215
215
  }
216
- return `const ${name} = (${PACKAGE_BRIDGES} || {})[${JSON.stringify(specifier)}]; if (!${name}) throw new Error(${JSON.stringify(`[rnx] replacement package bridge ${specifier} is not ready`)});`;
216
+ return `const ${name} = (${PACKAGE_BRIDGES} || {})[${JSON.stringify(specifier)}]; if (!${name}) throw new Error(${JSON.stringify(`[peach] replacement package bridge ${specifier} is not ready`)});`;
217
217
  }
218
218
  var DEFAULT_INTEROP = "__rnxReplacementDefault";
219
219
  var DEFAULT_INTEROP_DECLARATION = `const ${DEFAULT_INTEROP} = (bridge) => (bridge && bridge.__esModule ? bridge.default : bridge);`;
@@ -382,7 +382,7 @@ function sendJavaScript(req, res, source) {
382
382
  function isReplacementModuleRequestUrl(rawUrl) {
383
383
  if (!rawUrl) return false;
384
384
  try {
385
- const pathname = new URL(rawUrl, "http://rnx.local").pathname;
385
+ const pathname = new URL(rawUrl, "http://peach.local").pathname;
386
386
  return pathname === REPLACEMENT_MODULE_ROUTE;
387
387
  } catch {
388
388
  return false;
@@ -392,7 +392,7 @@ async function handleReplacementModuleRequest(req, res, options = {}) {
392
392
  const rawUrl = req.url || "";
393
393
  let url;
394
394
  try {
395
- url = new URL(rawUrl, "http://rnx.local");
395
+ url = new URL(rawUrl, "http://peach.local");
396
396
  } catch {
397
397
  return false;
398
398
  }
@@ -542,12 +542,12 @@ function isValidRuntimeVersion(value) {
542
542
  var import_node_fs2 = __toESM(require("node:fs"), 1);
543
543
  var import_node_os = require("node:os");
544
544
  var import_node_path2 = __toESM(require("node:path"), 1);
545
- var RNX_HOME_ENV = "RNX_HOME";
545
+ var PEACH_HOME_ENV = "PEACH_HOME";
546
546
  var ACTIVE_RUNTIME_FILE = "active";
547
547
  function rnxHomeDir() {
548
- const override = process.env[RNX_HOME_ENV];
548
+ const override = process.env[PEACH_HOME_ENV];
549
549
  if (override && override.length > 0) return import_node_path2.default.resolve(override);
550
- return import_node_path2.default.join((0, import_node_os.homedir)(), ".rnx");
550
+ return import_node_path2.default.join((0, import_node_os.homedir)(), ".peach");
551
551
  }
552
552
  function runtimesDir() {
553
553
  return import_node_path2.default.join(rnxHomeDir(), "runtimes");
@@ -569,7 +569,7 @@ function readActiveRuntime() {
569
569
  var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
570
570
 
571
571
  // src/runtime-assets.ts
572
- var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[rnx] no engine runtime installed. run `rnx runtime install`";
572
+ var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[peach] no engine runtime installed. run `peach runtime install`";
573
573
  var _monorepoRootCache;
574
574
  function findMonorepoRoot() {
575
575
  if (_monorepoRootCache !== void 0) return _monorepoRootCache;
@@ -585,7 +585,7 @@ function findMonorepoRoot() {
585
585
  return null;
586
586
  }
587
587
  function resolveDevCheckoutRuntimeRoot() {
588
- if (process.env.RNX_HOME && readActiveRuntime()) return null;
588
+ if (process.env.PEACH_HOME && readActiveRuntime()) return null;
589
589
  const root = findMonorepoRoot();
590
590
  if (!root) return null;
591
591
  const devBuild = import_path.default.join(root, "public/sootsim");
@@ -815,7 +815,7 @@ function withRNX(config) {
815
815
  try {
816
816
  connect = require("connect");
817
817
  } catch {
818
- console.warn("[rnx] connect not available");
818
+ console.warn("[peach] connect not available");
819
819
  return middleware;
820
820
  }
821
821
  const server = connect();
@@ -874,7 +874,7 @@ function withRNX(config) {
874
874
  next();
875
875
  });
876
876
  server.use(middleware);
877
- console.log(`[rnx] serving at ${prefix}/`);
877
+ console.log(`[peach] serving at ${prefix}/`);
878
878
  return server;
879
879
  }
880
880
  };
@@ -891,7 +891,7 @@ function resolveMetroPort(server) {
891
891
  const rawPort = inlinePort || splitPort || process.env.RCT_METRO_PORT || server?.port || 8081;
892
892
  const port = Number(rawPort);
893
893
  if (!Number.isInteger(port) || port <= 0) {
894
- throw new Error(`rnx: Metro port must be a positive integer, got ${rawPort}`);
894
+ throw new Error(`peach: Metro port must be a positive integer, got ${rawPort}`);
895
895
  }
896
896
  return port;
897
897
  }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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;
@@ -55,11 +55,11 @@ var import_path = __toESM(require("path"), 1);
55
55
  var import_node_fs = __toESM(require("node:fs"), 1);
56
56
  var import_node_os = require("node:os");
57
57
  var import_node_path = __toESM(require("node:path"), 1);
58
- var RNX_HOME_ENV = "RNX_HOME";
58
+ var PEACH_HOME_ENV = "PEACH_HOME";
59
59
  function rnxHomeDir() {
60
- const override = process.env[RNX_HOME_ENV];
60
+ const override = process.env[PEACH_HOME_ENV];
61
61
  if (override && override.length > 0) return import_node_path.default.resolve(override);
62
- return import_node_path.default.join((0, import_node_os.homedir)(), ".rnx");
62
+ return import_node_path.default.join((0, import_node_os.homedir)(), ".peach");
63
63
  }
64
64
  function runtimesDir() {
65
65
  return import_node_path.default.join(rnxHomeDir(), "runtimes");
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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;
@@ -25,11 +25,11 @@ __export(public_brand_exports, {
25
25
  rnxPublicBrand: () => rnxPublicBrand
26
26
  });
27
27
  module.exports = __toCommonJS(public_brand_exports);
28
- var name = "rnx";
28
+ var name = "Peach";
29
29
  var rnxPublicBrand = Object.freeze({
30
30
  name,
31
31
  packageName: "peachsim",
32
- commandName: "rnx",
32
+ commandName: "peach",
33
33
  domain: "rnxsim.com",
34
34
  origin: "https://rnxsim.com"
35
35
  });
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.571 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.573 | (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;