peachsim 0.1.649 → 0.1.650

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 (102) hide show
  1. package/README.md +10 -9
  2. package/cli/command-registry.ts +2 -1
  3. package/cli/commands/guest-host.ts +67 -0
  4. package/cli/commands/kotlin.ts +231 -0
  5. package/cli/commands/project-report.ts +1 -1
  6. package/cli/commands/report-issue.ts +55 -32
  7. package/cli/commands/setup.ts +10 -14
  8. package/cli/commands/support.ts +399 -0
  9. package/cli/commands/swift.ts +6 -52
  10. package/cli/commands/telemetry.ts +10 -13
  11. package/cli/main.ts +22 -10
  12. package/cli/outbound-endpoints.ts +23 -2
  13. package/cli/privacy.ts +23 -25
  14. package/cli/runtime-notes.ts +3 -2
  15. package/cli/telemetry.ts +109 -14
  16. package/dist-lib/agent-daemon-client.cjs +1 -1
  17. package/dist-lib/agent-events.cjs +1 -1
  18. package/dist-lib/agent-identity.cjs +1 -1
  19. package/dist-lib/agent-sessions.cjs +1 -1
  20. package/dist-lib/attached-projects.cjs +1 -1
  21. package/dist-lib/auth/shared-session.cjs +1 -1
  22. package/dist-lib/backend-origin.cjs +1 -1
  23. package/dist-lib/beta.cjs +1 -1
  24. package/dist-lib/beta.mjs +1 -1
  25. package/dist-lib/bridge-constants.cjs +1 -1
  26. package/dist-lib/bridge-contract-input.cjs +1 -1
  27. package/dist-lib/bridge-contract-input.mjs +1 -1
  28. package/dist-lib/bridge-contract.cjs +1 -1
  29. package/dist-lib/bridge-contract.mjs +1 -1
  30. package/dist-lib/capture-contract.cjs +1 -1
  31. package/dist-lib/capture-contract.mjs +1 -1
  32. package/dist-lib/cli-constants.cjs +1 -1
  33. package/dist-lib/cloud-contract.cjs +1 -1
  34. package/dist-lib/cloud-contract.mjs +1 -1
  35. package/dist-lib/cloud-test-args.cjs +1 -1
  36. package/dist-lib/cloud-test-args.mjs +1 -1
  37. package/dist-lib/cloud.cjs +1 -1
  38. package/dist-lib/cloud.mjs +1 -1
  39. package/dist-lib/config.cjs +1 -1
  40. package/dist-lib/detox/index.cjs +1 -1
  41. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  42. package/dist-lib/home-paths.cjs +3 -3
  43. package/dist-lib/host/bridge-host.cjs +1 -1
  44. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  45. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  46. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  47. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  48. package/dist-lib/host/websocket-proxy.cjs +1 -1
  49. package/dist-lib/index.cjs +1 -1
  50. package/dist-lib/jump-to-source-babel.cjs +1 -1
  51. package/dist-lib/jump-to-source-native.cjs +1 -1
  52. package/dist-lib/kotlin-host.cjs +93 -28
  53. package/dist-lib/menu.cjs +1 -1
  54. package/dist-lib/menu.mjs +1 -1
  55. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  56. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  57. package/dist-lib/metro-production-bundle.cjs +1 -1
  58. package/dist-lib/metro-production-bundle.mjs +1 -1
  59. package/dist-lib/metro.cjs +1 -1
  60. package/dist-lib/native-app-identity.cjs +1 -1
  61. package/dist-lib/native-app-identity.mjs +1 -1
  62. package/dist-lib/profiles.cjs +1 -1
  63. package/dist-lib/public-brand.cjs +1 -1
  64. package/dist-lib/react-native-host-modules.cjs +1 -1
  65. package/dist-lib/react-native-host-modules.mjs +1 -1
  66. package/dist-lib/render-mode.cjs +1 -1
  67. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  68. package/dist-lib/sdk.cjs +1 -1
  69. package/dist-lib/sdk.mjs +1 -1
  70. package/dist-lib/skills.cjs +15 -26
  71. package/dist-lib/swift-compile.cjs +6 -3
  72. package/dist-lib/swift-compile.mjs +6 -3
  73. package/dist-lib/swift-package.cjs +1 -1
  74. package/dist-lib/swift-package.mjs +1 -1
  75. package/dist-lib/swift-submit.cjs +1 -1
  76. package/dist-lib/swift-submit.mjs +1 -1
  77. package/dist-lib/swift.cjs +1 -1
  78. package/dist-lib/vite-swift.cjs +6 -3
  79. package/dist-lib/vite.cjs +1 -1
  80. package/kotlin/AppSources/android/app/Activity.kt +85 -0
  81. package/kotlin/AppSources/android/app/Application.kt +7 -0
  82. package/kotlin/AppSources/android/content/Context.kt +5 -0
  83. package/kotlin/AppSources/android/content/Intent.kt +16 -0
  84. package/kotlin/AppSources/android/os/Bundle.kt +5 -0
  85. package/kotlin/AppSources/android/util/SuperNotCalledException.kt +3 -0
  86. package/kotlin/AppSources/android/view/View.kt +72 -0
  87. package/kotlin/AppSources/android/view/Window.kt +44 -0
  88. package/kotlin/AppSources/android/widget/FrameLayout.kt +6 -0
  89. package/kotlin/AppSources/androidx/activity/ComponentActivity.kt +57 -0
  90. package/kotlin/AppSources/androidx/activity/compose/ComponentActivity.kt +29 -0
  91. package/kotlin/AppSources/androidx/compose/ui/platform/ComposeView.kt +67 -0
  92. package/kotlin/AppSources/dev/peach/app/PeachApp.kt +136 -0
  93. package/kotlin/AppSources/dev/peach/app/PeachWindowHost.kt +13 -0
  94. package/kotlin/ComposeSources/PeachComposeHost.kt +58 -37
  95. package/package.json +1 -1
  96. package/skills/contrast/SKILL.md +2 -1
  97. package/skills/peach-setup/SKILL.md +2 -2
  98. package/src/{swift-guest.ts → guest-bundle.ts} +22 -7
  99. package/src/home-paths.ts +5 -3
  100. package/src/kotlin-app.ts +411 -0
  101. package/src/kotlin-host.ts +139 -32
  102. package/src/swift-compile.ts +7 -2
