peachsim 0.1.896 → 0.1.898

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 (86) hide show
  1. package/README.md +8 -3
  2. package/cli/commands/control.ts +22 -17
  3. package/cli/drivers/playwright-sim-host.ts +5 -1
  4. package/dist-lib/agent-daemon-client.cjs +1 -1
  5. package/dist-lib/agent-events.cjs +1 -1
  6. package/dist-lib/agent-identity.cjs +1 -1
  7. package/dist-lib/agent-sessions.cjs +1 -1
  8. package/dist-lib/attached-projects.cjs +1 -1
  9. package/dist-lib/auth/shared-session.cjs +1 -1
  10. package/dist-lib/backend-origin.cjs +1 -1
  11. package/dist-lib/beta.cjs +1 -1
  12. package/dist-lib/beta.mjs +1 -1
  13. package/dist-lib/bridge-constants.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.cjs +1 -1
  15. package/dist-lib/bridge-contract-input.mjs +1 -1
  16. package/dist-lib/bridge-contract.cjs +1 -1
  17. package/dist-lib/bridge-contract.mjs +1 -1
  18. package/dist-lib/bundle-channel.cjs +1 -1
  19. package/dist-lib/capture-contract.cjs +1 -1
  20. package/dist-lib/capture-contract.mjs +1 -1
  21. package/dist-lib/cli-constants.cjs +1 -1
  22. package/dist-lib/cloud-contract.cjs +1 -1
  23. package/dist-lib/cloud-contract.mjs +1 -1
  24. package/dist-lib/cloud-test-args.cjs +1 -1
  25. package/dist-lib/cloud-test-args.mjs +1 -1
  26. package/dist-lib/cloud.cjs +1 -1
  27. package/dist-lib/cloud.mjs +1 -1
  28. package/dist-lib/config.cjs +1 -1
  29. package/dist-lib/detox/index.cjs +1 -1
  30. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  31. package/dist-lib/expo-swift-bundle.cjs +1 -1
  32. package/dist-lib/expo-swift-metadata.cjs +1 -1
  33. package/dist-lib/expo-swift-metadata.mjs +1 -1
  34. package/dist-lib/home-paths.cjs +1 -1
  35. package/dist-lib/host/bridge-host.cjs +1 -1
  36. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  37. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  38. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  39. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  40. package/dist-lib/host/websocket-proxy.cjs +1 -1
  41. package/dist-lib/index.cjs +1 -1
  42. package/dist-lib/jump-to-source-babel.cjs +1 -1
  43. package/dist-lib/jump-to-source-native.cjs +1 -1
  44. package/dist-lib/kotlin-host.cjs +1 -1
  45. package/dist-lib/menu.cjs +1 -1
  46. package/dist-lib/menu.mjs +1 -1
  47. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  48. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  49. package/dist-lib/metro-production-bundle.cjs +1 -1
  50. package/dist-lib/metro-production-bundle.mjs +1 -1
  51. package/dist-lib/metro.cjs +1 -1
  52. package/dist-lib/native-app-identity.cjs +1 -1
  53. package/dist-lib/native-app-identity.mjs +1 -1
  54. package/dist-lib/native-firebase-metadata.cjs +1 -1
  55. package/dist-lib/native-firebase-metadata.mjs +1 -1
  56. package/dist-lib/plist.cjs +1 -1
  57. package/dist-lib/plist.mjs +1 -1
  58. package/dist-lib/profiles.cjs +1 -1
  59. package/dist-lib/public-brand.cjs +1 -1
  60. package/dist-lib/react-native-host-modules.cjs +1 -1
  61. package/dist-lib/react-native-host-modules.mjs +1 -1
  62. package/dist-lib/render-mode.cjs +1 -1
  63. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  64. package/dist-lib/sdk.cjs +1 -1
  65. package/dist-lib/sdk.mjs +1 -1
  66. package/dist-lib/skills.cjs +19 -19
  67. package/dist-lib/swift-compile.cjs +1 -1
  68. package/dist-lib/swift-compile.mjs +1 -1
  69. package/dist-lib/swift-package.cjs +1 -1
  70. package/dist-lib/swift-package.mjs +1 -1
  71. package/dist-lib/swift-submit.cjs +1 -1
  72. package/dist-lib/swift-submit.mjs +1 -1
  73. package/dist-lib/swift-toolchain.cjs +1 -1
  74. package/dist-lib/swift.cjs +1 -1
  75. package/dist-lib/vite-swift.cjs +1 -1
  76. package/dist-lib/vite.cjs +1 -1
  77. package/dist-lib/worklet-executable.cjs +1 -1
  78. package/dist-lib/worklet-executable.mjs +1 -1
  79. package/kotlin/fork/NOTICE +6 -1
  80. package/kotlin/fork/README.md +8 -3
  81. package/kotlin/fork/build.sh +24 -0
  82. package/kotlin/fork/fork.json +6 -2
  83. package/kotlin/fork/skia-android-shaping.patch +16 -1
  84. package/kotlin/fork/skiko-worker-clock.patch +27 -5
  85. package/kotlin/toolchain.json +3 -3
  86. package/package.json +1 -1
