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;
@@ -5550,12 +5550,12 @@ var init_unsupported_packages = __esm({
5550
5550
  // '@react-native-firebase/app' is tracked at 0.95 measured coverage.
5551
5551
  "react-native-firebase": {
5552
5552
  note: "it is the pre-v6 umbrella package, which bundles native Firebase SDKs with no JavaScript path",
5553
- recovery: "Use the scoped packages instead \u2014 install @react-native-firebase/app plus the features you need (@react-native-firebase/auth, /firestore). rnx runs those against a synthetic native app record."
5553
+ recovery: "Use the scoped packages instead \u2014 install @react-native-firebase/app plus the features you need (@react-native-firebase/auth, /firestore). peach runs those against a synthetic native app record."
5554
5554
  },
5555
5555
  // deprecated upstream since 2021. both replacements are tracked at 0.93.
5556
5556
  "react-native-camera": {
5557
5557
  note: "it is deprecated upstream and its capture path is entirely native",
5558
- recovery: "Use react-native-vision-camera or expo-camera. rnx backs both with a real getUserMedia preview and canvas photo capture."
5558
+ recovery: "Use react-native-vision-camera or expo-camera. peach backs both with a real getUserMedia preview and canvas photo capture."
5559
5559
  },
5560
5560
  // no maintained upstream package under this name; store billing is native.
5561
5561
  "react-native-in-app-purchase": {
@@ -5751,7 +5751,7 @@ var init_registry = __esm({
5751
5751
  usage: 3,
5752
5752
  importance: 3,
5753
5753
  estimate: 1,
5754
- rationale: "Shared values, timing, spring, decay, sequencing, repetition, interpolation, and easing drive the common animation workflow. The installed upstream JavaScript runs against the SootSim worklet seam, and no app-facing primitive is missing in the inspected path."
5754
+ rationale: "Shared values, timing, spring, decay, sequencing, repetition, interpolation, and easing drive the common animation workflow. The installed upstream JavaScript runs against the Peach worklet seam, and no app-facing primitive is missing in the inspected path."
5755
5755
  },
5756
5756
  {
5757
5757
  id: "animated-components-and-props",
@@ -6113,7 +6113,7 @@ var init_registry = __esm({
6113
6113
  ],
6114
6114
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-webview"],
6115
6115
  strictCoverage: REACT_NATIVE_WEBVIEW_STRICT_COVERAGE,
6116
- note: "native-seam only: the published package runs unchanged and routes RNCWebView through the tenant-to-shell hosted iframe surface. the implementation estimate uses reviewed feature weights; the separate equal-surface strict diagnostic includes the shared, iOS, and Android public prop and ref surface. paired native and SootSim runtime conformance covers local HTML, base URL, URI loading, load and navigation callbacks, both injection phases, two-way messaging, imperative URI reload and injection, local HTML fragment navigation and link-request decisions, content scrolling, parent translation, and onOpenWindow target delivery.",
6116
+ note: "native-seam only: the published package runs unchanged and routes RNCWebView through the tenant-to-shell hosted iframe surface. the implementation estimate uses reviewed feature weights; the separate equal-surface strict diagnostic includes the shared, iOS, and Android public prop and ref surface. paired native and Peach runtime conformance covers local HTML, base URL, URI loading, load and navigation callbacks, both injection phases, two-way messaging, imperative URI reload and injection, local HTML fragment navigation and link-request decisions, content scrolling, parent translation, and onOpenWindow target delivery.",
6117
6117
  working: "source.uri/source.html/source.baseUrl, Chromium cross-origin URI loading under the shell COEP, same-origin URI cookies, source.html persistent localStorage, document-start ReactNativeWebView bootstrap and injectedJavaScriptBeforeContentLoaded/injectedJavaScript on source.html, strict ReactNativeWebView.postMessage bridge envelope in both directions, onMessage synthetic event with navigation fields, onOpenWindow target delivery for source.html, successful onLoad/Start/End and onNavigationStateChange, ref.reload on URI pages, ref.injectJavaScript/postMessage, local HTML fragment URL/callback behavior, onShouldStartLoadWithRequest for local link clicks with native-shaped request and loading payloads, internal content scrolling, renderLoading, javaScriptEnabled sandbox, layout, inherited clipping and visibility, parked/live presentation",
6118
6118
  missing: "Safari/WebKit cross-origin URI pages without COEP-compatible response headers remain permanently loading because WebKit ignores iframe credentialless; Chromium credentialless cross-origin URI frames send no credentials, including cookies set by their own origin, and use ephemeral storage; iframe pixels in canvas screenshots; script injection, ReactNativeWebView bootstrap, and onOpenWindow for remote pages, which get no bridge at all because a browser cannot script a cross-origin frame; cross-origin ref.goBack/goForward/stopLoading and truthful canGoBack/canGoForward values; failed HTTP/refused navigation callbacks (onError/onHttpError and renderError); initial-load and form onShouldStartLoadWithRequest callbacks, allowsBackForwardNavigationGestures, userAgent, dataDetectorTypes, cacheEnabled, incognito, scalesPageToFit, originWhitelist enforcement"
6119
6119
  }
@@ -6147,7 +6147,7 @@ var init_registry = __esm({
6147
6147
  {
6148
6148
  range: ">=56.0.0 <58.0.0",
6149
6149
  coverage: 0.35,
6150
- note: "native-seam only: SootSim runtime conformance passes the published Expo 57.0.1 wrapper local-page bridge, script, object, message, scroll, update, and reload paths; native parity has no verdict, so these SootSim-only observations do not raise the score.",
6150
+ note: "native-seam only: Peach runtime conformance passes the published Expo 57.0.1 wrapper local-page bridge, script, object, message, scroll, update, and reload paths; native parity has no verdict, so these Peach-only observations do not raise the score.",
6151
6151
  working: "DomWebView/WebView exports, source.uri rendering, onMessage data/url/title, ref.reload/injectJavaScript/scrollTo, document-start ReactNativeWebView bootstrap and injectedJavaScriptBeforeContentLoaded on percent-encoded data: URI pages, injectedJavaScriptObject, reload-on-update behavior for injectedJavaScriptObject/injectedJavaScript, layout and parked/live presentation",
6152
6152
  missing: "Expo modules bridge, any bridge or script injection on a remote page because a browser cannot script a cross-origin frame, cross-origin scrolling, the re-encoded data: URI a page reports as its own location.href, exact native scroll physics and native-only media/keyboard props, iframe pixels in canvas screenshots"
6153
6153
  }
@@ -6253,7 +6253,7 @@ var init_registry = __esm({
6253
6253
  usage: 3,
6254
6254
  importance: 3,
6255
6255
  estimate: 1,
6256
- rationale: "KeyboardProvider, animation hooks, focused-input hooks, keyboard lifecycle events, and resize events use the live SootSim keyboard source and worklet dispatch path. The inspected event and hook path has no app-facing behavior gap."
6256
+ rationale: "KeyboardProvider, animation hooks, focused-input hooks, keyboard lifecycle events, and resize events use the live Peach keyboard source and worklet dispatch path. The inspected event and hook path has no app-facing behavior gap."
6257
6257
  },
6258
6258
  {
6259
6259
  id: "keyboard-controller-api",
@@ -6390,7 +6390,7 @@ var init_registry = __esm({
6390
6390
  }
6391
6391
  ],
6392
6392
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["react-native-worklets"],
6393
- note: "core RN\u2194UI thread bridging, isolated named Worker runtimes, runtime-kind guards, UI-runtime-id execution, shareable/synchronizable guards, custom serializable registration, and feature flag readers use SootSim worker runtimes.",
6393
+ note: "core RN\u2194UI thread bridging, isolated named Worker runtimes, runtime-kind guards, UI-runtime-id execution, shareable/synchronizable guards, custom serializable registration, and feature flag readers use Peach worker runtimes.",
6394
6394
  working: "createWorkletRuntime with isolated named Worker execution and lifecycle teardown, runOnRuntime/runOnRuntimeAsync/scheduleOnRuntime with scheduleOnRN callback return, runOnJS, runOnUI/Sync/Async, scheduleOnRN/UI, UI-runtime runOnRuntimeSyncWithId/scheduleOnRuntimeWithId, makeShareable, createShareable (3-arg form with hostDecorator), createSerializable, createSynchronizable, isShareable, isSynchronizable, isWorkletFunction, isShareableRef, isSerializableRef, makeShareableCloneRecursive/OnUIRecursive, executeOnUIRuntimeSync, callMicrotasks, WorkletsModule, RuntimeKind enum, getRuntimeKind, isRNRuntime, isUIRuntime, isWorkerRuntime, isWorkletRuntime, UIRuntimeId, getUIRuntimeHolder, getUISchedulerHolder, registerCustomSerializable, getStaticFeatureFlag, getDynamicFeatureFlag, setDynamicFeatureFlag, Worklets namespace",
6395
6395
  missing: "synchronous named-runtime results, runtime-id scheduling into named workers, custom queue/event-loop configuration, cross-runtime structured-clone hooks for custom registered classes, dynamic feature flag fan-out across the tenant\u2194shell split"
6396
6396
  }
@@ -6456,7 +6456,7 @@ var init_registry = __esm({
6456
6456
  {
6457
6457
  range: ">=1.0.0",
6458
6458
  coverage: 0.9,
6459
- note: "the real expo-image wrapper renders through the shared sootsim-image host. Paired native and SootSim runtime proof covers source-less placeholder rendering and right-edge contentPosition alignment; a negative control observed centered red/blue content before the renderer implemented the position.",
6459
+ note: "the real expo-image wrapper renders through the shared sootsim-image host. Paired native and Peach runtime proof covers source-less placeholder rendering and right-edge contentPosition alignment; a negative control observed centered red/blue content before the renderer implemented the position.",
6460
6460
  working: "Image component, ImageBackground, useImage hook, ImageRef class, contentFit, contentPosition right-edge alignment, source-less placeholder rendering and placeholderContentFit, tintColor, onLoad/onLoadStart/onLoadEnd/onError callbacks, source normalization (string/object/array), prefetch, clearMemoryCache, clearDiskCache, getCachePathAsync, configureCache, generateBlurhashAsync, generateThumbhashAsync, loadAsync",
6461
6461
  missing: "transition/animation effects, blurRadius, contentPosition variants beyond the paired right-edge proof, sfEffect/SFSymbol, allowDownscaling, autoplay (GIF), responsivePolicy"
6462
6462
  }
@@ -6482,7 +6482,7 @@ var init_registry = __esm({
6482
6482
  {
6483
6483
  range: ">=0.17.0",
6484
6484
  coverage: 1,
6485
- note: "full splash wired to the sootsim canvas boot splash, including the app's REAL configured artwork. the config plugin's image + backgroundColor (+ imageWidth, resizeMode, dark variant) and the legacy expo.splash / expo.ios.splash blocks are parsed and painted on boot exactly like the native splash window. setOptions({fade,duration}) is honored: hideAsync()/hide() cross-dissolve the splash over the configured duration (default 400ms, fade default off \u2014 mirroring ios/SplashScreenManager.swift hide()); preventAutoHideAsync holds the splash until the app hides it. matches upstream index.native.ts semantics.",
6485
+ note: "full splash wired to the peach canvas boot splash, including the app's REAL configured artwork. the config plugin's image + backgroundColor (+ imageWidth, resizeMode, dark variant) and the legacy expo.splash / expo.ios.splash blocks are parsed and painted on boot exactly like the native splash window. setOptions({fade,duration}) is honored: hideAsync()/hide() cross-dissolve the splash over the configured duration (default 400ms, fade default off \u2014 mirroring ios/SplashScreenManager.swift hide()); preventAutoHideAsync holds the splash until the app hides it. matches upstream index.native.ts semantics.",
6486
6486
  working: "preventAutoHideAsync (holds splash), hideAsync, hide (sync), setOptions (fade + duration drive the real canvas fade), configured splash image + backgroundColor + imageWidth + resizeMode + dark variant painted on boot (config plugin + legacy expo.splash), SplashScreenOptions type"
6487
6487
  }
6488
6488
  ]
@@ -6507,7 +6507,7 @@ var init_registry = __esm({
6507
6507
  {
6508
6508
  range: ">=15.0.0",
6509
6509
  coverage: 0.9,
6510
- note: "both APIs implemented over one shared synchronous localStorage VFS: the SDK-18+ class-based File/Directory/Paths API (the bare `expo-file-system` export on SDK 18+) and the legacy async API (`expo-file-system/legacy`), with real network ops via fetch + navigator.storage. legacy and new interoperate on the same filesystem. paired native and SootSim runtime conformance verifies the published DownloadResumable class identity, savable state, and cancel-before-start behavior; the score stays at 90% because active-transfer control remains unsupported.",
6510
+ note: "both APIs implemented over one shared synchronous localStorage VFS: the SDK-18+ class-based File/Directory/Paths API (the bare `expo-file-system` export on SDK 18+) and the legacy async API (`expo-file-system/legacy`), with real network ops via fetch + navigator.storage. legacy and new interoperate on the same filesystem. paired native and Peach runtime conformance verifies the published DownloadResumable class identity, savable state, and cancel-before-start behavior; the score stays at 90% because active-transfer control remains unsupported.",
6511
6511
  working: "SDK-18+ class API: Paths (document/cache/bundle, join/basename/extname/dirname), File (exists, size, md5, name, extension, parentDirectory, create, write text|bytes, text(Sync), base64(Sync), bytes(Sync), arrayBuffer, slice, stream, delete, info, copy, move/rename, open FileHandle, static downloadFileAsync/pickFileAsync), Directory (exists, create, createFile, createDirectory, list, info, delete, copy, move, static pickDirectoryAsync). Legacy API: documentDirectory, cacheDirectory, bundleDirectory, EncodingType, FileSystemSessionType, FileSystemUploadType, FileSystemAcceptedUploadHttpMethod, readAsStringAsync, writeAsStringAsync, deleteAsync, getInfoAsync, makeDirectoryAsync, readDirectoryAsync, copyAsync, moveAsync, downloadAsync, createDownloadResumable (published DownloadResumable class with fileUri/savable state and cancel-before-start), uploadAsync (real fetch with binary or multipart body), createUploadTask, UploadTask class (uploadAsync, cancelAsync, fires completion callback), getFreeDiskStorageAsync (navigator.storage.estimate quota - usage), getTotalDiskCapacityAsync (navigator.storage.estimate quota), getContentUriAsync (returns uri unchanged \u2014 Android-only behavior), StorageAccessFramework namespace stub (Android-only methods throw with platform error). All upstream legacy types exported: FileSystemUploadOptions, FileSystemUploadResult, UploadProgressData, DownloadProgressData, FileSystemNetworkTaskProgressCallback.",
6512
6512
  missing: "in-flight DownloadResumable pause, resume, cancellation, and streamed download progress; chunked upload progress events (fetch does not expose upload progress)"
6513
6513
  }
@@ -6574,7 +6574,7 @@ var init_registry = __esm({
6574
6574
  {
6575
6575
  range: ">=12.0.0",
6576
6576
  coverage: 0.95,
6577
- note: "backdrop-filter blur via sootsim canvas, all BlurTint values with correct iOS opacity",
6577
+ note: "backdrop-filter blur via peach canvas, all BlurTint values with correct iOS opacity",
6578
6578
  working: "BlurView, BlurTargetView, tint (all 22 BlurTint values with real iOS rgba values), intensity, blurReductionFactor, experimentalBlurMethod, blurMethod props",
6579
6579
  missing: "actual gaussian blur rendering (approximated by backdrop-filter), Animated.createAnimatedComponent integration fidelity"
6580
6580
  }
@@ -6599,7 +6599,7 @@ var init_registry = __esm({
6599
6599
  {
6600
6600
  range: ">=1.0.0",
6601
6601
  coverage: 1,
6602
- note: "full portal API via sootsim RNTPortalView/RNTPortalHostView custom elements",
6602
+ note: "full portal API via peach RNTPortalView/RNTPortalHostView custom elements",
6603
6603
  working: "Portal (hostName/name/style/children), PortalHost (name/style/children), PortalProvider, usePortal (removePortal), NativePortal, NativePortalHost"
6604
6604
  }
6605
6605
  ]
@@ -6611,9 +6611,9 @@ var init_registry = __esm({
6611
6611
  {
6612
6612
  range: ">=0.5.0 <0.6.0",
6613
6613
  coverage: 0.95,
6614
- note: "native-seam only: the published provider, navigation adapters, shared-element registry, transition recipes, measurement, Reanimated worklets, and react-native-teleport ownership all run unchanged; rnx supplies the ScreenChoreographyView host and ScreenChoreographyPreparation TurboModule used by version 0.5's presentation and two-frame layout handshakes",
6614
+ note: "native-seam only: the published provider, navigation adapters, shared-element registry, transition recipes, measurement, Reanimated worklets, and react-native-teleport ownership all run unchanged; peach supplies the ScreenChoreographyView host and ScreenChoreographyPreparation TurboModule used by version 0.5's presentation and two-frame layout handshakes",
6615
6615
  working: "ChoreographyProvider, ChoreographyScreen, SharedElement and SharedElement.Target, React Navigation and Expo Router adapters, forward and interactive transitions, native preparation with mounted-descendant checks, tag-recycling rejection, positive finite geometry validation, 0.5-point stability tolerance, two stable frame samples, cancellation, and the 500ms native deadline; overlay presentation acknowledgement after a rendered frame and a two-frame dismissal grace period",
6616
- missing: "native teardown freezes the final overlay into a bitmap for two frames; rnx keeps the live overlay subtree visible for those two frames because the canvas host has no synchronous subtree snapshot API"
6616
+ missing: "native teardown freezes the final overlay into a bitmap for two frames; peach keeps the live overlay subtree visible for those two frames because the canvas host has no synchronous subtree snapshot API"
6617
6617
  }
6618
6618
  ]
6619
6619
  },
@@ -6771,7 +6771,7 @@ var init_registry = __esm({
6771
6771
  {
6772
6772
  range: ">=55.0.0",
6773
6773
  coverage: 0.95,
6774
- note: "SymbolView renders the shared SootSim SF Symbol vector with support for monochrome, hierarchical, palette, and multicolor rendering, weight-based stroke width, and scale sizing. Unknown names use the supplied fallback. unstable_getMaterialSymbolSourceAsync returns a stable URI/size shape so apps that gate on the source resolve correctly.",
6774
+ note: "SymbolView renders the shared Peach SF Symbol vector with support for monochrome, hierarchical, palette, and multicolor rendering, weight-based stroke width, and scale sizing. Unknown names use the supplied fallback. unstable_getMaterialSymbolSourceAsync returns a stable URI/size shape so apps that gate on the source resolve correctly.",
6775
6775
  working: "SymbolView (named + default export), name object/string selection (string | { ios, android, web }), size, tintColor, colors array, type (monochrome/hierarchical/palette/multicolor), weight stroke-width scaling, scale multiplier sizing, animationSpec/resizeMode props, fallback rendering, unstable_getMaterialSymbolSourceAsync, type exports",
6776
6776
  missing: "native Apple asset-catalog layer fidelity, bundled Material Symbols font (size budget), animation/effect modifiers (.bounce, .scale)"
6777
6777
  }
@@ -6943,7 +6943,7 @@ var init_registry = __esm({
6943
6943
  {
6944
6944
  range: ">=0.7.0",
6945
6945
  coverage: 0.9,
6946
- note: "MenuView renders real iOS-style canvas menu via sootsim ContextMenu",
6946
+ note: "MenuView renders real iOS-style canvas menu via peach ContextMenu",
6947
6947
  working: "MenuView, actions (title, subtitle, id, state, attributes: disabled/destructive/hidden), subactions (nested menus), onPressAction, onOpenMenu, onCloseMenu, shouldOpenOnLongPress, themeVariant, isAnchoredToRight, NativeActionEvent",
6948
6948
  missing: "keepsMenuPresented attribute (iOS 16+), image/imageColor rendering in menu items, inline element actions"
6949
6949
  }
@@ -7223,7 +7223,7 @@ var init_registry = __esm({
7223
7223
  coverage: 0.95,
7224
7224
  note: "native-seam only \u2014 the real RNShare object (Button/ShareSheet/Overlay/Sheet components, Social map merged from native getConstants() with the upstream enum fallback, normalizeShareOpenOptions / normalizeSingleShareOptions, checkPermissions, isAndroid/isIOS branches) runs from the bundle. sootsim provides the RNShare TurboModule (open/shareSingle/isPackageInstalled/isBase64File/getConstants); open() and shareSingle() route through `SootSim.bridges.shareSheet` \u2014 the same on-canvas UIActivityViewController core RN Share / ActionSheetIOS / expo-sharing present.",
7225
7225
  working: "real upstream Button/ShareSheet/Overlay/Sheet UI components, full Social constants table from getConstants(), open (title/message/subject, urls[] folded into the body like UIActivityViewController, failOnCancel, completed/dismissed result with activityType\u2192app), shareSingle (presents the same share sheet, INSTAGRAM_STORIES appId guard, normalize helpers), isPackageInstalled shape, isBase64File true for data: URIs, dismissedAction conversion in upstream JS",
7226
- missing: "social-specific app routing \u2014 correctly absent (no real third-party social apps exist in SootSim to deep-link into); native sharing of file content (the bridge takes message/url/subject; binary attachment paths would need a deeper share-sheet bridge upgrade)"
7226
+ missing: "social-specific app routing \u2014 correctly absent (no real third-party social apps exist in Peach to deep-link into); native sharing of file content (the bridge takes message/url/subject; binary attachment paths would need a deeper share-sheet bridge upgrade)"
7227
7227
  }
7228
7228
  ]
7229
7229
  },
@@ -7428,7 +7428,7 @@ var init_registry = __esm({
7428
7428
  {
7429
7429
  range: ">=18.0.0",
7430
7430
  coverage: 0,
7431
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: development noop : push API surface resolves without real FCM delivery. imports and API shape receive no behavior credit",
7431
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: development noop : push API surface resolves without real FCM delivery. imports and API shape receive no behavior credit",
7432
7432
  working: "default messaging(), getToken/deleteToken, requestPermission/hasPermission AUTHORIZED, onMessage/onNotificationOpenedApp/onTokenRefresh subscriptions, getInitialNotification null, setBackgroundMessageHandler, topic subscribe/unsubscribe, auto-init/device registration helpers, AuthorizationStatus constants",
7433
7433
  missing: "real FCM token, actual message receipt, background handler execution, notification-open events; intentionally absent for browser simulator"
7434
7434
  }
@@ -7532,7 +7532,7 @@ var init_registry = __esm({
7532
7532
  {
7533
7533
  range: ">=18.0.0",
7534
7534
  coverage: 0,
7535
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: noop callable functions : calls resolve with {data:null}. imports and API shape receive no behavior credit",
7535
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: noop callable functions : calls resolve with {data:null}. imports and API shape receive no behavior credit",
7536
7536
  working: "default functions(), httpsCallable, useEmulator",
7537
7537
  missing: "real HTTPS callable transport, emulator networking, error code mapping"
7538
7538
  }
@@ -7545,7 +7545,7 @@ var init_registry = __esm({
7545
7545
  {
7546
7546
  range: ">=18.0.0",
7547
7547
  coverage: 0,
7548
- note: "the reference iOS simulator creates real Firebase installation identifiers and tokens when configured. SootSim returns fixed placeholder strings, so import safety receives no behavior credit",
7548
+ note: "the reference iOS simulator creates real Firebase installation identifiers and tokens when configured. Peach returns fixed placeholder strings, so import safety receives no behavior credit",
7549
7549
  working: "default installations(), getId, getToken, delete",
7550
7550
  missing: "real Firebase installation registration and token lifecycle"
7551
7551
  }
@@ -7558,7 +7558,7 @@ var init_registry = __esm({
7558
7558
  {
7559
7559
  range: ">=18.0.0",
7560
7560
  coverage: 0,
7561
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: development token noop : App Check API shape resolves with stub tokens. imports and API shape receive no behavior credit",
7561
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: development token noop : App Check API shape resolves with stub tokens. imports and API shape receive no behavior credit",
7562
7562
  working: "default appCheck(), activate, setTokenAutoRefreshEnabled, getToken, onTokenChanged",
7563
7563
  missing: "real attestation provider, token refresh, enforcement with Firebase services"
7564
7564
  }
@@ -7674,7 +7674,7 @@ var init_registry = __esm({
7674
7674
  }
7675
7675
  ],
7676
7676
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["@react-native-community/datetimepicker"],
7677
- note: "the real upstream package JS runs from the guest bundle. the granular onValueChange prop starts in 9.1.0; its controlled iOS wrapper resolves codegenNativeComponent('RNDateTimePicker') to the engine UIDatePicker wheel. paired native and SootSim proof covers fixed-offset and IANA-named date calendars. the pinned Fabric emitter omits utcOffset, so its Int32 field is observed as 0 on native and intentionally matches that value here.",
7677
+ note: "the real upstream package JS runs from the guest bundle. the granular onValueChange prop starts in 9.1.0; its controlled iOS wrapper resolves codegenNativeComponent('RNDateTimePicker') to the engine UIDatePicker wheel. paired native and Peach proof covers fixed-offset and IANA-named date calendars. the pinned Fabric emitter omits utcOffset, so its Int32 field is observed as 0 on native and intentionally matches that value here.",
7678
7678
  working: "real upstream DateTimePicker and exported constants, value, mode date/time/datetime, granular onValueChange event and Date, minimumDate, maximumDate, minuteInterval, locale, timeZoneOffsetInMinutes, timeZoneName for date-mode calendar selection, textColor, themeVariant, disabled",
7679
7679
  missing: "displayIOS 'default'/'compact'/'inline' calendar styles (all render as wheels), countdown mode renders the time wheel, named-zone time/datetime modes are not retained by paired proof, accentColor, public onDismiss; deprecated onChange is not covered by the retained native proof"
7680
7680
  }
@@ -7702,7 +7702,7 @@ var init_registry = __esm({
7702
7702
  coverage: 0.76,
7703
7703
  note: "the real upstream PickerIOS wrapper runs from the guest bundle and resolves codegenNativeComponent('RNCPicker') to the engine UIPickerView wheel. upstream owns Picker.Item mapping, controlled selection, and callback fan-out.",
7704
7704
  working: "real upstream Picker, PickerIOS, Picker.Item label/value, selectedValue, onValueChange(value, index), itemStyle color/fontSize, MODE_DIALOG and MODE_DROPDOWN constants",
7705
- missing: "Picker.Item color/testID, themeVariant, textAlign, itemStyle fontFamily/fontWeight/fontStyle, multi-line numberOfLines behavior, controlled native selection restore proof, deprecated onChange proof, android dialog/dropdown presentation (mode/prompt/dropdownIconColor render as the iOS wheel), focus()/blur() imperative handle, onFocus/onBlur; selectionColor is ignored by the exact 2.11.4 Fabric iOS host and SootSim matches that behavior"
7705
+ missing: "Picker.Item color/testID, themeVariant, textAlign, itemStyle fontFamily/fontWeight/fontStyle, multi-line numberOfLines behavior, controlled native selection restore proof, deprecated onChange proof, android dialog/dropdown presentation (mode/prompt/dropdownIconColor render as the iOS wheel), focus()/blur() imperative handle, onFocus/onBlur; selectionColor is ignored by the exact 2.11.4 Fabric iOS host and Peach matches that behavior"
7706
7706
  }
7707
7707
  ]
7708
7708
  },
@@ -7831,7 +7831,7 @@ var init_registry = __esm({
7831
7831
  range: ">=7.0.0",
7832
7832
  coverage: 0.95,
7833
7833
  note: "scored against the browser-hosted simulator contract: the real package imports cleanly and its meaningful lock state, platform masks, reads, and portrait-to-landscape event behavior match iOS across eight paired runtime stages. The simulator device frame is intentionally fixed, so the score does not claim faithful UIKit rotation.",
7834
- working: "getOrientationAsync, getOrientationLockAsync, getPlatformOrientationLockAsync, lockAsync (with upstream TypeError validation), lockPlatformAsync, unlockAsync, supportsOrientationLockAsync, addOrientationChangeListener/remove, all enums; paired native and SootSim runtime validates support queries, portrait locks and reads, iOS platform-mask read/write, portrait-to-landscape event payloads, and unlock",
7834
+ working: "getOrientationAsync, getOrientationLockAsync, getPlatformOrientationLockAsync, lockAsync (with upstream TypeError validation), lockPlatformAsync, unlockAsync, supportsOrientationLockAsync, addOrientationChangeListener/remove, all enums; paired native and Peach runtime validates support queries, portrait locks and reads, iOS platform-mask read/write, portrait-to-landscape event payloads, and unlock",
7835
7835
  missing: "deprecated bulk listener removal and same-axis portrait-up/portrait-down event filtering lack paired runtime coverage; physical device-frame rotation and sensor-driven auto-rotation are intentionally unavailable in the fixed browser-hosted simulator and do not count as an implementation gap"
7836
7836
  }
7837
7837
  ]
@@ -8001,7 +8001,7 @@ var init_registry = __esm({
8001
8001
  {
8002
8002
  range: ">=1.7.0",
8003
8003
  coverage: 0.82,
8004
- note: "native-seam only. the published Presets, Settings, adaptive hooks, and pattern/realtime composer hooks run unchanged against SootSim's RNPulsar haptic engine.",
8004
+ note: "native-seam only. the published Presets, Settings, adaptive hooks, and pattern/realtime composer hooks run unchanged against Peach's RNPulsar haptic engine.",
8005
8005
  working: "Presets catalog and System presets, Settings support/configuration methods, usePatternComposer parse/play/stop/release state, useRealtimeComposer set/playDiscrete/stop/isActive, useAdaptiveHaptics selection, haptic activity visualization with amplitude-scaled strength",
8006
8006
  missing: "physical Core Haptics or Android vibrator output, exact per-preset waveform and audio rendering, frequency rendering, background playback, hardware capability detection beyond the simulator engine"
8007
8007
  }
@@ -8108,7 +8108,7 @@ var init_registry = __esm({
8108
8108
  coverage: 0.93,
8109
8109
  note: "real Stripe.js delegation \u2014 initStripe() lazy-loads https://js.stripe.com/v3/ on first call (no upfront network cost), then every payment op (createPaymentMethod, confirmPayment, confirmSetupIntent, createToken, retrievePaymentIntent / SetupIntent, handleNextAction, verifyMicrodepositsForPayment / Setup) delegates to the real Stripe instance and talks to api.stripe.com over HTTPS. tokenization, payment intents, setup intents, and 3DS are the real implementation; errors are mapped into upstream StripeError shape. <CardField> / <CardForm> / <AuBECSDebitForm> / <PaymentMethodMessagingElement> mount real Stripe Elements iframes (PCI-compliant card collection). Apple Pay / Google Pay route through stripe.paymentRequest (the cross-platform abstraction). native PaymentSheet, CustomerSheet, AddressSheet, AddToWalletButton, and openApplePaySetup remain documented-unavailable (no web equivalents for the native bottom sheets / PassKit setup).",
8110
8110
  working: "real Stripe.js tokenization + intent flow \u2014 initStripe (loads js.stripe.com/v3 lazily, caches Stripe instance per publishableKey), createPaymentMethod (real), confirmPayment (real, via stripe.confirmCardPayment), confirmSetupIntent (real, via stripe.confirmCardSetup), createToken (real, via stripe.createToken \u2014 bank_account / pii / account; Card requires a mounted CardField), retrievePaymentIntent / retrieveSetupIntent (real), handleNextAction (real, via stripe.handleCardAction), handleNextActionForSetup (real, via stripe.handleNextAction), verifyMicrodepositsForPayment / Setup (real). real Stripe Elements: CardField / CardForm / AuBECSDebitForm / PaymentMethodMessagingElement mount stripe.elements().create(...) DOM iframes when wrapped in a StripeProvider. platform pay paths (confirmPlatformPayPayment / confirmPlatformPaySetupIntent / createPlatformPayPaymentMethod) route through stripe.paymentRequest \u2014 Apple Pay + Google Pay flow through the same browser PaymentRequest sheet Stripe.js abstracts. feature detection: isPlatformPaySupported via window.ApplePaySession.canMakePayments() + window.PaymentRequest. all upstream React surface: StripeProvider, useStripe / usePaymentSheet / usePlatformPay / useConfirmPayment / useConfirmSetupIntent / useApplePay / useGooglePay / useFinancialConnectionsSheet / useOnramp / useCustomerSheet hooks; StripeContainer / AddToWalletButton / AddressSheet / PlatformPayButton / CustomerSheet / ConnectComponentsProvider components; loadConnectAndInitialize, Constants (ApplePayContactFieldsType, ApplePayMerchantCapability, ApplePayShippingType, AndroidGooglePayButtonStyle / Type, IosGooglePayButtonType), all upstream error enums (Confirm/CardAction/Setup/CreatePayment/CreateToken/RetrievePayment/RetrieveSetup/ApplePay/PaymentSheet/Onramp/GooglePay/VerifyMicrodeposits/CollectBankAccount/AddressSheet/CustomerSheet/PlatformPay/Radar), CardBrand enum, PaymentMethodLayout, StripeError + ErrorType + MissingRoutingNumber",
8111
- missing: 'native PaymentSheet UI (the iOS-styled bottom drawer; web has stripe.elements().create("payment") as a primitive but the styled chrome differs). CustomerSheet / AddressSheet UI (no clean web equivalent). AddToWalletButton + openApplePaySetup (PassKit-only operations). createTokenForCVCUpdate (requires a mounted CardCvcElement). collectBankAccount* APIs (require a Financial Connections session token from the merchant server). raw Stripe Connect embedded components (would need @stripe/connect-js dep). when running inside the sootsim tenant worker (no `document`), Stripe.js cannot load \u2014 a future SootSim.bridges.stripe host helper would proxy DOM ops; the stub surfaces a typed error in that case so consumer code branches through error UI.'
8111
+ missing: 'native PaymentSheet UI (the iOS-styled bottom drawer; web has stripe.elements().create("payment") as a primitive but the styled chrome differs). CustomerSheet / AddressSheet UI (no clean web equivalent). AddToWalletButton + openApplePaySetup (PassKit-only operations). createTokenForCVCUpdate (requires a mounted CardCvcElement). collectBankAccount* APIs (require a Financial Connections session token from the merchant server). raw Stripe Connect embedded components (would need @stripe/connect-js dep). when running inside the peach tenant worker (no `document`), Stripe.js cannot load \u2014 a future SootSim.bridges.stripe host helper would proxy DOM ops; the stub surfaces a typed error in that case so consumer code branches through error UI.'
8112
8112
  }
8113
8113
  ]
8114
8114
  },
@@ -8197,7 +8197,7 @@ var init_registry = __esm({
8197
8197
  coverage: 0.9,
8198
8198
  note: "native-seam only \u2014 upstream index.js is the NativeModules.RNSettings export. sootsim registers the iOS-shaped RNSettings module with LOCATION_SETTING/DISABLED/ENABLED constants and getSetting(LOCATION_SETTING), resolving from the browser geolocation capability without prompting for permission.",
8199
8199
  working: "RNSettings default export, LOCATION_SETTING/DISABLED/ENABLED constants, getConstants, getSetting(LOCATION_SETTING) resolves ENABLED when geolocation exists and DISABLED otherwise, unknown setting rejection",
8200
- missing: "Android-only AIRPLANE_MODE_SETTING/CAPTIONING_SETTINGS/openSetting/event receivers; not part of the iOS SootSim contract"
8200
+ missing: "Android-only AIRPLANE_MODE_SETTING/CAPTIONING_SETTINGS/openSetting/event receivers; not part of the iOS Peach contract"
8201
8201
  }
8202
8202
  ]
8203
8203
  },
@@ -8248,7 +8248,7 @@ var init_registry = __esm({
8248
8248
  {
8249
8249
  range: ">=4.0.0",
8250
8250
  coverage: 0.5,
8251
- note: "the published SDK 57 package runs unchanged; SootSim iOS follows its upstream unsupported-platform implementation and returns hidden visibility while component/static setters remain load-safe",
8251
+ note: "the published SDK 57 package runs unchanged; Peach iOS follows its upstream unsupported-platform implementation and returns hidden visibility while component/static setters remain load-safe",
8252
8252
  working: "SDK 57 NavigationBar component and setStyle/setHidden statics through the published iOS entry",
8253
8253
  missing: "Android navigation-bar visibility and style effects, visibility events, OS contrast enforcement, and per-emulator navigation-bar dimensions"
8254
8254
  }
@@ -8289,9 +8289,9 @@ var init_registry = __esm({
8289
8289
  {
8290
8290
  range: ">=4.0.0",
8291
8291
  coverage: 0.9,
8292
- note: "the published two-function package runs unchanged; its native seam applies processed colors to the tenant-owned app root that SootSim synchronizes to the CanvasKit compositor",
8292
+ note: "the published two-function package runs unchanged; its native seam applies processed colors to the tenant-owned app root that Peach synchronizes to the CanvasKit compositor",
8293
8293
  working: "setBackgroundColorAsync and getBackgroundColorAsync round-trip the visible app-surface background, including React Native processed-color conversion; null restores the neutral app surface",
8294
- missing: "the value does not persist across simulator restarts, and null restores SootSim\u2019s neutral surface rather than the exact platform default color"
8294
+ missing: "the value does not persist across simulator restarts, and null restores Peach\u2019s neutral surface rather than the exact platform default color"
8295
8295
  }
8296
8296
  ]
8297
8297
  },
@@ -8330,7 +8330,7 @@ var init_registry = __esm({
8330
8330
  {
8331
8331
  range: ">=11.0.0",
8332
8332
  coverage: 0.93,
8333
- note: "package-local wrapper registers only the ExpoTaskManager native module; upstream expo-task-manager JS runs unchanged. isAvailableAsync returns false on web per upstream's documented unavailable shape (TaskManager.ts:286), so apps with graceful-degradation paths skip background-task registration correctly. SootSim is exactly as capable here as real expo-on-web (full JS surface + the same documented unavailable shape) \u2014 the only gaps are background execution primitives no browser has.",
8333
+ note: "package-local wrapper registers only the ExpoTaskManager native module; upstream expo-task-manager JS runs unchanged. isAvailableAsync returns false on web per upstream's documented unavailable shape (TaskManager.ts:286), so apps with graceful-degradation paths skip background-task registration correctly. Peach is exactly as capable here as real expo-on-web (full JS surface + the same documented unavailable shape) \u2014 the only gaps are background execution primitives no browser has.",
8334
8334
  working: "upstream defineTask/isTaskDefined validation, native EVENT_NAME, isAvailableAsync (false on web), isTaskRegisteredAsync, getTaskOptionsAsync, getRegisteredTasksAsync, unregisterTaskAsync, unregisterAllTasksAsync, notifyTaskFinishedAsync, native task execution events",
8335
8335
  missing: "persistent native EXTaskService storage, app relaunch/headless execution, real task execution while the browser tab is suspended (browsers do not have iOS Background Fetch / Android WorkManager)"
8336
8336
  }
@@ -8655,7 +8655,7 @@ var init_registry = __esm({
8655
8655
  {
8656
8656
  range: ">=3.0.0",
8657
8657
  coverage: 1,
8658
- note: "package JS is just `export default NativeModules.SplashScreen`; the real package runs from the bundle against the SplashScreen native seam. hide() snap-hides the sootsim canvas boot splash (mirrors ios/RNSplashScreen.m removeFromSuperview, no fade); show() returns immediately without re-showing, exactly as the booted-app native path where `waiting` is already false.",
8658
+ note: "package JS is just `export default NativeModules.SplashScreen`; the real package runs from the bundle against the SplashScreen native seam. hide() snap-hides the peach canvas boot splash (mirrors ios/RNSplashScreen.m removeFromSuperview, no fade); show() returns immediately without re-showing, exactly as the booted-app native path where `waiting` is already false.",
8659
8659
  working: "hide() (snap-hides the canvas splash), show() (no-op in a booted app, faithful)"
8660
8660
  }
8661
8661
  ]
@@ -8693,7 +8693,7 @@ var init_registry = __esm({
8693
8693
  {
8694
8694
  range: ">=5.0.0",
8695
8695
  coverage: 0,
8696
- note: "the reference iOS simulator receives simulated notifications and presents configured OneSignal in-app messages. SootSim returns no token, displays no message, and fires no events, so import safety receives no behavior credit",
8696
+ note: "the reference iOS simulator receives simulated notifications and presents configured OneSignal in-app messages. Peach returns no token, displays no message, and fires no events, so import safety receives no behavior credit",
8697
8697
  working: "initialize/login/logout/setConsentGiven/setConsentRequired (log to console), User tag/alias/email/sms add-remove (noop), User.getTags (empty), InAppMessages trigger (log to console), Debug.setLogLevel, LiveActivities.enter/exit, Session outcome methods, event listener registration",
8698
8698
  missing: "real push permission, actual subscription token/id (always null), opted-in status (always false), real in-app message display, location sharing, push opt-in actually working"
8699
8699
  }
@@ -8758,7 +8758,7 @@ var init_registry = __esm({
8758
8758
  {
8759
8759
  range: ">=12.0.0",
8760
8760
  coverage: 0,
8761
- note: "the reference iOS simulator presents Facebook login, share, message, and game-request flows when configured. SootSim cancels every dialog and returns no token or profile, so import safety receives no behavior credit",
8761
+ note: "the reference iOS simulator presents Facebook login, share, message, and game-request flows when configured. Peach cancels every dialog and returns no token or profile, so import safety receives no behavior credit",
8762
8762
  working: "Settings.setAppID/setClientToken/setGraphAPIVersion/setAutoLogAppEventsEnabled/setAdvertiserIDCollectionEnabled all accept calls, AppEventsLogger.logEvent/logPurchase log to console, all type shapes",
8763
8763
  missing: "logInWithPermissions always returns isCancelled:true, AccessToken.getCurrentAccessToken always null, Profile.getCurrentProfile always null, ShareDialog/MessageDialog/GameRequestDialog always isCancelled, no real Graph API, initializeSDK is noop"
8764
8764
  }
@@ -8823,7 +8823,7 @@ var init_registry = __esm({
8823
8823
  {
8824
8824
  range: ">=57.0.4 <58.0.0",
8825
8825
  coverage: 1,
8826
- note: "build-only \u2014 the published JavaScript entry exports null, and the npm package exists solely to autolink the native Swift/C++ ExpoModulesJSI framework used transitively by expo-modules-core; there is no runtime JavaScript API for SootSim to provide"
8826
+ note: "build-only \u2014 the published JavaScript entry exports null, and the npm package exists solely to autolink the native Swift/C++ ExpoModulesJSI framework used transitively by expo-modules-core; there is no runtime JavaScript API for Peach to provide"
8827
8827
  }
8828
8828
  ]
8829
8829
  },
@@ -8994,7 +8994,7 @@ var init_registry = __esm({
8994
8994
  {
8995
8995
  range: ">=1.0.0",
8996
8996
  coverage: 0,
8997
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: noop icon switching : correct for browser, useDynamicAppIcon hook is functional. imports and API shape receive no behavior credit",
8997
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: noop icon switching : correct for browser, useDynamicAppIcon hook is functional. imports and API shape receive no behavior credit",
8998
8998
  working: "setAppIcon, getAppIcon, useDynamicAppIcon"
8999
8999
  }
9000
9000
  ]
@@ -9021,7 +9021,7 @@ var init_registry = __esm({
9021
9021
  coverage: 0.75,
9022
9022
  note: "native-seam only \u2014 the real package JS runs from the bundle, parses colors with colord, and calls the RootViewBackground TurboModule. sootsim accepts and records the r/g/b/a native call; the visual root background remains owned by the rendered RN root view because there is no separate UIKit root view behind the canvas tenant tree.",
9023
9023
  working: "setRootViewBackgroundColor, colord parsing in upstream JS, RootViewBackground.setBackground(r,g,b,a) native call shape, channel clamping/acceptance",
9024
- missing: "actual UIKit rootViewController.view.backgroundColor mutation behind the canvas surface; use the RN root view style for visible background color in SootSim"
9024
+ missing: "actual UIKit rootViewController.view.backgroundColor mutation behind the canvas surface; use the RN root view style for visible background color in Peach"
9025
9025
  }
9026
9026
  ]
9027
9027
  },
@@ -9032,7 +9032,7 @@ var init_registry = __esm({
9032
9032
  {
9033
9033
  range: ">=0.2.0",
9034
9034
  coverage: 0,
9035
- note: "the reference iOS runtime applies the idle-timer flag through activate and deactivate. SootSim accepts both calls without changing that flag, so import safety receives no behavior credit",
9035
+ note: "the reference iOS runtime applies the idle-timer flag through activate and deactivate. Peach accepts both calls without changing that flag, so import safety receives no behavior credit",
9036
9036
  working: "activate, deactivate, useKeepAwake, KeepAwake component, KeepAwake TurboModule shape",
9037
9037
  missing: "actual UIApplication.idleTimerDisabled / browser Wake Lock acquisition from the tenant worker"
9038
9038
  }
@@ -9218,7 +9218,7 @@ var init_registry = __esm({
9218
9218
  {
9219
9219
  range: ">=3.1.0",
9220
9220
  coverage: 0.85,
9221
- note: "native-seam only \u2014 upstream expo-speech-recognition JS (ExpoWebSpeechRecognition, useSpeechRecognitionEvent, constants, and direct module API) runs unchanged from the bundle; SootSim registers only the ExpoSpeechRecognition native module, backed by the host-service SpeechRecognition bridge when available",
9221
+ note: "native-seam only \u2014 upstream expo-speech-recognition JS (ExpoWebSpeechRecognition, useSpeechRecognitionEvent, constants, and direct module API) runs unchanged from the bundle; Peach registers only the ExpoSpeechRecognition native module, backed by the host-service SpeechRecognition bridge when available",
9222
9222
  working: "ExpoSpeechRecognition native module start/stop/abort/state, native event addListener/remove, granted permission helpers, recognition availability, speech services/default-service helpers, supported-locales shape, iOS audio-session getters/setters; upstream ExpoWebSpeechRecognition class, grammar/list classes, hook, and constants stay authoritative",
9223
9223
  missing: "native SFSpeechRecognizer and Android SpeechRecognizer engines, audioSource transcription, recording persistence, locale installation data, offline model downloads, volume metering"
9224
9224
  }
@@ -9321,7 +9321,7 @@ var init_registry = __esm({
9321
9321
  {
9322
9322
  range: ">=0.30.0",
9323
9323
  coverage: 0.3,
9324
- note: "native-seam only: the published Nitro Modules entrypoint installs SootSim's HybridObject registry, but no native JSI bindings run",
9324
+ note: "native-seam only: the published Nitro Modules entrypoint installs Peach's HybridObject registry, but no native JSI bindings run",
9325
9325
  working: "published entrypoint and type exports, NitroModules metadata, registered createHybridObject factories, actionable errors for unregistered HybridObjects, hasHybridObject/getAllHybridObjectNames registry state, isRuntimeAlive false, callback wrapper, getHybridObjectConstructor",
9326
9326
  missing: "the native JSI framework implementation; package-specific HybridObjects work only where a separate compat seam registers them, and native memory accounting, ArrayBuffer ownership, cross-runtime boxed HybridObjects, and Nitro Views remain absent"
9327
9327
  }
@@ -9360,7 +9360,7 @@ var init_registry = __esm({
9360
9360
  {
9361
9361
  range: ">=19.0.0",
9362
9362
  coverage: 0,
9363
- note: "the reference iOS simulator presents Airship message-center and preference-center UI when configured. SootSim returns an unconfigured state and presents neither surface, so import safety receives no behavior credit",
9363
+ note: "the reference iOS simulator presents Airship message-center and preference-center UI when configured. Peach returns an unconfigured state and presents neither surface, so import safety receives no behavior credit",
9364
9364
  working: "AirshipRoot constructor + every getter, takeOff, isFlying, push.getNotificationStatus / enableUserNotifications / setForegroundPresentationOptions, contact identify/reset/getNamedUserId, messageCenter list / refresh / dismiss, channel get / addTag / removeTag / setTags, preferenceCenter open, named-user state, iOS.liveActivityManager (every method resolves), addListener / removeAllListeners on UAEventEmitter, all 60+ TurboModule Spec methods accept calls without throwing",
9365
9365
  missing: "no Urban Airship SAAS backend \u2014 no real push delivery, no remote-config / engage / journey events, no Live Activity binding to ActivityKit, no actual notification permission grant; the seam acknowledges listener registration but never fires events"
9366
9366
  }
@@ -9385,7 +9385,7 @@ var init_registry = __esm({
9385
9385
  {
9386
9386
  range: ">=2.0.0",
9387
9387
  coverage: 0,
9388
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: load-only stub: getConstants returns PROFILE_KEYS / PUSH_TOKEN_VENDOR / EVENT_NAMES so the bundle initializes; calls are no-ops (no real analytics, push, or in-app forms). imports and API shape receive no behavior credit",
9388
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: load-only stub: getConstants returns PROFILE_KEYS / PUSH_TOKEN_VENDOR / EVENT_NAMES so the bundle initializes; calls are no-ops (no real analytics, push, or in-app forms). imports and API shape receive no behavior credit",
9389
9389
  working: "KlaviyoReactNativeSdk.getConstants(), Klaviyo namespace + Profile/Push/Forms/DeepLink/Geofencing methods (no-op), ProfileProperty enum"
9390
9390
  }
9391
9391
  ]
@@ -9401,7 +9401,7 @@ var init_registry = __esm({
9401
9401
  {
9402
9402
  range: ">=8.0.0",
9403
9403
  coverage: 0,
9404
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: intentional noop : wdyr mutates React internals and crashes sootsim's bridged React. imports and API shape receive no behavior credit",
9404
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: intentional noop : wdyr mutates React internals and crashes sootsim's bridged React. imports and API shape receive no behavior credit",
9405
9405
  working: "default export callable as wdyr(React, opts) without error"
9406
9406
  }
9407
9407
  ]
@@ -9452,7 +9452,7 @@ var init_registry = __esm({
9452
9452
  {
9453
9453
  range: ">=55.0.0",
9454
9454
  coverage: 0.85,
9455
- note: "tooling-only \u2014 Metro injects this package into development bundles; SootSim supports its location, server-log, rejection-tracking, refresh, and bootstrap helpers as bundler/runtime infrastructure rather than an application-facing API",
9455
+ note: "tooling-only \u2014 Metro injects this package into development bundles; Peach supports its location, server-log, rejection-tracking, refresh, and bootstrap helpers as bundler/runtime infrastructure rather than an application-facing API",
9456
9456
  working: "runtime entrypoint, location polyfill install, RSC runtime import, web getDevServer path, development log capture and promise rejection tracking on supported globals",
9457
9457
  missing: "native reload/logbox paths depend on RN DevSettings and internal native LogBox behavior; production app functionality is unaffected"
9458
9458
  }
@@ -9487,7 +9487,7 @@ var init_registry = __esm({
9487
9487
  {
9488
9488
  range: ">=1.0.0",
9489
9489
  coverage: 0.8,
9490
- note: "native-seam only: the real Palette class runs from the bundle against an RNPalette module backed by SootSim's shared browser image and canvas sampler",
9490
+ note: "native-seam only: the real Palette class runs from the bundle against an RNPalette module backed by Peach's shared browser image and canvas sampler",
9491
9491
  working: "remote URL and browser-loadable URI inputs, named vibrant/muted swatch object, full swatch list, color/population/percentage result shape, and rejected image downloads",
9492
9492
  missing: "the exact iOS median-cut Palette target scoring algorithm and native filesystem paths outside browser-loadable URLs"
9493
9493
  }
@@ -9619,7 +9619,7 @@ var init_registry = __esm({
9619
9619
  {
9620
9620
  range: ">=8.0.0",
9621
9621
  coverage: 0.6,
9622
- note: "telemetry calls may remain unavailable by scoring policy, but the reference iOS simulator presents the messenger and help-center UI that SootSim omits",
9622
+ note: "telemetry calls may remain unavailable by scoring policy, but the reference iOS simulator presents the messenger and help-center UI that Peach omits",
9623
9623
  working: "full upstream JS surface (Intercom object + correct enums + IntercomEvents); initialize, login/logout/updateUser/setUserHash/setUserJwt, logEvent, present* (accepted), help-center collection/article/search (empty), getUnreadConversationCount (0), visibility/padding/theme/loglevel setters, push token, event-listener wiring",
9624
9624
  missing: "no chat UI presentation, no help center fetches return real data, no push token delivery to Intercom servers"
9625
9625
  }
@@ -9632,7 +9632,7 @@ var init_registry = __esm({
9632
9632
  {
9633
9633
  range: ">=10.0.0",
9634
9634
  coverage: 0,
9635
- note: "the reference iOS simulator presents Braze in-app messages and content cards. SootSim accepts the API calls but presents neither surface, so import safety receives no behavior credit",
9635
+ note: "the reference iOS simulator presents Braze in-app messages and content cards. Peach accepts the API calls but presents neither surface, so import safety receives no behavior credit",
9636
9636
  working: "full upstream JS surface (Braze singleton + all setters/loggers, models, in-app-message UI, ContentCardTypes); changeUser/identity, custom events/purchases/attributes (locally accepted), content cards / banners / feature flags resolve empty, in-app-message + push permission APIs, getInitialURL/PushPayload, location + ad-tracking setters, listener registration",
9637
9637
  missing: "no Braze backend \u2014 no event/session delivery, no remote content cards / banners / feature flags, no push token registration, no server-driven in-app messages; intentionally absent for the development simulator"
9638
9638
  }
@@ -9707,7 +9707,7 @@ var init_registry = __esm({
9707
9707
  {
9708
9708
  range: ">=4.0.0",
9709
9709
  coverage: 0,
9710
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: native-seam only: the real customerio-reactnative runs from the bundle (CustomerIO object, CioRegion/CioLogLevel/CioPushPermissionStatus enums, in-app/push/notification-inbox wrappers : all upstream JS, no fabricated values). we stub only the five codegen modules (NativeCustomerIO/Logging/Location/MessagingPush/MessagingInApp), mirroring src/specs/modules/*@6.x exactly: calls accepted, getMessages/token empty, push permission reports NOTDETERMINED (fresh-sim), event-emitter properties return removable no-op subscriptions. per docs/compat-scoring.md analytics rule, delivery is intentionally absent. imports and API shape receive no behavior credit",
9710
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: native-seam only: the real customerio-reactnative runs from the bundle (CustomerIO object, CioRegion/CioLogLevel/CioPushPermissionStatus enums, in-app/push/notification-inbox wrappers : all upstream JS, no fabricated values). we stub only the five codegen modules (NativeCustomerIO/Logging/Location/MessagingPush/MessagingInApp), mirroring src/specs/modules/*@6.x exactly: calls accepted, getMessages/token empty, push permission reports NOTDETERMINED (fresh-sim), event-emitter properties return removable no-op subscriptions. per docs/compat-scoring.md analytics rule, delivery is intentionally absent. imports and API shape receive no behavior credit",
9711
9711
  working: "full upstream JS surface (CustomerIO object + correct enums + in-app/push/inbox wrappers); initialize/identify/track/screen, profile+device attributes, device-token register/delete, trackMetric, push receipt/permission APIs, in-app dismiss + inbox getMessages/mark/track, all three event-emitter subscriptions (no-op removable)",
9712
9712
  missing: "no events sent, no profile sync, no in-app messages displayed, push token not registered"
9713
9713
  }
@@ -9760,7 +9760,7 @@ var init_registry = __esm({
9760
9760
  {
9761
9761
  range: ">=1.0.0",
9762
9762
  coverage: 0,
9763
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: native-seam only: the real @iterable/react-native-sdk runs from the bundle (the Iterable class, inbox/embedded/in-app managers, and the authoritative enums : all upstream JS, no fabricated enum values). we stub only the RNIterableAPI TurboModule, mirroring src/api/NativeRNIterableAPI.ts@2.x (Spec) exactly: init resolves true (SDK initialized but offline), every getter returns the inert no-data value, handleAppLink resolves false so app routing takes over. per docs/compat-scoring.md analytics rule, delivery is intentionally absent. imports and API shape receive no behavior credit",
9763
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: native-seam only: the real @iterable/react-native-sdk runs from the bundle (the Iterable class, inbox/embedded/in-app managers, and the authoritative enums : all upstream JS, no fabricated enum values). we stub only the RNIterableAPI TurboModule, mirroring src/api/NativeRNIterableAPI.ts@2.x (Spec) exactly: init resolves true (SDK initialized but offline), every getter returns the inert no-data value, handleAppLink resolves false so app routing takes over. per docs/compat-scoring.md analytics rule, delivery is intentionally absent. imports and API shape receive no behavior credit",
9764
9764
  working: "full upstream JS surface (Iterable class + inbox/embedded managers + correct enums); initialize, setEmail/UserId, in-app + inbox + embedded message getters (empty), track* events, commerce, updateUser/Email/subscriptions, attribution, session + embedded-impression tracking, auth token, listener registration",
9765
9765
  missing: "no push registration with Iterable backend, no in-app/embedded message fetch, no email/userId persisted server-side \u2014 intentionally absent for the development simulator (no Iterable backend)"
9766
9766
  }
@@ -9773,7 +9773,7 @@ var init_registry = __esm({
9773
9773
  {
9774
9774
  range: ">=14.0.0",
9775
9775
  coverage: 0,
9776
- note: "the reference iOS simulator renders Google test ads and presents consent flows. the SootSim replacement only initializes to an empty adapter set and reports consent not required; it cannot create an ad through the current public factories. import safety and fabricated no-fill shapes receive no behavior credit",
9776
+ note: "the reference iOS simulator renders Google test ads and presents consent flows. the Peach replacement only initializes to an empty adapter set and reports consent not required; it cannot create an ad through the current public factories. import safety and fabricated no-fill shapes receive no behavior credit",
9777
9777
  working: "default initialize returns an empty adapter set; AdsConsent returns a non-requesting placeholder state; RewardedAdEventType, AdEventType, AdsConsentStatus, AdsConsentDebugGeography, BannerAdSize, MaxAdContentRating, and TestIds constants are present",
9778
9778
  missing: "real ad delivery and consent UI; InterstitialAd / RewardedAd / RewardedInterstitialAd / AppOpenAd / GAM* createForAdRequest factories, BannerAd / GAMBannerAd, NativeAd / NativeAdView / NativeMediaView / NativeAsset, hooks, upstream validation, loaded state, and public event behavior"
9779
9779
  }
@@ -9837,7 +9837,7 @@ var init_registry = __esm({
9837
9837
  {
9838
9838
  range: ">=8.0.0",
9839
9839
  coverage: 0,
9840
- note: "the reference iOS simulator renders configured RevenueCat paywalls. SootSim's replacement returns NOT_PRESENTED, rejects customer center, and substitutes async no-ops for view components. the current 10.7 package ships its own visibly labeled Preview API components, but replacing the package prevents that upstream path from running. none of these shapes receive behavior credit",
9840
+ note: "the reference iOS simulator renders configured RevenueCat paywalls. Peach's replacement returns NOT_PRESENTED, rejects customer center, and substitutes async no-ops for view components. the current 10.7 package ships its own visibly labeled Preview API components, but replacing the package prevents that upstream path from running. none of these shapes receive behavior credit",
9841
9841
  working: "RevenueCatUI singleton, presentPaywall (NOT_PRESENTED), presentPaywallIfNeeded (NOT_PRESENTED), presentCustomerCenter (rejects clearly), PAYWALL_RESULT enum (NOT_PRESENTED, ERROR, CANCELLED, PURCHASED, RESTORED)",
9842
9842
  missing: "configured paywall and customer-center UI, Paywall / OriginalTemplatePaywallFooterContainerView / CustomerCenterView components, dismiss and purchase/restore callbacks, purchase logic, custom variables, management events, and the package-owned Preview API path"
9843
9843
  }
@@ -9911,7 +9911,7 @@ var init_registry = __esm({
9911
9911
  {
9912
9912
  range: ">=4.0.0",
9913
9913
  coverage: 0,
9914
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: setupPlayer/queue ops/playback controls accepted; getPlaybackState returns State.None; full Event / Capability / RepeatMode / RatingType / IOSCategory enum surface; useTrackPlayerEvents/useProgress/useActiveTrack/usePlaybackState/usePlayWhenReady/useIsPlaying hooks return idle defaults. imports and API shape receive no behavior credit",
9914
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: setupPlayer/queue ops/playback controls accepted; getPlaybackState returns State.None; full Event / Capability / RepeatMode / RatingType / IOSCategory enum surface; useTrackPlayerEvents/useProgress/useActiveTrack/usePlaybackState/usePlayWhenReady/useIsPlaying hooks return idle defaults. imports and API shape receive no behavior credit",
9915
9915
  missing: 'no MPMediaPlayer / ExoPlayer integration; no MediaSession / lock-screen controls (browsers have MediaSession but the API surface diverges). State machine stays in None so apps branch on "not playing"'
9916
9916
  }
9917
9917
  ]
@@ -9948,7 +9948,7 @@ var init_registry = __esm({
9948
9948
  {
9949
9949
  range: ">=0.13.0",
9950
9950
  coverage: 0,
9951
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: Zeroconf class with on/off/scan/stop/publishService/getServices accepts every call; no events ever fire so apps with discovery-required UI take their no-services branch. imports and API shape receive no behavior credit",
9951
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: Zeroconf class with on/off/scan/stop/publishService/getServices accepts every call; no events ever fire so apps with discovery-required UI take their no-services branch. imports and API shape receive no behavior credit",
9952
9952
  missing: "no mDNS / Bonjour discovery \u2014 browsers have no local network discovery API"
9953
9953
  }
9954
9954
  ]
@@ -9960,7 +9960,7 @@ var init_registry = __esm({
9960
9960
  {
9961
9961
  range: ">=4.0.0",
9962
9962
  coverage: 0,
9963
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: ready() resolves with enabled=false; configure/start/stop accepted; all on* listeners register but never fire; getProviderState reports gps:false; getCurrentPosition rejects so apps branch on geolocation-unavailable. imports and API shape receive no behavior credit",
9963
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: ready() resolves with enabled=false; configure/start/stop accepted; all on* listeners register but never fire; getProviderState reports gps:false; getCurrentPosition rejects so apps branch on geolocation-unavailable. imports and API shape receive no behavior credit",
9964
9964
  missing: "no background process \u2014 browsers have no equivalent to the iOS background-fetch / Android foreground service that this SDK schedules. AuthorizationStatus exposed for type-checked code"
9965
9965
  }
9966
9966
  ]
@@ -9984,7 +9984,7 @@ var init_registry = __esm({
9984
9984
  {
9985
9985
  range: ">=2.0.0",
9986
9986
  coverage: 0,
9987
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: prevent/allow/preventForCapture/preventForScreenshot/preventForScreenRecord accepted; getPreventStatus reports allow/allow; useCaptureProtection hook returns idle status. apps with screenshot-blocking UI run unaffected. imports and API shape receive no behavior credit",
9987
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: prevent/allow/preventForCapture/preventForScreenshot/preventForScreenRecord accepted; getPreventStatus reports allow/allow; useCaptureProtection hook returns idle status. apps with screenshot-blocking UI run unaffected. imports and API shape receive no behavior credit",
9988
9988
  missing: "browsers have no screenshot / screen-recording prevention. CaptureProtectionStatus enum exposed"
9989
9989
  }
9990
9990
  ]
@@ -10009,7 +10009,7 @@ var init_registry = __esm({
10009
10009
  {
10010
10010
  range: ">=5.0.0",
10011
10011
  coverage: 0,
10012
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: Notifications.events() returns subscribers that never fire; registerRemoteNotifications accepts the call without registering; postLocalNotification returns 0; ios/android namespaces accept badge / channel / category ops; isRegisteredForRemoteNotifications=false. imports and API shape receive no behavior credit",
10012
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: Notifications.events() returns subscribers that never fire; registerRemoteNotifications accepts the call without registering; postLocalNotification returns 0; ios/android namespaces accept badge / channel / category ops; isRegisteredForRemoteNotifications=false. imports and API shape receive no behavior credit",
10013
10013
  missing: "no APNs / FCM token registration; no native notification UI delivered. recommended swap: expo-notifications which sootsim renders through the shell-native UI provider"
10014
10014
  }
10015
10015
  ]
@@ -10021,7 +10021,7 @@ var init_registry = __esm({
10021
10021
  {
10022
10022
  range: ">=0.27.0",
10023
10023
  coverage: 0.75,
10024
- note: "upstream WatermelonDB runs over a real asynchronous WMDatabaseBridge backed by SootSim's persistent browser SQLite engine; apps requesting JSI use WatermelonDB's supported asynchronous fallback",
10024
+ note: "upstream WatermelonDB runs over a real asynchronous WMDatabaseBridge backed by Peach's persistent browser SQLite engine; apps requesting JSI use WatermelonDB's supported asynchronous fallback",
10025
10025
  working: "database initialization, schema setup and migrations, find/query/queryIds/raw queries/count, transactional batch and batchJSON writes, reset/vacuum/multi-statement execution, record caching, and local storage",
10026
10026
  missing: "synchronous nativeWatermelonCreateAdapter JSI dispatch, queryAsArray compression, unsafeLoadFromSync/provideSyncJson turbo sync, native exclusive locking, and unsafe native connection reuse"
10027
10027
  }
@@ -10047,7 +10047,7 @@ var init_registry = __esm({
10047
10047
  {
10048
10048
  range: ">=2.0.0",
10049
10049
  coverage: 0,
10050
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: registerGlobals is a noop; AudioSession namespace accepts startAudioSession/stopAudioSession/configureAudio/selectAudioOutput; setupURLPolyfill noop. recommended swap on web: livekit-client directly. imports and API shape receive no behavior credit",
10050
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: registerGlobals is a noop; AudioSession namespace accepts startAudioSession/stopAudioSession/configureAudio/selectAudioOutput; setupURLPolyfill noop. recommended swap on web: livekit-client directly. imports and API shape receive no behavior credit",
10051
10051
  missing: "no native LiveKit RTC bindings \u2014 browsers have WebRTC but lack LiveKit's background-audio + hardware-codec extensions. registerForPushNotifications rejects"
10052
10052
  }
10053
10053
  ]
@@ -10107,7 +10107,7 @@ var init_registry = __esm({
10107
10107
  {
10108
10108
  range: ">=1.0.0",
10109
10109
  coverage: 0.6,
10110
- note: "the random-value and storage helpers use SootSim primitives, but computeS3Etag and device identity return placeholders while the reference iOS simulator computes real results",
10110
+ note: "the random-value and storage helpers use Peach primitives, but computeS3Etag and device identity return placeholders while the reference iOS simulator computes real results",
10111
10111
  missing: "no real AWS SDK calls (Amplify's data-layer talks over fetch/WebSocket which is what runs anyway). flagged 0.5 because no app-side end-to-end coverage yet"
10112
10112
  }
10113
10113
  ]
@@ -10119,7 +10119,7 @@ var init_registry = __esm({
10119
10119
  {
10120
10120
  range: ">=0.7.0",
10121
10121
  coverage: 0.9,
10122
- note: "native-seam only. Real react-native-quick-crypto JS runs from the bundle against either a SootSim-provided global.__QuickCryptoProxy or registered Nitro hybrid objects. The seam implements random, hash/HMAC, PBKDF2, AES-CBC/CTR/GCM, AES secret-key handles, and asynchronous RSA-OAEP WebCrypto key generation and encryption.",
10122
+ note: "native-seam only. Real react-native-quick-crypto JS runs from the bundle against either a Peach-provided global.__QuickCryptoProxy or registered Nitro hybrid objects. The seam implements random, hash/HMAC, PBKDF2, AES-CBC/CTR/GCM, AES secret-key handles, and asynchronous RSA-OAEP WebCrypto key generation and encryption.",
10123
10123
  working: "upstream package JS and export surface, global __QuickCryptoProxy and Nitro hybrid-object install before module evaluation, random/randomFill/getRandomValues via upstream JS, createHash/createHmac host objects, pbkdf2 callback/promise form and pbkdf2Sync, AES-CBC/GCM/CTR host ciphers, AES WebCrypto secret-key import/export and encrypt/decrypt, RSA-OAEP subtle.generateKey plus JWK export/import and encrypt/decrypt",
10124
10124
  missing: "synchronous RSA key generation and publicEncrypt/publicDecrypt/privateDecrypt, createSign/createVerify, ECDH WebCrypto key paths, general asymmetric DER import, AES-KW, and legacy ciphers such as DES/RC4/ChaCha20."
10125
10125
  }
@@ -10132,7 +10132,7 @@ var init_registry = __esm({
10132
10132
  {
10133
10133
  range: ">=0.3.0",
10134
10134
  coverage: 0.55,
10135
- note: "small compatibility surface backed by the react-native-quick-crypto native proxy for existing SootSim callers; this is not the quick-crypto package replacement and should be replaced by a native-seam-only Nitro Modules implementation when that package becomes a priority.",
10135
+ note: "small compatibility surface backed by the react-native-quick-crypto native proxy for existing Peach callers; this is not the quick-crypto package replacement and should be replaced by a native-seam-only Nitro Modules implementation when that package becomes a priority.",
10136
10136
  working: "createHash plus subtle/webcrypto references for load-safe consumers",
10137
10137
  missing: "full upstream react-native-nitro-crypto package JS/native contract is not modeled yet"
10138
10138
  }
@@ -10195,7 +10195,7 @@ var init_registry = __esm({
10195
10195
  {
10196
10196
  range: ">=2.0.0",
10197
10197
  coverage: 0,
10198
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: UnistylesRuntime exposes plausible iOS portrait defaults (insets matching iPhone safe-area, screen 393x852, fontScale 1, pixelRatio 3); StyleSheet/mq/withUnistyles passthrough; useUnistyles returns a {rt, theme} shape. imports and API shape receive no behavior credit",
10198
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: UnistylesRuntime exposes plausible iOS portrait defaults (insets matching iPhone safe-area, screen 393x852, fontScale 1, pixelRatio 3); StyleSheet/mq/withUnistyles passthrough; useUnistyles returns a {rt, theme} shape. imports and API shape receive no behavior credit",
10199
10199
  missing: "no breakpoint-driven rebuilds (browsers can do this via CSS but the unistyles state machine needs JSI hooks). theme switching via setTheme is a noop"
10200
10200
  }
10201
10201
  ]
@@ -10207,7 +10207,7 @@ var init_registry = __esm({
10207
10207
  {
10208
10208
  range: ">=8.0.0",
10209
10209
  coverage: 0,
10210
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: Rive component renders null (no native renderer in browser); Fit/Alignment/Direction/LoopMode/RiveRenderer enums exposed for type-checked code. imports and API shape receive no behavior credit",
10210
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: Rive component renders null (no native renderer in browser); Fit/Alignment/Direction/LoopMode/RiveRenderer enums exposed for type-checked code. imports and API shape receive no behavior credit",
10211
10211
  missing: "no Rive .riv runtime \u2014 would need shipping the Rive WASM and wiring a canvas (deferred). apps that use Rive for branding/loading animations run cleanly without the visual"
10212
10212
  }
10213
10213
  ]
@@ -10231,7 +10231,7 @@ var init_registry = __esm({
10231
10231
  {
10232
10232
  range: ">=0.5.0",
10233
10233
  coverage: 0.92,
10234
- note: "native-seam only - upstream Galeria root / Galeria.Image / context run from the bundle; the Expo Galeria view manager opens SootSim's shared image viewer with thumbnail transition, Galeria-specific chrome, swipe, pinch, rotation, double-tap zoom, and dismiss",
10234
+ note: "native-seam only - upstream Galeria root / Galeria.Image / context run from the bundle; the Expo Galeria view manager opens Peach's shared image viewer with thumbnail transition, Galeria-specific chrome, swipe, pinch, rotation, double-tap zoom, and dismiss",
10235
10235
  working: "Galeria root, Galeria.Image, grouped urls, Image.resolveAssetSource mapping, tap-to-open from thumbnail, grouped thumbnail registry for close transitions, fullscreen viewer, adjacent-image swipe, pinch/rotate/double-tap zoom, vertical dismiss, close control, right nav action callback, page indicators, hidePageIndicators, hideBlurOverlay, light/dark theme, onIndexChange, onDismiss, onLongPress",
10236
10236
  missing: "SF Symbol names render as textual controls instead of exact symbol glyphs; no native blur effect when blur overlay is shown; natural image dimensions are async and fall back to screen aspect until measured"
10237
10237
  }
@@ -10269,7 +10269,7 @@ var init_registry = __esm({
10269
10269
  {
10270
10270
  range: ">=2.0.0",
10271
10271
  coverage: 0,
10272
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: TrueSheet component passes children through; present/dismiss/resize/scrollToTop ref methods accepted as noops. imports and API shape receive no behavior credit",
10272
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: TrueSheet component passes children through; present/dismiss/resize/scrollToTop ref methods accepted as noops. imports and API shape receive no behavior credit",
10273
10273
  missing: "no native bottom-sheet UI. recommended swap on web: a regular sootsim modal \u2014 sootsim already simulates iOS sheet semantics natively"
10274
10274
  }
10275
10275
  ]
@@ -10329,7 +10329,7 @@ var init_registry = __esm({
10329
10329
  {
10330
10330
  range: ">=1.0.0",
10331
10331
  coverage: 0,
10332
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: ContextMenuView passes children through; long-press shows nothing instead of a native UIContextMenu. apps still render their primary content correctly. imports and API shape receive no behavior credit",
10332
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: ContextMenuView passes children through; long-press shows nothing instead of a native UIContextMenu. apps still render their primary content correctly. imports and API shape receive no behavior credit",
10333
10333
  missing: "no native context menu \u2014 recommended swap on web: a tap-on-icon menu via Pressable + Modal"
10334
10334
  }
10335
10335
  ]
@@ -10354,7 +10354,7 @@ var init_registry = __esm({
10354
10354
  {
10355
10355
  range: ">=14.0.0",
10356
10356
  coverage: 0,
10357
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: Camera component renders null; CameraType / FlashMode / FocusMode / ZoomMode / ResizeMode / ScanBarcodeAlgorithm constants exposed; capture rejects; permission helpers return denied. imports and API shape receive no behavior credit",
10357
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: Camera component renders null; CameraType / FlashMode / FocusMode / ZoomMode / ResizeMode / ScanBarcodeAlgorithm constants exposed; capture rejects; permission helpers return denied. imports and API shape receive no behavior credit",
10358
10358
  missing: "no native camera \u2014 recommended swap on web: expo-camera which uses getUserMedia. type-checked imports compile against this stub"
10359
10359
  }
10360
10360
  ]
@@ -10366,7 +10366,7 @@ var init_registry = __esm({
10366
10366
  {
10367
10367
  range: ">=4.0.0",
10368
10368
  coverage: 0,
10369
- note: "the reference iOS simulator creates Agora RTC engines and joins calls. SootSim throws when either engine constructor is called, so error shape receives no behavior credit",
10369
+ note: "the reference iOS simulator creates Agora RTC engines and joins calls. Peach throws when either engine constructor is called, so error shape receives no behavior credit",
10370
10370
  missing: "no Agora SDK on web here \u2014 recommended swap: use the Agora Web SDK directly through a host iframe"
10371
10371
  }
10372
10372
  ]
@@ -10378,7 +10378,7 @@ var init_registry = __esm({
10378
10378
  {
10379
10379
  range: ">=0.1.0",
10380
10380
  coverage: 0.58,
10381
- note: "native-seam only \u2014 the published AppleMaps and GoogleMaps namespaces, enums, permission hook, event unwrapping, and view wrappers run unchanged over SootSim's shared MapLibre-backed map owner",
10381
+ note: "native-seam only \u2014 the published AppleMaps and GoogleMaps namespaces, enums, permission hook, event unwrapping, and view wrappers run unchanged over Peach's shared MapLibre-backed map owner",
10382
10382
  working: "AppleMaps.View and GoogleMaps.View live map rendering, initial and imperative camera positions, pan/pinch/rotate/tilt gesture settings, default markers, camera-move events, map-loaded callback, marker camera selection, location permission checks and requests",
10383
10383
  missing: "map/marker/shape click callbacks, polylines, polygons, circles, annotations, custom marker icons, Google Street View, Apple Look Around, traffic/building/indoor layers, platform-specific map styling and POI filtering"
10384
10384
  }
@@ -10419,7 +10419,7 @@ var init_registry = __esm({
10419
10419
  {
10420
10420
  range: ">=1.0.0",
10421
10421
  coverage: 0,
10422
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: EnrichedTextEditor / EnrichedTextInputView / EnrichedTextRenderer pass children through. imports and API shape receive no behavior credit",
10422
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: EnrichedTextEditor / EnrichedTextInputView / EnrichedTextRenderer pass children through. imports and API shape receive no behavior credit",
10423
10423
  missing: "no native rich-text editing \u2014 use contenteditable or a lib like @10play/tentap-editor for web"
10424
10424
  }
10425
10425
  ]
@@ -10456,7 +10456,7 @@ var init_registry = __esm({
10456
10456
  {
10457
10457
  range: ">=0.1.0",
10458
10458
  coverage: 0,
10459
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: EmojiPopup component passes children through; OS emoji input is the right path on web. imports and API shape receive no behavior credit",
10459
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: EmojiPopup component passes children through; OS emoji input is the right path on web. imports and API shape receive no behavior credit",
10460
10460
  missing: "no native emoji picker UI in browser preview"
10461
10461
  }
10462
10462
  ]
@@ -10491,7 +10491,7 @@ var init_registry = __esm({
10491
10491
  {
10492
10492
  range: ">=2.0.0",
10493
10493
  coverage: 0,
10494
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: full singleton + push permission + inbox API accepted; no telemetry delivered. imports and API shape receive no behavior credit",
10494
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: full singleton + push permission + inbox API accepted; no telemetry delivered. imports and API shape receive no behavior credit",
10495
10495
  missing: "no real analytics / in-app messaging / push delivery"
10496
10496
  }
10497
10497
  ]
@@ -10503,7 +10503,7 @@ var init_registry = __esm({
10503
10503
  {
10504
10504
  range: ">=1.0.0",
10505
10505
  coverage: 0,
10506
- note: "the reference iOS simulator renders the LiquidGlassView effect. SootSim passes children through without connecting the view to its blur primitives, so import safety receives no behavior credit",
10506
+ note: "the reference iOS simulator renders the LiquidGlassView effect. Peach passes children through without connecting the view to its blur primitives, so import safety receives no behavior credit",
10507
10507
  missing: "no native iOS visual effect; consumers can substitute expo-blur which we already polyfill"
10508
10508
  }
10509
10509
  ]
@@ -10515,7 +10515,7 @@ var init_registry = __esm({
10515
10515
  {
10516
10516
  range: ">=5.0.0",
10517
10517
  coverage: 0,
10518
- note: "the reference iOS simulator Shake Gesture triggers the package event. SootSim registers subscribers that never fire, so import safety receives no behavior credit",
10518
+ note: "the reference iOS simulator Shake Gesture triggers the package event. Peach registers subscribers that never fire, so import safety receives no behavior credit",
10519
10519
  missing: "real device motion \u2014 same constraint as the iOS simulator. recommended on web: DeviceMotion API with user permission gesture"
10520
10520
  }
10521
10521
  ]
@@ -10527,7 +10527,7 @@ var init_registry = __esm({
10527
10527
  {
10528
10528
  range: ">=1.0.0",
10529
10529
  coverage: 0,
10530
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: initialize=false / isInitialized=false. imports and API shape receive no behavior credit",
10530
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: initialize=false / isInitialized=false. imports and API shape receive no behavior credit",
10531
10531
  missing: "browsers cannot intercept TLS; SSL pinning is a native-only concern"
10532
10532
  }
10533
10533
  ]
@@ -10563,7 +10563,7 @@ var init_registry = __esm({
10563
10563
  {
10564
10564
  range: ">=2.0.0",
10565
10565
  coverage: 0,
10566
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: getVolume returns 0.5; setVolume / showNativeVolumeUI accepted; isInSilentMode=false; listeners never fire. imports and API shape receive no behavior credit",
10566
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: getVolume returns 0.5; setVolume / showNativeVolumeUI accepted; isInSilentMode=false; listeners never fire. imports and API shape receive no behavior credit",
10567
10567
  missing: "browsers cannot modify system volume; only the per-element <audio> volume is mutable from JS"
10568
10568
  }
10569
10569
  ]
@@ -10575,7 +10575,7 @@ var init_registry = __esm({
10575
10575
  {
10576
10576
  range: ">=7.0.0",
10577
10577
  coverage: 0.65,
10578
- note: "native-seam only - upstream Commands, NavigationDelegate, ComponentRegistry, option processing, and enums run unchanged; RNNBridgeModule mounts registered screens into a SootSim host and RNNEventEmitter delivers launch, lifecycle, and command events",
10578
+ note: "native-seam only - upstream Commands, NavigationDelegate, ComponentRegistry, option processing, and enums run unchanged; RNNBridgeModule mounts registered screens into a Peach host and RNNEventEmitter delivers launch, lifecycle, and command events",
10579
10579
  working: "app launch, setRoot, push, setStackRoot, showModal, registered screen rendering with passProps/componentId, component lifecycle and command completion events, constants, and modal host rendering",
10580
10580
  missing: "no retained native stack or simultaneous modal/overlay tree: pop and dismiss emit contract events but do not restore an earlier screen; bottom tabs, side menus, and split views currently render their first component leaf; native navigation chrome/options are not painted"
10581
10581
  }
@@ -10612,7 +10612,7 @@ var init_registry = __esm({
10612
10612
  {
10613
10613
  range: ">=4.0.0",
10614
10614
  coverage: 0,
10615
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: GiphySDK.configure noop; GiphyDialog.show/hide accept; GiphyContent.searchQuery / trending construct config objects; full Direction / MediaType / Rating / Theme / ContentType / ImageType enum surface. imports and API shape receive no behavior credit",
10615
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: GiphySDK.configure noop; GiphyDialog.show/hide accept; GiphyContent.searchQuery / trending construct config objects; full Direction / MediaType / Rating / Theme / ContentType / ImageType enum surface. imports and API shape receive no behavior credit",
10616
10616
  missing: "no native picker UI; no real GIF delivery. recommended swap: @giphy/js-sdk + custom React UI on web"
10617
10617
  }
10618
10618
  ]
@@ -10685,7 +10685,7 @@ var init_registry = __esm({
10685
10685
  {
10686
10686
  range: ">=21.0.0",
10687
10687
  coverage: 0,
10688
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: isMessagesDisplaySuppressed=false / setMessagesDisplaySuppressed accepted; isAutomaticDataCollectionEnabled=true; triggerEvent accepted but no IAM displayed. imports and API shape receive no behavior credit",
10688
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: isMessagesDisplaySuppressed=false / setMessagesDisplaySuppressed accepted; isAutomaticDataCollectionEnabled=true; triggerEvent accepted but no IAM displayed. imports and API shape receive no behavior credit",
10689
10689
  missing: "no native IAM UI in browser preview"
10690
10690
  }
10691
10691
  ]
@@ -10757,7 +10757,7 @@ var init_registry = __esm({
10757
10757
  {
10758
10758
  range: ">=4.0.0",
10759
10759
  coverage: 0.5,
10760
- note: "SootSim has keyboard avoidance, but this package's view and configuration calls do not drive it while they alter layout in the reference iOS simulator",
10760
+ note: "Peach has keyboard avoidance, but this package's view and configuration calls do not drive it while they alter layout in the reference iOS simulator",
10761
10761
  missing: "no programmatic keyboard offset \u2014 sootsim KeyboardAvoidingView is the right primary path"
10762
10762
  }
10763
10763
  ]
@@ -10769,7 +10769,7 @@ var init_registry = __esm({
10769
10769
  {
10770
10770
  range: ">=2.0.0",
10771
10771
  coverage: 0,
10772
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: requestPermissions / checkPermissions return denied; findCalendars / fetchAllEvents return []; saveEvent rejects. imports and API shape receive no behavior credit",
10772
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: requestPermissions / checkPermissions return denied; findCalendars / fetchAllEvents return []; saveEvent rejects. imports and API shape receive no behavior credit",
10773
10773
  missing: "no EventKit / CalendarContract in browser preview"
10774
10774
  }
10775
10775
  ]
@@ -10793,7 +10793,7 @@ var init_registry = __esm({
10793
10793
  {
10794
10794
  range: ">=10.0.0",
10795
10795
  coverage: 0,
10796
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: DocumentViewerView renders null; isDocumentViewerAvailable=false. imports and API shape receive no behavior credit",
10796
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: DocumentViewerView renders null; isDocumentViewerAvailable=false. imports and API shape receive no behavior credit",
10797
10797
  missing: "no QLPreviewController / ACTION_VIEW; recommended swap: an iframe with a PDF.js or similar JS viewer"
10798
10798
  }
10799
10799
  ]
@@ -10817,7 +10817,7 @@ var init_registry = __esm({
10817
10817
  {
10818
10818
  range: ">=2.0.0",
10819
10819
  coverage: 0,
10820
- note: "the reference iOS simulator runs Clerk authentication and session flows. SootSim always reports an unauthenticated state and passes every gate component through, so import safety receives no behavior credit",
10820
+ note: "the reference iOS simulator runs Clerk authentication and session flows. Peach always reports an unauthenticated state and passes every gate component through, so import safety receives no behavior credit",
10821
10821
  missing: "no real Clerk auth \u2014 recommended swap: @clerk/clerk-react on web"
10822
10822
  }
10823
10823
  ]
@@ -10842,7 +10842,7 @@ var init_registry = __esm({
10842
10842
  {
10843
10843
  range: ">=2.0.0",
10844
10844
  coverage: 0,
10845
- note: "the reference iOS simulator renders PDF pages. SootSim renders null, so import safety receives no behavior credit",
10845
+ note: "the reference iOS simulator renders PDF pages. Peach renders null, so import safety receives no behavior credit",
10846
10846
  missing: "no native PDF rendering; recommended swap: PDF.js iframe"
10847
10847
  }
10848
10848
  ]
@@ -10904,7 +10904,7 @@ var init_registry = __esm({
10904
10904
  {
10905
10905
  range: ">=2.0.0",
10906
10906
  coverage: 0,
10907
- note: "the reference iOS simulator presents Survicate surveys when an event qualifies. SootSim accepts events but presents no survey and fires no listener, so import safety receives no behavior credit",
10907
+ note: "the reference iOS simulator presents Survicate surveys when an event qualifies. Peach accepts events but presents no survey and fires no listener, so import safety receives no behavior credit",
10908
10908
  missing: "no real survey delivery \u2014 same constraint as every analytics SDK in browser preview"
10909
10909
  }
10910
10910
  ]
@@ -10977,7 +10977,7 @@ var init_registry = __esm({
10977
10977
  {
10978
10978
  range: ">=6.0.0",
10979
10979
  coverage: 0,
10980
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: IQKeyboardManager-style helper. sootsim handles keyboard avoidance via its own pipeline. imports and API shape receive no behavior credit",
10980
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: IQKeyboardManager-style helper. sootsim handles keyboard avoidance via its own pipeline. imports and API shape receive no behavior credit",
10981
10981
  missing: "iOS-only library; setEnable/setEnableAutoToolbar/etc accepted but inert"
10982
10982
  }
10983
10983
  ]
@@ -10989,7 +10989,7 @@ var init_registry = __esm({
10989
10989
  {
10990
10990
  range: ">=4.0.0",
10991
10991
  coverage: 0,
10992
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: getCastState reports NoDevicesAvailable; CastButton renders null; useCastSession=null; useDevices=[]; useCastState=NoDevicesAvailable. imports and API shape receive no behavior credit",
10992
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: getCastState reports NoDevicesAvailable; CastButton renders null; useCastSession=null; useDevices=[]; useCastState=NoDevicesAvailable. imports and API shape receive no behavior credit",
10993
10993
  missing: "no Chromecast device discovery / cast"
10994
10994
  }
10995
10995
  ]
@@ -11074,7 +11074,7 @@ var init_registry = __esm({
11074
11074
  {
11075
11075
  range: ">=0.10.0",
11076
11076
  coverage: 0,
11077
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: print() accepted. imports and API shape receive no behavior credit",
11077
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: print() accepted. imports and API shape receive no behavior credit",
11078
11078
  missing: "browsers have window.print() but the API surface differs"
11079
11079
  }
11080
11080
  ]
@@ -11086,7 +11086,7 @@ var init_registry = __esm({
11086
11086
  {
11087
11087
  range: ">=0.10.0",
11088
11088
  coverage: 0,
11089
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: runUpdateProcess accepted; useHotUpdater reports idle. imports and API shape receive no behavior credit",
11089
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: runUpdateProcess accepted; useHotUpdater reports idle. imports and API shape receive no behavior credit",
11090
11090
  missing: "no OTA update mechanism in browser preview"
11091
11091
  }
11092
11092
  ]
@@ -11122,7 +11122,7 @@ var init_registry = __esm({
11122
11122
  {
11123
11123
  range: ">=4.0.0",
11124
11124
  coverage: 0,
11125
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: start/stop accepted; isRunning=false. imports and API shape receive no behavior credit",
11125
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: start/stop accepted; isRunning=false. imports and API shape receive no behavior credit",
11126
11126
  missing: "no foreground service / background task"
11127
11127
  }
11128
11128
  ]
@@ -11134,7 +11134,7 @@ var init_registry = __esm({
11134
11134
  {
11135
11135
  range: ">=0.0.1",
11136
11136
  coverage: 0,
11137
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: addListener returns removable subscription that never fires. imports and API shape receive no behavior credit",
11137
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: addListener returns removable subscription that never fires. imports and API shape receive no behavior credit",
11138
11138
  missing: "browsers cannot detect screenshots"
11139
11139
  }
11140
11140
  ]
@@ -11181,7 +11181,7 @@ var init_registry = __esm({
11181
11181
  {
11182
11182
  range: ">=2.0.0",
11183
11183
  coverage: 0,
11184
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: show/dismiss accepted; LENGTH_LONG/SHORT/INDEFINITE constants exposed. imports and API shape receive no behavior credit",
11184
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: show/dismiss accepted; LENGTH_LONG/SHORT/INDEFINITE constants exposed. imports and API shape receive no behavior credit",
11185
11185
  missing: "no Material Snackbar UI on iOS / web; recommended swap: sootsim Toast (already polyfilled)"
11186
11186
  }
11187
11187
  ]
@@ -11205,7 +11205,7 @@ var init_registry = __esm({
11205
11205
  {
11206
11206
  range: ">=1.7.0",
11207
11207
  coverage: 0,
11208
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: getVolume=0.5; getBrightness=0.5; isWifiEnabled=false; isLocationEnabled=false; isBluetoothEnabled=false; isAirplaneEnabled=false; all listeners never fire. imports and API shape receive no behavior credit",
11208
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: getVolume=0.5; getBrightness=0.5; isWifiEnabled=false; isLocationEnabled=false; isBluetoothEnabled=false; isAirplaneEnabled=false; all listeners never fire. imports and API shape receive no behavior credit",
11209
11209
  missing: "browsers cannot read / set system-level settings"
11210
11210
  }
11211
11211
  ]
@@ -11217,7 +11217,7 @@ var init_registry = __esm({
11217
11217
  {
11218
11218
  range: ">=5.0.0",
11219
11219
  coverage: 0,
11220
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: getSSID/getBSSID/getBroadcast/getIPAddress all return null. imports and API shape receive no behavior credit",
11220
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: getSSID/getBSSID/getBroadcast/getIPAddress all return null. imports and API shape receive no behavior credit",
11221
11221
  missing: "browsers cannot read Wi-Fi info or LAN IP"
11222
11222
  }
11223
11223
  ]
@@ -11278,7 +11278,7 @@ var init_registry = __esm({
11278
11278
  {
11279
11279
  range: ">=10.0.0",
11280
11280
  coverage: 0,
11281
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: full singleton accepted; no telemetry / nudge UI delivered. imports and API shape receive no behavior credit",
11281
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: full singleton accepted; no telemetry / nudge UI delivered. imports and API shape receive no behavior credit",
11282
11282
  missing: "no real MoEngage SDK; recommended swap: @moengage/web-sdk on web"
11283
11283
  }
11284
11284
  ]
@@ -11290,7 +11290,7 @@ var init_registry = __esm({
11290
11290
  {
11291
11291
  range: ">=0.5.0",
11292
11292
  coverage: 0,
11293
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: Nitro.startRecorder/startPlayer accepted; addRecordBack/PlayBackListener return removable subscriptions. imports and API shape receive no behavior credit",
11293
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: Nitro.startRecorder/startPlayer accepted; addRecordBack/PlayBackListener return removable subscriptions. imports and API shape receive no behavior credit",
11294
11294
  missing: "no native record/play audio engine; consumers can use Web Audio + getUserMedia directly"
11295
11295
  }
11296
11296
  ]
@@ -11363,7 +11363,7 @@ var init_registry = __esm({
11363
11363
  {
11364
11364
  range: ">=2.0.0",
11365
11365
  coverage: 0,
11366
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: Blurhash component renders null. imports and API shape receive no behavior credit",
11366
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: Blurhash component renders null. imports and API shape receive no behavior credit",
11367
11367
  missing: "no blurhash decoding; recommended swap: a JS implementation like blurhash npm package"
11368
11368
  }
11369
11369
  ]
@@ -11375,7 +11375,7 @@ var init_registry = __esm({
11375
11375
  {
11376
11376
  range: ">=1.0.0",
11377
11377
  coverage: 0,
11378
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: setAlternateAppIcon accepted; getAlternateAppIcon=null; isAlternateAppIconSupported=false. imports and API shape receive no behavior credit",
11378
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: setAlternateAppIcon accepted; getAlternateAppIcon=null; isAlternateAppIconSupported=false. imports and API shape receive no behavior credit",
11379
11379
  missing: "no UIApplication.setAlternateIconName equivalent in browser"
11380
11380
  }
11381
11381
  ]
@@ -11400,7 +11400,7 @@ var init_registry = __esm({
11400
11400
  {
11401
11401
  range: ">=1.0.0",
11402
11402
  coverage: 0,
11403
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: selectContact / selectContactPhone / openContact resolve null. imports and API shape receive no behavior credit",
11403
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: selectContact / selectContactPhone / openContact resolve null. imports and API shape receive no behavior credit",
11404
11404
  missing: "no system contact picker on web"
11405
11405
  }
11406
11406
  ]
@@ -11424,7 +11424,7 @@ var init_registry = __esm({
11424
11424
  {
11425
11425
  range: ">=1.0.0",
11426
11426
  coverage: 0,
11427
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: setItem accepted; getItem=null; isAppGroupShared=false. imports and API shape receive no behavior credit",
11427
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: setItem accepted; getItem=null; isAppGroupShared=false. imports and API shape receive no behavior credit",
11428
11428
  missing: "no App Group container outside of iOS"
11429
11429
  }
11430
11430
  ]
@@ -11449,7 +11449,7 @@ var init_registry = __esm({
11449
11449
  {
11450
11450
  range: ">=1.0.0",
11451
11451
  coverage: 0,
11452
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: Superwall.configure/identify/registerEvent/registerPlacement/preloadAllPaywalls accepted; getPresentationResult=paywallNotPresented; presentPaywallForEvent=noPaywallToPresent. imports and API shape receive no behavior credit",
11452
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: Superwall.configure/identify/registerEvent/registerPlacement/preloadAllPaywalls accepted; getPresentationResult=paywallNotPresented; presentPaywallForEvent=noPaywallToPresent. imports and API shape receive no behavior credit",
11453
11453
  missing: "no real Superwall paywall delivery \u2014 Superwall has a Web SDK that consumers should use directly on web"
11454
11454
  }
11455
11455
  ]
@@ -11461,7 +11461,7 @@ var init_registry = __esm({
11461
11461
  {
11462
11462
  range: ">=1.0.0",
11463
11463
  coverage: 0,
11464
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: set/setFromResponse accepted; get/getFromResponse return empty; clearAll/clearByName/flush accepted. imports and API shape receive no behavior credit",
11464
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: set/setFromResponse accepted; get/getFromResponse return empty; clearAll/clearByName/flush accepted. imports and API shape receive no behavior credit",
11465
11465
  missing: "no native cookie store; on web document.cookie is the right API but cross-origin reads are blocked"
11466
11466
  }
11467
11467
  ]
@@ -11521,7 +11521,7 @@ var init_registry = __esm({
11521
11521
  {
11522
11522
  range: ">=0.5.0",
11523
11523
  coverage: 0,
11524
- note: "the reference iOS simulator initializes local llama models and generates output. SootSim rejects initialization and returns an empty grammar, so error shape receives no behavior credit",
11524
+ note: "the reference iOS simulator initializes local llama models and generates output. Peach rejects initialization and returns an empty grammar, so error shape receives no behavior credit",
11525
11525
  missing: "no llama.cpp runtime in browser; recommended swap: web-llm or remote inference endpoint"
11526
11526
  }
11527
11527
  ]
@@ -11714,7 +11714,7 @@ var init_registry = __esm({
11714
11714
  {
11715
11715
  range: ">=1.0.0",
11716
11716
  coverage: 0,
11717
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: debug/info/warn/error accepted; getLogFilePaths=[]; full LogLevel enum exposed. imports and API shape receive no behavior credit",
11717
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: debug/info/warn/error accepted; getLogFilePaths=[]; full LogLevel enum exposed. imports and API shape receive no behavior credit",
11718
11718
  missing: "no file system writes \u2014 browsers route logs to console.* instead"
11719
11719
  }
11720
11720
  ]
@@ -11750,7 +11750,7 @@ var init_registry = __esm({
11750
11750
  {
11751
11751
  range: ">=4.0.0",
11752
11752
  coverage: 0,
11753
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: returns empty codeVerifier/codeChallenge. imports and API shape receive no behavior credit",
11753
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: returns empty codeVerifier/codeChallenge. imports and API shape receive no behavior credit",
11754
11754
  missing: "consumers should use a proper PKCE library like @noble/hashes on web"
11755
11755
  }
11756
11756
  ]
@@ -11775,7 +11775,7 @@ var init_registry = __esm({
11775
11775
  {
11776
11776
  range: ">=2.0.0",
11777
11777
  coverage: 0,
11778
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: BarcodeCreatorView renders null; full Type enum exposed. imports and API shape receive no behavior credit",
11778
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: BarcodeCreatorView renders null; full Type enum exposed. imports and API shape receive no behavior credit",
11779
11779
  missing: "no native barcode generation; recommended swap: bwip-js"
11780
11780
  }
11781
11781
  ]
@@ -11787,7 +11787,7 @@ var init_registry = __esm({
11787
11787
  {
11788
11788
  range: ">=1.0.0",
11789
11789
  coverage: 0,
11790
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: getCurrentConfigurations={}; reload* accepted. imports and API shape receive no behavior credit",
11790
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: getCurrentConfigurations={}; reload* accepted. imports and API shape receive no behavior credit",
11791
11791
  missing: "no WidgetKit on iOS / web"
11792
11792
  }
11793
11793
  ]
@@ -11799,7 +11799,7 @@ var init_registry = __esm({
11799
11799
  {
11800
11800
  range: ">=8.0.0",
11801
11801
  coverage: 0,
11802
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: THEOplayerView renders null; PlayerEventType enum exposed. imports and API shape receive no behavior credit",
11802
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: THEOplayerView renders null; PlayerEventType enum exposed. imports and API shape receive no behavior credit",
11803
11803
  missing: "no THEOplayer player on web \u2014 consumers should use theoplayer Web SDK"
11804
11804
  }
11805
11805
  ]
@@ -11823,7 +11823,7 @@ var init_registry = __esm({
11823
11823
  {
11824
11824
  range: ">=4.0.0",
11825
11825
  coverage: 0,
11826
- note: `the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: changeIcon rejects; getIcon="default"; resetIcon noop. imports and API shape receive no behavior credit`,
11826
+ note: `the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: changeIcon rejects; getIcon="default"; resetIcon noop. imports and API shape receive no behavior credit`,
11827
11827
  missing: "duplicate of expo-alternate-app-icons capability"
11828
11828
  }
11829
11829
  ]
@@ -11835,7 +11835,7 @@ var init_registry = __esm({
11835
11835
  {
11836
11836
  range: ">=1.0.0",
11837
11837
  coverage: 0,
11838
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: ProgressView renders null. imports and API shape receive no behavior credit",
11838
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: ProgressView renders null. imports and API shape receive no behavior credit",
11839
11839
  missing: "iOS UIProgressView; consumers can render their own bar in web"
11840
11840
  }
11841
11841
  ]
@@ -11859,7 +11859,7 @@ var init_registry = __esm({
11859
11859
  {
11860
11860
  range: ">=4.0.0",
11861
11861
  coverage: 0,
11862
- note: `the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: measure/flatHeights resolve zero-sized; fontFamilyNames=["system"]. imports and API shape receive no behavior credit`,
11862
+ note: `the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: measure/flatHeights resolve zero-sized; fontFamilyNames=["system"]. imports and API shape receive no behavior credit`,
11863
11863
  missing: "no native text measurement; consumers should use canvas measureText on web"
11864
11864
  }
11865
11865
  ]
@@ -11884,8 +11884,8 @@ var init_registry = __esm({
11884
11884
  {
11885
11885
  range: ">=1.0.0",
11886
11886
  coverage: 1,
11887
- note: "native-seam only: the real package keeps its HapticTypes and worklet-safe triggerHaptics export and installs against SootSim's TurboHaptics JSI factory",
11888
- working: "all nine public haptic types trigger synchronously through the shared browser vibration and SootSim haptic-activity path; initialization and repeated installation preserve the package contract"
11887
+ note: "native-seam only: the real package keeps its HapticTypes and worklet-safe triggerHaptics export and installs against Peach's TurboHaptics JSI factory",
11888
+ working: "all nine public haptic types trigger synchronously through the shared browser vibration and Peach haptic-activity path; initialization and repeated installation preserve the package contract"
11889
11889
  }
11890
11890
  ]
11891
11891
  },
@@ -11896,7 +11896,7 @@ var init_registry = __esm({
11896
11896
  {
11897
11897
  range: ">=2.0.0",
11898
11898
  coverage: 0,
11899
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: adapty.activate/identify/logout/getProfile accepted; getPaywall/makePurchase reject; restorePurchases resolves empty access levels. imports and API shape receive no behavior credit",
11899
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: adapty.activate/identify/logout/getProfile accepted; getPaywall/makePurchase reject; restorePurchases resolves empty access levels. imports and API shape receive no behavior credit",
11900
11900
  missing: "recommended swap: @adapty/web-sdk on web"
11901
11901
  }
11902
11902
  ]
@@ -11908,7 +11908,7 @@ var init_registry = __esm({
11908
11908
  {
11909
11909
  range: ">=1.0.0",
11910
11910
  coverage: 0,
11911
- note: "the reference iOS simulator registers and connects Twilio Voice calls. SootSim rejects both operations, so error shape receives no behavior credit",
11911
+ note: "the reference iOS simulator registers and connects Twilio Voice calls. Peach rejects both operations, so error shape receives no behavior credit",
11912
11912
  missing: "recommended swap: @twilio/voice-sdk on web"
11913
11913
  }
11914
11914
  ]
@@ -11932,7 +11932,7 @@ var init_registry = __esm({
11932
11932
  {
11933
11933
  range: ">=1.0.0",
11934
11934
  coverage: 0,
11935
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: register/registerWith*/unregister accepted; screenshot/recording listeners never fire. imports and API shape receive no behavior credit",
11935
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: register/registerWith*/unregister accepted; screenshot/recording listeners never fire. imports and API shape receive no behavior credit",
11936
11936
  missing: "browsers cannot detect / prevent screenshots"
11937
11937
  }
11938
11938
  ]
@@ -11957,7 +11957,7 @@ var init_registry = __esm({
11957
11957
  {
11958
11958
  range: ">=1.9.0",
11959
11959
  coverage: 0,
11960
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: picker renders null; ACTION_DATE_SET / ACTION_DISMISSED / ACTION_NEUTRAL constants exposed. imports and API shape receive no behavior credit",
11960
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: picker renders null; ACTION_DATE_SET / ACTION_DISMISSED / ACTION_NEUTRAL constants exposed. imports and API shape receive no behavior credit",
11961
11961
  missing: "recommended swap: a JS-only date picker on web"
11962
11962
  }
11963
11963
  ]
@@ -11969,7 +11969,7 @@ var init_registry = __esm({
11969
11969
  {
11970
11970
  range: ">=0.10.0",
11971
11971
  coverage: 0,
11972
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: NitroImage renders null; loadImageFromUrl rejects. imports and API shape receive no behavior credit",
11972
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: NitroImage renders null; loadImageFromUrl rejects. imports and API shape receive no behavior credit",
11973
11973
  missing: "use expo-image (already polyfilled) for browser-fast Image"
11974
11974
  }
11975
11975
  ]
@@ -11993,7 +11993,7 @@ var init_registry = __esm({
11993
11993
  {
11994
11994
  range: ">=6.0.0",
11995
11995
  coverage: 0,
11996
- note: "the reference iOS simulator creates a Scandit data-capture context and renders its view even without camera hardware. SootSim rejects the context and renders null, so error shape receives no behavior credit",
11996
+ note: "the reference iOS simulator creates a Scandit data-capture context and renders its view even without camera hardware. Peach rejects the context and renders null, so error shape receives no behavior credit",
11997
11997
  missing: "no Scandit native runtime; recommended swap: scandit-web-datacapture-core"
11998
11998
  }
11999
11999
  ]
@@ -12017,7 +12017,7 @@ var init_registry = __esm({
12017
12017
  {
12018
12018
  range: ">=2.0.0",
12019
12019
  coverage: 0,
12020
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: show/hide accepted. imports and API shape receive no behavior credit",
12020
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: show/hide accepted. imports and API shape receive no behavior credit",
12021
12021
  missing: "sootsim handles splash via expo-splash-screen (already polyfilled)"
12022
12022
  }
12023
12023
  ]
@@ -12029,7 +12029,7 @@ var init_registry = __esm({
12029
12029
  {
12030
12030
  range: ">=1.0.0",
12031
12031
  coverage: 0,
12032
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: launchLicenseList accepted; addLicense / setLibraryName accepted. imports and API shape receive no behavior credit",
12032
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: launchLicenseList accepted; addLicense / setLibraryName accepted. imports and API shape receive no behavior credit",
12033
12033
  missing: "no native UI; consumers should render licenses themselves on web"
12034
12034
  }
12035
12035
  ]
@@ -12065,7 +12065,7 @@ var init_registry = __esm({
12065
12065
  {
12066
12066
  range: ">=0.5.0",
12067
12067
  coverage: 0,
12068
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: NitroWebImage renders null. imports and API shape receive no behavior credit",
12068
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: NitroWebImage renders null. imports and API shape receive no behavior credit",
12069
12069
  missing: "use expo-image (already polyfilled)"
12070
12070
  }
12071
12071
  ]
@@ -12127,7 +12127,7 @@ var init_registry = __esm({
12127
12127
  {
12128
12128
  range: ">=1.0.0",
12129
12129
  coverage: 0,
12130
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: enabled() accepted; iosProtectFromScreenRecording / iosProtectFromScreenshot accepted. imports and API shape receive no behavior credit",
12130
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: enabled() accepted; iosProtectFromScreenRecording / iosProtectFromScreenshot accepted. imports and API shape receive no behavior credit",
12131
12131
  missing: "browsers cannot prevent screenshots"
12132
12132
  }
12133
12133
  ]
@@ -12176,7 +12176,7 @@ var init_registry = __esm({
12176
12176
  {
12177
12177
  range: ">=2.0.0",
12178
12178
  coverage: 0,
12179
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: isICloudAvailable=false; documentsDirectory empty; upload/download reject; listSync=[]. imports and API shape receive no behavior credit",
12179
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: isICloudAvailable=false; documentsDirectory empty; upload/download reject; listSync=[]. imports and API shape receive no behavior credit",
12180
12180
  missing: "no iCloud Drive integration in browser"
12181
12181
  }
12182
12182
  ]
@@ -12188,7 +12188,7 @@ var init_registry = __esm({
12188
12188
  {
12189
12189
  range: ">=1.0.0",
12190
12190
  coverage: 1,
12191
- note: "native-seam: the two pure-JS constants (ScreenCornerRadius, IsScreenRounded) run from the real bundle; only the ScreenCornerRadius NativeModule is ours, and its `cornerRadius` constant returns the live simulated device's measured display corner radius from the same device spec the engine renders the chrome from. this is the package's entire purpose and SootSim answers it precisely. faithful complete contract, not a no-op.",
12191
+ note: "native-seam: the two pure-JS constants (ScreenCornerRadius, IsScreenRounded) run from the real bundle; only the ScreenCornerRadius NativeModule is ours, and its `cornerRadius` constant returns the live simulated device's measured display corner radius from the same device spec the engine renders the chrome from. this is the package's entire purpose and Peach answers it precisely. faithful complete contract, not a no-op.",
12192
12192
  working: "NativeModules.ScreenCornerRadius.cornerRadius (real per-device radius, synchronous constant read at import like upstream); ScreenCornerRadius + IsScreenRounded constants computed by the real package JS off that value, so IsScreenRounded is correct per device"
12193
12193
  }
12194
12194
  ]
@@ -12200,7 +12200,7 @@ var init_registry = __esm({
12200
12200
  {
12201
12201
  range: ">=4.0.0",
12202
12202
  coverage: 0,
12203
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: startFreeRasp accepted; isAppInDebug/isAppTampered=false. imports and API shape receive no behavior credit",
12203
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: startFreeRasp accepted; isAppInDebug/isAppTampered=false. imports and API shape receive no behavior credit",
12204
12204
  missing: "no RASP (runtime application self-protection) in browser"
12205
12205
  }
12206
12206
  ]
@@ -12237,7 +12237,7 @@ var init_registry = __esm({
12237
12237
  {
12238
12238
  range: ">=6.0.0",
12239
12239
  coverage: 0,
12240
- note: "the reference iOS simulator creates a Scandit barcode capture session over supplied frames. SootSim rejects session creation, so constants and error shape receive no behavior credit",
12240
+ note: "the reference iOS simulator creates a Scandit barcode capture session over supplied frames. Peach rejects session creation, so constants and error shape receive no behavior credit",
12241
12241
  missing: "recommended swap: scandit-web-datacapture-barcode"
12242
12242
  }
12243
12243
  ]
@@ -12261,7 +12261,7 @@ var init_registry = __esm({
12261
12261
  {
12262
12262
  range: ">=1.0.0",
12263
12263
  coverage: 0,
12264
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: startActivity rejects; updateActivity/endActivity accepted; listActivities=[]; requestPermissions=denied; isActivityEnabled=false. imports and API shape receive no behavior credit",
12264
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: startActivity rejects; updateActivity/endActivity accepted; listActivities=[]; requestPermissions=denied; isActivityEnabled=false. imports and API shape receive no behavior credit",
12265
12265
  missing: "no Dynamic Island / Live Activities outside iOS"
12266
12266
  }
12267
12267
  ]
@@ -12273,7 +12273,7 @@ var init_registry = __esm({
12273
12273
  {
12274
12274
  range: ">=1.0.0",
12275
12275
  coverage: 0,
12276
- note: "the reference iOS simulator presents the Luciq bug-reporting UI. SootSim accepts the singleton calls but presents no report surface, so import safety receives no behavior credit",
12276
+ note: "the reference iOS simulator presents the Luciq bug-reporting UI. Peach accepts the singleton calls but presents no report surface, so import safety receives no behavior credit",
12277
12277
  missing: "no real bug-report delivery \u2014 same constraint as every analytics SDK in browser preview"
12278
12278
  }
12279
12279
  ]
@@ -12285,7 +12285,7 @@ var init_registry = __esm({
12285
12285
  {
12286
12286
  range: ">=2.0.0",
12287
12287
  coverage: 0,
12288
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: isAvailable=false; show rejects. imports and API shape receive no behavior credit",
12288
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: isAvailable=false; show rejects. imports and API shape receive no behavior credit",
12289
12289
  missing: "no SFSafariViewController in browser; consumers should use sootsim Browser or window.open"
12290
12290
  }
12291
12291
  ]
@@ -12345,7 +12345,7 @@ var init_registry = __esm({
12345
12345
  {
12346
12346
  range: ">=0.3.0",
12347
12347
  coverage: 0,
12348
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: onKeyDown/UpListener register but never fire. imports and API shape receive no behavior credit",
12348
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: onKeyDown/UpListener register but never fire. imports and API shape receive no behavior credit",
12349
12349
  missing: "sootsim handles its own keyboard events; consumers can use window keydown/keyup directly"
12350
12350
  }
12351
12351
  ]
@@ -12382,9 +12382,9 @@ var init_registry = __esm({
12382
12382
  {
12383
12383
  range: ">=0.3.0",
12384
12384
  coverage: 0.7,
12385
- note: "native-seam: the real handler and filter lifecycle runs from the bundle while SootSim captures browser logs through its inspector",
12385
+ note: "native-seam: the real handler and filter lifecycle runs from the bundle while Peach captures browser logs through its inspector",
12386
12386
  working: "configure, registerHandler/remove, filter bookkeeping, TurboModule and NativeEventEmitter contracts",
12387
- missing: "streaming Apple OSLogStore entries through newLogAvailable; browser process logs remain available in the SootSim inspector instead"
12387
+ missing: "streaming Apple OSLogStore entries through newLogAvailable; browser process logs remain available in the Peach inspector instead"
12388
12388
  }
12389
12389
  ]
12390
12390
  },
@@ -12408,7 +12408,7 @@ var init_registry = __esm({
12408
12408
  {
12409
12409
  range: ">=1.0.0",
12410
12410
  coverage: 0,
12411
- note: "the reference iOS simulator mounts React Native inside the native host. SootSim passes children through and does not exercise that integration, so import safety receives no behavior credit"
12411
+ note: "the reference iOS simulator mounts React Native inside the native host. Peach passes children through and does not exercise that integration, so import safety receives no behavior credit"
12412
12412
  }
12413
12413
  ]
12414
12414
  },
@@ -12431,7 +12431,7 @@ var init_registry = __esm({
12431
12431
  {
12432
12432
  range: ">=2.0.0",
12433
12433
  coverage: 0,
12434
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: FilamentView/Camera/Light/Model render null; useModel/useEngine/useCamera return null; loadAsset rejects. imports and API shape receive no behavior credit",
12434
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: FilamentView/Camera/Light/Model render null; useModel/useEngine/useCamera return null; loadAsset rejects. imports and API shape receive no behavior credit",
12435
12435
  missing: "no native Filament 3D renderer; recommended swap: three.js / WebGPU on web"
12436
12436
  }
12437
12437
  ]
@@ -12443,7 +12443,7 @@ var init_registry = __esm({
12443
12443
  {
12444
12444
  range: ">=0.3.0",
12445
12445
  coverage: 0,
12446
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: useLLM reports {generate: rejects, isReady: false}; useImageEmbeddings rejects. imports and API shape receive no behavior credit",
12446
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: useLLM reports {generate: rejects, isReady: false}; useImageEmbeddings rejects. imports and API shape receive no behavior credit",
12447
12447
  missing: "no ExecuTorch runtime; recommended swap: web-llm or remote inference"
12448
12448
  }
12449
12449
  ]
@@ -12479,7 +12479,7 @@ var init_registry = __esm({
12479
12479
  {
12480
12480
  range: ">=2.0.0",
12481
12481
  coverage: 0,
12482
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: initialize/setUserAgreeToAll/setUserDisagreeToAll/showNotice/showPreferences/reset accepted; isReady=true; EventType enum exposed. imports and API shape receive no behavior credit",
12482
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: initialize/setUserAgreeToAll/setUserDisagreeToAll/showNotice/showPreferences/reset accepted; isReady=true; EventType enum exposed. imports and API shape receive no behavior credit",
12483
12483
  missing: "no real Didomi consent collection"
12484
12484
  }
12485
12485
  ]
@@ -12491,7 +12491,7 @@ var init_registry = __esm({
12491
12491
  {
12492
12492
  range: ">=2.0.0",
12493
12493
  coverage: 0,
12494
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: YouTube renders null. imports and API shape receive no behavior credit",
12494
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: YouTube renders null. imports and API shape receive no behavior credit",
12495
12495
  missing: "no embedded YouTube player; consumers can use the iframe player API directly"
12496
12496
  }
12497
12497
  ]
@@ -12515,7 +12515,7 @@ var init_registry = __esm({
12515
12515
  {
12516
12516
  range: ">=2.0.0",
12517
12517
  coverage: 0.78,
12518
- note: "native-seam only \u2014 the published Waveform component, candle UI, hooks, scrub logic, events, and imperative facade run unchanged over SootSim's shared browser audio driver",
12518
+ note: "native-seam only \u2014 the published Waveform component, candle UI, hooks, scrub logic, events, and imperative facade run unchanged over Peach's shared browser audio driver",
12519
12519
  working: "static waveform extraction from decoded browser audio, normalized multi-channel sample peaks, prepare/play/pause/stop/seek, current and total duration, volume, playback speed, loop/pause/stop finish modes, independent keyed players, playback progress and completion events, microphone permission, MediaRecorder start/pause/resume/stop, metering updates, recorded blob URL and duration",
12520
12520
  missing: "streaming onCurrentExtractedWaveformData progress events and extractor cancellation, reading audio URLs blocked by cross-origin fetch policy, native filesystem paths not exposed through the simulator fetch/VFS bridge, exact AVFoundation/MediaCodec decoder normalization, recording encoder/file-name options, native audio-session routing and background playback"
12521
12521
  }
@@ -12541,7 +12541,7 @@ var init_registry = __esm({
12541
12541
  {
12542
12542
  range: ">=3.0.0",
12543
12543
  coverage: 0,
12544
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: present rejects; preload/invalidate/configure accepted; ColorScheme constants exposed. imports and API shape receive no behavior credit",
12544
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: present rejects; preload/invalidate/configure accepted; ColorScheme constants exposed. imports and API shape receive no behavior credit",
12545
12545
  missing: "no Shopify checkout sheet; recommended swap: shopify-checkout JS embed"
12546
12546
  }
12547
12547
  ]
@@ -12565,7 +12565,7 @@ var init_registry = __esm({
12565
12565
  {
12566
12566
  range: ">=1.0.0",
12567
12567
  coverage: 0,
12568
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: showEditor rejects; cleanFiles/closeEditor accepted. imports and API shape receive no behavior credit",
12568
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: showEditor rejects; cleanFiles/closeEditor accepted. imports and API shape receive no behavior credit",
12569
12569
  missing: "recommended swap: ffmpeg.wasm + video element"
12570
12570
  }
12571
12571
  ]
@@ -12589,7 +12589,7 @@ var init_registry = __esm({
12589
12589
  {
12590
12590
  range: ">=3.0.0",
12591
12591
  coverage: 0,
12592
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: download returns task object with pause/resume/cancel/done/error/begin/progress chains; checkForExistingDownloads=[]. imports and API shape receive no behavior credit",
12592
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: download returns task object with pause/resume/cancel/done/error/begin/progress chains; checkForExistingDownloads=[]. imports and API shape receive no behavior credit",
12593
12593
  missing: "no background download \u2014 browsers have ServiceWorker fetch but the API differs"
12594
12594
  }
12595
12595
  ]
@@ -12613,7 +12613,7 @@ var init_registry = __esm({
12613
12613
  {
12614
12614
  range: ">=0.6.0",
12615
12615
  coverage: 0,
12616
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: LineChart/BarChart/PieChart/CandleStickChart/RadarChart/BubbleChart/HorizontalBarChart/ScatterChart/CombinedChart all render null. imports and API shape receive no behavior credit",
12616
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: LineChart/BarChart/PieChart/CandleStickChart/RadarChart/BubbleChart/HorizontalBarChart/ScatterChart/CombinedChart all render null. imports and API shape receive no behavior credit",
12617
12617
  missing: "no MPAndroidChart/Charts native; recommended swap: victory-native or recharts on web"
12618
12618
  }
12619
12619
  ]
@@ -12625,7 +12625,7 @@ var init_registry = __esm({
12625
12625
  {
12626
12626
  range: ">=2.0.0",
12627
12627
  coverage: 0,
12628
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: getCacheUri returns input url; cleanCache/cleanByUrl accepted; getCacheSize=0. imports and API shape receive no behavior credit",
12628
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: getCacheUri returns input url; cleanCache/cleanByUrl accepted; getCacheSize=0. imports and API shape receive no behavior credit",
12629
12629
  missing: "no video proxy/cache; browsers cache via standard HTTP cache"
12630
12630
  }
12631
12631
  ]
@@ -12687,7 +12687,7 @@ var init_registry = __esm({
12687
12687
  {
12688
12688
  range: ">=4.0.0",
12689
12689
  coverage: 0,
12690
- note: "the reference iOS simulator renders CometChat conversations, messages, the composer, and call UI. SootSim passes those components through, so import safety receives no behavior credit",
12690
+ note: "the reference iOS simulator renders CometChat conversations, messages, the composer, and call UI. Peach passes those components through, so import safety receives no behavior credit",
12691
12691
  missing: "no real CometChat client; recommended swap: @cometchat/chat-uikit-react"
12692
12692
  }
12693
12693
  ]
@@ -12711,7 +12711,7 @@ var init_registry = __esm({
12711
12711
  {
12712
12712
  range: ">=1.0.0",
12713
12713
  coverage: 0,
12714
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: SFSymbol/SymbolView render null. imports and API shape receive no behavior credit",
12714
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: SFSymbol/SymbolView render null. imports and API shape receive no behavior credit",
12715
12715
  missing: "use expo-symbols (already polyfilled, blends with proof to higher score)"
12716
12716
  }
12717
12717
  ]
@@ -12784,7 +12784,7 @@ var init_registry = __esm({
12784
12784
  {
12785
12785
  range: ">=8.0.0",
12786
12786
  coverage: 0,
12787
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: Batch singleton + Push/User/Inbox/Profile/Messaging namespaces accepted. imports and API shape receive no behavior credit",
12787
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: Batch singleton + Push/User/Inbox/Profile/Messaging namespaces accepted. imports and API shape receive no behavior credit",
12788
12788
  missing: "no real Batch.com push delivery"
12789
12789
  }
12790
12790
  ]
@@ -12809,7 +12809,7 @@ var init_registry = __esm({
12809
12809
  {
12810
12810
  range: ">=15.0.0",
12811
12811
  coverage: 0,
12812
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: native-seam only: the real @shakebugs/react-native-shake runs from the bundle (the full ~670-line Shake JS object : all upstream). we stub only the Shake TurboModule, mirroring src/NativeShake.ts@17.x exactly: every config setter is accepted, every getter returns the inert unconfigured-SDK value, start/silentReport resolve without delivery. per docs/compat-scoring.md (crash/QA noop), delivery is intentionally absent. held one notch below the 0.95 analytics tier because the in-app report UI (show()) has no backend content. (replaces a drifted JS stub exposing non-Spec methods like setEnabled/setUserMetadata). imports and API shape receive no behavior credit",
12812
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: native-seam only: the real @shakebugs/react-native-shake runs from the bundle (the full ~670-line Shake JS object : all upstream). we stub only the Shake TurboModule, mirroring src/NativeShake.ts@17.x exactly: every config setter is accepted, every getter returns the inert unconfigured-SDK value, start/silentReport resolve without delivery. per docs/compat-scoring.md (crash/QA noop), delivery is intentionally absent. held one notch below the 0.95 analytics tier because the in-app report UI (show()) has no backend content. (replaces a drifted JS stub exposing non-Spec methods like setEnabled/setUserMetadata). imports and API shape receive no behavior credit",
12813
12813
  working: "full upstream JS surface (Shake object + enums); start, show, all config setters/getters (feedback/blackbox/activity-history/floating-button/screenshot/threshold/intro/video/console toggles), metadata, private views, network/notification capture APIs, user registration, tags, listener registration",
12814
12814
  missing: "no shake-to-report delivery, no rendered Shake report form content, no black-box/activity-history/video capture upload \u2014 intentionally absent for the development simulator (no Shake backend)"
12815
12815
  }
@@ -12822,7 +12822,7 @@ var init_registry = __esm({
12822
12822
  {
12823
12823
  range: ">=1.0.0",
12824
12824
  coverage: 0,
12825
- note: `the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: setAppIcon/getAppIcon resolve "default"; isSupported=false. imports and API shape receive no behavior credit`,
12825
+ note: `the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: setAppIcon/getAppIcon resolve "default"; isSupported=false. imports and API shape receive no behavior credit`,
12826
12826
  missing: "no UIApplication.setAlternateIconName equivalent"
12827
12827
  }
12828
12828
  ]
@@ -12834,7 +12834,7 @@ var init_registry = __esm({
12834
12834
  {
12835
12835
  range: ">=0.1.0",
12836
12836
  coverage: 0,
12837
- note: "the reference iOS simulator handles pasted content through the native paste input. SootSim renders only the JavaScript wrapper around a pass-through container, so import safety receives no behavior credit",
12837
+ note: "the reference iOS simulator handles pasted content through the native paste input. Peach renders only the JavaScript wrapper around a pass-through container, so import safety receives no behavior credit",
12838
12838
  missing: "onPaste never fires \u2014 sootsim keyboard has no paste pipeline into guest inputs"
12839
12839
  }
12840
12840
  ]
@@ -12846,7 +12846,7 @@ var init_registry = __esm({
12846
12846
  {
12847
12847
  range: ">=2.0.0",
12848
12848
  coverage: 0,
12849
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: PDFView renders null. imports and API shape receive no behavior credit",
12849
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: PDFView renders null. imports and API shape receive no behavior credit",
12850
12850
  missing: "recommended swap: PDF.js iframe"
12851
12851
  }
12852
12852
  ]
@@ -12859,7 +12859,7 @@ var init_registry = __esm({
12859
12859
  range: ">=0.5.0",
12860
12860
  coverage: 0.85,
12861
12861
  note: "load-safe noop \u2014 impact/notification/selection accepted",
12862
- missing: "sootsim has expo-haptics; consumers should use that"
12862
+ missing: "peach has expo-haptics; consumers should use that"
12863
12863
  }
12864
12864
  ]
12865
12865
  },
@@ -12870,7 +12870,7 @@ var init_registry = __esm({
12870
12870
  {
12871
12871
  range: ">=2.0.0",
12872
12872
  coverage: 0,
12873
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: initialize accepted; fetchPredictions=[]; fetchPlaceByID rejects. imports and API shape receive no behavior credit",
12873
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: initialize accepted; fetchPredictions=[]; fetchPlaceByID rejects. imports and API shape receive no behavior credit",
12874
12874
  missing: "recommended swap: Google Places API on web directly"
12875
12875
  }
12876
12876
  ]
@@ -12882,7 +12882,7 @@ var init_registry = __esm({
12882
12882
  {
12883
12883
  range: ">=2.0.0",
12884
12884
  coverage: 0,
12885
- note: `the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: alias for expo-dynamic-app-icon (0.85) : load-safe noop matching the upstream "no alternate-icon support in browser" expectation. imports and API shape receive no behavior credit`,
12885
+ note: `the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: alias for expo-dynamic-app-icon (0.85) : load-safe noop matching the upstream "no alternate-icon support in browser" expectation. imports and API shape receive no behavior credit`,
12886
12886
  missing: "see expo-dynamic-app-icon"
12887
12887
  }
12888
12888
  ]
@@ -12920,7 +12920,7 @@ var init_registry = __esm({
12920
12920
  {
12921
12921
  range: ">=1.0.0",
12922
12922
  coverage: 0,
12923
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: startPictureInPicture/stopPictureInPicture accepted; isPipSupported=false. imports and API shape receive no behavior credit",
12923
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: startPictureInPicture/stopPictureInPicture accepted; isPipSupported=false. imports and API shape receive no behavior credit",
12924
12924
  missing: "browsers expose Document.exitPictureInPicture / requestPictureInPicture; sootsim does not bridge yet"
12925
12925
  }
12926
12926
  ]
@@ -12932,7 +12932,7 @@ var init_registry = __esm({
12932
12932
  {
12933
12933
  range: ">=1.0.0",
12934
12934
  coverage: 0,
12935
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: isAvailable=false; detect rejects. imports and API shape receive no behavior credit",
12935
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: isAvailable=false; detect rejects. imports and API shape receive no behavior credit",
12936
12936
  missing: "package surface stubbed loosely"
12937
12937
  }
12938
12938
  ]
@@ -13006,7 +13006,7 @@ var init_registry = __esm({
13006
13006
  {
13007
13007
  range: ">=3.0.0",
13008
13008
  coverage: 0,
13009
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: TwilioVideoLocalView/TwilioVideoParticipantView render null; TwilioVideo.connect rejects. imports and API shape receive no behavior credit",
13009
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: TwilioVideoLocalView/TwilioVideoParticipantView render null; TwilioVideo.connect rejects. imports and API shape receive no behavior credit",
13010
13010
  missing: "recommended swap: twilio-video web SDK"
13011
13011
  }
13012
13012
  ]
@@ -13018,7 +13018,7 @@ var init_registry = __esm({
13018
13018
  {
13019
13019
  range: ">=1.0.0",
13020
13020
  coverage: 0.85,
13021
- note: "native-seam: the BarcodeFormat enum + LINKING_ERROR proxy run from the bundle; the BarcodeScanning native module backs scan() with the native BarcodeDetector API (shipped in the Chromium runtime SootSim runs on \u2014 no vendored library needed), loading the source image through the shared expo-file-system VFS / fetch loader and mapping results to upstream\u2019s exact { format, value } shape with the BarcodeFormat enum values",
13021
+ note: "native-seam: the BarcodeFormat enum + LINKING_ERROR proxy run from the bundle; the BarcodeScanning native module backs scan() with the native BarcodeDetector API (shipped in the Chromium runtime Peach runs on \u2014 no vendored library needed), loading the source image through the shared expo-file-system VFS / fetch loader and mapping results to upstream\u2019s exact { format, value } shape with the BarcodeFormat enum values",
13022
13022
  working: "scan(imageURL) for file:// (VFS) / http(s) / data: images, all BarcodeDetector-supported symbologies mapped to BarcodeFormat (QR/CODE_128/39/93/CODABAR/DATA_MATRIX/EAN/ITF/UPC/PDF417/AZTEC), BarcodeFormat enum",
13023
13023
  missing: "BarcodeDetector symbology support is browser-implementation-bounded; when unavailable or nothing is detected, resolves [] (a valid no-barcode result, matching the natives) rather than a richer ML Kit bounding-box/cornerPoints payload (upstream Barcode is only { format, value })"
13024
13024
  }
@@ -13031,7 +13031,7 @@ var init_registry = __esm({
13031
13031
  {
13032
13032
  range: ">=1.0.0",
13033
13033
  coverage: 0,
13034
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: isLocationMocked/isInMockMode=false. imports and API shape receive no behavior credit",
13034
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: isLocationMocked/isInMockMode=false. imports and API shape receive no behavior credit",
13035
13035
  missing: "browsers cannot detect mock location"
13036
13036
  }
13037
13037
  ]
@@ -13055,7 +13055,7 @@ var init_registry = __esm({
13055
13055
  {
13056
13056
  range: ">=1.0.0",
13057
13057
  coverage: 0,
13058
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: addListener/removeListener register but never fire. imports and API shape receive no behavior credit",
13058
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: addListener/removeListener register but never fire. imports and API shape receive no behavior credit",
13059
13059
  missing: "consumers can use window keydown/keyup directly on web"
13060
13060
  }
13061
13061
  ]
@@ -13115,7 +13115,7 @@ var init_registry = __esm({
13115
13115
  {
13116
13116
  range: ">=0.5.0",
13117
13117
  coverage: 0,
13118
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: DotLottieAnimation/DotLottiePlayer render null. imports and API shape receive no behavior credit",
13118
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: DotLottieAnimation/DotLottiePlayer render null. imports and API shape receive no behavior credit",
13119
13119
  missing: "no .lottie playback; recommended swap: @lottiefiles/dotlottie-react on web"
13120
13120
  }
13121
13121
  ]
@@ -13139,7 +13139,7 @@ var init_registry = __esm({
13139
13139
  {
13140
13140
  range: ">=3.0.0",
13141
13141
  coverage: 0,
13142
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: initialize/logout/deleteToken accepted; login/getProfile reject. imports and API shape receive no behavior credit",
13142
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: initialize/logout/deleteToken accepted; login/getProfile reject. imports and API shape receive no behavior credit",
13143
13143
  missing: "recommended swap: Naver login JS SDK on web"
13144
13144
  }
13145
13145
  ]
@@ -13151,7 +13151,7 @@ var init_registry = __esm({
13151
13151
  {
13152
13152
  range: ">=4.0.0",
13153
13153
  coverage: 0,
13154
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: setNativeAppearance accepted; getNativeAppearance reports system. imports and API shape receive no behavior credit",
13154
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: setNativeAppearance accepted; getNativeAppearance reports system. imports and API shape receive no behavior credit",
13155
13155
  missing: "sootsim handles colorScheme natively"
13156
13156
  }
13157
13157
  ]
@@ -13163,7 +13163,7 @@ var init_registry = __esm({
13163
13163
  {
13164
13164
  range: ">=1.0.0",
13165
13165
  coverage: 0,
13166
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: SkiaVideo renders null; VideoComposition class exposed. imports and API shape receive no behavior credit",
13166
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: SkiaVideo renders null; VideoComposition class exposed. imports and API shape receive no behavior credit",
13167
13167
  missing: "no native skia video; recommended swap: <video> + canvas on web"
13168
13168
  }
13169
13169
  ]
@@ -13175,7 +13175,7 @@ var init_registry = __esm({
13175
13175
  {
13176
13176
  range: ">=0.0.1",
13177
13177
  coverage: 0,
13178
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: Easing constants exposed; interpolate returns input. imports and API shape receive no behavior credit"
13178
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: Easing constants exposed; interpolate returns input. imports and API shape receive no behavior credit"
13179
13179
  }
13180
13180
  ]
13181
13181
  },
@@ -13186,7 +13186,7 @@ var init_registry = __esm({
13186
13186
  {
13187
13187
  range: ">=1.0.0",
13188
13188
  coverage: 0,
13189
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: setMode/getMode accepted. imports and API shape receive no behavior credit",
13189
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: setMode/getMode accepted. imports and API shape receive no behavior credit",
13190
13190
  missing: "browsers cannot adjust system performance modes"
13191
13191
  }
13192
13192
  ]
@@ -13210,7 +13210,7 @@ var init_registry = __esm({
13210
13210
  {
13211
13211
  range: ">=4.0.0",
13212
13212
  coverage: 0,
13213
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: donateShortcut/clearAllShortcuts/clearShortcutsWithIdentifiers/presentShortcut accepted; getShortcuts=[]; addEventListener returns removable subscription. imports and API shape receive no behavior credit",
13213
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: donateShortcut/clearAllShortcuts/clearShortcutsWithIdentifiers/presentShortcut accepted; getShortcuts=[]; addEventListener returns removable subscription. imports and API shape receive no behavior credit",
13214
13214
  missing: "no Siri shortcuts on iOS / web"
13215
13215
  }
13216
13216
  ]
@@ -13258,7 +13258,7 @@ var init_registry = __esm({
13258
13258
  {
13259
13259
  range: ">=1.0.0",
13260
13260
  coverage: 0.8,
13261
- note: "native-seam only - upstream FasterImageView and clearCache platform selection run unchanged; FasterImageView renders through SootSim Image with URL, request headers, sizing, resize mode, border radii, accessibility, and native event translation",
13261
+ note: "native-seam only - upstream FasterImageView and clearCache platform selection run unchanged; FasterImageView renders through Peach Image with URL, request headers, sizing, resize mode, border radii, accessibility, and native event translation",
13262
13262
  working: "remote PNG/JPEG rendering, authenticated image requests, cover/contain/center/fill sizing, per-corner radii, onSuccess/onError, and stable iOS/Android clearCache calls",
13263
13263
  missing: "browser-owned image cache eviction, blurhash/thumbhash/base64 placeholders, failure images, activity indicator, grayscale, transition timing, progressive decoding, and directional alignment modes are not yet distinct"
13264
13264
  }
@@ -13271,9 +13271,9 @@ var init_registry = __esm({
13271
13271
  {
13272
13272
  range: ">=5.0.0",
13273
13273
  coverage: 0.8,
13274
- note: "native-seam only - upstream ToolTip component, touch handling, actions, and callbacks run unchanged; ToolTipMenu presents through the SootSim iOS action sheet and RCTToolTipText forwards selection and blur events",
13274
+ note: "native-seam only - upstream ToolTip component, touch handling, actions, and callbacks run unchanged; ToolTipMenu presents through the Peach iOS action sheet and RCTToolTipText forwards selection and blur events",
13275
13275
  working: "show/hide lifecycle, selectable text actions, action callbacks, arrow-direction-safe calls, child rendering, and onShow/onHide behavior",
13276
- missing: "the menu uses SootSim action-sheet placement instead of anchoring a compact UIMenuController to the source view"
13276
+ missing: "the menu uses Peach action-sheet placement instead of anchoring a compact UIMenuController to the source view"
13277
13277
  }
13278
13278
  ]
13279
13279
  },
@@ -13284,7 +13284,7 @@ var init_registry = __esm({
13284
13284
  {
13285
13285
  range: ">=0.5.0",
13286
13286
  coverage: 0,
13287
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: UnityView renders null; sendUnityMessage/postMessageToUnity accepted; isReady=false. imports and API shape receive no behavior credit",
13287
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: UnityView renders null; sendUnityMessage/postMessageToUnity accepted; isReady=false. imports and API shape receive no behavior credit",
13288
13288
  missing: "no Unity engine in browser; recommended swap: Unity WebGL build embedded in iframe"
13289
13289
  }
13290
13290
  ]
@@ -13321,7 +13321,7 @@ var init_registry = __esm({
13321
13321
  {
13322
13322
  range: ">=2.0.0",
13323
13323
  coverage: 0,
13324
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: setValue/delete accepted; getValue=null; isCloudAvailable=false. imports and API shape receive no behavior credit",
13324
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: setValue/delete accepted; getValue=null; isCloudAvailable=false. imports and API shape receive no behavior credit",
13325
13325
  missing: "no iCloud Drive / Google Drive integration in browser"
13326
13326
  }
13327
13327
  ]
@@ -13370,7 +13370,7 @@ var init_registry = __esm({
13370
13370
  {
13371
13371
  range: ">=1.0.0",
13372
13372
  coverage: 0,
13373
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: applyTheme resolves immediately; ThemeSwitchAnimationStyle constants exposed. imports and API shape receive no behavior credit",
13373
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: applyTheme resolves immediately; ThemeSwitchAnimationStyle constants exposed. imports and API shape receive no behavior credit",
13374
13374
  missing: "no native theme transition animation"
13375
13375
  }
13376
13376
  ]
@@ -13394,7 +13394,7 @@ var init_registry = __esm({
13394
13394
  {
13395
13395
  range: ">=1.0.0",
13396
13396
  coverage: 0.85,
13397
- note: "native-seam: the impact/notification/selection/androidHaptics wrappers run from the bundle; the Haptics TurboModule delegates to SootSim\u2019s shared expo-haptics navigator.vibrate mapping (same enum string values), so behavior is identical to expo-haptics and there is one source of the vibration logic. calls resolve cleanly when no vibrator is present (and the iOS simulator has no haptics hardware either \u2014 the faithful contract)",
13397
+ note: "native-seam: the impact/notification/selection/androidHaptics wrappers run from the bundle; the Haptics TurboModule delegates to Peach\u2019s shared expo-haptics navigator.vibrate mapping (same enum string values), so behavior is identical to expo-haptics and there is one source of the vibration logic. calls resolve cleanly when no vibrator is present (and the iOS simulator has no haptics hardware either \u2014 the faithful contract)",
13398
13398
  working: "impact(style: light/medium/heavy/soft/rigid), notification(type: success/warning/error), selection(), androidHaptics() \u2014 all mapped to navigator.vibrate patterns via the shared expo-haptics implementation",
13399
13399
  missing: "browsers expose only on/off Vibration (no force/sharpness control) \u2014 exact UIFeedbackGenerator texture is approximated by duration, identical to expo-haptics; no perceptible vibration on a device without a vibrator (faithful to the iOS simulator, which has none)"
13400
13400
  }
@@ -13407,7 +13407,7 @@ var init_registry = __esm({
13407
13407
  {
13408
13408
  range: ">=1.0.0",
13409
13409
  coverage: 0,
13410
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: isPasskeyAuthAvailable=false; register/authenticate reject. imports and API shape receive no behavior credit",
13410
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: isPasskeyAuthAvailable=false; register/authenticate reject. imports and API shape receive no behavior credit",
13411
13411
  missing: "no WebAuthn in tenant worker"
13412
13412
  }
13413
13413
  ]
@@ -13431,7 +13431,7 @@ var init_registry = __esm({
13431
13431
  {
13432
13432
  range: ">=6.0.0",
13433
13433
  coverage: 0,
13434
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: getInitialShare=null; addNewShareListener returns subscription that never fires. imports and API shape receive no behavior credit",
13434
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: getInitialShare=null; addNewShareListener returns subscription that never fires. imports and API shape receive no behavior credit",
13435
13435
  missing: "no iOS Share Extension in browser"
13436
13436
  }
13437
13437
  ]
@@ -13564,7 +13564,7 @@ var init_registry = __esm({
13564
13564
  {
13565
13565
  range: ">=21.0.0",
13566
13566
  coverage: 0,
13567
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: native-seam only - upstream Intercom JS facade runs from the bundle; IntercomWrapper accepts registration, identity, messaging, help center, and event-listener calls without a backend session. imports and API shape receive no behavior credit",
13567
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: native-seam only - upstream Intercom JS facade runs from the bundle; IntercomWrapper accepts registration, identity, messaging, help center, and event-listener calls without a backend session. imports and API shape receive no behavior credit",
13568
13568
  working: "login/logout/updateUser, unread count, messenger/help-center/article/carousel/survey presentation calls, event listener registration, token/logging/display-mode setters",
13569
13569
  missing: "no Intercom backend delivery, native messenger UI, push registration, or unread-count sync"
13570
13570
  }
@@ -13824,7 +13824,7 @@ var init_registry = __esm({
13824
13824
  {
13825
13825
  range: ">=0.1.0",
13826
13826
  coverage: 0.75,
13827
- note: "native-seam only \u2014 upstream setWidgetData wrapper runs from the bundle; ExpoWidgets.setWidgetData is accepted with no Android widget host in SootSim",
13827
+ note: "native-seam only \u2014 upstream setWidgetData wrapper runs from the bundle; ExpoWidgets.setWidgetData is accepted with no Android widget host in Peach",
13828
13828
  missing: "no Android AppWidget broadcast/rendering host in the iOS-shaped browser simulator"
13829
13829
  }
13830
13830
  ]
@@ -13903,7 +13903,7 @@ var init_registry = __esm({
13903
13903
  coverage: 0.95,
13904
13904
  note: "native-seam only \u2014 real TestFairy JS class runs from the bundle; TestFairyBridge accepts every session/feedback/logging call without session recording or delivery",
13905
13905
  working: "begin, feedback handler toggles, identify/correlation/user attributes, checkpoints/events, screenshot/log/screen/session controls, feedback options, attachFile, network event logging",
13906
- missing: "no TestFairy video/session upload backend in SootSim"
13906
+ missing: "no TestFairy video/session upload backend in Peach"
13907
13907
  }
13908
13908
  ]
13909
13909
  },
@@ -13940,7 +13940,7 @@ var init_registry = __esm({
13940
13940
  coverage: 0.95,
13941
13941
  note: "native-seam only \u2014 real Bugfender JS/console facade runs from the bundle; RnBugfender accepts logging/crash/user-feedback calls with no delivery backend",
13942
13942
  working: "init/activateLogger, device/session URL getters, log levels, sendIssue/sendCrash/sendUserFeedback, device keys, forceSendOnce, feedback UI returns the clean unavailable path",
13943
- missing: "no Bugfender dashboard delivery or native feedback UI in SootSim"
13943
+ missing: "no Bugfender dashboard delivery or native feedback UI in Peach"
13944
13944
  }
13945
13945
  ]
13946
13946
  },
@@ -13976,7 +13976,7 @@ var init_registry = __esm({
13976
13976
  {
13977
13977
  range: ">=1.0.0",
13978
13978
  coverage: 0,
13979
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: native-seam only : upstream expo-module wrapper runs from the bundle; check() resolves true, matching the package web/android no-op branches where there is no iOS local-network prompt. imports and API shape receive no behavior credit",
13979
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: native-seam only : upstream expo-module wrapper runs from the bundle; check() resolves true, matching the package web/android no-op branches where there is no iOS local-network prompt. imports and API shape receive no behavior credit",
13980
13980
  missing: "no native iOS local-network permission dialog"
13981
13981
  }
13982
13982
  ]
@@ -13989,7 +13989,7 @@ var init_registry = __esm({
13989
13989
  range: ">=1.0.0",
13990
13990
  coverage: 0.9,
13991
13991
  note: "native-seam only \u2014 upstream AndroidSystemBars class runs from the bundle; SystemBars.setSystemUIVisibility is accepted as an iOS/browser no-op",
13992
- missing: "Android system UI flag rendering is not applicable to SootSim iOS"
13992
+ missing: "Android system UI flag rendering is not applicable to Peach iOS"
13993
13993
  }
13994
13994
  ]
13995
13995
  },
@@ -14002,7 +14002,7 @@ var init_registry = __esm({
14002
14002
  coverage: 0.7,
14003
14003
  note: "native-seam only \u2014 upstream OTP helpers and extractOtp run from the bundle; ReactNativeOtpVerify returns an empty app signature, removes listeners, and rejects Android SMS consent/retriever starts as unavailable",
14004
14004
  working: "getAppSignature, removeSmsListener, onSmsReceived subscription shape, pure-JS extractOtp",
14005
- missing: "Android SMS Retriever / phone-number consent service is unavailable in SootSim iOS"
14005
+ missing: "Android SMS Retriever / phone-number consent service is unavailable in Peach iOS"
14006
14006
  }
14007
14007
  ]
14008
14008
  },
@@ -14103,9 +14103,9 @@ var init_registry = __esm({
14103
14103
  {
14104
14104
  range: ">=0.2.0",
14105
14105
  coverage: 0.85,
14106
- note: "native-seam only \u2014 upstream Dimensions fallback logic and exported fetch helpers run from the bundle; ReactNativeStatusBarHeight exposes SootSim iPhone status and bottom-safe-area constants",
14106
+ note: "native-seam only \u2014 upstream Dimensions fallback logic and exported fetch helpers run from the bundle; ReactNativeStatusBarHeight exposes Peach iPhone status and bottom-safe-area constants",
14107
14107
  working: "fetchStatusBarHeight and fetchBottomInset through upstream JS",
14108
- missing: "constants are fixed to the current SootSim device rather than live device-picker updates"
14108
+ missing: "constants are fixed to the current Peach device rather than live device-picker updates"
14109
14109
  }
14110
14110
  ]
14111
14111
  },
@@ -14116,7 +14116,7 @@ var init_registry = __esm({
14116
14116
  {
14117
14117
  range: ">=1.0.0",
14118
14118
  coverage: 0.65,
14119
- note: "native-seam only \u2014 upstream exported getIcon/changeIcon functions run from the bundle; getIcon reports DefaultIcon and changeIcon rejects with the iOS NOT_SUPPORTED path because SootSim has no declared alternate app icons",
14119
+ note: "native-seam only \u2014 upstream exported getIcon/changeIcon functions run from the bundle; getIcon reports DefaultIcon and changeIcon rejects with the iOS NOT_SUPPORTED path because Peach has no declared alternate app icons",
14120
14120
  working: "getIcon returns DefaultIcon; unsupported changeIcon rejects with code IOS:NOT_SUPPORTED",
14121
14121
  missing: "no UIApplication alternateIconName / Info.plist icon set integration"
14122
14122
  }
@@ -14154,7 +14154,7 @@ var init_registry = __esm({
14154
14154
  {
14155
14155
  range: ">=1.0.0",
14156
14156
  coverage: 0,
14157
- note: "the reference iOS simulator displays the package splash animation. SootSim only accepts hide(), so import safety receives no behavior credit",
14157
+ note: "the reference iOS simulator displays the package splash animation. Peach only accepts hide(), so import safety receives no behavior credit",
14158
14158
  working: "SplashScreen.hide",
14159
14159
  missing: "no native launch-screen Lottie overlay to dismiss"
14160
14160
  }
@@ -14459,7 +14459,7 @@ var init_registry = __esm({
14459
14459
  ]
14460
14460
  },
14461
14461
  // ── lane A2: ranks 751-1000, native-filtered zero-scorers lifted ──
14462
- // native-seam only: real package JS runs from the bundle; SootSim registers the
14462
+ // native-seam only: real package JS runs from the bundle; Peach registers the
14463
14463
  // named TurboModule/NativeModule as a structurally-correct noop.
14464
14464
  // rudderstack device-mode analytics integrations — each is a one-line
14465
14465
  // `NativeModules.RudderIntegration<Name>ReactNative.setup()` wrapper. delivery
@@ -14728,7 +14728,7 @@ var init_registry = __esm({
14728
14728
  {
14729
14729
  range: ">=0.1.0",
14730
14730
  coverage: 0,
14731
- note: "the reference iOS simulator performs this package's behavior. SootSim currently provides only this unsupported shape: native-seam only : the real JS runs from the bundle; the RNFIRMessaging native module is a load-safe noop (synthetic token, no events). delivery intentionally absent in the simulator. imports and API shape receive no behavior credit",
14731
+ note: "the reference iOS simulator performs this package's behavior. Peach currently provides only this unsupported shape: native-seam only : the real JS runs from the bundle; the RNFIRMessaging native module is a load-safe noop (synthetic token, no events). delivery intentionally absent in the simulator. imports and API shape receive no behavior credit",
14732
14732
  working: "getFCMToken/getAPNSToken (synthetic token), local-notification + topic + badge plumbing importable and resolve cleanly",
14733
14733
  missing: "no real push delivery or token registration from the simulator"
14734
14734
  }
@@ -14849,7 +14849,7 @@ var init_registry = __esm({
14849
14849
  {
14850
14850
  range: ">=1.1.2",
14851
14851
  coverage: 0.5,
14852
- note: "upstream Leaflet wrapper runs over SootSim's partial react-native-webview seam",
14852
+ note: "upstream Leaflet wrapper runs over Peach's partial react-native-webview seam",
14853
14853
  working: "JavaScript wrapper, local Leaflet HTML source, WebView mounting, injected JavaScript, postMessage updates for layers, markers, shapes, center, position, and zoom, and load/message callbacks supported by the shared WebView surface",
14854
14854
  missing: "runtime proof for Leaflet map pixels, remote map tiles, gesture interaction, local bundled-asset resolution, and the WebView gaps already listed for react-native-webview"
14855
14855
  }
@@ -15364,7 +15364,7 @@ var init_registry = __esm({
15364
15364
  {
15365
15365
  range: ">=1.0.0",
15366
15366
  coverage: 0.85,
15367
- note: "faithful macOS-only unavailable state on SootSim iOS and Android devices",
15367
+ note: "faithful macOS-only unavailable state on Peach iOS and Android devices",
15368
15368
  working: "package imports safely, exports pickFile and pickDirectory, and throws its own explicit macOS-only platform error when either API is called outside macOS",
15369
15369
  missing: "actual macOS file and directory picker, selection results, multiple selection, cancellation, bookmarks, and macOS runtime support"
15370
15370
  }
@@ -15619,7 +15619,7 @@ var init_registry = __esm({
15619
15619
  {
15620
15620
  range: ">=2.3.0",
15621
15621
  coverage: 0.85,
15622
- note: "faithful tvOS-only unavailable state on SootSim phone and tablet devices",
15622
+ note: "faithful tvOS-only unavailable state on Peach phone and tablet devices",
15623
15623
  working: "package imports safely, isNativeSearchAvailable returns false, and TvosSearchView returns null unless Platform.OS is iOS and Platform.isTV is true",
15624
15624
  missing: "tvOS SwiftUI search field, focus engine, result grid, remote-control interaction, native image loading, marquee, validation warnings, selections, and search events"
15625
15625
  }
@@ -16231,7 +16231,7 @@ var init_registry = __esm({
16231
16231
  {
16232
16232
  range: ">=7.0.0",
16233
16233
  coverage: 0,
16234
- note: "unverified telemetry SDK delivery and replay \u2014 no SootSim-specific noop seam",
16234
+ note: "unverified telemetry SDK delivery and replay \u2014 no Peach-specific noop seam",
16235
16235
  missing: "verified initialization, native crash capture, session replay, screenshots, push integration, uploads, and delivery suppression"
16236
16236
  }
16237
16237
  ]
@@ -17054,8 +17054,8 @@ var init_registry = __esm({
17054
17054
  {
17055
17055
  range: ">=3.2.1",
17056
17056
  coverage: 0,
17057
- note: "unverified browser implementation: the package ships a substantial web recorder, but SootSim has no runtime proof for it",
17058
- working: "no audio recording, playback, or analysis behavior is verified in SootSim",
17057
+ note: "unverified browser implementation: the package ships a substantial web recorder, but Peach has no runtime proof for it",
17058
+ working: "no audio recording, playback, or analysis behavior is verified in Peach",
17059
17059
  missing: "runtime proof for the published MediaRecorder, Web Audio, worklet, and WASM paths"
17060
17060
  }
17061
17061
  ]
@@ -17106,7 +17106,7 @@ var init_registry = __esm({
17106
17106
  {
17107
17107
  range: ">=0.4.1",
17108
17108
  coverage: 0,
17109
- note: "unverified text transformation control: native and DOM-specific implementations ship, but neither has SootSim runtime proof",
17109
+ note: "unverified text transformation control: native and DOM-specific implementations ship, but neither has Peach runtime proof",
17110
17110
  working: "formatters are plain JavaScript, but the input and caret behavior is not verified",
17111
17111
  missing: "verified formatted input updates, selection preservation, worklet execution, and decorator view behavior"
17112
17112
  }
@@ -17248,7 +17248,7 @@ var init_registry = __esm({
17248
17248
  {
17249
17249
  range: ">=11.0.5",
17250
17250
  coverage: 0,
17251
- note: "unsupported CodePush fork: SootSim's existing package stub does not apply to this package name",
17251
+ note: "unsupported CodePush fork: Peach's existing package stub does not apply to this package name",
17252
17252
  working: "no OTA lifecycle behavior is verified",
17253
17253
  missing: "CodePush native module loading, update checks, download, install, restart control, metadata, and events"
17254
17254
  }
@@ -17585,7 +17585,7 @@ var init_registry = __esm({
17585
17585
  {
17586
17586
  range: ">=0.8.4",
17587
17587
  coverage: 0.7,
17588
- note: "browser-backed WebGPU canvas: real GPU contexts render and present through the SootSim canvas",
17588
+ note: "browser-backed WebGPU canvas: real GPU contexts render and present through the Peach canvas",
17589
17589
  working: "WebGPUModule install, navigator.gpu, Canvas contexts, WebGPUView presentation, encoded-image createImageBitmap, hooks, and offscreen WebGPU",
17590
17590
  missing: "destroyContext cleanup and native pointer/video interop through importDevice, adoptTexture, loadVideoFrame, createVideoPlayer, and native-buffer frame helpers"
17591
17591
  }
@@ -18150,7 +18150,7 @@ var init_registry = __esm({
18150
18150
  {
18151
18151
  range: ">=0.0.5",
18152
18152
  coverage: 0,
18153
- note: "unsupported: configure is load-safe but SootSim does not draw the native iOS touch visualization",
18153
+ note: "unsupported: configure is load-safe but Peach does not draw the native iOS touch visualization",
18154
18154
  missing: "ShowTime touch circles, fill and stroke styling, force visualization, multi-tap labels, Pencil filtering, timing, and window-level gesture observation"
18155
18155
  }
18156
18156
  ]
@@ -18831,7 +18831,7 @@ function scanDepsWithData(pkg, data) {
18831
18831
  version,
18832
18832
  coverage: null,
18833
18833
  status: "auto-stub",
18834
- note: "not yet verified; it may work through rnx's generic native seam",
18834
+ note: "not yet verified; it may work through peach's generic native seam",
18835
18835
  rnx
18836
18836
  });
18837
18837
  continue;
@@ -19125,16 +19125,16 @@ function resolveSootsimBridgePortForRuntimeLocation(input = {}) {
19125
19125
  function resolveSootsimWebSocketProxyUrl(input) {
19126
19126
  const pageUrl = parseHrefUrl(input.href);
19127
19127
  if (!pageUrl || pageUrl.protocol !== "http:" && pageUrl.protocol !== "https:") {
19128
- throw new Error(`invalid rnx websocket proxy page URL: ${input.href}`);
19128
+ throw new Error(`invalid peach websocket proxy page URL: ${input.href}`);
19129
19129
  }
19130
19130
  let targetUrl;
19131
19131
  try {
19132
19132
  targetUrl = new URL(input.targetUrl);
19133
19133
  } catch {
19134
- throw new Error(`invalid rnx websocket proxy target URL: ${input.targetUrl}`);
19134
+ throw new Error(`invalid peach websocket proxy target URL: ${input.targetUrl}`);
19135
19135
  }
19136
19136
  if (targetUrl.protocol !== "ws:" && targetUrl.protocol !== "wss:") {
19137
- throw new Error(`invalid rnx websocket proxy target URL: ${input.targetUrl}`);
19137
+ throw new Error(`invalid peach websocket proxy target URL: ${input.targetUrl}`);
19138
19138
  }
19139
19139
  const proxyUrl = new URL("/__websocket-proxy", pageUrl);
19140
19140
  proxyUrl.protocol = pageUrl.protocol === "https:" ? "wss:" : "ws:";
@@ -20250,6 +20250,7 @@ async function probePort(port, buildIconProxyUrl, listeningProcess) {
20250
20250
  function isSootSimSelfServer(server) {
20251
20251
  const bundleId = server.bundleId?.trim().toLowerCase();
20252
20252
  if (bundleId?.startsWith("dev.sootsim.")) return true;
20253
+ if (bundleId?.startsWith("dev.peachsim.")) return true;
20253
20254
  return false;
20254
20255
  }
20255
20256
  function invalidatePortCache(port) {
@@ -20424,11 +20425,11 @@ var name, rnxPublicBrand;
20424
20425
  var init_public_brand = __esm({
20425
20426
  "src/public-brand.ts"() {
20426
20427
  "use strict";
20427
- name = "rnx";
20428
+ name = "Peach";
20428
20429
  rnxPublicBrand = Object.freeze({
20429
20430
  name,
20430
20431
  packageName: "peachsim",
20431
- commandName: "rnx",
20432
+ commandName: "peach",
20432
20433
  domain: "rnxsim.com",
20433
20434
  origin: "https://rnxsim.com"
20434
20435
  });
@@ -20438,8 +20439,8 @@ var init_public_brand = __esm({
20438
20439
  // src/cli-version.ts
20439
20440
  function getCliVersion() {
20440
20441
  if (cached2 != null) return cached2;
20441
- if (typeof __RNX_CLI_VERSION__ !== "undefined" && typeof __RNX_CLI_VERSION__ === "string" && __RNX_CLI_VERSION__) {
20442
- cached2 = __RNX_CLI_VERSION__;
20442
+ if (typeof __PEACH_CLI_VERSION__ !== "undefined" && typeof __PEACH_CLI_VERSION__ === "string" && __PEACH_CLI_VERSION__) {
20443
+ cached2 = __PEACH_CLI_VERSION__;
20443
20444
  return cached2;
20444
20445
  }
20445
20446
  const candidates = [
@@ -20480,7 +20481,7 @@ __export(home_paths_exports, {
20480
20481
  DAEMON_HEARTBEAT_STALE_MS: () => DAEMON_HEARTBEAT_STALE_MS,
20481
20482
  DAEMON_LOCKFILE: () => DAEMON_LOCKFILE,
20482
20483
  DEV_BRIDGES_DIR: () => DEV_BRIDGES_DIR,
20483
- RNX_HOME_ENV: () => RNX_HOME_ENV,
20484
+ PEACH_HOME_ENV: () => PEACH_HOME_ENV,
20484
20485
  activeRuntimeDir: () => activeRuntimeDir,
20485
20486
  activeRuntimeFile: () => activeRuntimeFile,
20486
20487
  cacheDir: () => cacheDir,
@@ -20531,9 +20532,9 @@ __export(home_paths_exports, {
20531
20532
  writeSharedConfig: () => writeSharedConfig
20532
20533
  });
20533
20534
  function rnxHomeDir() {
20534
- const override = process.env[RNX_HOME_ENV];
20535
+ const override = process.env[PEACH_HOME_ENV];
20535
20536
  if (override && override.length > 0) return import_node_path4.default.resolve(override);
20536
- return import_node_path4.default.join((0, import_node_os.homedir)(), ".rnx");
20537
+ return import_node_path4.default.join((0, import_node_os.homedir)(), ".peach");
20537
20538
  }
20538
20539
  function isSootsimDevCheckout() {
20539
20540
  if (process.env.SOOTSIM_FORCE_DAEMON_INSTALL === "1") return false;
@@ -20544,7 +20545,7 @@ function isSootsimDevCheckout() {
20544
20545
  if (!argv1) return false;
20545
20546
  try {
20546
20547
  const real = import_node_fs4.default.realpathSync(argv1);
20547
- return real.includes(`${import_node_path4.default.sep}packages${import_node_path4.default.sep}sootsim${import_node_path4.default.sep}`);
20548
+ return real.includes(`${import_node_path4.default.sep}packages${import_node_path4.default.sep}peachsim${import_node_path4.default.sep}`);
20548
20549
  } catch {
20549
20550
  return false;
20550
20551
  }
@@ -20584,10 +20585,10 @@ function daemonAppDir() {
20584
20585
  return import_node_path4.default.join(rnxHomeDir(), "daemon-app");
20585
20586
  }
20586
20587
  function daemonAppBundlePath() {
20587
- return import_node_path4.default.join(daemonAppDir(), "RNX Daemon.app");
20588
+ return import_node_path4.default.join(daemonAppDir(), "Peach Daemon.app");
20588
20589
  }
20589
20590
  function daemonAppLauncherPath() {
20590
- return import_node_path4.default.join(daemonAppBundlePath(), "Contents", "MacOS", "rnx-daemon");
20591
+ return import_node_path4.default.join(daemonAppBundlePath(), "Contents", "MacOS", "peach-daemon");
20591
20592
  }
20592
20593
  function cacheDir() {
20593
20594
  return import_node_path4.default.join(rnxHomeDir(), "cache");
@@ -20839,10 +20840,10 @@ function writeDaemonLockfile(data) {
20839
20840
  const existing = readDaemonLockfile();
20840
20841
  if (!existing) {
20841
20842
  if (createDaemonLockfileExclusive(data)) return;
20842
- throw new Error("another rnx daemon claimed the lockfile before this write");
20843
+ throw new Error("another peach daemon claimed the lockfile before this write");
20843
20844
  }
20844
20845
  if (!sameDaemonOwner(existing, data)) {
20845
- throw new Error("refusing to overwrite another rnx daemon lockfile");
20846
+ throw new Error("refusing to overwrite another peach daemon lockfile");
20846
20847
  }
20847
20848
  const tmp = `${lockfilePath}.${data.pid}.${(0, import_node_crypto.randomUUID)()}.tmp`;
20848
20849
  import_node_fs4.default.writeFileSync(tmp, `${JSON.stringify(data, null, 2)}
@@ -20850,7 +20851,7 @@ function writeDaemonLockfile(data) {
20850
20851
  try {
20851
20852
  const current = readDaemonLockfile();
20852
20853
  if (!current || !sameDaemonOwner(current, data)) {
20853
- throw new Error("rnx daemon lock ownership changed during heartbeat");
20854
+ throw new Error("peach daemon lock ownership changed during heartbeat");
20854
20855
  }
20855
20856
  import_node_fs4.default.renameSync(tmp, lockfilePath);
20856
20857
  } finally {
@@ -21005,7 +21006,7 @@ function removeDevBridgeLockfile(owner) {
21005
21006
  } catch {
21006
21007
  }
21007
21008
  }
21008
- var import_node_crypto, import_node_fs4, import_node_os, import_node_path4, RNX_HOME_ENV, ACTIVE_RUNTIME_FILE, DAEMON_LOCKFILE, DEV_BRIDGES_DIR, CONFIG_FILE, CLI_UPDATE_FILE, DAEMON_HEARTBEAT_STALE_MS, CURRENT_ONBOARDING_VERSION, DAEMON_LOCKFILE_MAX_BYTES, DAEMON_CLAIM_STALE_MS;
21009
+ var import_node_crypto, import_node_fs4, import_node_os, import_node_path4, PEACH_HOME_ENV, ACTIVE_RUNTIME_FILE, DAEMON_LOCKFILE, DEV_BRIDGES_DIR, CONFIG_FILE, CLI_UPDATE_FILE, DAEMON_HEARTBEAT_STALE_MS, CURRENT_ONBOARDING_VERSION, DAEMON_LOCKFILE_MAX_BYTES, DAEMON_CLAIM_STALE_MS;
21009
21010
  var init_home_paths = __esm({
21010
21011
  "src/home-paths.ts"() {
21011
21012
  "use strict";
@@ -21013,7 +21014,7 @@ var init_home_paths = __esm({
21013
21014
  import_node_fs4 = __toESM(require("node:fs"), 1);
21014
21015
  import_node_os = require("node:os");
21015
21016
  import_node_path4 = __toESM(require("node:path"), 1);
21016
- RNX_HOME_ENV = "RNX_HOME";
21017
+ PEACH_HOME_ENV = "PEACH_HOME";
21017
21018
  ACTIVE_RUNTIME_FILE = "active";
21018
21019
  DAEMON_LOCKFILE = "daemon.json";
21019
21020
  DEV_BRIDGES_DIR = "dev-bridges";
@@ -21464,7 +21465,7 @@ function findMonorepoRoot() {
21464
21465
  return null;
21465
21466
  }
21466
21467
  function resolveDevCheckoutRuntimeRoot() {
21467
- if (process.env.RNX_HOME && readActiveRuntime()) return null;
21468
+ if (process.env.PEACH_HOME && readActiveRuntime()) return null;
21468
21469
  const root = findMonorepoRoot();
21469
21470
  if (!root) return null;
21470
21471
  const devBuild = import_path.default.join(root, "public/sootsim");
@@ -21485,11 +21486,11 @@ function resolveActiveRuntimeRoot() {
21485
21486
  function runtimeVersionHostname(version) {
21486
21487
  const trimmed = version.trim();
21487
21488
  if (!isValidRuntimeVersion(trimmed)) {
21488
- throw new Error(`invalid rnx runtime version: ${version}`);
21489
+ throw new Error(`invalid peach runtime version: ${version}`);
21489
21490
  }
21490
21491
  const encoded = Buffer.from(trimmed, "utf8").toString("hex");
21491
21492
  const labels = encoded.match(/.{1,60}/g);
21492
- if (!labels) throw new Error(`invalid rnx runtime version: ${version}`);
21493
+ if (!labels) throw new Error(`invalid peach runtime version: ${version}`);
21493
21494
  return `${labels.join(".")}${RUNTIME_VERSION_HOSTNAME_SUFFIX}`;
21494
21495
  }
21495
21496
  function isRuntimeVersionHostname(hostname) {
@@ -21545,7 +21546,7 @@ var init_runtime_delivery = __esm({
21545
21546
  RNX_CHANGELOG_URL = `${rnxPublicBrand.origin}/changelog`;
21546
21547
  RNX_CHANGELOG_API_URL = "https://contrast.dev/api/changelog/sootsim";
21547
21548
  RNX_RUNTIME_PRODUCT = {
21548
- id: "rnx",
21549
+ id: "peach",
21549
21550
  defaultCdnOrigin: DEFAULT_RUNTIME_CDN_ORIGIN,
21550
21551
  manifestPath: "/runtimes/manifest.json",
21551
21552
  tarballPath: (version) => `/runtimes/sootsim-runtime-${version}.tar.gz`,
@@ -21554,8 +21555,8 @@ var init_runtime_delivery = __esm({
21554
21555
  // vite/metro plugins serve, so its absence means the tarball is not one.
21555
21556
  installedMarker: "index.html",
21556
21557
  env: {
21557
- cdnOrigin: "RNX_CDN_ORIGIN",
21558
- channel: "RNX_RUNTIME_CHANNEL"
21558
+ cdnOrigin: "PEACH_CDN_ORIGIN",
21559
+ channel: "PEACH_RUNTIME_CHANNEL"
21559
21560
  },
21560
21561
  ensureHome: ensureRnxHome,
21561
21562
  configFile: configFilePath,
@@ -21977,8 +21978,8 @@ function pidIsAlive(pid, sessionId) {
21977
21978
  return true;
21978
21979
  }
21979
21980
  function resolveSootsimInvocation() {
21980
- if (process.env.RNX_BIN) {
21981
- return { executable: process.env.RNX_BIN, prefixArgs: [] };
21981
+ if (process.env.PEACH_BIN) {
21982
+ return { executable: process.env.PEACH_BIN, prefixArgs: [] };
21982
21983
  }
21983
21984
  if (IS_STANDALONE) return rnxSelfInvocation();
21984
21985
  if (process.versions.electron) {
@@ -22000,14 +22001,14 @@ function resolveSootsimInvocation() {
22000
22001
  return { executable: process.argv[0], prefixArgs: [argv1] };
22001
22002
  }
22002
22003
  throw new Error(
22003
- "rnx CLI not found. set RNX_BIN to the path of the rnx binary, or build the workspace CLI via `bun run --cwd packages/sootsim build:cli`."
22004
+ "peach CLI not found. set PEACH_BIN to the path of the peach binary, or build the workspace CLI via `bun run --cwd packages/peachsim build:cli`."
22004
22005
  );
22005
22006
  }
22006
22007
  function tryWorkspaceSootsim() {
22007
22008
  try {
22008
22009
  const sootsimDir = resolveSootsimPackageDir();
22009
22010
  if (!sootsimDir) return null;
22010
- const binaryName = `rnx-${process.platform === "win32" ? "windows" : process.platform}-${process.arch}${process.platform === "win32" ? ".exe" : ""}`;
22011
+ const binaryName = `peach-${process.platform === "win32" ? "windows" : process.platform}-${process.arch}${process.platform === "win32" ? ".exe" : ""}`;
22011
22012
  const distBinary = import_node_path9.default.join(sootsimDir, "dist-bin", binaryName);
22012
22013
  if (import_node_fs9.default.existsSync(distBinary)) return { executable: distBinary, prefixArgs: [] };
22013
22014
  const distBin = import_node_path9.default.join(sootsimDir, "dist-cli", "bin.js");
@@ -22019,7 +22020,7 @@ function tryWorkspaceSootsim() {
22019
22020
  const buildMtime = import_node_fs9.default.statSync(distBin).mtimeMs;
22020
22021
  if (buildMtime < srcMtime) {
22021
22022
  console.warn(
22022
- `[rnx] dist-cli/bin.js is older than agent-wrapper.ts \u2014 rebuild with \`bun run --cwd packages/sootsim build:cli\`.`
22023
+ `[peach] dist-cli/bin.js is older than agent-wrapper.ts \u2014 rebuild with \`bun run --cwd packages/peachsim build:cli\`.`
22023
22024
  );
22024
22025
  }
22025
22026
  }
@@ -22164,7 +22165,7 @@ async function startSession(opts) {
22164
22165
  if (existingLive) {
22165
22166
  throw new AgentSessionError(
22166
22167
  "ALREADY_RUNNING",
22167
- `session already running for project=${project.id} provider=${provider} (session ${existingLive.id}, pid ${existingLive.wrapperPid}). end it first with \`rnx agent end <sessionId>\`.`
22168
+ `session already running for project=${project.id} provider=${provider} (session ${existingLive.id}, pid ${existingLive.wrapperPid}). end it first with \`peach agent end <sessionId>\`.`
22168
22169
  );
22169
22170
  }
22170
22171
  const claudeSessionUuid = provider === "claude" ? (0, import_node_crypto4.randomUUID)() : void 0;
@@ -22506,7 +22507,7 @@ var init_agent_host = __esm({
22506
22507
  // every session.
22507
22508
  sessionsBySocket = /* @__PURE__ */ new Map();
22508
22509
  // every connected socket (regardless of role) — gets session-status
22509
- // pushes so a CLI `sootsim agent sessions --watch` can react to state
22510
+ // pushes so a CLI `peach agent sessions --watch` can react to state
22510
22511
  // changes driven by another client.
22511
22512
  allSockets = /* @__PURE__ */ new Set();
22512
22513
  // agent wrappers also emit prompt-received from the FIFO reader, but the
@@ -23815,7 +23816,7 @@ var init_plane_host = __esm({
23815
23816
  const root = this.realRoot(String(msg.root ?? ""));
23816
23817
  if (!this.registered.has(root)) {
23817
23818
  throw new PlaneNotRegisteredError(
23818
- `no box has registered ${root}; start one with \`rnx box\` there`
23819
+ `no box has registered ${root}; start one with \`peach box\` there`
23819
23820
  );
23820
23821
  }
23821
23822
  const existingId = this.byRoot.get(root);
@@ -24017,7 +24018,7 @@ function unsupportedSpecifier(specifier) {
24017
24018
  );
24018
24019
  }
24019
24020
  function bridgeDeclaration(name2, specifier) {
24020
- const notReady = (what) => JSON.stringify(`[rnx] replacement ${what} bridge is not ready`);
24021
+ const notReady = (what) => JSON.stringify(`[peach] replacement ${what} bridge is not ready`);
24021
24022
  if (specifier === "react") {
24022
24023
  return `const ${name2} = ${REACT_BRIDGE}; if (!${name2}) throw new Error(${notReady("React")});`;
24023
24024
  }
@@ -24025,12 +24026,12 @@ function bridgeDeclaration(name2, specifier) {
24025
24026
  return `const ${name2} = ${REACT_NATIVE_BRIDGE}; if (!${name2}) throw new Error(${notReady("React Native")});`;
24026
24027
  }
24027
24028
  if (isContrastKitSpecifier(specifier)) {
24028
- 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`)});`;
24029
+ 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`)});`;
24029
24030
  }
24030
24031
  if (JSX_RUNTIME_SPECIFIERS.has(specifier)) {
24031
24032
  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 }; })();`;
24032
24033
  }
24033
- return `const ${name2} = (${PACKAGE_BRIDGES} || {})[${JSON.stringify(specifier)}]; if (!${name2}) throw new Error(${JSON.stringify(`[rnx] replacement package bridge ${specifier} is not ready`)});`;
24034
+ return `const ${name2} = (${PACKAGE_BRIDGES} || {})[${JSON.stringify(specifier)}]; if (!${name2}) throw new Error(${JSON.stringify(`[peach] replacement package bridge ${specifier} is not ready`)});`;
24034
24035
  }
24035
24036
  function compileReplacementModule(input) {
24036
24037
  const transformed = (0, import_dist.transform)(input.source, {
@@ -24206,7 +24207,7 @@ function sendJavaScript(req, res, source) {
24206
24207
  function isReplacementModuleRequestUrl(rawUrl) {
24207
24208
  if (!rawUrl) return false;
24208
24209
  try {
24209
- const pathname = new URL(rawUrl, "http://rnx.local").pathname;
24210
+ const pathname = new URL(rawUrl, "http://peach.local").pathname;
24210
24211
  return pathname === REPLACEMENT_MODULE_ROUTE;
24211
24212
  } catch {
24212
24213
  return false;
@@ -24216,7 +24217,7 @@ async function handleReplacementModuleRequest(req, res, options = {}) {
24216
24217
  const rawUrl = req.url || "";
24217
24218
  let url;
24218
24219
  try {
24219
- url = new URL(rawUrl, "http://rnx.local");
24220
+ url = new URL(rawUrl, "http://peach.local");
24220
24221
  } catch {
24221
24222
  return false;
24222
24223
  }
@@ -24700,7 +24701,7 @@ var init_run_rnx = __esm({
24700
24701
  RnxExit = class extends Error {
24701
24702
  code;
24702
24703
  constructor(code) {
24703
- super(`rnx exited with code ${code}`);
24704
+ super(`peach exited with code ${code}`);
24704
24705
  this.name = "RnxExit";
24705
24706
  this.code = code;
24706
24707
  }
@@ -24749,7 +24750,7 @@ function isCliApiKeySecret(secret) {
24749
24750
  return secret.startsWith("sk_rnx_");
24750
24751
  }
24751
24752
  function readApiKeyFromEnv() {
24752
- const envName = "RNX_API_KEY";
24753
+ const envName = "PEACH_API_KEY";
24753
24754
  const secret = process.env[envName]?.trim();
24754
24755
  return secret && isCliApiKeySecret(secret) ? { secret, envName } : null;
24755
24756
  }
@@ -24803,11 +24804,11 @@ function authHeaderOrExit(commandLabel) {
24803
24804
  if (auth) return { auth, header: authHeaderValue(auth) };
24804
24805
  process.stderr.write(
24805
24806
  `
24806
- rnx ${commandLabel} needs to be authenticated.
24807
+ peach needs to be authenticated.
24807
24808
 
24808
24809
  pick one:
24809
- \u2022 run \`rnx login\` to sign in with your GH account
24810
- \u2022 set RNX_API_KEY=sk_rnx_... (recommended for CI)
24810
+ \u2022 run \`peach login\` to sign in with your GH account
24811
+ \u2022 set PEACH_API_KEY=sk_rnx_... (recommended for CI)
24811
24812
 
24812
24813
  `
24813
24814
  );
@@ -24820,7 +24821,7 @@ var init_auth = __esm({
24820
24821
  init_shared_session();
24821
24822
  init_run_rnx();
24822
24823
  GITHUB_TOKEN_PREFIXES = ["ghs_", "ghp_", "gho_", "ghu_", "github_pat_"];
24823
- CHOOSE_ACCOUNT_HINT = "this sign-in belongs to several accounts; run `rnx login --account <name>` to choose the one to bill";
24824
+ CHOOSE_ACCOUNT_HINT = "this sign-in belongs to several accounts; run `peach login --account <name>` to choose the one to bill";
24824
24825
  }
24825
24826
  });
24826
24827
 
@@ -26204,7 +26205,7 @@ async function assertSelfContainedMetroArtifactAssets(bundle) {
26204
26205
  descriptors = extractAssetDescriptors(bundle);
26205
26206
  } catch (error) {
26206
26207
  throw new Error(
26207
- `rnx ios --remote bundle is not self-contained: ${error instanceof Error ? error.message : String(error)}`
26208
+ `peach ios --remote bundle is not self-contained: ${error instanceof Error ? error.message : String(error)}`
26208
26209
  );
26209
26210
  }
26210
26211
  let variants = 0;
@@ -26217,7 +26218,7 @@ async function assertSelfContainedMetroArtifactAssets(bundle) {
26217
26218
  const hashes = descriptor.fileHashes;
26218
26219
  if (!uris || !hashes || uris.length !== descriptor.scales.length || hashes.length !== descriptor.scales.length) {
26219
26220
  throw new Error(
26220
- `rnx ios --remote bundle is not self-contained: ${label} does not embed every scale variant`
26221
+ `peach ios --remote bundle is not self-contained: ${label} does not embed every scale variant`
26221
26222
  );
26222
26223
  }
26223
26224
  const prefix = `data:${metroAssetContentType(descriptor.type)};base64,`;
@@ -26226,7 +26227,7 @@ async function assertSelfContainedMetroArtifactAssets(bundle) {
26226
26227
  const expectedHash = hashes[index];
26227
26228
  if (!uri.startsWith(prefix) || !/^[a-f0-9]{64}$/.test(expectedHash)) {
26228
26229
  throw new Error(
26229
- `rnx ios --remote bundle is not self-contained: ${label} scale ${descriptor.scales[index]} is not content-addressed embedded data`
26230
+ `peach ios --remote bundle is not self-contained: ${label} scale ${descriptor.scales[index]} is not content-addressed embedded data`
26230
26231
  );
26231
26232
  }
26232
26233
  let decoded;
@@ -26235,12 +26236,12 @@ async function assertSelfContainedMetroArtifactAssets(bundle) {
26235
26236
  decoded = Uint8Array.from(binary, (character) => character.charCodeAt(0));
26236
26237
  } catch {
26237
26238
  throw new Error(
26238
- `rnx ios --remote bundle is not self-contained: ${label} scale ${descriptor.scales[index]} has invalid embedded data`
26239
+ `peach ios --remote bundle is not self-contained: ${label} scale ${descriptor.scales[index]} has invalid embedded data`
26239
26240
  );
26240
26241
  }
26241
26242
  if (await sha256HexBytes(decoded) !== expectedHash) {
26242
26243
  throw new Error(
26243
- `rnx ios --remote bundle is not self-contained: ${label} scale ${descriptor.scales[index]} bytes do not match their content hash`
26244
+ `peach ios --remote bundle is not self-contained: ${label} scale ${descriptor.scales[index]} bytes do not match their content hash`
26244
26245
  );
26245
26246
  }
26246
26247
  variants++;
@@ -26363,13 +26364,13 @@ async function embedMetroAssetFiles(bundle, read) {
26363
26364
  }
26364
26365
  if (loaded.size === 0) {
26365
26366
  throw new Error(
26366
- `rnx ios --remote found no scale of ${site.descriptor.name}.${site.descriptor.type} in the asset dest graph for ${site.descriptor.httpServerLocation}`
26367
+ `peach ios --remote found no scale of ${site.descriptor.name}.${site.descriptor.type} in the asset dest graph for ${site.descriptor.httpServerLocation}`
26367
26368
  );
26368
26369
  }
26369
26370
  const scales = [...loaded.keys()].sort((left, right) => left - right);
26370
26371
  if (scales.length !== site.descriptor.scales.length && !site.scalesSpan) {
26371
26372
  throw new Error(
26372
- `rnx ios --remote could not narrow the scales of ${site.descriptor.name}.${site.descriptor.type} because its descriptor declares none`
26373
+ `peach ios --remote could not narrow the scales of ${site.descriptor.name}.${site.descriptor.type} because its descriptor declares none`
26373
26374
  );
26374
26375
  }
26375
26376
  let descriptorBytes = 0;
@@ -26401,7 +26402,7 @@ async function embedMetroAssetFiles(bundle, read) {
26401
26402
  const code = parts.join("");
26402
26403
  if (countNewlines(code) !== countNewlines(bundle)) {
26403
26404
  throw new Error(
26404
- "rnx Cloud asset embedding changed the bundle line count, which invalidates its source map"
26405
+ "peach Cloud asset embedding changed the bundle line count, which invalidates its source map"
26405
26406
  );
26406
26407
  }
26407
26408
  return {
@@ -26556,11 +26557,11 @@ async function minify(code, sourceLine, options, withMap) {
26556
26557
  ...withMap ? { sourceMap: true } : {}
26557
26558
  });
26558
26559
  if (typeof result.code !== "string") {
26559
- throw new Error(`rnx Cloud could not re-print the statement at line ${sourceLine}`);
26560
+ throw new Error(`peach Cloud could not re-print the statement at line ${sourceLine}`);
26560
26561
  }
26561
26562
  const map = withMap && typeof result.map === "string" ? result.map : null;
26562
26563
  if (withMap && map === null) {
26563
- throw new Error(`rnx Cloud got no source map for the statement at line ${sourceLine}`);
26564
+ throw new Error(`peach Cloud got no source map for the statement at line ${sourceLine}`);
26564
26565
  }
26565
26566
  return { code: result.code.trimEnd(), map, sourceLine };
26566
26567
  }
@@ -26570,7 +26571,7 @@ async function minifyDefine(statement, moduleId, sourceLine, options, developmen
26570
26571
  const define = layout.statements[0];
26571
26572
  if (layout.statements.length !== 1 || define?.kind !== "define") {
26572
26573
  throw new Error(
26573
- `rnx Cloud could not re-read module ${moduleId} after minification: the minifier emitted ${layout.statements.length} statements rather than one \`__d(\` call.`
26574
+ `peach Cloud could not re-read module ${moduleId} after minification: the minifier emitted ${layout.statements.length} statements rather than one \`__d(\` call.`
26574
26575
  );
26575
26576
  }
26576
26577
  const factory = piece.code.slice(define.factory.start, define.factory.end);
@@ -26632,7 +26633,7 @@ async function buildRnxCloudArtifact(bundle, options = {}) {
26632
26633
  const layout = (0, import_metro_production_bundle.readRNXMetroBundleLayout)(identity.source);
26633
26634
  if (layout.moduleIdFailures > 0) {
26634
26635
  throw new Error(
26635
- `rnx Cloud could not read ${layout.moduleIdFailures} Metro module IDs from the bundle`
26636
+ `peach Cloud could not read ${layout.moduleIdFailures} Metro module IDs from the bundle`
26636
26637
  );
26637
26638
  }
26638
26639
  (0, import_metro_production_bundle.validateRNXMetroModulePaths)(identity.source, identity.modulePaths);
@@ -26722,8 +26723,8 @@ var init_metroCloudArtifact = __esm({
26722
26723
  import_terser = require("terser");
26723
26724
  init_metroAssetArtifact();
26724
26725
  init_metroDebugSourceMap();
26725
- MODULE_PATHS_REQUIRED = "rnx Cloud requires a Metro bundle carrying rnx module identity. Build it through the published Metro plugin: withRNX(config).";
26726
- SOURCE_MAP_REQUIRED = "rnx Cloud development artifacts require the Metro source map for the bundle. Build it with --sourcemap-output, or serve the bundle with an inline source map.";
26726
+ MODULE_PATHS_REQUIRED = "peach Cloud requires a Metro bundle carrying rnx module identity. Build it through the published Metro plugin: withRNX(config).";
26727
+ SOURCE_MAP_REQUIRED = "peach Cloud development artifacts require the Metro source map for the bundle. Build it with --sourcemap-output, or serve the bundle with an inline source map.";
26727
26728
  MINIFY_OPTIONS = {
26728
26729
  ecma: 2020,
26729
26730
  compress: false,
@@ -27818,7 +27819,7 @@ function createCloudBoxSession(input) {
27818
27819
  function parseCloudSession(encoded) {
27819
27820
  const value = encoded.trim();
27820
27821
  if (!value || value.length > MAX_ENCODED_SESSION_BYTES || !/^[A-Za-z0-9_-]+$/.test(value)) {
27821
- throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
27822
+ throw new Error(`${PEACH_CLOUD_SESSION_ENV} is invalid`);
27822
27823
  }
27823
27824
  let parsed;
27824
27825
  try {
@@ -27828,14 +27829,14 @@ function parseCloudSession(encoded) {
27828
27829
  }
27829
27830
  parsed = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
27830
27831
  } catch {
27831
- throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
27832
+ throw new Error(`${PEACH_CLOUD_SESSION_ENV} is invalid`);
27832
27833
  }
27833
27834
  if (!isRecord4(parsed) || parsed.version !== CLOUD_SESSION_VERSION) {
27834
- throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
27835
+ throw new Error(`${PEACH_CLOUD_SESSION_ENV} is invalid`);
27835
27836
  }
27836
27837
  const apiOrigin = parsed.apiOrigin;
27837
27838
  if (typeof apiOrigin !== "string") {
27838
- throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
27839
+ throw new Error(`${PEACH_CLOUD_SESSION_ENV} is invalid`);
27839
27840
  }
27840
27841
  const platform = parsed.platform === "ios" || parsed.platform === "android" ? parsed.platform : void 0;
27841
27842
  const device = typeof parsed.device === "string" ? parsed.device : void 0;
@@ -27877,21 +27878,21 @@ function parseCloudSession(encoded) {
27877
27878
  boxToken
27878
27879
  });
27879
27880
  } catch {
27880
- throw new Error(`${RNX_CLOUD_SESSION_ENV} is invalid`);
27881
+ throw new Error(`${PEACH_CLOUD_SESSION_ENV} is invalid`);
27881
27882
  }
27882
27883
  }
27883
27884
  function readCloudSession(environment = process.env) {
27884
- const encoded = environment[RNX_CLOUD_SESSION_ENV];
27885
+ const encoded = environment[PEACH_CLOUD_SESSION_ENV];
27885
27886
  return encoded?.trim() ? parseCloudSession(encoded) : null;
27886
27887
  }
27887
- var CLOUD_SESSION_VERSION, MAX_ENCODED_SESSION_BYTES, RNX_CLOUD_SESSION_ENV, RNX_SHELL_UPDATE_PREFIX, RNX_SHELL_UPDATE_SET_PREFIX, RNX_SHELL_UPDATE_UNSET;
27888
+ var CLOUD_SESSION_VERSION, MAX_ENCODED_SESSION_BYTES, PEACH_CLOUD_SESSION_ENV, RNX_SHELL_UPDATE_PREFIX, RNX_SHELL_UPDATE_SET_PREFIX, RNX_SHELL_UPDATE_UNSET;
27888
27889
  var init_cloud_session = __esm({
27889
27890
  "cli/cloud-session.ts"() {
27890
27891
  "use strict";
27891
27892
  init_backend_origin();
27892
27893
  CLOUD_SESSION_VERSION = 3;
27893
27894
  MAX_ENCODED_SESSION_BYTES = 32 * 1024;
27894
- RNX_CLOUD_SESSION_ENV = "RNX_CLOUD_SESSION";
27895
+ PEACH_CLOUD_SESSION_ENV = "PEACH_CLOUD_SESSION";
27895
27896
  RNX_SHELL_UPDATE_PREFIX = "__RNX_SHELL_UPDATE_V1__";
27896
27897
  RNX_SHELL_UPDATE_SET_PREFIX = `${RNX_SHELL_UPDATE_PREFIX}set:`;
27897
27898
  RNX_SHELL_UPDATE_UNSET = `${RNX_SHELL_UPDATE_PREFIX}unset`;
@@ -27971,7 +27972,7 @@ function responseError(status, text) {
27971
27972
  );
27972
27973
  }
27973
27974
  function resolveCloudOrigin(value) {
27974
- const configured = value?.trim() || process.env.RNX_CLOUD_ORIGIN?.trim();
27975
+ const configured = value?.trim() || process.env.PEACH_CLOUD_ORIGIN?.trim();
27975
27976
  const source = configured || DEFAULT_RNX_CLOUD_ORIGIN;
27976
27977
  return normalizeCloudOrigin(source);
27977
27978
  }
@@ -28545,7 +28546,7 @@ var init_cloud_client = __esm({
28545
28546
  init_detect();
28546
28547
  DEFAULT_RNX_CLOUD_ORIGIN = rnxPublicBrand.origin;
28547
28548
  MAX_RNX_CLOUD_BUNDLE_BYTES = RNX_CLOUD_MAX_ARTIFACT_BYTES;
28548
- REMOTE_COMMAND = "rnx remote";
28549
+ REMOTE_COMMAND = "peach remote";
28549
28550
  MAX_ASSET_DEST_FILES = 25e3;
28550
28551
  ACCOUNT_CHOICE_REFUSALS = /* @__PURE__ */ new Set([
28551
28552
  "accountId is required",
@@ -28690,7 +28691,7 @@ var init_cloud_client = __esm({
28690
28691
  return Promise.resolve(null);
28691
28692
  }
28692
28693
  closeSim() {
28693
- return Promise.reject(new Error("close a box simulator with rnx box stop"));
28694
+ return Promise.reject(new Error("close a box simulator with peach box stop"));
28694
28695
  }
28695
28696
  claim() {
28696
28697
  return Promise.reject(
@@ -28898,8 +28899,8 @@ var init_bridge_host = __esm({
28898
28899
  static USER_BOOT_LEASE_TTL_MS = 6e4;
28899
28900
  static SIM_RECONNECT_TTL_MS = 3e4;
28900
28901
  // abandoned-tab GC. the ws heartbeat only reaps sims whose socket went
28901
- // dead — but a background tab from a prior `rnx open` / QA / test run
28902
- // keeps its socket alive (the page still pongs) forever, so `rnx list`
28902
+ // dead — but a background tab from a prior `peach open` / QA / test run
28903
+ // keeps its socket alive (the page still pongs) forever, so `peach list`
28903
28904
  // accretes dozens of zombie sims that all time out on every command (QA
28904
28905
  // F21-3, carried F19-2). reap a sim only when it is provably nobody's:
28905
28906
  // not primary, not user-focused, no CLI attached, no active lease, and no
@@ -28907,7 +28908,7 @@ var init_bridge_host = __esm({
28907
28908
  // terminal 4001 code, so the client closes the abandoned window instead
28908
28909
  // of reconnecting the zombie straight back in.
28909
28910
  static SIM_IDLE_REAP_TTL_MS = 30 * 6e4;
28910
- // automation sims (spawned by the playwright driver: `rnx open --driver
28911
+ // automation sims (spawned by the playwright driver: `peach open --driver
28911
28912
  // playwright`, the factory/screenshot capture path — `meta.sootsimHostDriver
28912
28913
  // === 'playwright'`) are unattended one-shot browsers, never a human's tab. a
28913
28914
  // capture run opens one per slide/app/retry and the 30-min human/dev TTL lets
@@ -28937,7 +28938,7 @@ var init_bridge_host = __esm({
28937
28938
  // dropped, sim crashed) leave their server-side WebSocket sitting "open"
28938
28939
  // forever. ping every WS_HEARTBEAT_INTERVAL_MS; if the previous round's
28939
28940
  // ping was never answered, terminate(). that fires 'close' which runs the
28940
- // sim-cleanup path and stops `rnx list` from showing 8 zombie
28941
+ // sim-cleanup path and stops `peach list` from showing 8 zombie
28941
28942
  // sims that all time out on every command.
28942
28943
  wsHeartbeatTimer = null;
28943
28944
  wsIsAlive = /* @__PURE__ */ new WeakMap();
@@ -29286,7 +29287,7 @@ var init_bridge_host = __esm({
29286
29287
  expiresAt: Date.now() + _SootSimBridgeHost.USER_BOOT_LEASE_TTL_MS
29287
29288
  };
29288
29289
  process.stderr.write(
29289
- `rnx booted ${booted.length} cli client(s)${hadLease ? " (overrode prior lease)" : ""}; held sim for user [${sim.id}]
29290
+ `peach booted ${booted.length} cli client(s)${hadLease ? " (overrode prior lease)" : ""}; held sim for user [${sim.id}]
29290
29291
  `
29291
29292
  );
29292
29293
  this.recordSimAction(sim.id, "sim booted cli clients");
@@ -29401,7 +29402,7 @@ var init_bridge_host = __esm({
29401
29402
  ws.send(
29402
29403
  JSON.stringify({
29403
29404
  id: msg.id,
29404
- error: `sim ${targetSim.id} is locked by another cli \u2014 use \`rnx claim ${targetSim.id} --force\` or \`rnx open --new\``,
29405
+ error: `sim ${targetSim.id} is locked by another cli \u2014 use \`peach claim ${targetSim.id} --force\` or \`peach open --new\``,
29405
29406
  _locked: outcome.lock
29406
29407
  })
29407
29408
  );
@@ -29514,7 +29515,7 @@ var init_bridge_host = __esm({
29514
29515
  const claimed = claimDaemonLockfile(this.buildLockfileSnapshot());
29515
29516
  if (!claimed) {
29516
29517
  throw new Error(
29517
- "another rnx daemon wrote the lockfile during startup \u2014 aborting"
29518
+ "another peach daemon wrote the lockfile during startup \u2014 aborting"
29518
29519
  );
29519
29520
  }
29520
29521
  } catch (err) {
@@ -29632,7 +29633,7 @@ var init_bridge_host = __esm({
29632
29633
  return results;
29633
29634
  }).catch((err) => {
29634
29635
  const message = err instanceof Error ? err.message : String(err);
29635
- console.error("[rnx] /__server-scan failed:", message);
29636
+ console.error("[peach] /__server-scan failed:", message);
29636
29637
  return this.scanCache ?? [];
29637
29638
  }).finally(() => {
29638
29639
  this.inflightScan = null;
@@ -29640,7 +29641,7 @@ var init_bridge_host = __esm({
29640
29641
  return this.inflightScan;
29641
29642
  }
29642
29643
  // serves one staged camera fixture. addressed by basename inside
29643
- // ~/.rnx/camera-fixtures, never by a caller-supplied path, so there is
29644
+ // ~/.peach/camera-fixtures, never by a caller-supplied path, so there is
29644
29645
  // no traversal surface to defend: a name that is not a plain basename is
29645
29646
  // rejected outright. range support is not optional here — chrome asks for
29646
29647
  // byte ranges on media and cannot seek or loop a fixture without it.
@@ -29755,7 +29756,7 @@ var init_bridge_host = __esm({
29755
29756
  if (this.httpServer) this.writeLockfileSnapshot();
29756
29757
  return;
29757
29758
  }
29758
- if (process.env.RNX_HOME && isSootsimDevCheckout() && !readActiveRuntime()) {
29759
+ if (process.env.PEACH_HOME && isSootsimDevCheckout() && !readActiveRuntime()) {
29759
29760
  return;
29760
29761
  }
29761
29762
  void this.runRuntimeUpdate("startup");
@@ -29770,7 +29771,7 @@ var init_bridge_host = __esm({
29770
29771
  this.runtimeUpdateInFlight = (async () => {
29771
29772
  try {
29772
29773
  if (reason === "startup") {
29773
- process.stderr.write("rnx: checking for runtime updates\u2026\n");
29774
+ process.stderr.write("peach: checking for runtime updates\u2026\n");
29774
29775
  }
29775
29776
  const result = await rnxRuntime.updateToLatest({
29776
29777
  protectVersions: this.connectedRuntimeVersions()
@@ -29778,7 +29779,7 @@ var init_bridge_host = __esm({
29778
29779
  if (!result.updated || !result.latestVersion) {
29779
29780
  if (reason === "startup") {
29780
29781
  process.stderr.write(
29781
- `rnx: runtime ${this.activeRuntimeVersion ?? "(none)"} is current
29782
+ `peach: runtime ${this.activeRuntimeVersion ?? "(none)"} is current
29782
29783
  `
29783
29784
  );
29784
29785
  }
@@ -29786,7 +29787,7 @@ var init_bridge_host = __esm({
29786
29787
  }
29787
29788
  const previousVersion = this.activeRuntimeVersion;
29788
29789
  const active = this.setActiveRuntime(result.latestVersion);
29789
- process.stderr.write(`rnx runtime updated to ${active.version} (${reason})
29790
+ process.stderr.write(`peach runtime updated to ${active.version} (${reason})
29790
29791
  `);
29791
29792
  try {
29792
29793
  writeRuntimeUpgradeNotice({
@@ -29798,7 +29799,7 @@ var init_bridge_host = __esm({
29798
29799
  }
29799
29800
  } catch (err) {
29800
29801
  process.stderr.write(
29801
- `rnx runtime update failed (${reason}): ${err instanceof Error ? err.message : String(err)}
29802
+ `peach runtime update failed (${reason}): ${err instanceof Error ? err.message : String(err)}
29802
29803
  `
29803
29804
  );
29804
29805
  } finally {
@@ -29811,7 +29812,7 @@ var init_bridge_host = __esm({
29811
29812
  } catch {
29812
29813
  }
29813
29814
  }
29814
- process.stderr.write("rnx: ready\n");
29815
+ process.stderr.write("peach: ready\n");
29815
29816
  }
29816
29817
  }
29817
29818
  })();
@@ -30065,7 +30066,7 @@ var init_bridge_host = __esm({
30065
30066
  if (!baseDir) {
30066
30067
  res.writeHead(503, { "Content-Type": "text/plain; charset=utf-8" });
30067
30068
  res.end(
30068
- versionedRuntimeRequest ? `rnx: runtime ${requestedRuntime ?? "(invalid version origin)"} is not installed. run \`rnx open\` from that app again.` : "rnx: no active runtime installed. run `rnx runtime install` to fetch one."
30069
+ versionedRuntimeRequest ? `peach: runtime ${requestedRuntime ?? "(invalid version origin)"} is not installed. run \`peach open\` from that app again.` : "peach: no active runtime installed. run `peach runtime install` to fetch one."
30069
30070
  );
30070
30071
  return;
30071
30072
  }
@@ -30218,7 +30219,7 @@ var init_bridge_host = __esm({
30218
30219
  this.sweepRestorableSims(now);
30219
30220
  this.reapIdleSims(now);
30220
30221
  }
30221
- // GC abandoned sims so `rnx list` stays usable across long dev / QA /
30222
+ // GC abandoned sims so `peach list` stays usable across long dev / QA /
30222
30223
  // test sessions (F21-3). conservative on purpose: a sim is only reaped
30223
30224
  // when every "someone cares about this" signal is absent.
30224
30225
  //
@@ -30234,7 +30235,7 @@ var init_bridge_host = __esm({
30234
30235
  // using is the primary and/or holds a fresh user-active lease; one that is
30235
30236
  // none of those and idle past the TTL is abandoned regardless of a stale
30236
30237
  // focus flag.
30237
- // automation sims are spawned by the playwright driver (`rnx open
30238
+ // automation sims are spawned by the playwright driver (`peach open
30238
30239
  // --driver playwright`, the factory/screenshot capture path), which tags them
30239
30240
  // with `meta.sootsimHostDriver === 'playwright'` via the host's addInitScript.
30240
30241
  // they are unattended one-shot browsers, never a human's tab, so they get a
@@ -30637,7 +30638,7 @@ var init_bridge_host = __esm({
30637
30638
  const candidates = this.getDefaultSimCandidates();
30638
30639
  if (candidates.length > 1) {
30639
30640
  throw new Error(
30640
- `multiple sims are connected: ${candidates.map((sim) => sim.id).join(", ")}; run \`rnx use <sim>\` or pass \`--sim <sim>\``
30641
+ `multiple sims are connected: ${candidates.map((sim) => sim.id).join(", ")}; run \`peach use <sim>\` or pass \`--sim <sim>\``
30641
30642
  );
30642
30643
  }
30643
30644
  const candidate = candidates[0];
@@ -31107,7 +31108,7 @@ function getCurrentSimPath() {
31107
31108
  return (0, import_path4.resolve)(process.env[CURRENT_SIM_PATH_ENV]);
31108
31109
  }
31109
31110
  const key = getCliIdentityKey();
31110
- return (0, import_path4.join)((0, import_os.tmpdir)(), `rnx-current-sim-${key}.json`);
31111
+ return (0, import_path4.join)((0, import_os.tmpdir)(), `peach-current-sim-${key}.json`);
31111
31112
  }
31112
31113
  function legacyCloudCredentialDirectory(filepath) {
31113
31114
  return (0, import_path4.join)((0, import_path4.dirname)(filepath), `${(0, import_path4.basename)(filepath)}.credentials`);
@@ -31171,7 +31172,7 @@ var init_current_sim = __esm({
31171
31172
  CURRENT_SIM_VERSION = 2;
31172
31173
  CURRENT_SIM_PATH_ENV = "SOOTSIM_CLI_CURRENT_SIM_PATH";
31173
31174
  IDENTITY_ENV_VARS = [
31174
- "RNX_CLI_IDENTITY",
31175
+ "PEACH_CLI_IDENTITY",
31175
31176
  // explicit override — fastest path, skips all pid lookups
31176
31177
  "TM_SESSION",
31177
31178
  // Team Machine session id; routes prompt-bar followups back to this agent
@@ -31208,7 +31209,7 @@ var ws_bridge_exports = {};
31208
31209
  __export(ws_bridge_exports, {
31209
31210
  BRIDGE_VALUE_FLAGS: () => BRIDGE_VALUE_FLAGS,
31210
31211
  BridgeSimLockedError: () => BridgeSimLockedError,
31211
- RNX_PLACEMENT_ENV: () => RNX_PLACEMENT_ENV,
31212
+ PEACH_PLACEMENT_ENV: () => PEACH_PLACEMENT_ENV,
31212
31213
  bridgePortForShellBaseUrl: () => bridgePortForShellBaseUrl,
31213
31214
  bridgeWsUrl: () => bridgeWsUrl,
31214
31215
  callInBridge: () => callInBridge,
@@ -31227,7 +31228,7 @@ __export(ws_bridge_exports, {
31227
31228
  worldForBridgePort: () => worldForBridgePort
31228
31229
  });
31229
31230
  function resolvePlacement() {
31230
- return process.env[RNX_PLACEMENT_ENV] === "local-box" ? "local-box" : "host";
31231
+ return process.env[PEACH_PLACEMENT_ENV] === "local-box" ? "local-box" : "host";
31231
31232
  }
31232
31233
  function bridgeWsUrl(wsPort) {
31233
31234
  return `ws://127.0.0.1:${wsPort}`;
@@ -31354,7 +31355,7 @@ function resolveBridgePortForPin(pin) {
31354
31355
  if (served === null) {
31355
31356
  if (pin.explicitPort) return { port: pin.wsPort };
31356
31357
  return {
31357
- error: `no live rnx world serves ${pin.baseUrl} \u2014 start that shell first, or name its bridge with --port <port>`
31358
+ error: `no live peach world serves ${pin.baseUrl} \u2014 start that shell first, or name its bridge with --port <port>`
31358
31359
  };
31359
31360
  }
31360
31361
  if (pin.explicitPort && pin.wsPort !== served) {
@@ -31379,7 +31380,7 @@ function printBridgeWorldNotice(bridgePort, shellBaseUrl) {
31379
31380
  }
31380
31381
  function describeSimIdSource(source) {
31381
31382
  if (source === "flag") return "via --sim";
31382
- if (source === "saved") return "saved via `rnx use`";
31383
+ if (source === "saved") return "saved via `peach use`";
31383
31384
  return "primary fallback \u2014 no sim pinned";
31384
31385
  }
31385
31386
  function formatLockOwner(owner) {
@@ -31526,7 +31527,7 @@ function createBridge(wsPort, opts = {}) {
31526
31527
  \u26A0 ${msg._otherCliCount} other CLI identity/identities are driving this sim
31527
31528
  taps, scrolls, and keyboard input from multiple agents will collide on
31528
31529
  the same screen state (this is not a bridge throughput limit).
31529
- use \`rnx open --new\` for an isolated sim per agent.
31530
+ use \`peach open --new\` for an isolated sim per agent.
31530
31531
 
31531
31532
  `
31532
31533
  );
@@ -31630,7 +31631,7 @@ function createBridge(wsPort, opts = {}) {
31630
31631
  }
31631
31632
  clearCurrentSimId();
31632
31633
  throw new Error(
31633
- `saved sim ${sentSimId} is gone${message.slice(missingSimMessage.length)}; run \`rnx list\` and \`rnx use <sim>\`, or open a fresh sim`
31634
+ `saved sim ${sentSimId} is gone${message.slice(missingSimMessage.length)}; run \`peach list\` and \`peach use <sim>\`, or open a fresh sim`
31634
31635
  );
31635
31636
  }
31636
31637
  throw error;
@@ -31724,7 +31725,7 @@ async function checkSimHealth(bridge) {
31724
31725
  \u26A0 target sim${health.simId ? ` ${health.simId}` : ""} is hidden (document.hidden = true)
31725
31726
  ` + (health.visibilityState ? ` visibility: ${health.visibilityState}
31726
31727
  ` : "") + " animations and rAF callbacks are throttled \u2014 coordinates may be wrong\n and launch/transition animations will not complete.\n" + (candidate ? ` another open sim looks usable: ${candidate}; target it with --sim.
31727
- ` : " run `rnx list` to find the visible sim and target it with --sim.\n") + " page-level window.focus() cannot unhide a browser tab.\n\n"
31728
+ ` : " run `peach list` to find the visible sim and target it with --sim.\n") + " page-level window.focus() cannot unhide a browser tab.\n\n"
31728
31729
  );
31729
31730
  return { hidden: true, warned: true, simId: health.simId };
31730
31731
  }
@@ -31744,7 +31745,7 @@ async function callInBridge(bridge, path20, ...args) {
31744
31745
  async function callInBridgeWrite(bridge, path20, ...args) {
31745
31746
  return bridge.send({ type: "call", path: path20, args, acquireLock: true });
31746
31747
  }
31747
- var import_node_fs16, import_node_path17, import_ws2, RNX_PLACEMENT_ENV, resolvedWorld, BridgeSimLockedError, BRIDGE_VALUE_FLAGS_TABLE, BRIDGE_VALUE_FLAGS;
31748
+ var import_node_fs16, import_node_path17, import_ws2, PEACH_PLACEMENT_ENV, resolvedWorld, BridgeSimLockedError, BRIDGE_VALUE_FLAGS_TABLE, BRIDGE_VALUE_FLAGS;
31748
31749
  var init_ws_bridge = __esm({
31749
31750
  "cli/ws-bridge.ts"() {
31750
31751
  "use strict";
@@ -31756,7 +31757,7 @@ var init_ws_bridge = __esm({
31756
31757
  init_home_paths();
31757
31758
  init_cloud_client();
31758
31759
  init_current_sim();
31759
- RNX_PLACEMENT_ENV = "RNX_PLACEMENT";
31760
+ PEACH_PLACEMENT_ENV = "PEACH_PLACEMENT";
31760
31761
  resolvedWorld = null;
31761
31762
  BridgeSimLockedError = class extends Error {
31762
31763
  lock;
@@ -31784,7 +31785,7 @@ var init_ws_bridge = __esm({
31784
31785
  },
31785
31786
  {
31786
31787
  // `--sim` is the canonical target flag; `--session` / `--tab` are
31787
- // documented aliases (CLAUDE.md, the rnx agent skills, and engine docs all
31788
+ // documented aliases (CLAUDE.md, the peach agent skills, and engine docs all
31788
31789
  // say `--session <id>`). without these aliases an agent following the docs
31789
31790
  // would have `--session ef` silently ignored and get the *currently
31790
31791
  // pinned* sim's tree instead — wrong-app data with no error.
@@ -32244,7 +32245,7 @@ async function loadRNXAppConfig(project) {
32244
32245
  });
32245
32246
  const loaded = await jiti.import(project.configPath, { default: true });
32246
32247
  if (!isRNXConfig(loaded)) {
32247
- throw new Error("the default export must be an rnx config object");
32248
+ throw new Error("the default export must be a peach config object");
32248
32249
  }
32249
32250
  return resolveConfigReplacementFiles(loaded, project.configPath);
32250
32251
  } catch (error) {
@@ -32563,7 +32564,7 @@ var PUBLIC_NO_NETWORK_MARKER, HEADLESS_TENANT_FETCH_HUNG_MARKER;
32563
32564
  var init_bridge_contract = __esm({
32564
32565
  "src/bridge-contract.ts"() {
32565
32566
  "use strict";
32566
- PUBLIC_NO_NETWORK_MARKER = "public RNX Cloud simulators have no network";
32567
+ PUBLIC_NO_NETWORK_MARKER = "public Peach Cloud simulators have no network";
32567
32568
  HEADLESS_TENANT_FETCH_HUNG_MARKER = "headless tenant fetch hung";
32568
32569
  }
32569
32570
  });
@@ -32902,7 +32903,7 @@ function layoutGetNativeEval(opts = {}) {
32902
32903
 
32903
32904
  const screenshot = window.SootSim && window.SootSim.bridges && window.SootSim.bridges.screenshot
32904
32905
  if (typeof screenshot !== 'function') {
32905
- throw new Error('styled native layout requires the rnx capture bridge')
32906
+ throw new Error('styled native layout requires the peach capture bridge')
32906
32907
  }
32907
32908
  const device = list.find((node) => node && node.device)?.device || {}
32908
32909
  const width = Math.round(Number(device.width) || window.innerWidth || 0)
@@ -32948,7 +32949,7 @@ function waitReadyReason(status) {
32948
32949
  if (status.bridgeError.includes(HEADLESS_TENANT_FETCH_HUNG_MARKER) || status.bridgeError.includes(PUBLIC_NO_NETWORK_MARKER)) {
32949
32950
  return status.bridgeError;
32950
32951
  }
32951
- return `sim unreachable: ${status.bridgeError} \u2014 the target tab is closed or no sim is connected (check \`rnx list\`, reopen with \`rnx open\`)`;
32952
+ return `sim unreachable: ${status.bridgeError} \u2014 the target tab is closed or no sim is connected (check \`peach list\`, reopen with \`peach open\`)`;
32952
32953
  }
32953
32954
  const waitingOnGuestFetch = status.externalReady === false && /https?:\/\//.test(status.externalStatus);
32954
32955
  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";
@@ -33331,9 +33332,9 @@ function findElectronBin(startDir) {
33331
33332
  function findMacApp() {
33332
33333
  const root = getSootsimRoot();
33333
33334
  const candidates = [
33334
- "/Applications/rnx.app",
33335
- (0, import_path6.resolve)(process.env.HOME || "", "Applications/rnx.app"),
33336
- ...root ? [(0, import_path6.resolve)(root, "app/rnx.app")] : []
33335
+ "/Applications/peach.app",
33336
+ (0, import_path6.resolve)(process.env.HOME || "", "Applications/peach.app"),
33337
+ ...root ? [(0, import_path6.resolve)(root, "app/peach.app")] : []
33337
33338
  ];
33338
33339
  const found = candidates.find((candidate) => (0, import_fs7.existsSync)(candidate));
33339
33340
  if (found) {
@@ -33346,7 +33347,7 @@ function findMacApp() {
33346
33347
  try {
33347
33348
  const result = (0, import_child_process5.execFileSync)(
33348
33349
  "mdfind",
33349
- [`kMDItemCFBundleIdentifier == "${SOOTSIM_BUNDLE_ID}"`],
33350
+ [`kMDItemCFBundleIdentifier == "${PEACH_BUNDLE_ID}"`],
33350
33351
  { encoding: "utf8", timeout: 3e3 }
33351
33352
  ).trim();
33352
33353
  if (result) {
@@ -33362,17 +33363,17 @@ function findMacApp() {
33362
33363
  }
33363
33364
  function findFirstAppImage(dir) {
33364
33365
  if (!(0, import_fs7.existsSync)(dir)) return null;
33365
- const match = (0, import_fs7.readdirSync)(dir).filter((entry) => entry.startsWith("rnx") && entry.endsWith(".AppImage")).sort().reverse()[0];
33366
+ const match = (0, import_fs7.readdirSync)(dir).filter((entry) => entry.startsWith("peach") && entry.endsWith(".AppImage")).sort().reverse()[0];
33366
33367
  return match ? (0, import_path6.join)(dir, match) : null;
33367
33368
  }
33368
33369
  function findLinuxInstall() {
33369
33370
  const root = getSootsimRoot();
33370
33371
  const directCandidates = [
33371
- (0, import_path6.resolve)(process.env.HOME || "", "Applications/rnx.AppImage"),
33372
- (0, import_path6.resolve)(process.env.HOME || "", ".local/bin/rnx.AppImage"),
33373
- "/opt/rnx/rnx.AppImage",
33374
- "/opt/rnx/rnx",
33375
- ...root ? [(0, import_path6.resolve)(root, "app/rnx.AppImage"), (0, import_path6.resolve)(root, "release/linux-unpacked/rnx")] : []
33372
+ (0, import_path6.resolve)(process.env.HOME || "", "Applications/peach.AppImage"),
33373
+ (0, import_path6.resolve)(process.env.HOME || "", ".local/bin/peach.AppImage"),
33374
+ "/opt/peach/peach.AppImage",
33375
+ "/opt/peach/peach",
33376
+ ...root ? [(0, import_path6.resolve)(root, "app/peach.AppImage"), (0, import_path6.resolve)(root, "release/linux-unpacked/peach")] : []
33376
33377
  ];
33377
33378
  const directMatch = directCandidates.find((candidate) => (0, import_fs7.existsSync)(candidate));
33378
33379
  if (directMatch) {
@@ -33395,7 +33396,7 @@ function findWindowsInstall() {
33395
33396
  try {
33396
33397
  const output = (0, import_child_process5.execFileSync)(
33397
33398
  "reg",
33398
- ["query", `${hive}\\Software\\Classes\\rnx\\shell\\open\\command`, "/ve"],
33399
+ ["query", `${hive}\\Software\\Classes\\peach\\shell\\open\\command`, "/ve"],
33399
33400
  { encoding: "utf8", timeout: 3e3 }
33400
33401
  );
33401
33402
  const executable = /"([^"\r\n]+\.exe)"/i.exec(output)?.[1];
@@ -33475,7 +33476,7 @@ async function launchDesktopCompanion(url, install = findDesktopCompanion(), opt
33475
33476
  }
33476
33477
  function buildMacLaunchUrl(url, opts) {
33477
33478
  if (!opts.profileId && !opts.ephemeralProfile && !opts.ownerPid) return url;
33478
- const deepLink = new URL("rnx://dev");
33479
+ const deepLink = new URL("peach://dev");
33479
33480
  deepLink.searchParams.set("url", url);
33480
33481
  if (opts.profileId) deepLink.searchParams.set("profile", opts.profileId);
33481
33482
  if (opts.ephemeralProfile) deepLink.searchParams.set("ephemeral", "1");
@@ -33484,7 +33485,7 @@ function buildMacLaunchUrl(url, opts) {
33484
33485
  }
33485
33486
  return deepLink.toString();
33486
33487
  }
33487
- var import_child_process5, import_fs7, import_path6, import_url2, import_meta2, _sootsimRoot, SOOTSIM_BUNDLE_ID;
33488
+ var import_child_process5, import_fs7, import_path6, import_url2, import_meta2, _sootsimRoot, PEACH_BUNDLE_ID;
33488
33489
  var init_desktop_companion = __esm({
33489
33490
  "cli/desktop-companion.ts"() {
33490
33491
  "use strict";
@@ -33493,7 +33494,7 @@ var init_desktop_companion = __esm({
33493
33494
  import_path6 = require("path");
33494
33495
  import_url2 = require("url");
33495
33496
  import_meta2 = {};
33496
- SOOTSIM_BUNDLE_ID = "dev.sootsim.simulator";
33497
+ PEACH_BUNDLE_ID = "dev.peachsim.simulator";
33497
33498
  }
33498
33499
  });
33499
33500
 
@@ -33503,7 +33504,7 @@ function probe() {
33503
33504
  if (!install) {
33504
33505
  return {
33505
33506
  available: false,
33506
- reason: "rnx desktop app not installed (run `rnx desktop install`)"
33507
+ reason: "peach desktop app not installed (run `peach desktop install`)"
33507
33508
  };
33508
33509
  }
33509
33510
  return {
@@ -33517,7 +33518,7 @@ async function launch(opts) {
33517
33518
  if (!install) {
33518
33519
  return {
33519
33520
  launched: false,
33520
- message: "rnx desktop app not installed"
33521
+ message: "peach desktop app not installed"
33521
33522
  };
33522
33523
  }
33523
33524
  try {
@@ -33551,7 +33552,7 @@ var init_electron = __esm({
33551
33552
  electronDriver = {
33552
33553
  id: "electron",
33553
33554
  name: "electron",
33554
- description: "rnx desktop companion app (native window, menu bar)",
33555
+ description: "peach desktop companion app (native window, menu bar)",
33555
33556
  kind: "native",
33556
33557
  availability: probe,
33557
33558
  launch
@@ -33567,7 +33568,7 @@ var PLAYWRIGHT_HOST_LOG_PREFIX;
33567
33568
  var init_playwright_host_log = __esm({
33568
33569
  "src/playwright-host-log.ts"() {
33569
33570
  "use strict";
33570
- PLAYWRIGHT_HOST_LOG_PREFIX = "rnx-playwright-host-";
33571
+ PLAYWRIGHT_HOST_LOG_PREFIX = "peach-playwright-host-";
33571
33572
  }
33572
33573
  });
33573
33574
 
@@ -33750,7 +33751,7 @@ function resolveUserDataDir(opts) {
33750
33751
  return playwrightProfileUserDataDir(ensureProfile(opts.profileId).id);
33751
33752
  }
33752
33753
  if (opts.ephemeralProfile) {
33753
- return (0, import_fs8.mkdtempSync)((0, import_path7.join)((0, import_os2.tmpdir)(), "rnx-playwright-profile-"));
33754
+ return (0, import_fs8.mkdtempSync)((0, import_path7.join)((0, import_os2.tmpdir)(), "peach-playwright-profile-"));
33754
33755
  }
33755
33756
  return "";
33756
33757
  }
@@ -33896,7 +33897,7 @@ var init_open_url2 = __esm({
33896
33897
 
33897
33898
  // cli/commands/inspect/env.ts
33898
33899
  function isAgentEnv(env = process.env) {
33899
- if (env.RNX_AGENT === "0") return false;
33900
+ if (env.PEACH_AGENT === "0") return false;
33900
33901
  for (const name2 of AGENT_ENV_VARS) {
33901
33902
  const v = env[name2];
33902
33903
  if (v && v.trim() && v !== "0") return true;
@@ -33908,7 +33909,7 @@ var init_env = __esm({
33908
33909
  "cli/commands/inspect/env.ts"() {
33909
33910
  "use strict";
33910
33911
  AGENT_ENV_VARS = [
33911
- "RNX_AGENT",
33912
+ "PEACH_AGENT",
33912
33913
  "TM_SESSION",
33913
33914
  "CLAUDECODE",
33914
33915
  "CLAUDE_CODE_ENTRYPOINT",
@@ -33949,7 +33950,7 @@ async function fetchRuntimeReleaseNotes(version, fetchImpl = fetch) {
33949
33950
  }
33950
33951
  }
33951
33952
  function formatRuntimeReleaseNotes(version, entry) {
33952
- const lines = [`what's new in rnx engine v${version}:`];
33953
+ const lines = [`what's new in peach engine v${version}:`];
33953
33954
  if (!entry || entry.sections.length === 0) {
33954
33955
  lines.push(` release notes are not available yet`);
33955
33956
  } else {
@@ -34002,15 +34003,15 @@ async function runRuntime(args, opts = {}) {
34002
34003
  }
34003
34004
  function printHelp() {
34004
34005
  console.log(`
34005
- rnx runtime \u2014 manage engine runtimes under ~/.rnx/runtimes/
34006
+ peach runtime \u2014 manage engine runtimes under ~/.peach/runtimes/
34006
34007
 
34007
34008
  usage:
34008
- rnx runtime install [version] install a version (default: channel latest)
34009
- rnx runtime list show installed + available versions
34010
- rnx runtime use <version> switch active runtime
34011
- rnx runtime remove <version> delete an installed runtime
34012
- rnx runtime which print active runtime version
34013
- rnx runtime notes print repo or default engine release notes
34009
+ peach runtime install [version] install a version (default: channel latest)
34010
+ peach runtime list show installed + available versions
34011
+ peach runtime use <version> switch active runtime
34012
+ peach runtime remove <version> delete an installed runtime
34013
+ peach runtime which print active runtime version
34014
+ peach runtime notes print repo or default engine release notes
34014
34015
 
34015
34016
  flags:
34016
34017
  --channel <name> channel to resolve 'latest' from (default: stable)
@@ -34018,14 +34019,14 @@ flags:
34018
34019
  --set-active=false do not switch active runtime after install
34019
34020
 
34020
34021
  environment:
34021
- RNX_CDN_ORIGIN override the CDN base URL (default: ${DEFAULT_RUNTIME_CDN_ORIGIN})
34022
+ PEACH_CDN_ORIGIN override the CDN base URL (default: ${DEFAULT_RUNTIME_CDN_ORIGIN})
34022
34023
 
34023
34024
  examples:
34024
- rnx runtime install
34025
- rnx runtime install 1.2.3
34026
- rnx runtime install --channel beta
34027
- rnx runtime use 1.2.3
34028
- rnx runtime notes
34025
+ peach runtime install
34026
+ peach runtime install 1.2.3
34027
+ peach runtime install --channel beta
34028
+ peach runtime use 1.2.3
34029
+ peach runtime notes
34029
34030
  `);
34030
34031
  }
34031
34032
  async function runtimeInstall(args, opts) {
@@ -34034,7 +34035,7 @@ async function runtimeInstall(args, opts) {
34034
34035
  const force = flags.force === true;
34035
34036
  const setActive = flags.setActive !== false;
34036
34037
  ensureRnxHome();
34037
- console.log(`rnx runtime install`);
34038
+ console.log(`peach runtime install`);
34038
34039
  console.log(` cdn: ${rnxRuntime.resolveCdnOrigin()}`);
34039
34040
  try {
34040
34041
  const result = await rnxRuntime.install({
@@ -34063,7 +34064,7 @@ async function activateVersion(version) {
34063
34064
  const notified = await tellDaemonRuntimeChanged(version);
34064
34065
  if (!notified) {
34065
34066
  console.log(
34066
- ` (no daemon running \u2014 next rnx/electron launch will pick up ${version})`
34067
+ ` (no daemon running \u2014 next peach/electron launch will pick up ${version})`
34067
34068
  );
34068
34069
  }
34069
34070
  }
@@ -34144,14 +34145,14 @@ async function runtimeList(_args) {
34144
34145
  async function runtimeUse(args) {
34145
34146
  const version = args[0];
34146
34147
  if (!version) {
34147
- console.error(` usage: rnx runtime use <version>`);
34148
+ console.error(` usage: peach runtime use <version>`);
34148
34149
  rnxExit(1);
34149
34150
  }
34150
34151
  const installed2 = rnxRuntime.listInstalled();
34151
34152
  if (!installed2.includes(version)) {
34152
34153
  console.error(` version ${version} is not installed`);
34153
34154
  console.error(` installed: ${installed2.join(", ") || "(none)"}`);
34154
- console.error(` run \`rnx runtime install ${version}\` first`);
34155
+ console.error(` run \`peach runtime install ${version}\` first`);
34155
34156
  rnxExit(1);
34156
34157
  }
34157
34158
  await activateVersion(version);
@@ -34159,14 +34160,14 @@ async function runtimeUse(args) {
34159
34160
  async function runtimeRemove(args) {
34160
34161
  const version = args[0];
34161
34162
  if (!version) {
34162
- console.error(` usage: rnx runtime remove <version>`);
34163
+ console.error(` usage: peach runtime remove <version>`);
34163
34164
  rnxExit(1);
34164
34165
  }
34165
34166
  const active = readActiveRuntime();
34166
34167
  if (active === version) {
34167
34168
  console.error(` cannot remove active runtime ${version}`);
34168
34169
  console.error(
34169
- ` switch with \`rnx runtime use <other>\` first, or install another version`
34170
+ ` switch with \`peach runtime use <other>\` first, or install another version`
34170
34171
  );
34171
34172
  rnxExit(1);
34172
34173
  }
@@ -34192,7 +34193,7 @@ async function runtimeWhich() {
34192
34193
  }
34193
34194
  async function runtimeNotes(args) {
34194
34195
  if (args.length > 0) {
34195
- console.error(` usage: rnx runtime notes`);
34196
+ console.error(` usage: peach runtime notes`);
34196
34197
  rnxExit(1);
34197
34198
  }
34198
34199
  const { config } = await resolveRNXAppConfig();
@@ -34325,14 +34326,14 @@ async function ensureBridgeForOpen(preferredPort, explicitPort = false) {
34325
34326
  return preferredPort;
34326
34327
  }
34327
34328
  if (explicitPort && preferredWorld !== null) {
34328
- throw new Error(`rnx open: requested bridge port ${preferredPort} is not reachable.`);
34329
+ throw new Error(`peach open: requested bridge port ${preferredPort} is not reachable.`);
34329
34330
  }
34330
34331
  if (!explicitPort && lock && isDaemonLockfileFresh(lock) && await canConnectToBridge(lock.bridgePort, 500)) {
34331
34332
  return lock.bridgePort;
34332
34333
  }
34333
34334
  if (lock && isDaemonLockfileFresh(lock)) {
34334
34335
  throw new Error(
34335
- `rnx bridge lockfile is fresh (port ${lock.bridgePort}) but the bridge is not reachable. run \`rnx daemon restart\` or \`rnx daemon uninstall\`.`
34336
+ `peach bridge lockfile is fresh (port ${lock.bridgePort}) but the bridge is not reachable. run \`peach daemon restart\` or \`peach daemon uninstall\`.`
34336
34337
  );
34337
34338
  }
34338
34339
  await ensureRuntimeForOpen();
@@ -34349,17 +34350,17 @@ async function ensureBridgeForOpen(preferredPort, explicitPort = false) {
34349
34350
  const selectedPort = explicitPort ? preferredPort : nextLock?.bridgePort;
34350
34351
  if (nextLock && isDaemonLockfileFresh(nextLock) && selectedPort !== void 0 && await canConnectToBridge(selectedPort, 250)) {
34351
34352
  console.error(
34352
- ` Started a local bridge on port ${selectedPort}. Run \`rnx daemon install\` to keep it ready between commands.`
34353
+ ` Started a local bridge on port ${selectedPort}. Run \`peach daemon install\` to keep it ready between commands.`
34353
34354
  );
34354
34355
  return selectedPort;
34355
34356
  }
34356
34357
  if (childExit) {
34357
- throw new Error(`rnx bridge exited before becoming ready (exit ${childExit})`);
34358
+ throw new Error(`peach bridge exited before becoming ready (exit ${childExit})`);
34358
34359
  }
34359
34360
  await sleep2(150);
34360
34361
  }
34361
34362
  throw new Error(
34362
- `rnx bridge did not start within ${Math.round(OPEN_BRIDGE_SPAWN_TIMEOUT_MS / 1e3)}s`
34363
+ `peach bridge did not start within ${Math.round(OPEN_BRIDGE_SPAWN_TIMEOUT_MS / 1e3)}s`
34363
34364
  );
34364
34365
  }
34365
34366
  function assertExplicitBridgeLock(preferredPort, explicitPort, lock) {
@@ -34372,13 +34373,13 @@ function assertExplicitBridgeLock(preferredPort, explicitPort, lock) {
34372
34373
  return;
34373
34374
  }
34374
34375
  throw new Error(
34375
- `${rnxPublicBrand.commandName} open: requested bridge port ${preferredPort}, but the active daemon owns port ${lock.bridgePort}. explicit --port never selects another bridge; stop that daemon or use an isolated RNX_HOME.`
34376
+ `${rnxPublicBrand.commandName} open: requested bridge port ${preferredPort}, but the active daemon owns port ${lock.bridgePort}. explicit --port never selects another bridge; stop that daemon or use an isolated PEACH_HOME.`
34376
34377
  );
34377
34378
  }
34378
34379
  async function ensureRuntimeForOpen() {
34379
34380
  const active = readActiveRuntime();
34380
34381
  if (active && import_node_fs20.default.existsSync(runtimeDir(active))) return;
34381
- console.error(" installing rnx engine runtime...");
34382
+ console.error(" installing peach engine runtime...");
34382
34383
  const { runRuntime: runRuntime2 } = await Promise.resolve().then(() => (init_runtime(), runtime_exports));
34383
34384
  await runRuntime2(["install"], {});
34384
34385
  }
@@ -34548,18 +34549,18 @@ function parseOpenRuntimeConfig(args) {
34548
34549
  if (args[i] === "--replace") {
34549
34550
  const raw = args[i + 1];
34550
34551
  if (!raw) {
34551
- console.error(" rnx open: --replace expects <module>=<file>");
34552
+ console.error(" peach open: --replace expects <module>=<file>");
34552
34553
  rnxExit(1);
34553
34554
  }
34554
34555
  const eqIndex = raw.indexOf("=");
34555
34556
  if (eqIndex <= 0 || eqIndex === raw.length - 1) {
34556
- console.error(" rnx open: --replace expects <module>=<file>");
34557
+ console.error(" peach open: --replace expects <module>=<file>");
34557
34558
  rnxExit(1);
34558
34559
  }
34559
34560
  const moduleName = raw.slice(0, eqIndex).trim();
34560
34561
  const filePath = normalizeReplacementPath(raw.slice(eqIndex + 1).trim());
34561
34562
  if (!import_node_fs20.default.existsSync(filePath)) {
34562
- console.error(` rnx open: replacement file not found: ${filePath}`);
34563
+ console.error(` peach open: replacement file not found: ${filePath}`);
34563
34564
  rnxExit(1);
34564
34565
  }
34565
34566
  modules[moduleName] = { file: filePath };
@@ -34570,7 +34571,7 @@ function parseOpenRuntimeConfig(args) {
34570
34571
  const raw = args[i + 1];
34571
34572
  const eqIndex = raw ? raw.indexOf("=") : -1;
34572
34573
  if (!raw || eqIndex <= 0 || eqIndex === raw.length - 1) {
34573
- console.error(" rnx open: --remap expects <host:port>=<host:port>");
34574
+ console.error(" peach open: --remap expects <host:port>=<host:port>");
34574
34575
  rnxExit(1);
34575
34576
  }
34576
34577
  remap[raw.slice(0, eqIndex).trim()] = raw.slice(eqIndex + 1).trim();
@@ -34605,7 +34606,7 @@ function applyRuntimeGenerationOrigin(baseUrl, version) {
34605
34606
  if (!isLoopbackHost(url.hostname)) {
34606
34607
  if (!version) return baseUrl;
34607
34608
  throw new Error(
34608
- `runtimeVersion ${selectedVersion} requires a local rnx host; got ${url.origin}`
34609
+ `runtimeVersion ${selectedVersion} requires a local peach host; got ${url.origin}`
34609
34610
  );
34610
34611
  }
34611
34612
  url.hostname = runtimeVersionHostname(selectedVersion);
@@ -34935,7 +34936,7 @@ async function terminatePlaywrightHostsForSims(sims, ids) {
34935
34936
  }
34936
34937
  for (const pid of pids) {
34937
34938
  if (!isPlaywrightHostProcess(pid)) {
34938
- console.log(` skipped pid ${pid}: not a rnx playwright host (stale sim record)`);
34939
+ console.log(` skipped pid ${pid}: not a peach playwright host (stale sim record)`);
34939
34940
  continue;
34940
34941
  }
34941
34942
  try {
@@ -35029,7 +35030,7 @@ async function maybeDescribeAfterOpen(wsPort, simId, args) {
35029
35030
  console.log(
35030
35031
  ` app still loading: ${reason} (nodes: ${readyProbe.nodes}, targets: ${readyProbe.targets})`
35031
35032
  );
35032
- console.log(" before interacting, run: rnx wait ready --max-ms 120000");
35033
+ console.log(" before interacting, run: peach wait ready --max-ms 120000");
35033
35034
  }
35034
35035
  }
35035
35036
  const result = await inspectDescribe(bridge, {
@@ -35091,8 +35092,8 @@ async function runLinkCommand(args, opts = {}) {
35091
35092
  commandTimeoutMs: opts.timeoutMs
35092
35093
  });
35093
35094
  if (parsed.positional.length !== 1) {
35094
- console.error(" rnx open: expected exactly one <url-or-route>");
35095
- console.error(" examples: rnx open /settings | rnx open myapp://settings");
35095
+ console.error(" peach open: expected exactly one <url-or-route>");
35096
+ console.error(" examples: peach open /settings | peach open myapp://settings");
35096
35097
  rnxExit(1);
35097
35098
  }
35098
35099
  const bridge = createBridgeFromParsed(parsed);
@@ -35103,9 +35104,9 @@ async function runLinkCommand(args, opts = {}) {
35103
35104
  } catch (err) {
35104
35105
  console.error(` link failed: ${err instanceof Error ? err.message : String(err)}`);
35105
35106
  await printBridgeFailureDiagnostics(bridge, {
35106
- errorsCommand: `rnx get errors 5${simHint}`,
35107
- warningsCommand: `rnx get warnings 5${simHint}`,
35108
- requestsCommand: `rnx get requests 5${simHint}`
35107
+ errorsCommand: `peach get errors 5${simHint}`,
35108
+ warningsCommand: `peach get warnings 5${simHint}`,
35109
+ requestsCommand: `peach get requests 5${simHint}`
35109
35110
  });
35110
35111
  rnxExit(1);
35111
35112
  } finally {
@@ -35144,12 +35145,12 @@ async function runOpenCommand(args, opts = {}) {
35144
35145
  const cdpPort = cdpPortArg ? Number(cdpPortArg) : void 0;
35145
35146
  if (cdpPortArg && (!Number.isFinite(cdpPort) || cdpPort <= 0)) {
35146
35147
  console.error(
35147
- ` rnx open: --cdp-port must be a positive port number, got "${cdpPortArg}"`
35148
+ ` peach open: --cdp-port must be a positive port number, got "${cdpPortArg}"`
35148
35149
  );
35149
35150
  rnxExit(1);
35150
35151
  }
35151
35152
  if (requestedProfileId && ephemeralProfile) {
35152
- console.error(" rnx open: --profile cannot be combined with --ephemeral");
35153
+ console.error(" peach open: --profile cannot be combined with --ephemeral");
35153
35154
  rnxExit(1);
35154
35155
  }
35155
35156
  const profileId = requestedProfileId ? ensureProfile(requestedProfileId).id : void 0;
@@ -35157,7 +35158,7 @@ async function runOpenCommand(args, opts = {}) {
35157
35158
  const commandConfig = parseOpenRuntimeConfig(args);
35158
35159
  if (openInNewSim && parsed.simIdSource === "flag") {
35159
35160
  console.error(
35160
- " rnx open: --new, --profile, and --ephemeral cannot be combined with --sim"
35161
+ " peach open: --new, --profile, and --ephemeral cannot be combined with --sim"
35161
35162
  );
35162
35163
  rnxExit(1);
35163
35164
  }
@@ -35165,14 +35166,14 @@ async function runOpenCommand(args, opts = {}) {
35165
35166
  if (!target && args.includes("--port")) {
35166
35167
  const portValue = args[args.indexOf("--port") + 1] ?? "<number>";
35167
35168
  console.error(
35168
- ` rnx open: --port is the WS bridge port, not the app port. to open the app on ${portValue}, pass it positionally: \`rnx open ${portValue}\``
35169
+ ` peach open: --port is the WS bridge port, not the app port. to open the app on ${portValue}, pass it positionally: \`peach open ${portValue}\``
35169
35170
  );
35170
35171
  rnxExit(1);
35171
35172
  }
35172
35173
  if (isAppDeepLinkTarget(target)) {
35173
35174
  if (openInNewSim) {
35174
35175
  console.error(
35175
- " rnx open: deep links target the current app; remove --new, --profile, or --ephemeral"
35176
+ " peach open: deep links target the current app; remove --new, --profile, or --ephemeral"
35176
35177
  );
35177
35178
  rnxExit(1);
35178
35179
  }
@@ -35188,7 +35189,7 @@ async function runOpenCommand(args, opts = {}) {
35188
35189
  }
35189
35190
  })();
35190
35191
  console.log(
35191
- " that\u2019s an rnx preview/build link \u2014 a full player page, not a driveable sim."
35192
+ " that\u2019s a peach preview/build link \u2014 a full player page, not a driveable sim."
35192
35193
  );
35193
35194
  console.log(" opening it in your browser for viewing\u2026");
35194
35195
  try {
@@ -35201,7 +35202,7 @@ async function runOpenCommand(args, opts = {}) {
35201
35202
  rnxExit(1);
35202
35203
  }
35203
35204
  console.log(
35204
- isLocal ? " to drive it under the CLI, point `rnx open` at the app\u2019s dev port instead (e.g. `rnx open 8081`)." : " the CLI can\u2019t drive a remote preview (the engine only attaches to the local bridge from localhost). to drive the app, run it locally and `rnx open <port>`."
35205
+ isLocal ? " to drive it under the CLI, point `peach open` at the app\u2019s dev port instead (e.g. `peach open 8081`)." : " the CLI can\u2019t drive a remote preview (the engine only attaches to the local bridge from localhost). to drive the app, run it locally and `peach open <port>`."
35205
35206
  );
35206
35207
  return;
35207
35208
  }
@@ -35236,25 +35237,25 @@ async function runOpenCommand(args, opts = {}) {
35236
35237
  parsed.wsPort = await ensureBridgeForOpen(parsed.wsPort, parsed.explicitPort);
35237
35238
  const requestedDriverId = args.find((_, i) => args[i - 1] === "--driver") || "";
35238
35239
  if (requestedDriverId && !isDriverId(requestedDriverId)) {
35239
- console.error(` unknown driver "${requestedDriverId}" \u2014 run \`rnx list --drivers\``);
35240
+ console.error(` unknown driver "${requestedDriverId}" \u2014 run \`peach list --drivers\``);
35240
35241
  rnxExit(1);
35241
35242
  }
35242
35243
  const driverId = isDriverId(requestedDriverId) ? requestedDriverId : process.env.CI === "1" || process.env.CI === "true" || process.env.GITHUB_ACTIONS === "true" || isAgentEnv() || !process.stdin.isTTY ? "playwright" : readSimulatorDriverPreference() || "playwright";
35243
35244
  const driverHeadless = resolveDriverHeadless(args, driverId);
35244
35245
  if (cdpPort && driverId !== "playwright") {
35245
- console.error(" rnx open: --cdp-port is only honored by the playwright driver");
35246
+ console.error(" peach open: --cdp-port is only honored by the playwright driver");
35246
35247
  rnxExit(1);
35247
35248
  }
35248
35249
  const hotFlag = args.includes("--hot");
35249
35250
  const noHmrFlag = args.includes("--no-hmr");
35250
35251
  if (hotFlag && noHmrFlag) {
35251
- console.error(" rnx open: --hot and --no-hmr cannot be combined");
35252
+ console.error(" peach open: --hot and --no-hmr cannot be combined");
35252
35253
  rnxExit(1);
35253
35254
  }
35254
35255
  const hotMode = hotFlag ? true : noHmrFlag ? false : driverId !== "playwright";
35255
35256
  const deviceArg = args.find((_, i) => args[i - 1] === "--device");
35256
35257
  if (deviceArg && !(deviceArg in import_settings.devices)) {
35257
- console.error(` rnx open: unknown device "${deviceArg}"`);
35258
+ console.error(` peach open: unknown device "${deviceArg}"`);
35258
35259
  console.error(` known devices: ${(0, import_settings.listSelectableDeviceModels)().join(", ")}`);
35259
35260
  rnxExit(1);
35260
35261
  }
@@ -35262,7 +35263,7 @@ async function runOpenCommand(args, opts = {}) {
35262
35263
  const viewportArg = args.find((_, i) => args[i - 1] === "--viewport");
35263
35264
  const viewportMatch = viewportArg ? /^(\d+)x(\d+)$/.exec(viewportArg) : null;
35264
35265
  if (viewportArg && !viewportMatch) {
35265
- console.error(` rnx open: --viewport must be <width>x<height>, got "${viewportArg}"`);
35266
+ console.error(` peach open: --viewport must be <width>x<height>, got "${viewportArg}"`);
35266
35267
  rnxExit(1);
35267
35268
  }
35268
35269
  const explicitViewport = viewportMatch ? { width: Number(viewportMatch[1]), height: Number(viewportMatch[2]) } : void 0;
@@ -35358,9 +35359,9 @@ async function runOpenCommand(args, opts = {}) {
35358
35359
  ` open failed: ${err instanceof Error ? err.message : String(err)}`
35359
35360
  );
35360
35361
  await printBridgeFailureDiagnostics(bridge, {
35361
- errorsCommand: `rnx get errors 5${simHint}`,
35362
- warningsCommand: `rnx get warnings 5${simHint}`,
35363
- requestsCommand: `rnx get requests 5${simHint}`
35362
+ errorsCommand: `peach get errors 5${simHint}`,
35363
+ warningsCommand: `peach get warnings 5${simHint}`,
35364
+ requestsCommand: `peach get requests 5${simHint}`
35364
35365
  });
35365
35366
  rnxExit(1);
35366
35367
  }
@@ -35376,9 +35377,9 @@ async function runOpenCommand(args, opts = {}) {
35376
35377
  ` timed out waiting for sim ${targetSim.id} to load ${navigatedShellUrl}`
35377
35378
  );
35378
35379
  await printBridgeFailureDiagnostics(bridge, {
35379
- errorsCommand: `rnx get errors 5${simHint}`,
35380
- warningsCommand: `rnx get warnings 5${simHint}`,
35381
- requestsCommand: `rnx get requests 5${simHint}`
35380
+ errorsCommand: `peach get errors 5${simHint}`,
35381
+ warningsCommand: `peach get warnings 5${simHint}`,
35382
+ requestsCommand: `peach get requests 5${simHint}`
35382
35383
  });
35383
35384
  rnxExit(1);
35384
35385
  }
@@ -35394,9 +35395,9 @@ async function runOpenCommand(args, opts = {}) {
35394
35395
  ` timed out waiting for current sim to load target after ${ready.attempts} polls over ${Math.round(ready.attempts * ready.intervalMs / 1e3)}s; ${observed}`
35395
35396
  );
35396
35397
  await printBridgeFailureDiagnostics(bridge, {
35397
- errorsCommand: `rnx get errors 5${simHint}`,
35398
- warningsCommand: `rnx get warnings 5${simHint}`,
35399
- requestsCommand: `rnx get requests 5${simHint}`
35398
+ errorsCommand: `peach get errors 5${simHint}`,
35399
+ warningsCommand: `peach get warnings 5${simHint}`,
35400
+ requestsCommand: `peach get requests 5${simHint}`
35400
35401
  });
35401
35402
  rnxExit(1);
35402
35403
  }
@@ -35426,7 +35427,7 @@ async function runOpenCommand(args, opts = {}) {
35426
35427
  }
35427
35428
  const driver = getDriver(driverId);
35428
35429
  if (!driver) {
35429
- console.error(` unknown driver "${driverId}" \u2014 run \`rnx list --drivers\``);
35430
+ console.error(` unknown driver "${driverId}" \u2014 run \`peach list --drivers\``);
35430
35431
  rnxExit(1);
35431
35432
  }
35432
35433
  const connectWait = resolveDriverConnectWaitOptions();
@@ -35504,7 +35505,7 @@ async function runUseLikeCommand(args, opts = {}) {
35504
35505
  console.error(
35505
35506
  ` refused: ${target.id} is locked by the active user (${secs}s) \u2014 that's a live human tab`
35506
35507
  );
35507
- console.error(` run \`rnx open --new\` for a fresh investigation sim`);
35508
+ console.error(` run \`peach open --new\` for a fresh investigation sim`);
35508
35509
  rnxExit(1);
35509
35510
  }
35510
35511
  if (!force) {
@@ -35512,7 +35513,7 @@ async function runUseLikeCommand(args, opts = {}) {
35512
35513
  ` refused: ${target.id} is leased by ${target.lockedBy} (${secs}s)`
35513
35514
  );
35514
35515
  console.error(
35515
- ` \`rnx use ${target.id} --force\` to take it, or \`rnx open --new\` for a fresh sim`
35516
+ ` \`peach use ${target.id} --force\` to take it, or \`peach open --new\` for a fresh sim`
35516
35517
  );
35517
35518
  rnxExit(1);
35518
35519
  }
@@ -35524,9 +35525,9 @@ async function runUseLikeCommand(args, opts = {}) {
35524
35525
  rethrowIfExit(err);
35525
35526
  console.error(` use failed: ${err instanceof Error ? err.message : String(err)}`);
35526
35527
  await printBridgeFailureDiagnostics(bridge, {
35527
- errorsCommand: `rnx get errors 5${simHint}`,
35528
- warningsCommand: `rnx get warnings 5${simHint}`,
35529
- requestsCommand: `rnx get requests 5${simHint}`
35528
+ errorsCommand: `peach get errors 5${simHint}`,
35529
+ warningsCommand: `peach get warnings 5${simHint}`,
35530
+ requestsCommand: `peach get requests 5${simHint}`
35530
35531
  });
35531
35532
  rnxExit(1);
35532
35533
  }
@@ -35565,7 +35566,7 @@ async function runClaimCommand(args, opts = {}) {
35565
35566
  if (err instanceof BridgeSimLockedError) {
35566
35567
  const secs = Math.max(0, Math.round(err.lock.expiresInMs / 1e3));
35567
35568
  console.error(` claim failed: locked by ${err.lock.by} for ${secs}s more`);
35568
- console.error(` use --force to take it, or \`rnx open --new\` for a fresh sim`);
35569
+ console.error(` use --force to take it, or \`peach open --new\` for a fresh sim`);
35569
35570
  rnxExit(1);
35570
35571
  }
35571
35572
  console.error(` claim failed: ${err instanceof Error ? err.message : String(err)}`);
@@ -35690,7 +35691,7 @@ async function runCloseCommand(args, opts = {}) {
35690
35691
  );
35691
35692
  }
35692
35693
  if (plan.refused.some((entry) => entry.kind === "cli") && !force) {
35693
- console.error(` \`rnx close --all --force\` to close leased sims too`);
35694
+ console.error(` \`peach close --all --force\` to close leased sims too`);
35694
35695
  }
35695
35696
  if (plan.staleSavedId) {
35696
35697
  clearCurrentSimId();
@@ -35768,9 +35769,9 @@ async function runCloseCommand(args, opts = {}) {
35768
35769
  rethrowIfExit(err);
35769
35770
  console.error(` close failed: ${err instanceof Error ? err.message : String(err)}`);
35770
35771
  await printBridgeFailureDiagnostics(bridge, {
35771
- errorsCommand: `rnx get errors 5${simHint}`,
35772
- warningsCommand: `rnx get warnings 5${simHint}`,
35773
- requestsCommand: `rnx get requests 5${simHint}`
35772
+ errorsCommand: `peach get errors 5${simHint}`,
35773
+ warningsCommand: `peach get warnings 5${simHint}`,
35774
+ requestsCommand: `peach get requests 5${simHint}`
35774
35775
  });
35775
35776
  rnxExit(1);
35776
35777
  }
@@ -36449,7 +36450,7 @@ var init_settling = __esm({
36449
36450
  // cli/maestro-js.ts
36450
36451
  function executeSyncHttp(url, method, params) {
36451
36452
  if (params?.multipartForm) {
36452
- throw new Error("http: multipartForm is not supported by rnx yet");
36453
+ throw new Error("http: multipartForm is not supported by peach yet");
36453
36454
  }
36454
36455
  const childEnv = { ...process.env };
36455
36456
  for (const key of Object.keys(childEnv)) {
@@ -36684,7 +36685,7 @@ var init_run_registry = __esm({
36684
36685
  // cli/commands/upload.ts
36685
36686
  async function resolveDefaultUploadOrigin(explicitOrigin) {
36686
36687
  if (explicitOrigin) return explicitOrigin;
36687
- if (process.env.RNX_UPLOAD_ORIGIN) return process.env.RNX_UPLOAD_ORIGIN;
36688
+ if (process.env.PEACH_UPLOAD_ORIGIN) return process.env.PEACH_UPLOAD_ORIGIN;
36688
36689
  return REMOTE_DEFAULT_ORIGIN;
36689
36690
  }
36690
36691
  var import_compress, import_compress_node, import_presigned_upload, import_trace, REMOTE_DEFAULT_ORIGIN, REMOTE_DEFAULT_PUBLIC_PREVIEW_ORIGIN;
@@ -36703,8 +36704,8 @@ var init_upload = __esm({
36703
36704
  init_run_registry();
36704
36705
  init_run_rnx();
36705
36706
  init_ws_bridge();
36706
- REMOTE_DEFAULT_ORIGIN = process.env.RNX_UPLOAD_ORIGIN || "https://contrast.dev";
36707
- REMOTE_DEFAULT_PUBLIC_PREVIEW_ORIGIN = process.env.RNX_PREVIEW_ORIGIN || rnxPublicBrand.origin;
36707
+ REMOTE_DEFAULT_ORIGIN = process.env.PEACH_UPLOAD_ORIGIN || "https://contrast.dev";
36708
+ REMOTE_DEFAULT_PUBLIC_PREVIEW_ORIGIN = process.env.PEACH_PREVIEW_ORIGIN || rnxPublicBrand.origin;
36708
36709
  }
36709
36710
  });
36710
36711
 
@@ -36725,11 +36726,11 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
36725
36726
  if (!auth) {
36726
36727
  process.stderr.write(
36727
36728
  `
36728
- rnx ${commandLabel} needs auth before it can check recording access.
36729
+ peach needs auth before it can check recording access.
36729
36730
 
36730
36731
  pick one:
36731
- \u2022 run \`rnx login\`
36732
- \u2022 set RNX_API_KEY=sk_rnx_... (recommended for CI)
36732
+ \u2022 run \`peach login\`
36733
+ \u2022 set PEACH_API_KEY=sk_rnx_... (recommended for CI)
36733
36734
 
36734
36735
  `
36735
36736
  );
@@ -36745,7 +36746,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
36745
36746
  } catch (error) {
36746
36747
  process.stderr.write(
36747
36748
  `
36748
- rnx ${commandLabel} couldn't verify recording access.
36749
+ peach couldn't verify recording access.
36749
36750
  ${error instanceof Error ? error.message : String(error)}
36750
36751
 
36751
36752
  `
@@ -36755,8 +36756,8 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
36755
36756
  if (res.status === 401) {
36756
36757
  process.stderr.write(
36757
36758
  `
36758
- rnx ${commandLabel} couldn't verify recording access with the current auth against ${billingOrigin}.
36759
- sign in again for that origin, or provide a valid RNX_API_KEY.
36759
+ peach couldn't verify recording access with the current auth against ${billingOrigin}.
36760
+ sign in again for that origin, or provide a valid PEACH_API_KEY.
36760
36761
 
36761
36762
  `
36762
36763
  );
@@ -36766,7 +36767,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
36766
36767
  const text = await res.text().catch(() => "");
36767
36768
  process.stderr.write(
36768
36769
  `
36769
- rnx ${commandLabel} couldn't verify recording access (${res.status}).
36770
+ peach couldn't verify recording access (${res.status}).
36770
36771
  ${text || "unexpected billing response"}
36771
36772
 
36772
36773
  `
@@ -36778,7 +36779,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
36778
36779
  const plan = data.plan ?? "free";
36779
36780
  process.stderr.write(
36780
36781
  `
36781
- rnx ${commandLabel} recording requires Personal, Team, or an active trial.
36782
+ peach recording requires Personal, Team, or an active trial.
36782
36783
  current plan: ${plan}.
36783
36784
  free keeps basic 3d mode; the trial unlocks the full Personal surface.
36784
36785
 
@@ -37018,7 +37019,7 @@ var init_bridge_flow_runner = __esm({
37018
37019
  }
37019
37020
  if (status.bridgeError) {
37020
37021
  throw new Error(
37021
- `target sim is not responding to the bridge (${status.bridgeError}). it is likely a stale orphan; run \`rnx list\`, then close it with \`rnx close <id>\` or start a fresh one with \`rnx open --new <port>\`.`
37022
+ `target sim is not responding to the bridge (${status.bridgeError}). it is likely a stale orphan; run \`peach list\`, then close it with \`peach close <id>\` or start a fresh one with \`peach open --new <port>\`.`
37022
37023
  );
37023
37024
  }
37024
37025
  throw new Error(`app not ready after ${timeout}ms: ${waitReadyReason(status)}`);
@@ -37146,7 +37147,7 @@ var init_bridge_flow_runner = __esm({
37146
37147
  const extension = videoMime.includes("mp4") ? "mp4" : "webm";
37147
37148
  const outputPath = path18.join(
37148
37149
  this.opts.recordingOutputDir,
37149
- `rnx-${Date.now()}.${extension}`
37150
+ `peach-${Date.now()}.${extension}`
37150
37151
  );
37151
37152
  fs18.writeFileSync(outputPath, Buffer.concat(chunks));
37152
37153
  return outputPath;
@@ -38258,11 +38259,11 @@ var init_bridge_flow_runner = __esm({
38258
38259
  await this.resetGuestAppData();
38259
38260
  await this.rearmCaptureAfterRuntimeReload();
38260
38261
  }
38261
- // maestro clearKeychain: there is no real keychain in rnx's browser
38262
+ // maestro clearKeychain: there is no real keychain in peach's browser
38262
38263
  // sandbox. log loudly so the author notices, then continue — matching the
38263
38264
  // "loud warning, not silent skip" policy in the plan.
38264
38265
  clearKeychain() {
38265
- console.warn("[flow] clearKeychain: rnx has no keychain surface \u2014 no-op (warning)");
38266
+ console.warn("[flow] clearKeychain: peach has no keychain surface \u2014 no-op (warning)");
38266
38267
  }
38267
38268
  // maestro copyTextFrom: find an element and capture its text for use in
38268
38269
  // later steps via ${maestro.copiedText} (upstream form) or the legacy
@@ -38901,14 +38902,14 @@ var skill = {
38901
38902
  // src/skills/builtin/compat-check.ts
38902
38903
  var skill2 = {
38903
38904
  name: "compat-check",
38904
- description: "Check package compatibility with rnx",
38905
+ description: "Check package compatibility with peach",
38905
38906
  type: "review",
38906
38907
  version: "1.0.0",
38907
38908
  triggers: ["compatibility", "compat", "check package", "supported packages"],
38908
38909
  tools: [
38909
38910
  {
38910
38911
  name: "check_compatibility",
38911
- description: "Scan project dependencies for rnx compatibility",
38912
+ description: "Scan project dependencies for peach compatibility",
38912
38913
  parameters: {
38913
38914
  packageName: {
38914
38915
  type: "string",