package/cli/privacy.ts CHANGED
@@ -4,7 +4,6 @@ import {
4
4
  type PrivacyPreferences,
5
5
  } from '../src/home-paths'
6
6
  import { isAgentEnv } from './commands/inspect/env'
7
- import { confirm } from './prompt'
8
7
 
9
8
  function isCi(): boolean {
10
9
  return (
@@ -18,35 +17,34 @@ export function canPromptForPrivacyChoice(): boolean {
18
17
  return process.stdin.isTTY === true && !isCi() && !isAgentEnv()
19
18
  }
20
19
 
20
+ function doNotTrack(): boolean {
21
+ const value = process.env.DO_NOT_TRACK
22
+ return value === '1' || value === 'true'
23
+ }
24
+
21
25
  export function diagnosticsAllowedForCurrentProcess(
22
26
  preferences: PrivacyPreferences = readPrivacyPreferences(),
23
27
  ): boolean {
24
- const doNotTrack = process.env.DO_NOT_TRACK
25
- if (doNotTrack === '1' || doNotTrack === 'true') return false
26
- return preferences.configured && preferences.productAnalytics
28
+ return !doNotTrack() && preferences.productAnalytics
27
29
  }
28
30
 
29
- export async function ensurePrivacyChoice(options: {
30
- prompt: boolean
31
- }): Promise<PrivacyPreferences> {
32
- const current = readPrivacyPreferences()
33
- if (current.configured) return current
31
+ export function crashReportsAllowedForCurrentProcess(
32
+ preferences: PrivacyPreferences = readPrivacyPreferences(),
33
+ ): boolean {
34
+ return !doNotTrack() && preferences.crashReports
35
+ }
34
36
 
35
- if (!options.prompt || !canPromptForPrivacyChoice()) {
36
- return {
37
- productAnalytics: false,
38
- crashReports: false,
39
- configured: false,
40
- }
41
- }
37
+ export const PRIVACY_NOTICE = [
38
+ 'Anonymous diagnostics and crash reports are on: CLI/runtime versions, OS/arch, command name and exit code, a random install ID, package incompatibilities, and error class with the first line of the message (300 characters, paths redacted).',
39
+ 'They never include arguments, stacks, source, environment, or app data.',
40
+ 'Turn them off with `peach config telemetry off`, or DO_NOT_TRACK=1 for one run.',
41
+ ]
42
42
 
43
- const allowed = await confirm(
44
- 'Share anonymous diagnostics, including CI and agent runs: CLI/runtime versions, OS/arch, command name, random install ID, package incompatibilities, error class, and first-line error/warning messages (300 characters, paths redacted; no arguments, stacks, source or structured app data)?',
45
- false,
46
- )
47
- // the engine's historical analytics and crash transports carry broader
48
- // payloads, so crashReports stays off. productAnalytics is now consent for
49
- // the bounded CLI diagnostic transport only.
50
- writePrivacyPreferences({ productAnalytics: allowed, crashReports: false })
51
- return readPrivacyPreferences()
43
+ // the first human run says once what is sent and how to turn it off, then
44
+ // records the defaults so the notice does not repeat. CI, pipes and agent runs
45
+ // print nothing and send under the same defaults.
46
+ export function noticePrivacyDefaults(): void {
47
+ if (readPrivacyPreferences().configured || !canPromptForPrivacyChoice()) return
48
+ process.stderr.write(`\n${PRIVACY_NOTICE.map((line) => ` ${line}`).join('\n')}\n\n`)
49
+ writePrivacyPreferences({ productAnalytics: true, crashReports: true })
52
50
  }
@@ -1,5 +1,5 @@
1
1
  import { RNX_CHANGELOG_API_URL, RNX_CHANGELOG_URL } from '../src/runtime-delivery'
2
- import type { ChangelogEntry } from '../../../scripts/changelog/types'
2
+ import type { ChangelogEntry } from '../../../src/sootsim/changelogContract'
3
3
 
4
4
  function isChangelogEntry(value: unknown): value is ChangelogEntry {
5
5
  if (!value || typeof value !== 'object') return false
@@ -57,7 +57,8 @@ export function formatRuntimeReleaseNotes(
57
57
  for (const section of entry.sections) {
58
58
  lines.push(` ${section.title}:`)
59
59
  for (const item of section.items) {
60
- lines.push(` • ${item.summary}`)
60
+ const reports = item.reports?.length ? ` (report ${item.reports.join(', ')})` : ''
61
+ lines.push(` • ${item.summary}${reports}`)
61
62
  }
62
63
  }
63
64
  }
package/cli/telemetry.ts CHANGED
@@ -1,8 +1,17 @@
1
+ import { createHash } from 'node:crypto'
1
2
  import { homedir } from 'node:os'
2
3
  import { getCliVersion } from '../src/cli-version'
3
- import { readActiveRuntime, readOrCreateAnonymousId } from '../src/home-paths'
4
+ import {
5
+ readActiveRuntime,
6
+ readOrCreateAnonymousId,
7
+ readSharedConfig,
8
+ writeSharedConfig,
9
+ } from '../src/home-paths'
4
10
  import { parseArgs } from './parse-args'
5
- import { diagnosticsAllowedForCurrentProcess } from './privacy'
11
+ import {
12
+ crashReportsAllowedForCurrentProcess,
13
+ diagnosticsAllowedForCurrentProcess,
14
+ } from './privacy'
6
15
 
7
16
  type PackageIncompatibility = {
8
17
  kind: 'package_incompatibility'
@@ -46,11 +55,13 @@ export function sanitizeDiagnosticMessage(value: string): string {
46
55
  const firstLine = value.slice(0, 2048).split(/[\r\n\u2028\u2029]/, 1)[0] ?? ''
47
56
  // retain package names from dependency paths, never source filenames,
48
57
  // URL paths/queries, local paths, stack frames, or serialized app objects.
58
+ // a path runs on across spaces while a separator follows on the line, so a
59
+ // directory named with spaces never leaks its words.
49
60
  return firstLine
50
61
  .split(homedir())
51
62
  .join('<home>')
52
63
  .replace(
53
- /<package:(?:@[\w.-]+\/)?[\w.-]+>|(?:https?:\/\/|file:\/\/|[A-Za-z]:[\\/]|<home>[\\/]|\/|\.{1,2}[\\/]|\b[\w.-]+[\\/])[^\s"'<>]+/g,
64
+ /<package:(?:@[\w.-]+\/)?[\w.-]+>|(?:https?:\/\/|file:\/\/|[A-Za-z]:[\\/]|<home>[\\/]|\/|\.{1,2}[\\/]|\b[\w.-]+[\\/])(?:[^\s"'<>]|\s(?=[^"'<>]*[\\/]))+/g,
54
65
  (location) => {
55
66
  if (location.startsWith('<package:')) return location
56
67
  const dependency = /(?:^|[\\/])node_modules[\\/]((?:@[^\\/]+[\\/])?[^\\/]+)/.exec(
@@ -102,14 +113,18 @@ export function buildCliDiagnosticEvent(diagnostic: CliDiagnostic) {
102
113
  return {
103
114
  event: diagnostic.kind,
104
115
  distinct_id: readOrCreateAnonymousId(),
105
- properties: {
106
- cli_version: diagnosticVersion(getCliVersion()),
107
- runtime_version: observedRuntimeVersion ?? diagnosticVersion(readActiveRuntime()),
108
- os: process.platform,
109
- arch: process.arch,
110
- command: parseArgs(process.argv).command ?? 'open',
111
- ...properties,
112
- },
116
+ properties: { ...environmentProperties(), ...properties },
117
+ }
118
+ }
119
+
120
+ // the fields every event carries
121
+ function environmentProperties() {
122
+ return {
123
+ cli_version: diagnosticVersion(getCliVersion()),
124
+ runtime_version: observedRuntimeVersion ?? diagnosticVersion(readActiveRuntime()),
125
+ os: process.platform,
126
+ arch: process.arch,
127
+ command: parseArgs(process.argv).command ?? 'open',
113
128
  }
114
129
  }
115
130
 
@@ -133,8 +148,22 @@ export function trackCliError(error: unknown): void {
133
148
  trackCliDiagnostic({ kind: 'error_shape', errorClass, message })
134
149
  }
135
150
 
136
- export async function flushCliTelemetry(): Promise<void> {
137
- if (queue.length === 0) return
151
+ // the one usage event: which command ran, how it ended, and roughly how long
152
+ // it took, in a power-of-two bucket
153
+ function commandRunEvent(exitCode: number) {
154
+ const ms = Math.max(1, Math.round(process.uptime() * 1000))
155
+ return {
156
+ event: 'command_run',
157
+ distinct_id: readOrCreateAnonymousId(),
158
+ properties: {
159
+ ...environmentProperties(),
160
+ exit_code: exitCode,
161
+ duration_ms_bucket: 2 ** Math.ceil(Math.log2(ms)),
162
+ },
163
+ }
164
+ }
165
+
166
+ export async function flushCliTelemetry(exitCode: number): Promise<void> {
138
167
  const config = loadConfig()
139
168
  if (!config) {
140
169
  queue.length = 0
@@ -142,7 +171,10 @@ export async function flushCliTelemetry(): Promise<void> {
142
171
  }
143
172
  const diagnostics = queue.splice(0, queue.length)
144
173
  try {
145
- const batch = diagnostics.map((diagnostic) => buildCliDiagnosticEvent(diagnostic))
174
+ const batch = [
175
+ ...diagnostics.map((diagnostic) => buildCliDiagnosticEvent(diagnostic)),
176
+ commandRunEvent(exitCode),
177
+ ]
146
178
  await fetch(`${config.host}/batch/`, {
147
179
  method: 'POST',
148
180
  headers: { 'content-type': 'application/json' },
@@ -153,3 +185,66 @@ export async function flushCliTelemetry(): Promise<void> {
153
185
  // diagnostics never change a command's result.
154
186
  }
155
187
  }
188
+
189
+ const CRASH_REPORT_EVERY_MS = 24 * 60 * 60_000
190
+ const CRASH_SENT_KEY = 'crashReportsSent'
191
+
192
+ // an unexpected CLI crash files itself in the issue queue: error class, the
193
+ // sanitized first line of its message, the command name and versions. never
194
+ // 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
+ export async function reportCliCrash(error: unknown): Promise<void> {
197
+ if (!crashReportsAllowedForCurrentProcess()) return
198
+ const errorClass = bounded(
199
+ error instanceof Error ? error.constructor.name : typeof error,
200
+ 160,
201
+ )
202
+ const message = sanitizeDiagnosticMessage(
203
+ error instanceof Error ? error.message : typeof error === 'string' ? error : '',
204
+ )
205
+ const {
206
+ command,
207
+ cli_version: cliVersion,
208
+ runtime_version: runtimeVersion,
209
+ } = environmentProperties()
210
+ const signature = createHash('sha256')
211
+ .update([errorClass, message, command, cliVersion].join('\n'))
212
+ .digest('hex')
213
+ const now = Date.now()
214
+ const stored = readSharedConfig()[CRASH_SENT_KEY]
215
+ const sent: Record<string, number> = {}
216
+ if (stored && typeof stored === 'object') {
217
+ for (const [key, at] of Object.entries(stored)) {
218
+ if (typeof at === 'number' && at > now - CRASH_REPORT_EVERY_MS) sent[key] = at
219
+ }
220
+ }
221
+ if (sent[signature]) return
222
+ writeSharedConfig({ [CRASH_SENT_KEY]: { ...sent, [signature]: now } })
223
+ try {
224
+ const { supportEndpoint } = await import('./commands/report-issue')
225
+ const endpoint = supportEndpoint()
226
+ await fetch(`${endpoint.origin}/api/sootsim/report-issue`, {
227
+ method: 'POST',
228
+ headers: { ...endpoint.headers, 'content-type': 'application/json' },
229
+ body: JSON.stringify({
230
+ kind: 'report',
231
+ note: `automatic crash report: \`peach ${command}\` threw ${errorClass}: ${message}`,
232
+ timestamp: new Date(now).toISOString(),
233
+ sootsim_version: runtimeVersion,
234
+ cli_version: cliVersion,
235
+ signature,
236
+ bundle: {
237
+ reportSource: 'auto',
238
+ cliVersion,
239
+ runtimeVersion,
240
+ platform: process.platform,
241
+ arch: process.arch,
242
+ crash: { errorClass, message, command },
243
+ },
244
+ }),
245
+ signal: AbortSignal.timeout(3_000),
246
+ })
247
+ } catch {
248
+ // a crash report never changes how the crash itself ends.
249
+ }
250
+ }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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;
@@ -228,8 +228,8 @@ function readPrivacyPreferences() {
228
228
  const productAnalytics = settings?.productAnalytics;
229
229
  const crashReports = settings?.crashReports;
230
230
  return {
231
- productAnalytics: typeof productAnalytics === "boolean" ? productAnalytics : false,
232
- crashReports: typeof crashReports === "boolean" ? crashReports : false,
231
+ productAnalytics: typeof productAnalytics === "boolean" ? productAnalytics : true,
232
+ crashReports: typeof crashReports === "boolean" ? crashReports : true,
233
233
  configured: typeof productAnalytics === "boolean"
234
234
  };
235
235
  }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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.649 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.650 | (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;