package/README.md CHANGED
@@ -153,13 +153,18 @@ exactly one command module per run. Bare `peach` opens ConnectRN, whose simulato
153
153
  running React Native development servers. The first human run offers the
154
154
  recommended background service and optional Desktop app, then opens the simulator
155
155
  before asking about private diagnostics or an optional repository install. `peach open`
156
- ensures the engine runtime exists and starts a local foreground bridge when no
157
- daemon is reachable, then opens a `WsBridge` (`cli/ws-bridge.ts`) on **port
156
+ ensures the engine runtime exists when the bridge supplies the shell and starts
157
+ a local foreground bridge when no daemon is reachable, then opens a `WsBridge`
158
+ (`cli/ws-bridge.ts`) on **port
158
159
  7668** and sends JSON commands. Inspection/interaction verbs live in
159
160
  `cli/commands/inspect/*` and are re-exported as the programmatic `peachsim/sdk`;
160
161
  the Maestro runner is `cli/bridge-flow-runner.ts`; the Detox compat driver
161
162
  is in `detox/`. Test and screenshot paths additionally use `cli/drivers/*`.
162
- Browser sims launch in an isolated Playwright Chrome for Testing profile;
163
+ Browser sims launch in an isolated Playwright Chrome for Testing profile.
164
+ An explicit `--base-url` keeps that shell's origin and uses its assets without
165
+ installing an active runtime. A bridge started for that shell skips automatic
166
+ runtime updates. An app's configured `runtimeVersion` still selects its installed,
167
+ version-owned bridge origin.
163
168
  Electron is the native desktop surface. Team Machine sessions (`TM_SESSION`)
164
169
  default to headless Playwright; `--headed` explicitly opens an isolated headed
165
170
  browser. System browser launches, including share links, login, box links and
@@ -205,12 +205,12 @@ export async function ensureBridgeForOpen(
205
205
  preferredPort: number,
206
206
  explicitPort = false,
207
207
  resources?: OpenCommandResources,
208
+ runtimeSource: 'bridge' | 'external' = 'bridge',
208
209
  ): Promise<number> {
209
210
  const lock = readDaemonLockfile()
210
211
  assertExplicitBridgeLock(preferredPort, explicitPort, lock)
211
- // a bridge that is already running (`peach serve`, the daemon) serves the
212
- // active runtime but never installs one, so open installs it either way.
213
- await ensureRuntimeForOpen()
212
+ // an explicit shell origin owns its assets; the bridge only routes commands.
213
+ if (runtimeSource === 'bridge') await ensureRuntimeForOpen()
214
214
  const preferredWorld = worldForBridgePort(preferredPort)
215
215
  // a closed port refuses at once, so this window only matters when something
216
216
  // listens: a live bridge on a loaded machine can take longer than 250 ms to
@@ -240,7 +240,20 @@ export async function ensureBridgeForOpen(
240
240
  )
241
241
  }
242
242
 
