peachsim 0.1.650 → 0.1.652

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 (72) hide show
  1. package/README.md +6 -3
  2. package/cli/drivers/playwright-provisioning.ts +9 -5
  3. package/cli/drivers/playwright.ts +5 -1
  4. package/cli/internal-child.ts +30 -12
  5. package/cli/main.ts +6 -3
  6. package/cli/outbound-endpoints.ts +12 -0
  7. package/cli/telemetry.ts +4 -2
  8. package/dist-lib/agent-daemon-client.cjs +1 -1
  9. package/dist-lib/agent-events.cjs +1 -1
  10. package/dist-lib/agent-identity.cjs +1 -1
  11. package/dist-lib/agent-sessions.cjs +1 -1
  12. package/dist-lib/attached-projects.cjs +1 -1
  13. package/dist-lib/auth/shared-session.cjs +1 -1
  14. package/dist-lib/backend-origin.cjs +1 -1
  15. package/dist-lib/beta.cjs +1 -1
  16. package/dist-lib/beta.mjs +1 -1
  17. package/dist-lib/bridge-constants.cjs +1 -1
  18. package/dist-lib/bridge-contract-input.cjs +1 -1
  19. package/dist-lib/bridge-contract-input.mjs +1 -1
  20. package/dist-lib/bridge-contract.cjs +1 -1
  21. package/dist-lib/bridge-contract.mjs +1 -1
  22. package/dist-lib/capture-contract.cjs +1 -1
  23. package/dist-lib/capture-contract.mjs +1 -1
  24. package/dist-lib/cli-constants.cjs +1 -1
  25. package/dist-lib/cloud-contract.cjs +1 -1
  26. package/dist-lib/cloud-contract.mjs +1 -1
  27. package/dist-lib/cloud-test-args.cjs +1 -1
  28. package/dist-lib/cloud-test-args.mjs +1 -1
  29. package/dist-lib/cloud.cjs +1 -1
  30. package/dist-lib/cloud.mjs +1 -1
  31. package/dist-lib/config.cjs +1 -1
  32. package/dist-lib/detox/index.cjs +1 -1
  33. package/dist-lib/dev-bundle-resolution.cjs +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/profiles.cjs +1 -1
  55. package/dist-lib/public-brand.cjs +1 -1
  56. package/dist-lib/react-native-host-modules.cjs +1 -1
  57. package/dist-lib/react-native-host-modules.mjs +1 -1
  58. package/dist-lib/render-mode.cjs +1 -1
  59. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  60. package/dist-lib/sdk.cjs +1 -1
  61. package/dist-lib/sdk.mjs +1 -1
  62. package/dist-lib/skills.cjs +17 -9
  63. package/dist-lib/swift-compile.cjs +1 -1
  64. package/dist-lib/swift-compile.mjs +1 -1
  65. package/dist-lib/swift-package.cjs +1 -1
  66. package/dist-lib/swift-package.mjs +1 -1
  67. package/dist-lib/swift-submit.cjs +1 -1
  68. package/dist-lib/swift-submit.mjs +1 -1
  69. package/dist-lib/swift.cjs +1 -1
  70. package/dist-lib/vite-swift.cjs +1 -1
  71. package/dist-lib/vite.cjs +1 -1
  72. package/package.json +1 -1
package/README.md CHANGED
@@ -238,9 +238,12 @@ The first `peach open` launches an isolated Chrome for Testing sim. The CLI
238
238
  resolves Playwright from the current directory or beside its executable and
239
239
  launches the newest installed Chromium revision in its browser cache, honoring
240
240
  `PLAYWRIGHT_BROWSERS_PATH`. Set `PEACH_CHROMIUM_EXECUTABLE` to an existing
241
- executable to select a binary explicitly. Headless and headed launches use that
242
- same binary. When no installed browser is available, the CLI runs the resolved
243
- Playwright core's absolute installer entry. Later opens reuse that sim and
241
+ executable to select a binary explicitly. Headless launches on Linux and
242
+ Windows use Playwright's Chromium headless shell instead: the same build and
243
+ software renderer without the desktop browser's printing and service discovery
244
+ libraries (`libcups2`, `libavahi-client3`). Headed launches and every launch on
245
+ a Mac use full Chromium. When the needed browser is not installed, the CLI runs
246
+ the resolved Playwright core's absolute installer entry for just that browser. Later opens reuse that sim and
244
247
  reload it at the requested target. Use `peach do reload` when the target has not
