peachsim 0.1.656 → 0.1.657

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 (74) hide show
  1. package/README.md +1 -1
  2. package/cli/app-config.ts +9 -6
  3. package/cli/app-project.ts +6 -6
  4. package/cli/commands/control.ts +20 -20
  5. package/cli/commands/flow.ts +3 -3
  6. package/detox/config-loader.ts +1 -1
  7. package/dist-lib/agent-daemon-client.cjs +1 -1
  8. package/dist-lib/agent-events.cjs +1 -1
  9. package/dist-lib/agent-identity.cjs +1 -1
  10. package/dist-lib/agent-sessions.cjs +1 -1
  11. package/dist-lib/attached-projects.cjs +1 -1
  12. package/dist-lib/auth/shared-session.cjs +1 -1
  13. package/dist-lib/backend-origin.cjs +1 -1
  14. package/dist-lib/beta.cjs +1 -1
  15. package/dist-lib/beta.mjs +1 -1
  16. package/dist-lib/bridge-constants.cjs +1 -1
  17. package/dist-lib/bridge-contract-input.cjs +1 -1
  18. package/dist-lib/bridge-contract-input.mjs +1 -1
  19. package/dist-lib/bridge-contract.cjs +1 -1
  20. package/dist-lib/bridge-contract.mjs +1 -1
  21. package/dist-lib/capture-contract.cjs +1 -1
  22. package/dist-lib/capture-contract.mjs +1 -1
  23. package/dist-lib/cli-constants.cjs +1 -1
  24. package/dist-lib/cloud-contract.cjs +1 -1
  25. package/dist-lib/cloud-contract.mjs +1 -1
  26. package/dist-lib/cloud-test-args.cjs +1 -1
  27. package/dist-lib/cloud-test-args.mjs +1 -1
  28. package/dist-lib/cloud.cjs +1 -1
  29. package/dist-lib/cloud.mjs +1 -1
  30. package/dist-lib/config.cjs +25 -25
  31. package/dist-lib/detox/index.cjs +1 -1
  32. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  33. package/dist-lib/home-paths.cjs +1 -1
  34. package/dist-lib/host/bridge-host.cjs +14 -14
  35. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  36. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  37. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  38. package/dist-lib/host/replacement-module-handler.cjs +2 -2
  39. package/dist-lib/host/websocket-proxy.cjs +1 -1
  40. package/dist-lib/index.cjs +2 -2
  41. package/dist-lib/jump-to-source-babel.cjs +1 -1
  42. package/dist-lib/jump-to-source-native.cjs +1 -1
  43. package/dist-lib/kotlin-host.cjs +1 -1
  44. package/dist-lib/menu.cjs +1 -1
  45. package/dist-lib/menu.mjs +1 -1
  46. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  47. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  48. package/dist-lib/metro-production-bundle.cjs +1 -1
  49. package/dist-lib/metro-production-bundle.mjs +1 -1
  50. package/dist-lib/metro.cjs +2 -2
  51. package/dist-lib/native-app-identity.cjs +1 -1
  52. package/dist-lib/native-app-identity.mjs +1 -1
  53. package/dist-lib/profiles.cjs +1 -1
  54. package/dist-lib/public-brand.cjs +1 -1
  55. package/dist-lib/react-native-host-modules.cjs +1 -1
  56. package/dist-lib/react-native-host-modules.mjs +1 -1
  57. package/dist-lib/render-mode.cjs +1 -1
  58. package/dist-lib/scripts/dev-server-scanner.cjs +13 -15
  59. package/dist-lib/sdk.cjs +1 -1
  60. package/dist-lib/sdk.mjs +1 -1
  61. package/dist-lib/skills.cjs +94 -70
  62. package/dist-lib/swift-compile.cjs +1 -1
  63. package/dist-lib/swift-compile.mjs +1 -1
  64. package/dist-lib/swift-package.cjs +1 -1
  65. package/dist-lib/swift-package.mjs +1 -1
  66. package/dist-lib/swift-submit.cjs +1 -1
  67. package/dist-lib/swift-submit.mjs +1 -1
  68. package/dist-lib/swift.cjs +1 -1
  69. package/dist-lib/vite-swift.cjs +1 -1
  70. package/dist-lib/vite.cjs +2 -2
  71. package/package.json +1 -1
  72. package/scripts/dev-server-scanner.ts +3 -3
  73. package/scripts/optional-demo-registry.ts +1 -1
  74. package/src/config.ts +26 -26
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.656 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.657 | (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;
@@ -4425,6 +4425,8 @@ var init_supported_native_packages = __esm({
4425
4425
  // seam
4426
4426
  "@kesha-antonov/react-native-background-downloader",
4427
4427
  // seam
4428
+ "@livekit/react-native-webrtc",
4429
+ // seam
4428
4430
  "@lodev09/react-native-true-sheet",
4429
4431
  // seam
4430
4432
  "@logicwind/react-native-exit-app",
@@ -4490,7 +4492,7 @@ var init_supported_native_packages = __esm({
4490
4492
  "@react-native-community/image-editor",
4491
4493
  // seam+coverage
4492
4494
  "@react-native-community/masked-view",
4493
- // coverage
4495
+ // seam+coverage
4494
4496
  "@react-native-community/netinfo",
4495
4497
  // seam+coverage
4496
4498
  "@react-native-community/progress-view",
@@ -4517,16 +4519,20 @@ var init_supported_native_packages = __esm({
4517
4519
  // seam
4518
4520
  "@react-native-firebase/functions",
4519
4521
  // seam
4522
+ "@react-native-firebase/installations",
4523
+ // seam
4520
4524
  "@react-native-firebase/messaging",
4521
4525
  // seam
4522
4526
  "@react-native-firebase/perf",
4523
- // coverage
4527
+ // seam+coverage
4528
+ "@react-native-firebase/remote-config",
4529
+ // seam
4524
4530
  "@react-native-firebase/storage",
4525
4531
  // seam
4526
4532
  "@react-native-google-signin/google-signin",
4527
4533
  // seam
4528
4534
  "@react-native-masked-view/masked-view",
4529
- // coverage
4535
+ // seam+coverage
4530
4536
  "@react-native-menu/menu",
4531
4537
  // coverage
4532
4538
  "@react-native-ml-kit/barcode-scanning",
@@ -4620,21 +4626,21 @@ var init_supported_native_packages = __esm({
4620
4626
  "expo-av",
4621
4627
  // seam+coverage
4622
4628
  "expo-background-fetch",
4623
- // semantic-proof
4629
+ // semantic-proof+seam
4624
4630
  "expo-background-task",
4625
- // semantic-proof
4631
+ // semantic-proof+seam
4626
4632
  "expo-battery",
4627
- // semantic-proof+coverage
4633
+ // semantic-proof+seam+coverage
4628
4634
  "expo-blur",
4629
- // coverage
4635
+ // seam+coverage
4630
4636
  "expo-brightness",
4631
- // semantic-proof
4637
+ // semantic-proof+seam
4632
4638
  "expo-calendar",
4633
4639
  // semantic-proof+seam
4634
4640
  "expo-camera",
4635
4641
  // seam+coverage
4636
4642
  "expo-cellular",
4637
- // semantic-proof
4643
+ // semantic-proof+seam
4638
4644
  "expo-clipboard",
4639
4645
  // seam+coverage
4640
4646
  "expo-constants",
@@ -4663,6 +4669,8 @@ var init_supported_native_packages = __esm({
4663
4669
  // seam+coverage
4664
4670
  "expo-hardware-buttons",
4665
4671
  // seam
4672
+ "expo-iap",
4673
+ // seam
4666
4674
  "expo-ignore-battery-optimizations",
4667
4675
  // coverage
4668
4676
  "expo-image",
@@ -4698,7 +4706,7 @@ var init_supported_native_packages = __esm({
4698
4706
  "expo-mesh-gradient",
4699
4707
  // coverage
4700
4708
  "expo-network",
4701
- // semantic-proof+coverage
4709
+ // semantic-proof+seam+coverage
4702
4710
  "expo-notifications",
4703
4711
  // seam+coverage
4704
4712
  "expo-passkey",
@@ -4712,7 +4720,7 @@ var init_supported_native_packages = __esm({
4712
4720
  "expo-quick-actions",
4713
4721
  // seam
4714
4722
  "expo-screen-capture",
4715
- // semantic-proof
4723
+ // semantic-proof+seam
4716
4724
  "expo-screen-corner-radius",
4717
4725
  // seam+coverage
4718
4726
  "expo-screen-orientation",
@@ -4752,7 +4760,7 @@ var init_supported_native_packages = __esm({
4752
4760
  "expo-video-metadata",
4753
4761
  // seam
4754
4762
  "expo-video-thumbnails",
4755
- // semantic-proof
4763
+ // semantic-proof+seam
4756
4764
  "expo-web-browser",
4757
4765
  // seam
4758
4766
  "expo-widgets",
@@ -4931,6 +4939,8 @@ var init_supported_native_packages = __esm({
4931
4939
  // seam+coverage
4932
4940
  "react-native-get-random-values",
4933
4941
  // seam+coverage
4942
+ "react-native-google-mobile-ads",
4943
+ // seam
4934
4944
  "react-native-google-places",
4935
4945
  // seam
4936
4946
  "react-native-google-play-install-referrer",
@@ -4945,6 +4955,8 @@ var init_supported_native_packages = __esm({
4945
4955
  // seam
4946
4956
  "react-native-http-bridge-refurbished",
4947
4957
  // seam
4958
+ "react-native-iap",
4959
+ // seam
4948
4960
  "react-native-idle-timer",
4949
4961
  // seam+coverage
4950
4962
  "react-native-image-colors",
@@ -5081,6 +5093,8 @@ var init_supported_native_packages = __esm({
5081
5093
  // seam
5082
5094
  "react-native-purchases",
5083
5095
  // preset+seam+coverage
5096
+ "react-native-purchases-ui",
5097
+ // seam
5084
5098
  "react-native-pure-jwt",
5085
5099
  // seam+coverage
5086
5100
  "react-native-quick-actions",
@@ -5239,6 +5253,8 @@ var init_supported_native_packages = __esm({
5239
5253
  // preset
5240
5254
  "react-native-webp-format",
5241
5255
  // coverage
5256
+ "react-native-webrtc",
5257
+ // seam
5242
5258
  "react-native-webview",
5243
5259
  // preset+visual-proof+seam
5244
5260
  "react-native-widget-picker",
@@ -6058,8 +6074,8 @@ var init_registry = __esm({
6058
6074
  }
6059
6075
  ],
6060
6076
  capabilityCoverage: CAPABILITY_INVENTORY_PACKAGE_COVERAGE["@react-native-masked-view/masked-view"],
6061
- note: "engine-level masked-view node with canvaskit saveLayer + BlendMode.DstIn alpha compositing",
6062
- working: "MaskedView component renders sootsim-masked-view host element with __sootsimMaskSlot alpha-mask pipeline (saveLayer + DstIn in canvaskit-renderer), maskElement, children, style, pointerEvents, accessible, accessibilityLabel, nativeID, testID"
6077
+ note: "upstream masked-view JS runs unchanged against an RNCMaskedView native view seam: its first subview is the alpha mask (canvaskit saveLayer + BlendMode.DstIn)",
6078
+ working: "MaskedView, maskElement, children, the invalid-mask warning and unmasked View fallback, style, pointerEvents, accessible, accessibilityLabel, nativeID, testID"
6063
6079
  }
6064
6080
  ]
6065
6081
  },
@@ -6070,7 +6086,7 @@ var init_registry = __esm({
6070
6086
  {
6071
6087
  range: ">=0.1.0 <0.2.0",
6072
6088
  coverage: 0.9,
6073
- note: "the retired package name resolves to the same RNCMaskedView-compatible engine node as its renamed successor",
6089
+ note: "the retired package JS runs unchanged against the same RNCMaskedView native view seam as its renamed successor",
6074
6090
  working: "default MaskedView component, alpha-channel maskElement compositing, children, View props and refs, and the upstream invalid-mask warning plus unmasked View fallback",
6075
6091
  missing: "the retired package publishes a class declaration that TypeScript 5.9 cannot use as JSX with current React 19 types; native iOS and Android compositor timing under animated masks"
6076
6092
  }
@@ -6324,7 +6340,7 @@ var init_registry = __esm({
6324
6340
  {
6325
6341
  range: ">=12.0.0",
6326
6342
  coverage: 0.95,
6327
- note: "CanvasKit blur with measured iOS 27 filter chains for UIKit styles",
6343
+ note: "upstream expo-blur JS runs unchanged against an ExpoBlurView native view seam: CanvasKit blur with measured iOS 27 filter chains for UIKit styles",
6328
6344
  working: "BlurView, BlurTargetView, tint (all 22 BlurTint values; UIKit styles use their iOS 27 blur, curve, saturation, brightness, and tint chain), intensity, blurReductionFactor, experimentalBlurMethod, blurMethod props",
6329
6345
  missing: "native partial-intensity interpolation fidelity, Animated.createAnimatedComponent integration fidelity"
6330
6346
  }
@@ -7293,7 +7309,7 @@ var init_registry = __esm({
7293
7309
  {
7294
7310
  range: ">=18.0.0",
7295
7311
  coverage: 0.95,
7296
- note: "development noop \u2014 performance tracing API is present and records nothing",
7312
+ note: "upstream @react-native-firebase/perf JS runs unchanged against the NativeRNFBTurboPerf (v26) and RNFBPerfModule native seam; traces and http metrics are accepted and nothing is uploaded, collection and instrumentation start enabled as FIRPerformance does",
7297
7313
  working: "trace/newTrace/startTrace, Trace start/stop/attributes/metrics, HttpMetric start/stop/attributes/payload metadata, collection enablement",
7298
7314
  missing: "native app start/network instrumentation, trace persistence, upload to Firebase Performance"
7299
7315
  }
@@ -7306,9 +7322,9 @@ var init_registry = __esm({
7306
7322
  {
7307
7323
  range: ">=18.0.0",
7308
7324
  coverage: 0.8,
7309
- note: "safe defaults \u2014 remote config calls resolve and return static empty values",
7325
+ note: "upstream @react-native-firebase/remote-config JS runs unchanged against the NativeRNFBTurboConfig (v26) and RNFBConfigModule native seam, backed by the firebase js sdk remote config for the same app: fetches reach the project template, values persist, minimum fetch intervals throttle",
7310
7326
  working: "setDefaults, setConfigSettings, fetch, fetchAndActivate, activate, ensureInitialized, getAll, getBoolean, getNumber, getString, getValue, reset",
7311
- missing: "remote fetch/activate against Firebase backend, persisted defaults, realtime config updates"
7327
+ missing: "setDefaultsFromResource (no app bundle plist)"
7312
7328
  }
7313
7329
  ]
7314
7330
  },
@@ -7345,9 +7361,9 @@ var init_registry = __esm({
7345
7361
  {
7346
7362
  range: ">=18.0.0",
7347
7363
  coverage: 0,
7348
- 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",
7349
- working: "default installations(), getId, getToken, delete",
7350
- missing: "real Firebase installation registration and token lifecycle"
7364
+ note: "upstream @react-native-firebase/installations JS runs unchanged against the NativeRNFBTurboInstallations (v26) and RNFBInstallationsModule native seam, backed by the firebase js sdk installations for the same app",
7365
+ working: "default installations(), modular helpers, getId, getToken, delete",
7366
+ missing: "none known"
7351
7367
  }
7352
7368
  ]
7353
7369
  },
@@ -7369,11 +7385,11 @@ var init_registry = __esm({
7369
7385
  stubType: "native",
7370
7386
  versions: [
7371
7387
  {
7372
- range: ">=12.0.0",
7388
+ range: ">=16.0.0 <17.0.0",
7373
7389
  coverage: 0.35,
7374
- note: "partial JS-reimpl stub \u2014 covers ~40% of upstream surface; useIAP hook, withIAPContext, IAPManagerAndroid, getStorefrontIOS etc. missing. should be migrated to native-seam pattern so real package runs against an RNIapIos/RNIapAndroid TurboModule shim",
7375
- working: "initConnection resolves true, purchaseErrorListener/purchaseUpdatedListener return removable subscriptions, endConnection resolves",
7376
- missing: "getProducts/getSubscriptions always [], requestPurchase/requestSubscription always undefined, getAvailablePurchases [], finishTransaction noop, validateReceiptIos/Android return {}, no IAPManagerAndroid/withIAPContext, useIAP hook missing"
7390
+ note: "native seam: published JS and useIAP run against the RnIap Nitro hybrid object, modeling an empty StoreKit catalog and transaction history",
7391
+ working: "connection lifecycle, fetchProducts, purchase error listeners, empty purchase and subscription queries, numeric finishTransaction, invalid verification result, native missing-product and receipt errors",
7392
+ missing: "real purchases, StoreKit UI, AppStore sync, app transactions, introductory offer eligibility, provider verification and Play Billing"
7377
7393
  }
7378
7394
  ]
7379
7395
  },
@@ -8874,7 +8890,14 @@ var init_registry = __esm({
8874
8890
  stubType: "native",
8875
8891
  versions: [
8876
8892
  {
8877
- range: ">=1.0.0",
8893
+ range: ">=2.0.0 <3.0.0",
8894
+ coverage: 0,
8895
+ note: "native seam: published JavaScript loads against the Compressor Nitro hybrid object; native media and filesystem operations reject explicitly",
8896
+ working: "published Image, Video, Audio and utility exports load; transcoding rejects with UNSUPPORTED_OPERATION instead of returning an unchanged asset as a success",
8897
+ missing: "native media transcoding, metadata, thumbnails, cache files, upload/download and background execution"
8898
+ },
8899
+ {
8900
+ range: ">=1.0.0 <2.0.0",
8878
8901
  coverage: 0.78,
8879
8902
  note: "native-seam: real package JS runs from the bundle; the Compressor TurboModule is browser-backed (canvas raster compression, HTMLVideoElement metadata/thumbnail, fetch upload/download)",
8880
8903
  working: "Image.compress loads uri/base64 inputs, preserves aspect ratio, resizes/re-encodes jpg/png, returns uri or base64; getImageMetaData/getVideoMetaData report real dimensions+size; createVideoThumbnail captures the first frame; clearCache resolves (composer onClose); Video.compress passes through and drives progress to completion; backgroundUpload/download use fetch",
@@ -9654,10 +9677,10 @@ var init_registry = __esm({
9654
9677
  versions: [
9655
9678
  {
9656
9679
  range: ">=8.0.0",
9657
- coverage: 0,
9658
- 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",
9659
- working: "RevenueCatUI singleton, presentPaywall (NOT_PRESENTED), presentPaywallIfNeeded (NOT_PRESENTED), presentCustomerCenter (rejects clearly), PAYWALL_RESULT enum (NOT_PRESENTED, ERROR, CANCELLED, PURCHASED, RESTORED)",
9660
- 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"
9680
+ coverage: 0.7,
9681
+ note: "native-seam only. the published RevenueCatUI JS runs over RNPaywalls, RNCustomerCenter and the PaywallView, RCPaywallFooterView and CustomerCenterView view managers. RevenueCat's dashboard-designed paywall never reaches Peach, so the seam draws a simplified paywall from the RNPurchases offering and buys and restores through that seam, with PaywallProxy's page-sheet presentation, entitlement check, result strings and view event bodies",
9682
+ working: "presentPaywall and presentPaywallIfNeeded (PURCHASED, RESTORED, CANCELLED, NOT_PRESENTED), Paywall and footer components with purchase, restore, cancel, error and dismiss events, purchase-initiated and purchase-logic round trips, presentCustomerCenter and CustomerCenterView with restore and manage-subscriptions events",
9683
+ missing: "dashboard-designed paywall templates, custom variables and fonts beyond fontFamily, customer-center support paths, refunds and promotional offers"
9661
9684
  }
9662
9685
  ]
9663
9686
  },
@@ -9887,10 +9910,11 @@ var init_registry = __esm({
9887
9910
  stubType: "native",
9888
9911
  versions: [
9889
9912
  {
9890
- range: ">=2.0.0",
9913
+ range: ">=5.0.0 <6.0.0",
9891
9914
  coverage: 0.45,
9892
- note: "load-safe noop \u2014 initConnection=false (apps branch on no-IAP), getProducts/getSubscriptions/getAvailablePurchases return empty arrays, requestPurchase rejects with E_IAP_NOT_AVAILABLE. PurchaseError class + ErrorCode/IAPErrorCode/IapEvent enums exposed for type-checked code",
9893
- missing: "no StoreKit / Play Billing \u2014 same constraint as react-native-purchases. paywall flows take their offline branch"
9915
+ note: "native seam: published JS and useIAP run against ExpoIap, modeling an empty StoreKit catalog and transaction history",
9916
+ working: "connection lifecycle, fetchProducts, native purchase errors and event subscriptions, empty purchase and subscription queries, numeric finishTransaction, missing receipt and invalid verification result",
9917
+ missing: "real purchases, StoreKit UI, AppStore sync, app transactions, introductory offer eligibility, provider verification and Play Billing"
9894
9918
  }
9895
9919
  ]
9896
9920
  },
@@ -19215,14 +19239,14 @@ var init_backend_origin = __esm({
19215
19239
  function hasOwnKeys(value) {
19216
19240
  return !!value && Object.keys(value).length > 0;
19217
19241
  }
19218
- function hasRNXConfig(config) {
19242
+ function hasPeachConfig(config) {
19219
19243
  if (!config) return false;
19220
19244
  return typeof config.runtimeVersion === "string" && config.runtimeVersion.length > 0 || hasOwnKeys(config.modules) || hasOwnKeys(config.turboModules) || hasOwnKeys(config.nativeModules) || hasOwnKeys(config.env) || hasOwnKeys(config.network?.remap) || hasOwnKeys(config.settings) || hasOwnKeys(config.initialState);
19221
19245
  }
19222
- function mergeRNXConfig(base, override) {
19223
- if (!hasRNXConfig(base) && !hasRNXConfig(override)) return void 0;
19224
- if (!hasRNXConfig(base)) return override ? { ...override } : void 0;
19225
- if (!hasRNXConfig(override)) return base ? { ...base } : void 0;
19246
+ function mergePeachConfig(base, override) {
19247
+ if (!hasPeachConfig(base) && !hasPeachConfig(override)) return void 0;
19248
+ if (!hasPeachConfig(base)) return override ? { ...override } : void 0;
19249
+ if (!hasPeachConfig(override)) return base ? { ...base } : void 0;
19226
19250
  return {
19227
19251
  runtimeVersion: override.runtimeVersion ?? base.runtimeVersion,
19228
19252
  modules: { ...base.modules || {}, ...override.modules || {} },
@@ -19242,20 +19266,20 @@ function mergeRNXConfig(base, override) {
19242
19266
  initialState: { ...base.initialState || {}, ...override.initialState || {} }
19243
19267
  };
19244
19268
  }
19245
- function applyRNXConfigToUrl(url, config) {
19269
+ function applyPeachConfigToUrl(url, config) {
19246
19270
  const parsed = new URL(url);
19247
- if (hasRNXConfig(config)) {
19248
- parsed.searchParams.set(RNX_CONFIG_QUERY_PARAM, JSON.stringify(config));
19271
+ if (hasPeachConfig(config)) {
19272
+ parsed.searchParams.set(PEACH_CONFIG_QUERY_PARAM, JSON.stringify(config));
19249
19273
  } else {
19250
- parsed.searchParams.delete(RNX_CONFIG_QUERY_PARAM);
19274
+ parsed.searchParams.delete(PEACH_CONFIG_QUERY_PARAM);
19251
19275
  }
19252
19276
  return parsed.toString();
19253
19277
  }
19254
- var RNX_CONFIG_QUERY_PARAM;
19278
+ var PEACH_CONFIG_QUERY_PARAM;
19255
19279
  var init_config = __esm({
19256
19280
  "src/config.ts"() {
19257
19281
  "use strict";
19258
- RNX_CONFIG_QUERY_PARAM = "rnxConfig";
19282
+ PEACH_CONFIG_QUERY_PARAM = "peachConfig";
19259
19283
  }
19260
19284
  });
19261
19285
 
@@ -20028,7 +20052,7 @@ function withRuntimeConfig(port, bundleUrl, projectCwd) {
20028
20052
  }) : [];
20029
20053
  const exactKnownApps = knownApps.filter((app) => app.preferredPort === port);
20030
20054
  const knownApp = exactKnownApps.length === 1 ? exactKnownApps[0] : exactKnownApps.length === 0 && knownApps.length === 1 ? knownApps[0] : void 0;
20031
- const configured = knownApp?.runtimeConfig ? applyRNXConfigToUrl(bundleUrl, knownApp.runtimeConfig) : bundleUrl;
20055
+ const configured = knownApp?.runtimeConfig ? applyPeachConfigToUrl(bundleUrl, knownApp.runtimeConfig) : bundleUrl;
20032
20056
  return normalizeNativeDevBundleUrl(configured);
20033
20057
  }
20034
20058
  function isDirectOneBundleUrl(bundleUrl) {
@@ -20416,12 +20440,12 @@ var init_dev_server_scanner = __esm({
20416
20440
  "scripts/dev-server-scanner.ts"() {
20417
20441
  "use strict";
20418
20442
  import_child_process = require("child_process");
20419
- init_process_group();
20420
20443
  import_promises2 = require("fs/promises");
20421
20444
  import_http = __toESM(require("http"), 1);
20422
20445
  import_net = __toESM(require("net"), 1);
20423
20446
  import_node_fs2 = require("node:fs");
20424
20447
  import_node_path3 = require("node:path");
20448
+ init_process_group();
20425
20449
  init_backend_origin();
20426
20450
  init_config();
20427
20451
  init_native_dev_bundle_url();
@@ -24064,7 +24088,7 @@ function isContrastKitSpecifier(specifier) {
24064
24088
  }
24065
24089
  function unsupportedSpecifier(specifier) {
24066
24090
  return new Error(
24067
- `replacement modules may only import react, react-native, contrast-kit, and the packages rnx stubs for this app; '${specifier}' is none of those. vendor the code into the replacement file, or add the package to rnx.config so the simulator bridges it.`
24091
+ `replacement modules may only import react, react-native, contrast-kit, and the packages rnx stubs for this app; '${specifier}' is none of those. vendor the code into the replacement file, or add the package to peach.config so the simulator bridges it.`
24068
24092
  );
24069
24093
  }
24070
24094
  function bridgeDeclaration(name2, specifier) {
@@ -32782,7 +32806,7 @@ function findExpoAppConfig(dir) {
32782
32806
  return firstNamedFile(dir, EXPO_APP_CONFIG_NAMES);
32783
32807
  }
32784
32808
  function findRNXAppConfig(dir) {
32785
- return firstNamedFile(dir, RNX_APP_CONFIG_NAMES);
32809
+ return firstNamedFile(dir, PEACH_APP_CONFIG_NAMES);
32786
32810
  }
32787
32811
  function resolveAppProject(projectRoot) {
32788
32812
  const appDir = import_node_path23.default.resolve(projectRoot);
@@ -32797,7 +32821,7 @@ function resolveAppProject(projectRoot) {
32797
32821
  }
32798
32822
  return { appDir, configPath };
32799
32823
  }
32800
- var import_node_fs22, import_node_path23, EXPO_APP_CONFIG_NAMES, RNX_APP_CONFIG_NAMES;
32824
+ var import_node_fs22, import_node_path23, EXPO_APP_CONFIG_NAMES, PEACH_APP_CONFIG_NAMES;
32801
32825
  var init_app_project = __esm({
32802
32826
  "cli/app-project.ts"() {
32803
32827
  "use strict";
@@ -32810,11 +32834,11 @@ var init_app_project = __esm({
32810
32834
  "app.config.mjs",
32811
32835
  "app.json"
32812
32836
  ];
32813
- RNX_APP_CONFIG_NAMES = [
32814
- "rnx.config.ts",
32815
- "rnx.config.js",
32816
- "rnx.config.mjs",
32817
- "rnx.config.cjs"
32837
+ PEACH_APP_CONFIG_NAMES = [
32838
+ "peach.config.ts",
32839
+ "peach.config.js",
32840
+ "peach.config.mjs",
32841
+ "peach.config.cjs"
32818
32842
  ];
32819
32843
  }
32820
32844
  });
@@ -32823,7 +32847,7 @@ var init_app_project = __esm({
32823
32847
  function isOptionalRecord(value) {
32824
32848
  return value === void 0 || value !== null && typeof value === "object" && !Array.isArray(value);
32825
32849
  }
32826
- function isRNXConfig(value) {
32850
+ function isPeachConfig(value) {
32827
32851
  if (!value || typeof value !== "object" || Array.isArray(value)) return false;
32828
32852
  const runtimeVersion = Reflect.get(value, "runtimeVersion");
32829
32853
  const network = Reflect.get(value, "network");
@@ -32854,7 +32878,7 @@ async function loadRNXAppConfig(project) {
32854
32878
  }
32855
32879
  });
32856
32880
  const loaded = await jiti.import(project.configPath, { default: true });
32857
- if (!isRNXConfig(loaded)) {
32881
+ if (!isPeachConfig(loaded)) {
32858
32882
  throw new Error("the default export must be a peach config object");
32859
32883
  }
32860
32884
  return resolveConfigReplacementFiles(loaded, project.configPath);
@@ -35722,9 +35746,9 @@ async function resolveShellUrl(target, baseUrl, opts = {}) {
35722
35746
  if (looksLikeSootsimUrl(target)) {
35723
35747
  const url = new URL(target);
35724
35748
  const base = new URL(baseUrl);
35725
- const baseConfig = base.searchParams.get(RNX_CONFIG_QUERY_PARAM);
35726
- if (baseConfig && !url.searchParams.has(RNX_CONFIG_QUERY_PARAM)) {
35727
- url.searchParams.set(RNX_CONFIG_QUERY_PARAM, baseConfig);
35749
+ const baseConfig = base.searchParams.get(PEACH_CONFIG_QUERY_PARAM);
35750
+ if (baseConfig && !url.searchParams.has(PEACH_CONFIG_QUERY_PARAM)) {
35751
+ url.searchParams.set(PEACH_CONFIG_QUERY_PARAM, baseConfig);
35728
35752
  }
35729
35753
  return url.toString();
35730
35754
  }
@@ -36071,16 +36095,16 @@ function printOpenedSim(openUrl2, sim, mode, quiet = false) {
36071
36095
  try {
36072
36096
  const parsed = new URL(value);
36073
36097
  let changed = false;
36074
- if (parsed.searchParams.has(RNX_CONFIG_QUERY_PARAM)) {
36075
- parsed.searchParams.set(RNX_CONFIG_QUERY_PARAM, "[redacted]");
36098
+ if (parsed.searchParams.has(PEACH_CONFIG_QUERY_PARAM)) {
36099
+ parsed.searchParams.set(PEACH_CONFIG_QUERY_PARAM, "[redacted]");
36076
36100
  changed = true;
36077
36101
  }
36078
36102
  const bundle = parsed.searchParams.get("bundle");
36079
36103
  if (bundle) {
36080
36104
  try {
36081
36105
  const parsedBundle = new URL(bundle);
36082
- if (parsedBundle.searchParams.has(RNX_CONFIG_QUERY_PARAM)) {
36083
- parsedBundle.searchParams.set(RNX_CONFIG_QUERY_PARAM, "[redacted]");
36106
+ if (parsedBundle.searchParams.has(PEACH_CONFIG_QUERY_PARAM)) {
36107
+ parsedBundle.searchParams.set(PEACH_CONFIG_QUERY_PARAM, "[redacted]");
36084
36108
  parsed.searchParams.set("bundle", parsedBundle.toString());
36085
36109
  changed = true;
36086
36110
  }
@@ -36319,8 +36343,8 @@ async function runOpenCommand(args, opts = {}) {
36319
36343
  const project = await resolveAppProjectForBundleUrl(resolvedBundle?.bundleUrl);
36320
36344
  const appConfig = await loadRNXAppConfig(project);
36321
36345
  const configuredRuntimeVersion = appConfig?.runtimeVersion;
36322
- const runtimeConfig = mergeRNXConfig(
36323
- mergeRNXConfig(
36346
+ const runtimeConfig = mergePeachConfig(
36347
+ mergePeachConfig(
36324
36348
  appConfig ? { ...appConfig, runtimeVersion: void 0 } : void 0,
36325
36349
  opts.runtimeConfig
36326
36350
  ),
@@ -36493,7 +36517,7 @@ async function runOpenCommand(args, opts = {}) {
36493
36517
  if (!targetSim && parsed.simIdSource !== "flag") {
36494
36518
  targetShellUrl = await buildShellUrl(
36495
36519
  target,
36496
- applyRNXConfigToUrl(baseUrl, runtimeConfig),
36520
+ applyPeachConfigToUrl(baseUrl, runtimeConfig),
36497
36521
  buildShellUrlOpts
36498
36522
  );
36499
36523
  const normalizedTarget = new URL(targetShellUrl);
@@ -36522,7 +36546,7 @@ async function runOpenCommand(args, opts = {}) {
36522
36546
  const resolvedBaseUrl = hasExplicitBaseUrl || looksLikeSootsimUrl(target) ? baseUrl : deriveCurrentSimBaseUrl(targetSim, baseUrl);
36523
36547
  navigatedShellUrl = targetShellUrl ?? await buildShellUrl(
36524
36548
  target,
36525
- applyRNXConfigToUrl(resolvedBaseUrl, runtimeConfig),
36549
+ applyPeachConfigToUrl(resolvedBaseUrl, runtimeConfig),
36526
36550
  buildShellUrlOpts
36527
36551
  );
36528
36552
  const navigationUrl = new URL(navigatedShellUrl);
@@ -36597,7 +36621,7 @@ async function runOpenCommand(args, opts = {}) {
36597
36621
  bridge.close();
36598
36622
  }
36599
36623
  }
36600
- const configuredBaseUrl = applyRNXConfigToUrl(baseUrl, runtimeConfig);
36624
+ const configuredBaseUrl = applyPeachConfigToUrl(baseUrl, runtimeConfig);
36601
36625
  const openUrl2 = await buildOpenUrl(target, configuredBaseUrl, token, buildShellUrlOpts);
36602
36626
  const ownerPid = opts.ownerPid ?? getStableOwnerPid();
36603
36627
  if (!ownerPid) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.656 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.656 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/swift-compile.ts
4
4
  import { execFile as execFile2 } from "node:child_process";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.656 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.656 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/swift-package.ts
4
4
  function isSwiftManifestFile(file) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.656 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.656 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/swift-submit.ts
4
4
  var SWIFT_COMPILE_PATH = "/api/swift-compile";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.656 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.656 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.657 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.656 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.657 | (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;
@@ -318,7 +318,7 @@ function isContrastKitSpecifier(specifier) {
318
318
  }
319
319
  function unsupportedSpecifier(specifier) {
320
320
  return new Error(
321
- `replacement modules may only import react, react-native, contrast-kit, and the packages rnx stubs for this app; '${specifier}' is none of those. vendor the code into the replacement file, or add the package to rnx.config so the simulator bridges it.`
321
+ `replacement modules may only import react, react-native, contrast-kit, and the packages rnx stubs for this app; '${specifier}' is none of those. vendor the code into the replacement file, or add the package to peach.config so the simulator bridges it.`
322
322
  );
323
323
  }
324
324
  function bridgeDeclaration(name, specifier) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peachsim",
3
- "version": "0.1.656",
3
+ "version": "0.1.657",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for peach.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -14,19 +14,19 @@
14
14
  // pid changes. before any HTTP, a TCP connect gate skips unreachable ports.
15
15
 
16
16
  import { spawn } from 'child_process'
17
- import { terminateProcessGroup } from '../../contrast/src/runtime/process-group'
18
17
  import { readlink } from 'fs/promises'
19
18
  import http from 'http'
20
19
  import net from 'net'
21
20
  import { realpathSync } from 'node:fs'
22
21
  import { resolve } from 'node:path'
22
+ import { terminateProcessGroup } from '../../contrast/src/runtime/process-group'
23
23
  import {
24
24
  buildLoopbackProbeBaseUrl,
25
25
  isLoopbackHost,
26
26
  LOOPBACK_PROBE_HOSTNAMES,
27
27
  normalizeHostname,
28
28
  } from '../src/backend-origin.ts'
29
- import { applyRNXConfigToUrl } from '../src/config.ts'
29
+ import { applyPeachConfigToUrl } from '../src/config.ts'
30
30
  import {
31
31
  alignLoopbackBundleUrlWithProbe,
32
32
  normalizeNativeDevBundleUrl,
@@ -611,7 +611,7 @@ function withRuntimeConfig(port: number, bundleUrl: string, projectCwd?: string)
611
611
  ? knownApps[0]
612
612
  : undefined
613
613
  const configured = knownApp?.runtimeConfig
614
- ? applyRNXConfigToUrl(bundleUrl, knownApp.runtimeConfig)
614
+ ? applyPeachConfigToUrl(bundleUrl, knownApp.runtimeConfig)
615
615
  : bundleUrl
616
616
  return normalizeNativeDevBundleUrl(configured)
617
617
  }
@@ -63,7 +63,7 @@ export interface OptionalDemoApp {
63
63
  dir: string
64
64
  preferredPort: number
65
65
  framework: 'expo' | 'one' | 'rock'
66
- runtimeConfig?: import('../src/config.ts').RNXConfig
66
+ runtimeConfig?: import('../src/config.ts').PeachConfig
67
67
  }
68
68
 
69
69
  let cached: OptionalDemoApp[] | null = null