243
- const child = spawnSootsim(['serve', '--quiet', '--port', String(preferredPort)])
243
+ const { executable, prefixArgs } = rnxSelfInvocation()
244
+ const child = spawn(
245
+ executable,
246
+ [...prefixArgs, 'serve', '--quiet', '--port', String(preferredPort)],
247
+ {
248
+ detached: true,
249
+ stdio: 'ignore',
250
+ // this bridge does not supply the shell, so it needs no runtime updates.
251
+ env:
252
+ runtimeSource === 'external'
253
+ ? { ...process.env, PEACH_UPDATE_CHECK: 'off' }
254
+ : process.env,
255
+ },
256
+ )
244
257
  if (resources) {
245
258
  resources.bridge = child
246
259
  resources.port = preferredPort
@@ -333,15 +346,6 @@ async function ensureRuntimeForOpen() {
333
346
  await runRuntime(['install'], {})
334
347
  }
335
348
 
336
- function spawnSootsim(args: string[]) {
337
- const { executable, prefixArgs } = rnxSelfInvocation()
338
- return spawn(executable, [...prefixArgs, ...args], {
339
- detached: true,
340
- stdio: 'ignore',
341
- env: process.env,
342
- })
343
- }
344
-
345
349
  function canConnectToBridge(port: number, timeoutMs: number): Promise<boolean> {
346
350
  return new Promise((resolve) => {
347
351
  const ws = new WebSocket(`ws://127.0.0.1:${port}`, { handshakeTimeout: timeoutMs })
@@ -1713,6 +1717,7 @@ export async function runOpenCommand(
1713
1717
  parsed.wsPort,
1714
1718
  parsed.explicitPort,
1715
1719
  opts.resources,
1720
+ explicitBaseUrl && !configuredRuntimeVersion ? 'external' : 'bridge',
1716
1721
  )
1717
1722
  if (opts.resources) opts.resources.port = parsed.wsPort
1718
1723
  opts.signal?.throwIfAborted()
@@ -1889,10 +1894,10 @@ export async function runOpenCommand(
1889
1894
  const selectedShellBaseUrl = configuredRuntimeVersion
1890
1895
  ? `http://localhost:${parsed.wsPort}/`
1891
1896
  : explicitBaseUrl || resolveShellBaseUrlForBridgePort(parsed.wsPort)
1892
- const baseUrl = applyRuntimeGenerationOrigin(
1893
- selectedShellBaseUrl,
1894
- configuredRuntimeVersion,
1895
- )
1897
+ const baseUrl =
1898
+ explicitBaseUrl && !configuredRuntimeVersion
1899
+ ? selectedShellBaseUrl
1900
+ : applyRuntimeGenerationOrigin(selectedShellBaseUrl, configuredRuntimeVersion)
1896
1901
  const hasExplicitBaseUrl = args.includes('--base-url')
1897
1902
  printBridgeWorldNotice(parsed.wsPort, baseUrl)
1898
1903
  const savedSimId = readCurrentSimId()
@@ -149,7 +149,10 @@ const chromePidsByProfile = () => {
149
149
  // match the whole --user-data-dir argument: a pattern search also found
150
150
  // browsers whose profile path merely starts with this one.
151
151
  const flag = ' --user-data-dir=' + profileDir + ' ';
152
- return execSync('ps -axo pid=,command=', { stdio: ['ignore', 'pipe', 'ignore'] })
152
+ return execSync('ps -axo pid=,command=', {
153
+ stdio: ['ignore', 'pipe', 'ignore'],
154
+ maxBuffer: Infinity,
155
+ })
153
156
  .toString().split('\\n').map((line) => line.trim().match(/^(\\d+)\\s+(.*)$/))
154
157
  .filter((row) => row && (' ' + row[2] + ' ').includes(flag))
155
158
  .map((row) => Number(row[1]))
@@ -163,6 +166,7 @@ const chromeCommandsByProfile = () => {
163
166
  try {
164
167
  return execSync('ps -p ' + pids.join(',') + ' -o command=', {
165
168
  stdio: ['ignore', 'pipe', 'ignore'],
169
+ maxBuffer: Infinity,
166
170
  }).toString().split('\\n').filter(Boolean);
167
171
  } catch { return []; }
168
172
  };
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_MAX_MS = 5e3;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var REFUSED_PERFORM_STEP_TYPES = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/capture-contract.ts
4
4
  var RNX_SCREEN_CAPTURE_VERSION = 1;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/cloud-contract.ts
4
4
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 20 * 1024 * 1024;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/cloud-test-args.ts
4
4
  var CLOUD_TEST_ARGS_MAX_COUNT = 32;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/expoSwiftContract.ts
4
4
  function record(value) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
4
  var FETCH_PROXY_NATIVE_USER_AGENT_HEADER = "x-sootsim-native-user-agent";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/public-brand.ts
4
4
  var name = "Peach";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/is-record.ts
4
4
  function isRecord(value) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-production-bundle.ts
4
4
  var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/native-app-identity.ts
4
4
  var NATIVE_APP_IDENTITY_PREFIX = "globalThis.__sootsimNativeAppIdentity=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/native-firebase-metadata.ts
4
4
  var PREFIX = "globalThis.__peachNativeFirebaseConfig=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/plist.ts
4
4
  import plist from "plist";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/react-native-host-modules.ts
4
4
  var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -7562,8 +7562,8 @@ var init_registry = __esm({
7562
7562
  range: ">=4.0.0",
7563
7563
  coverage: 0.93,
7564
7564
  note: "native-seam only \u2014 the real 5.x Slider, StepMarker overlay, limits and defaults run from the bundle over the RNCSlider component view (engine canvas slider). drag values clamp to lower/upper limits and report through the platform event (onRNCSliderValueChange on iOS, onChange with fromUser on android); inverted mirrors like the native scaleX(-1) transform. vertical is a matched no-op (unread by iOS and android upstream).",
7565
- working: "real upstream Slider JS from the bundle, value, minimumValue, maximumValue, step, onValueChange, onSlidingStart, onSlidingComplete, disabled (including accessibilityState derivation), inverted, minimumTrackTintColor, maximumTrackTintColor, thumbTintColor, lowerLimit, upperLimit, testID, StepMarker, renderStepNumber",
7566
- missing: "thumbImage / minimumTrackImage / maximumTrackImage / trackImage / thumbSize custom visuals, tapToSeek tap-vs-ignore switch (the engine control has one tap behaviour), VoiceOver directional step rounding"
7565
+ working: "real upstream Slider JS from the bundle, value, minimumValue, maximumValue, step, onValueChange, onSlidingStart, onSlidingComplete, disabled (including accessibilityState derivation), inverted, minimumTrackTintColor, maximumTrackTintColor, thumbTintColor, lowerLimit, upperLimit, tapToSeek on iOS, testID, StepMarker, renderStepNumber",
7566
+ missing: "thumbImage / minimumTrackImage / maximumTrackImage / trackImage / thumbSize custom visuals, VoiceOver directional step rounding"
7567
7567
  }
7568
7568
  ]
7569
7569
  },
@@ -53593,10 +53593,10 @@ function resolveDriverHeadless(args, driverId) {
53593
53593
  function normalizeKnownTarget(target) {
53594
53594
  return target.trim();
53595
53595
  }
53596
- async function ensureBridgeForOpen(preferredPort, explicitPort = false, resources) {
53596
+ async function ensureBridgeForOpen(preferredPort, explicitPort = false, resources, runtimeSource = "bridge") {
53597
53597
  const lock = readDaemonLockfile();
53598
53598
  assertExplicitBridgeLock(preferredPort, explicitPort, lock);
53599
- await ensureRuntimeForOpen();
53599
+ if (runtimeSource === "bridge") await ensureRuntimeForOpen();
53600
53600
  const preferredWorld = worldForBridgePort(preferredPort);
53601
53601
  if ((explicitPort || preferredWorld !== null) && await canConnectToBridge(preferredPort, 2e3)) {
53602
53602
  return preferredPort;
@@ -53614,7 +53614,17 @@ async function ensureBridgeForOpen(preferredPort, explicitPort = false, resource
53614
53614
  `peach bridge lockfile is fresh (port ${lock.bridgePort}) but the bridge is not reachable. run \`peach daemon restart\` or \`peach daemon uninstall\`.`
53615
53615
  );
53616
53616
  }
53617
- const child = spawnSootsim(["serve", "--quiet", "--port", String(preferredPort)]);
53617
+ const { executable, prefixArgs } = rnxSelfInvocation();
53618
+ const child = (0, import_node_child_process16.spawn)(
53619
+ executable,
53620
+ [...prefixArgs, "serve", "--quiet", "--port", String(preferredPort)],
53621
+ {
53622
+ detached: true,
53623
+ stdio: "ignore",
53624
+ // this bridge does not supply the shell, so it needs no runtime updates.
53625
+ env: runtimeSource === "external" ? { ...process.env, PEACH_UPDATE_CHECK: "off" } : process.env
53626
+ }
53627
+ );
53618
53628
  if (resources) {
53619
53629
  resources.bridge = child;
53620
53630
  resources.port = preferredPort;
@@ -53675,14 +53685,6 @@ async function ensureRuntimeForOpen() {
53675
53685
  const { runRuntime: runRuntime2 } = await Promise.resolve().then(() => (init_runtime(), runtime_exports));
53676
53686
  await runRuntime2(["install"], {});
53677
53687
  }
53678
- function spawnSootsim(args) {
53679
- const { executable, prefixArgs } = rnxSelfInvocation();
53680
- return (0, import_node_child_process16.spawn)(executable, [...prefixArgs, ...args], {
53681
- detached: true,
53682
- stdio: "ignore",
53683
- env: process.env
53684
- });
53685
- }
53686
53688
  function canConnectToBridge(port, timeoutMs) {
53687
53689
  return new Promise((resolve10) => {
53688
53690
  const ws = new import_ws4.WebSocket(`ws://127.0.0.1:${port}`, { handshakeTimeout: timeoutMs });
@@ -54629,7 +54631,8 @@ async function runOpenCommand(args, opts = {}) {
54629
54631
  parsed.wsPort = await ensureBridgeForOpen(
54630
54632
  parsed.wsPort,
54631
54633
  parsed.explicitPort,
54632
- opts.resources
54634
+ opts.resources,
54635
+ explicitBaseUrl && !configuredRuntimeVersion ? "external" : "bridge"
54633
54636
  );
54634
54637
  if (opts.resources) opts.resources.port = parsed.wsPort;
54635
54638
  opts.signal?.throwIfAborted();
@@ -54740,10 +54743,7 @@ async function runOpenCommand(args, opts = {}) {
54740
54743
  dotEnv
54741
54744
  };
54742
54745
  const selectedShellBaseUrl = configuredRuntimeVersion ? `http://localhost:${parsed.wsPort}/` : explicitBaseUrl || resolveShellBaseUrlForBridgePort(parsed.wsPort);
54743
- const baseUrl = applyRuntimeGenerationOrigin(
54744
- selectedShellBaseUrl,
54745
- configuredRuntimeVersion
54746
- );
54746
+ const baseUrl = explicitBaseUrl && !configuredRuntimeVersion ? selectedShellBaseUrl : applyRuntimeGenerationOrigin(selectedShellBaseUrl, configuredRuntimeVersion);
54747
54747
  const hasExplicitBaseUrl = args.includes("--base-url");
54748
54748
  printBridgeWorldNotice(parsed.wsPort, baseUrl);
54749
54749
  const savedSimId = readCurrentSimId();
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/swift-compile.ts
4
4
  import { execFile as execFile2, execFileSync } from "node:child_process";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (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.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (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.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } 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.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.896 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.898 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/worklet-executable.ts
4
4
  import { parse } from "acorn";
@@ -1,7 +1,7 @@
1
1
  Peach's patched builds of JetBrains Compose Multiplatform UI and Skiko
2
2
 
3
3
  This directory records modified Compose and Skiko builds under Apache License
4
- 2.0 (LICENSE), and modified Skia shaping and paragraph units under BSD-3-Clause (SKIA_LICENSE).
4
+ 2.0 (LICENSE), and modified Skia shaping, paragraph and raster units under BSD-3-Clause (SKIA_LICENSE).
5
5
 
6
6
  - JetBrains/compose-multiplatform-core at tag v1.13.0-alpha01
7
7
  (commit a9e47e8aa04c95cfe572ab4297c770f3cbfb234e), a fork of the Android
@@ -41,3 +41,8 @@ non-subpixel, non-linear shaping. The original run font retains its painting
41
41
  size and metrics. Run.cpp uses Android inter-glyph spacing and caret boundaries. TextLine.cpp
42
42
  trims line edges, and TextWrapper.cpp applies the same trimming before fitting
43
43
  a line. These modified Skia units compile into the Skiko Wasm runtime.
44
+
45
+ The FreeType patch preserves explicit forced autohinting and disables implicit
46
+ autohinting, matching Android. The Wasm compiler uses Android text gamma 1.4
47
+ and contrast 0; the pinned surface and FreeType units replace their archive
48
+ counterparts. FreeType headers come from the same dependency revision as Skia.
@@ -16,6 +16,7 @@ Android behavior for the approved web differences and static text shaping below.
16
16
  | Compose `ui-skiko` | `SkiaBackedPaint.nonAndroid.kt` | initial Miter join agrees with the backing paint and Android |
17
17
  | Compose `ui-skiko` | `SkikoText.nonAndroid.kt`, `SkikoParagraphBuilder.nonAndroid.kt` | Android static advances and letter-spacing scale; Animated text retains fractional shaping |
18
18
  | Skia shaper | `SkShaper_harfbuzz.cpp` | measurement-font copy truncates static shaping size; the painted run font retains the requested size |
19
+ | Skia raster | `SkFontHost_FreeType.cpp`, `SkFontHost_FreeType_common.cpp`, `SkSurface.cpp` | Android implicit autohinting policy and text gamma 1.4, contrast 0 |
19
20
  | Skia paragraph | `Run.cpp`, `TextLine.cpp`, `TextWrapper.cpp` | Android inter-glyph spacing, caret boundaries and edge trimming before line fits |
20
21
  | Compose `material3` | `PlatformDateFormat.web.kt` | timestamp formatting uses UTC, as Android does |
21
22
  | Navigation `navigation-compose` | `DefaultNavTransitions.web.kt` | Android forward fades and predictive pop defaults |
@@ -32,10 +33,12 @@ this contract.
32
33
  `fork.json` pins repositories, commits, patch hashes, JDK and Android tools.
33
34
  Every changed upstream file carries a modification notice. `LICENSE` and
34
35
  `NOTICE` travel with the patches. `SKIA_LICENSE` records the modified Skia units’ BSD license. `build.sh` builds the changed KLIBs and Skiko
35
- runtime jar with the upstream Gradle builds on the Linux builder. The Skia shaping and paragraph
36
+ runtime jar with the upstream Gradle builds on the Linux builder. The Skia shaping, paragraph and raster
36
37
  units are fetched at their pinned commit, patched, and compiled into Skiko; the linker
37
38
  uses them instead of the same units in the pinned Skia archive. All other Skia
38
- objects retain their upstream build. This adds no allocation beyond the existing
39
+ objects retain their upstream build. FreeType headers match the pinned Skia DEPS revision;
40
+ the FreeType binary remains the archive version. Raster changes add no allocation
41
+ and retain the existing A8 preblend path. This adds no allocation beyond the existing
39
42
  measurement-font copy, and truncates once per shaped font, outside the glyph loop.
40
43
  Paragraph spacing adds constant arithmetic per glyph or cluster; line fits trim
41
44
  the same edge half-spaces as completed lines, without allocation.
@@ -70,6 +73,8 @@ upstream issue names these hooks and the full guest regression vehicle.
70
73
  The static shaping correction is measured against the original `textwidth`
71
74
  fixture. The six original widths, twelve spacing assertions and the 162/164 px
72
75
  wrapping threshold pass their paired Android controls. The body Range probe
73
- retains its existing 0.00098 px difference. Pixel residuals, mixed-font bold
76
+ retains its existing 0.00098 px difference. The original plain Month raster rows pass the strict 16/255 comparison in
77
+ the actual Kotlin app; the old frame fails the retained raster check. Other
78
+ pixel residuals, mixed-font bold
74
79
  advances, the primary caret at a style boundary and Animated whole-width rounding
75
80
  remain open in the lane plan. These corrections do not certify full text parity.
@@ -129,6 +129,30 @@ rsync -a --include='*/' --include='*.h' --exclude='*' "${SOURCE}/src/" "${SKIKO_
129
129
  cp "${SOURCE}/modules/skparagraph/src/Run.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidParagraphRun.cpp"
130
130
  cp "${SOURCE}/modules/skparagraph/src/TextLine.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidParagraphTextLine.cpp"
131
131
  cp "${SOURCE}/modules/skparagraph/src/TextWrapper.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidParagraphTextWrapper.cpp"
132
+ # the raster units use the same freetype headers as the pinned skia archive.
133
+ FREETYPE_SOURCE=${ROOT}/src/freetype
134
+ FREETYPE_REPOSITORY=$(field 'f.toolchain.freetypeHeaders.repository')
135
+ FREETYPE_COMMIT=$(field 'f.toolchain.freetypeHeaders.commit')
136
+ if ! grep -Fq "${FREETYPE_REPOSITORY}@${FREETYPE_COMMIT}" "${SOURCE}/DEPS"; then
137
+ echo "freetype headers differ from the pinned skia dependency" >&2
138
+ exit 2
139
+ fi
140
+ if [[ ! -d "${FREETYPE_SOURCE}/.git" ]]; then
141
+ git init -q "${FREETYPE_SOURCE}"
142
+ git -C "${FREETYPE_SOURCE}" remote add origin "${FREETYPE_REPOSITORY}"
143
+ fi
144
+ if ! git -C "${FREETYPE_SOURCE}" cat-file -e "${FREETYPE_COMMIT}^{commit}" 2>/dev/null; then
145
+ git -C "${FREETYPE_SOURCE}" fetch -q --depth 1 origin "${FREETYPE_COMMIT}"
146
+ fi
147
+ git -C "${FREETYPE_SOURCE}" checkout -q -f --detach "${FREETYPE_COMMIT}"
148
+ if [[ $(git -C "${FREETYPE_SOURCE}" rev-parse HEAD) != "${FREETYPE_COMMIT}" ]]; then
149
+ echo "freetype headers are not at ${FREETYPE_COMMIT}" >&2
150
+ exit 2
151
+ fi
152
+ rsync -a --delete "${FREETYPE_SOURCE}/include/" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/freetype/"
153
+ cp "${SOURCE}/src/ports/SkFontHost_FreeType.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidFreeType.cpp"
154
+ cp "${SOURCE}/src/ports/SkFontHost_FreeType_common.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidFreeTypeCommon.cpp"
155
+ cp "${SOURCE}/src/image/SkSurface.cpp" "${SKIKO_SOURCE}/skiko/src/nativeJsMain/cpp/AndroidSurface.cpp"
132
156
  (
133
157
  cd "${SKIKO_SOURCE}/skiko"
134
158
  gradle -Pdeploy.version=0.152.0-alpha02 -Pdeploy.release=true \
@@ -8,6 +8,10 @@
8
8
  "androidCommandLineTools": {
9
9
  "url": "https://dl.google.com/android/repository/commandlinetools-linux-16111833_latest.zip",
10
10
  "sha256": "0877a1d048fe4a24efe2eff536ca4223f7adeb58648bb81909d33c446918cfa8"
11
+ },
12
+ "freetypeHeaders": {
13
+ "repository": "https://chromium.googlesource.com/chromium/src/third_party/freetype2.git",
14
+ "commit": "264b5fbf5b912b39f98d038bf75d39be0a73f21b"
11
15
  }
12
16
  },
13
17
  "upstreams": [
@@ -27,7 +31,7 @@
27
31
  "tag": "v0.152.0-alpha02",
28
32
  "commit": "96378296bb23c23c5f30cd2b0d42d6f8fdeff730",
29
33
  "patch": "skiko-worker-clock.patch",
30
- "patchSha256": "735a42f7a9d3be1ab288f4d67bef44924ec2b6bbcd59f5a5f76edf22f912c347"
34
+ "patchSha256": "44b38c49b9f8d860573ec43d54d7ce74c0ad36da59100ec482b46953d9d6ef81"
31
35
  },
32
36
  {
33
37
  "name": "skia",
@@ -36,7 +40,7 @@
36
40
  "tag": "m152-2ca5fe6a81",
37
41
  "commit": "2ca5fe6a8170e2f55f519d9de083be4dccc06e70",
38
42
  "patch": "skia-android-shaping.patch",
39
- "patchSha256": "4e453826e54c1fcaf0e164b5e2ff121399c4316b18653911e1d6b51df840f100"
43
+ "patchSha256": "b6293707ff832c77fa6016d7d1e469b7e3d24e31b7af7d70cdfb5ee1bc68ba7f"
40
44
  }
41
45
  ]
42
46
  }
@@ -102,7 +102,7 @@ diff --git a/modules/skparagraph/src/TextLine.cpp b/modules/skparagraph/src/Text
102
102
  +++ b/modules/skparagraph/src/TextWrapper.cpp
103
103
  @@ -58,12 +58,19 @@
104
104
  fClip.startFrom(fEndLine.startCluster(), fEndLine.startPos());
105
-
105
+
106
106
  LineBreakerWithLittleRounding breaker(maxWidth, applyRoundingHack);
107
107
  + // modified for the Android host: fit the same trimmed edges as TextLine.
108
108
  + const auto lineWidth = [endOfClusters](SkScalar width, const Cluster* first, const Cluster* last) {
@@ -142,3 +142,18 @@ diff --git a/modules/skparagraph/src/TextLine.cpp b/modules/skparagraph/src/Text
142
142
  if (nextWordLength > maxWidth) {
143
143
  if (nextNonBreakingSpace != nullptr) {
144
144
  // We only get here if the non-breaking space improves our situation
145
+ diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
146
+ --- a/src/ports/SkFontHost_FreeType.cpp
147
+ +++ b/src/ports/SkFontHost_FreeType.cpp
148
+ @@ -990,10 +990,9 @@
149
+
150
+ if (fRec.fFlags & SkScalerContext::kForceAutohinting_Flag) {
151
+ loadFlags |= FT_LOAD_FORCE_AUTOHINT;
152
+ -#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
153
+ } else {
154
+ + // modified for the android host: disable implicit autohinting.
155
+ loadFlags |= FT_LOAD_NO_AUTOHINT;
156
+ -#endif
157
+ }
158
+
159
+ if ((fRec.fFlags & SkScalerContext::kEmbeddedBitmapText_Flag) == 0) {
@@ -9,27 +9,27 @@ index 366ed37..d56c267 100644
9
9
  +// the patch and upstream revision.
10
10
  +
11
11
  package org.jetbrains.skiko
12
-
12
+
13
13
  import org.w3c.dom.HTMLElement
14
14
  @@ -5,7 +10,7 @@ import org.w3c.dom.HTMLElement
15
15
  internal actual inline fun <R> maybeSynchronized(lock: Any, block: () -> R): R =
16
16
  block()
17
-
17
+
18
18
  -actual fun currentNanoTime(): Long = currentNanoTimeWindowPerformance().toLong()
19
19
  +actual fun currentNanoTime(): Long = currentNanoTimePerformance().toLong()
20
-
20
+
21
21
  internal actual fun loadOpenGLLibrary() {
22
22
  // Nothing to do here
23
23
  @@ -15,8 +20,8 @@ internal actual fun loadAngleLibrary() {
24
24
  // Nothing to do here
25
25
  }
26
-
26
+
27
27
  -private fun currentNanoTimeWindowPerformance() : Double =
28
28
  +private fun currentNanoTimePerformance() : Double =
29
29
  //language=JavaScript
30
30
  - js("window.performance.now() * 1000000")
31
31
  + js("globalThis.performance.now() * 1000000")
32
-
32
+
33
33
  annotation class WebImport(val name : String)
34
34
  diff --git a/skiko/buildSrc/src/main/kotlin/OptimizeSkikoWasmTask.kt b/skiko/buildSrc/src/main/kotlin/OptimizeSkikoWasmTask.kt
35
35
  --- a/skiko/buildSrc/src/main/kotlin/OptimizeSkikoWasmTask.kt
@@ -69,3 +69,25 @@ diff --git a/skiko/src/webMain/kotlin/org/jetbrains/skiko/OsArch.web.kt b/skiko/
69
69
  -
70
70
  +
71
71
  actual val hostArch: Arch = Arch.Unknown
72
+ diff --git a/skiko/buildSrc/src/main/kotlin/tasks/configuration/WasmTasksConfiguration.kt b/skiko/buildSrc/src/main/kotlin/tasks/configuration/WasmTasksConfiguration.kt
73
+ --- a/skiko/buildSrc/src/main/kotlin/tasks/configuration/WasmTasksConfiguration.kt
74
+ +++ b/skiko/buildSrc/src/main/kotlin/tasks/configuration/WasmTasksConfiguration.kt
75
+ @@ -95,6 +95,7 @@
76
+
77
+ includeHeadersNonRecursive(project.projectDir.resolve("src/nativeJsMain/cpp"))
78
+ includeHeadersNonRecursive(project.projectDir.resolve("src/webMain/cpp"))
79
+ + includeHeadersNonRecursive(project.projectDir.resolve("src/nativeJsMain/cpp/freetype"))
80
+ includeHeadersNonRecursive(project.projectDir.resolve("src/commonMain/cpp/common/include"))
81
+ if (isSideModule) {
82
+ val coreProjectDir = project.rootProject.projectDir
83
+ @@ -106,6 +107,10 @@
84
+ flags.set(
85
+ buildList {
86
+ addAll(skiaPreprocessorFlags(OS.Wasm, buildType))
87
+ + // modified for the android host: use its text surface defaults.
88
+ + add("-USK_GAMMA_SRGB")
89
+ + add("-DSK_GAMMA_EXPONENT=1.4")
90
+ + add("-DSK_GAMMA_CONTRAST=0.0")
91
+ addAll(buildType.clangFlags)
92
+ add("-fno-rtti")
93
+ add("-fno-exceptions")
@@ -325,9 +325,9 @@
325
325
  "skiko": "0.152.0-alpha02"
326
326
  },
327
327
  "composeRuntime": {
328
- "name": "skiko-wasm-0.152.0-alpha02-peach-8b1b394f5d3b.jar",
329
- "url": "https://r2.rnxsim.com/peach-kotlin-fork/8b1b394f5d3b3ac096c966de34855cf90625b8c0322f39d18cdfc619f21816e8/skiko-wasm-0.152.0-alpha02.jar",
330
- "sha256": "8b1b394f5d3b3ac096c966de34855cf90625b8c0322f39d18cdfc619f21816e8"
328
+ "name": "skiko-wasm-0.152.0-alpha02-peach-bf4a72712ff0.jar",
329
+ "url": "https://r2.rnxsim.com/peach-kotlin-fork/bf4a72712ff0ab67c5a5d28e058f6743497545392b593111a212e95b7435a339/skiko-wasm-0.152.0-alpha02.jar",
330
+ "sha256": "bf4a72712ff0ab67c5a5d28e058f6743497545392b593111a212e95b7435a339"
331
331
  },
332
332
  "composeJsLibraries": [
333
333
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peachsim",
3
- "version": "0.1.896",
3
+ "version": "0.1.898",
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",