245
248
  changed.
246
249
  Reserve `--new` for a genuinely concurrent sim; repeated new browser trees
@@ -152,9 +152,13 @@ function probeBrowser(
152
152
 
153
153
  export function ensurePlaywrightBrowser(
154
154
  resolved: ResolvedPlaywright,
155
+ headless: boolean,
155
156
  env: NodeJS.ProcessEnv = process.env,
156
157
  ): PlaywrightBrowserProvisioningResult {
157
- const before = probeBrowser(resolved, env)
158
+ const headlessShell = headless && process.platform !== 'darwin'
159
+ const probeEnv = { ...env, SOOTSIM_PW_HEADLESS_SHELL: headlessShell ? '1' : '0' }
160
+ const browser = headlessShell ? 'chromium-headless-shell' : 'chromium'
161
+ const before = probeBrowser(resolved, probeEnv)
158
162
  if (!before.ok) return before
159
163
  if (before.exists) {
160
164
  return { ok: true, executablePath: before.executablePath, installed: false }
@@ -171,7 +175,7 @@ export function ensurePlaywrightBrowser(
171
175
  RNX_INTERNAL_CHILDREN.playwrightInstall,
172
176
  resolved.cliPath,
173
177
  'install',
174
- 'chromium',
178
+ browser,
175
179
  ],
176
180
  {
177
181
  env,
@@ -190,19 +194,19 @@ export function ensurePlaywrightBrowser(
190
194
  return {
191
195
  ok: false,
192
196
  message:
193
- `${resolved.spec}@${resolved.version} requires chromium at ` +
197
+ `${resolved.spec}@${resolved.version} requires ${browser} at ` +
194
198
  `${before.executablePath}, but its browser install failed${detail ? `:\n${detail}` : ''}`,
195
199
  }
196
200
  }
197
201
 
198
- const after = probeBrowser(resolved, env)
202
+ const after = probeBrowser(resolved, probeEnv)
199
203
  if (!after.ok) return after
200
204
  if (!after.exists) {
201
205
  return {
202
206
  ok: false,
203
207
  message:
204
208
  `${resolved.spec}@${resolved.version} browser install completed, but its required ` +
205
- `chromium executable is still missing at ${after.executablePath}`,
209
+ `${browser} executable is still missing at ${after.executablePath}`,
206
210
  }
207
211
  }
208
212
  return { ok: true, executablePath: after.executablePath, installed: true }
@@ -103,7 +103,11 @@ async function launch(opts: DriverLaunchOptions): Promise<DriverLaunchResult> {
103
103
  // keep browser discovery, installation, and the detached host on one exact
104
104
  // cache contract even if another caller mutates process.env during launch.
105
105
  const playwrightEnv = { ...process.env }
106
- const provisioning = ensurePlaywrightBrowser(resolved, playwrightEnv)
106
+ const provisioning = ensurePlaywrightBrowser(
107
+ resolved,
108
+ opts.headless ?? true,
109
+ playwrightEnv,
110
+ )
107
111
  if (!provisioning.ok) {
108
112
  return {
109
113
  launched: false,
@@ -89,8 +89,8 @@ export async function runInternalChild(args: string[]): Promise<void> {
89
89
  // own work does.
90
90
  }
91
91
 
92
- /** select an explicit executable or the newest installed chromium in the
93
- * resolved package's cache. a separate process so the caller's environment
92
+ /** select an explicit executable or the newest installed chromium (or headless
93
+ * shell) in the resolved package's cache. a separate process so the caller's environment
94
94
  * snapshot — PLAYWRIGHT_BROWSERS_PATH above all — is the only browser cache
95
95
  * this ever sees. */
96
96
  function playwrightProbe(): ChildReply {
@@ -111,8 +111,6 @@ function playwrightProbe(): ChildReply {
111
111
  executablePath = resolve(override)
112
112
  accessSync(executablePath, constants.X_OK)
113
113
  } else {
114
- // use full chromium for both headed and headless launches. selecting it
115
- // explicitly also avoids a second, revision-pinned headless-shell lookup.
116
114
  let browserDir = dirname(expectedPath)
117
115
  while (!/^chromium-\d+$/.test(basename(browserDir))) {
118
116
  const parent = dirname(browserDir)
@@ -120,18 +118,38 @@ function playwrightProbe(): ChildReply {
120
118
  browserDir = parent
121
119
  }
122
120
  const cacheDir = dirname(browserDir)
123
- const binaryPath = relative(browserDir, expectedPath)
121
+ // a headless launch off a Mac uses playwright's headless shell, as
122
+ // playwright itself does: the same chromium build and renderer without the
123
+ // desktop browser's printing and service discovery libraries. headed and
124
+ // Mac launches use full chromium.
125
+ const shell = process.env.SOOTSIM_PW_HEADLESS_SHELL === '1'
126
+ const prefix = shell ? 'chromium_headless_shell-' : 'chromium-'
127
+ // chromium switched its linux archive directory to chrome-linux64.
128
+ const paths = shell
129
+ ? process.platform === 'win32'
130
+ ? ['chrome-headless-shell-win64/chrome-headless-shell.exe']
131
+ : [
132
+ 'chrome-headless-shell-linux64/chrome-headless-shell',
133
+ 'chrome-linux/headless_shell',
134
+ ]
135
+ : process.platform === 'linux'
136
+ ? ['chrome-linux64/chrome', 'chrome-linux/chrome']
137
+ : [relative(browserDir, expectedPath)]
138
+ // the package's own revision is what its installer provides when none is installed.
139
+ if (shell)
140
+ executablePath = join(
141
+ cacheDir,
142
+ `${prefix}${basename(browserDir).slice('chromium-'.length)}`,
143
+ paths[0]!,
144
+ )
124
145
  const revisions = existsSync(cacheDir)
125
146
  ? readdirSync(cacheDir)
126
- .filter((name) => /^chromium-\d+$/.test(name))
127
- .sort((a, b) => Number(b.slice(9)) - Number(a.slice(9)))
147
+ .filter(
148
+ (name) => name.startsWith(prefix) && /^\d+$/.test(name.slice(prefix.length)),
149
+ )
150
+ .sort((a, b) => Number(b.slice(prefix.length)) - Number(a.slice(prefix.length)))
128
151
  : []
129
152
  for (const revision of revisions) {
130
- // chromium switched its linux archive directory to chrome-linux64.
131
- const paths =
132
- process.platform === 'linux'
133
- ? ['chrome-linux64/chrome', 'chrome-linux/chrome']
134
- : [binaryPath]
135
153
  const installed = paths
136
154
  .map((path) => join(cacheDir, revision, path))
137
155
  .find((path) => {
package/cli/main.ts CHANGED
@@ -6,7 +6,7 @@ import { automaticPeachUpdatesEnabled } from '../src/automatic-update-policy'
6
6
  import { rnxPublicBrand } from '../src/public-brand'
7
7
  import { levenshtein } from './levenshtein'
8
8
  import { COMMANDS, parseArgs, TOP_LEVEL_RUNTIME_COMMANDS } from './parse-args'
9
- import { RnxExit } from './run-rnx'
9
+ import { PeachExit } from './run-rnx'
10
10
  import { rnxSelfInvocation } from './self-invocation'
11
11
  import { IS_STANDALONE } from './standalone'
12
12
 
@@ -23,6 +23,9 @@ import { IS_STANDALONE } from './standalone'
23
23
  // rejections that don't match this shape still get the verbose stack so we
24
24
  // don't paper over real bugs.
25
25
  async function handleTopLevelError(err: unknown): Promise<never> {
26
+ // peachExit stands in for process.exit, so one thrown from a callback outside
27
+ // the awaited command (a signal handler's shutdown) is that exit, not a crash
28
+ if (err instanceof PeachExit) await exitWithFlush(err.code)
26
29
  const { trackCliError, flushCliTelemetry, reportCliCrash } = await import('./telemetry')
27
30
  trackCliError(err)
28
31
  await flushCliTelemetry(1)
@@ -372,7 +375,7 @@ const cloudBoundary = await dispatchCloudBoundary({
372
375
  args: commandArgsWithSim,
373
376
  })
374
377
  if (cloudBoundary.handled) await exitWithFlush(cloudBoundary.code)
375
- // the command modules stop by throwing RnxExit rather than ending the
378
+ // the command modules stop by throwing PeachExit rather than ending the
376
379
  // process, because the same command has to run in a box shell and in
377
380
  // workerd, where process.exit() cancels the whole request. this is the
378
381
  // host boundary that turns it back into a real exit code.
@@ -741,7 +744,7 @@ try {
741
744
  }
742
745
  }
743
746
  } catch (error) {
744
- if (error instanceof RnxExit) await exitWithFlush(error.code)
747
+ if (error instanceof PeachExit) await exitWithFlush(error.code)
745
748
  throw error
746
749
  }
747
750
 
@@ -55,6 +55,13 @@ export const OUTBOUND_ENDPOINTS: Record<string, OutboundEndpointDeclaration> = {
55
55
  payload:
56
56
  'an unexpected CLI crash: error class, bounded path-redacted first-line message, command name, CLI/runtime versions, OS/arch and a dedupe signature, at most once a day per signature; on until `peach config telemetry off` or DO_NOT_TRACK',
57
57
  },
58
+ app_crash_report: {
59
+ category: 'bounded-diagnostics',
60
+ destination: 'configured Contrast origin, /api/sootsim/report-issue',
61
+ preConsent: true,
62
+ payload:
63
+ 'a red screen in the running app: error kind, the first line of its message with paths cut to directories, the top 5 stack frames as function name plus directory (no file names or line numbers), runtime version and a fuzzy dedupe signature (kind and message words only), once per crash per load from a released runtime outside automation; on until settings.crashReports is turned off',
64
+ },
58
65
  contrast_user_action: {
59
66
  category: 'explicit-user-action',
60
67
  destination: 'configured Contrast origin',
@@ -348,6 +355,11 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
348
355
  { category: 'contrast_user_action', count: 1 },
349
356
  'packages/peach-engine/src/auth/shared-session.ts :: fetch :: `${CONTRAST_ORIGIN}/api/auth/sign-out`':
350
357
  { category: 'contrast_user_action', count: 1 },
358
+ "packages/peach-engine/src/crash-report.ts :: fetch :: `${CONTRAST_ORIGIN.replace(/\\/$/, '')}/api/sootsim/report-issue`":
359
+ {
360
+ category: 'app_crash_report',
361
+ count: 1,
362
+ },
351
363
  "packages/peach-engine/src/billing/client.ts :: fetch :: apiUrl('/api/sootsim/billing/checkout')":
352
364
  { category: 'contrast_user_action', count: 1 },
353
365
  'packages/peach-engine/src/billing/client.ts :: fetch :: apiUrl(path)': {
package/cli/telemetry.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { createHash } from 'node:crypto'
2
2
  import { homedir } from 'node:os'
3
+ import { crashFingerprint } from 'peach-engine/crash-fingerprint'
3
4
  import { getCliVersion } from '../src/cli-version'
4
5
  import {
5
6
  readActiveRuntime,
@@ -192,7 +193,8 @@ const CRASH_SENT_KEY = 'crashReportsSent'
192
193
  // an unexpected CLI crash files itself in the issue queue: error class, the
193
194
  // sanitized first line of its message, the command name and versions. never
194
195
  // arguments, stacks, paths, or app data. one report per crash signature per
195
- // day from this install; the server counts repeats of a signature on one row.
196
+ // day from this install. the signature is fuzzy (peach-engine crash-fingerprint),
197
+ // so the server counts every repeat of one crash on its first row.
196
198
  export async function reportCliCrash(error: unknown): Promise<void> {
197
199
  if (!crashReportsAllowedForCurrentProcess()) return
198
200
  const errorClass = bounded(
@@ -208,7 +210,7 @@ export async function reportCliCrash(error: unknown): Promise<void> {
208
210
  runtime_version: runtimeVersion,
209
211
  } = environmentProperties()
210
212
  const signature = createHash('sha256')
211
- .update([errorClass, message, command, cliVersion].join('\n'))
213
+ .update(crashFingerprint('cli', errorClass, message))
212
214
  .digest('hex')
213
215
  const now = Date.now()
214
216
  const stored = readSharedConfig()[CRASH_SENT_KEY]
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
4
  var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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;
@@ -34450,8 +34450,11 @@ function probeBrowser(resolved, env) {
34450
34450
  };
34451
34451
  }
34452
34452
  }
34453
- function ensurePlaywrightBrowser(resolved, env = process.env) {
34454
- const before = probeBrowser(resolved, env);
34453
+ function ensurePlaywrightBrowser(resolved, headless, env = process.env) {
34454
+ const headlessShell = headless && process.platform !== "darwin";
34455
+ const probeEnv = { ...env, SOOTSIM_PW_HEADLESS_SHELL: headlessShell ? "1" : "0" };
34456
+ const browser = headlessShell ? "chromium-headless-shell" : "chromium";
34457
+ const before = probeBrowser(resolved, probeEnv);
34455
34458
  if (!before.ok) return before;
34456
34459
  if (before.exists) {
34457
34460
  return { ok: true, executablePath: before.executablePath, installed: false };
@@ -34465,7 +34468,7 @@ function ensurePlaywrightBrowser(resolved, env = process.env) {
34465
34468
  RNX_INTERNAL_CHILDREN.playwrightInstall,
34466
34469
  resolved.cliPath,
34467
34470
  "install",
34468
- "chromium"
34471
+ browser
34469
34472
  ],
34470
34473
  {
34471
34474
  env,
@@ -34478,16 +34481,16 @@ function ensurePlaywrightBrowser(resolved, env = process.env) {
34478
34481
  const detail = rawDetail.length <= 4e3 ? rawDetail : rawDetail.slice(-4e3);
34479
34482
  return {
34480
34483
  ok: false,
34481
- message: `${resolved.spec}@${resolved.version} requires chromium at ${before.executablePath}, but its browser install failed${detail ? `:
34484
+ message: `${resolved.spec}@${resolved.version} requires ${browser} at ${before.executablePath}, but its browser install failed${detail ? `:
34482
34485
  ${detail}` : ""}`
34483
34486
  };
34484
34487
  }
34485
- const after = probeBrowser(resolved, env);
34488
+ const after = probeBrowser(resolved, probeEnv);
34486
34489
  if (!after.ok) return after;
34487
34490
  if (!after.exists) {
34488
34491
  return {
34489
34492
  ok: false,
34490
- message: `${resolved.spec}@${resolved.version} browser install completed, but its required chromium executable is still missing at ${after.executablePath}`
34493
+ message: `${resolved.spec}@${resolved.version} browser install completed, but its required ${browser} executable is still missing at ${after.executablePath}`
34491
34494
  };
34492
34495
  }
34493
34496
  return { ok: true, executablePath: after.executablePath, installed: true };
@@ -34557,7 +34560,11 @@ async function launch2(opts) {
34557
34560
  };
34558
34561
  }
34559
34562
  const playwrightEnv = { ...process.env };
34560
- const provisioning = ensurePlaywrightBrowser(resolved, playwrightEnv);
34563
+ const provisioning = ensurePlaywrightBrowser(
34564
+ resolved,
34565
+ opts.headless ?? true,
34566
+ playwrightEnv
34567
+ );
34561
34568
  if (!provisioning.ok) {
34562
34569
  return {
34563
34570
  launched: false,
@@ -34889,11 +34896,12 @@ function trackCliDiagnostic(diagnostic) {
34889
34896
  if (queue.some((queued) => JSON.stringify(queued) === JSON.stringify(entry))) return;
34890
34897
  queue.push(entry);
34891
34898
  }
34892
- var import_node_os3, observedRuntimeVersion, queue, CRASH_REPORT_EVERY_MS;
34899
+ var import_node_os3, import_crash_fingerprint, observedRuntimeVersion, queue, CRASH_REPORT_EVERY_MS;
34893
34900
  var init_telemetry = __esm({
34894
34901
  "cli/telemetry.ts"() {
34895
34902
  "use strict";
34896
34903
  import_node_os3 = require("node:os");
34904
+ import_crash_fingerprint = require("peach-engine/crash-fingerprint");
34897
34905
  init_cli_version();
34898
34906
  init_home_paths();
34899
34907
  init_parse_args();
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (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.650 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.652 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peachsim",
3
- "version": "0.1.650",
3
+ "version": "0.1.652",
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",