peachsim 0.1.940 → 0.1.1400

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 (398) hide show
  1. package/README.md +28 -22
  2. package/cli/app-catalog.ts +29 -14
  3. package/cli/app-fonts.ts +17 -8
  4. package/cli/bridge-flow-runner.ts +40 -29
  5. package/cli/cloud-client.ts +57 -21
  6. package/cli/cloud-test-tunnel.ts +12 -18
  7. package/cli/commands/agent.ts +1 -1
  8. package/cli/commands/app-fonts.ts +3 -3
  9. package/cli/commands/assert.ts +8 -8
  10. package/cli/commands/auth.ts +8 -3
  11. package/cli/commands/box/bundle-plane.ts +13 -1
  12. package/cli/commands/box.ts +16 -5
  13. package/cli/commands/compat.ts +1 -1
  14. package/cli/commands/config.ts +2 -2
  15. package/cli/commands/control.ts +125 -71
  16. package/cli/commands/cpu-profile.ts +45 -1
  17. package/cli/commands/daemon.ts +131 -33
  18. package/cli/commands/debug.ts +24 -17
  19. package/cli/commands/desktop.ts +7 -1
  20. package/cli/commands/detect.ts +101 -0
  21. package/cli/commands/detox.ts +6 -6
  22. package/cli/commands/device.ts +12 -12
  23. package/cli/commands/electron.ts +32 -14
  24. package/cli/commands/flow.ts +49 -41
  25. package/cli/commands/guest-host.ts +39 -1
  26. package/cli/commands/inspect/core.ts +14 -8
  27. package/cli/commands/inspect/list.ts +1 -1
  28. package/cli/commands/inspect/settle.ts +5 -3
  29. package/cli/commands/inspect/settling.ts +229 -44
  30. package/cli/commands/inspect/wait-idle.ts +3 -2
  31. package/cli/commands/inspect.ts +107 -95
  32. package/cli/commands/install-cli.ts +36 -15
  33. package/cli/commands/install-desktop.ts +68 -195
  34. package/cli/commands/kotlin.ts +6 -5
  35. package/cli/commands/login.ts +5 -5
  36. package/cli/commands/maestro-compare.ts +554 -0
  37. package/cli/commands/maestro-generate.ts +6 -3
  38. package/cli/commands/maestro.ts +22 -0
  39. package/cli/commands/mode.ts +2 -2
  40. package/cli/commands/no-bridge-hint.ts +6 -2
  41. package/cli/commands/platform.ts +35 -6
  42. package/cli/commands/preview.ts +6 -0
  43. package/cli/commands/project-report.ts +10 -12
  44. package/cli/commands/record.ts +37 -37
  45. package/cli/commands/runtime.ts +9 -9
  46. package/cli/commands/screenshot-layers.ts +4 -4
  47. package/cli/commands/screenshot-mode.ts +2 -2
  48. package/cli/commands/screenshot.ts +19 -16
  49. package/cli/commands/screenshots-capture.ts +2 -2
  50. package/cli/commands/serve.ts +9 -12
  51. package/cli/commands/setup.ts +29 -14
  52. package/cli/commands/shell-boolean-mode.ts +2 -2
  53. package/cli/commands/show-touches-mode.ts +2 -2
  54. package/cli/commands/skills.ts +11 -11
  55. package/cli/commands/swift.ts +29 -11
  56. package/cli/commands/telemetry.ts +2 -2
  57. package/cli/commands/test.ts +5 -0
  58. package/cli/commands/three-mode.ts +3 -3
  59. package/cli/commands/timeline.ts +4 -4
  60. package/cli/commands/upgrade.ts +2 -2
  61. package/cli/commands/upload.ts +15 -15
  62. package/cli/commands/what-happened.ts +2 -2
  63. package/cli/current-sim.ts +6 -3
  64. package/cli/desktop-companion.ts +55 -149
  65. package/cli/dev-build-freshness.ts +2 -2
  66. package/cli/drivers/desktop.ts +17 -9
  67. package/cli/drivers/electron.ts +1 -2
  68. package/cli/drivers/playwright-sim-host.ts +11 -2
  69. package/cli/drivers/playwright.ts +35 -2
  70. package/cli/drivers/types.ts +8 -0
  71. package/cli/maestro-compare.ts +670 -0
  72. package/cli/outbound-endpoints.ts +50 -8
  73. package/cli/recording-access.ts +6 -6
  74. package/cli/run-registry.ts +1 -1
  75. package/cli/runtime-compat.ts +5 -1
  76. package/cli/screenshot-output.ts +17 -0
  77. package/cli/send-to-box.ts +3 -3
  78. package/cli/shell-init.ts +2 -1
  79. package/cli/ws-bridge.ts +9 -5
  80. package/detox/element-types.ts +1 -0
  81. package/detox/gestures.ts +3 -3
  82. package/detox/index.ts +67 -38
  83. package/detox/navigation-lifecycle.ts +9 -6
  84. package/detox/proof-frame.cjs +6 -4
  85. package/dist-lib/agent-daemon-client.cjs +1 -1
  86. package/dist-lib/agent-events.cjs +1 -1
  87. package/dist-lib/attached-projects.cjs +1 -1
  88. package/dist-lib/auth/shared-session.cjs +1 -1
  89. package/dist-lib/backend-origin.cjs +1 -1
  90. package/dist-lib/beta.cjs +1 -1
  91. package/dist-lib/beta.mjs +1 -1
  92. package/dist-lib/bridge-constants.cjs +1 -1
  93. package/dist-lib/bridge-contract-input.cjs +42 -17
  94. package/dist-lib/bridge-contract-input.mjs +41 -16
  95. package/dist-lib/bridge-contract.cjs +1 -4
  96. package/dist-lib/bridge-contract.mjs +1 -3
  97. package/dist-lib/bundle-channel.cjs +2918 -550
  98. package/dist-lib/capture-contract.cjs +65 -24
  99. package/dist-lib/capture-contract.mjs +63 -24
  100. package/dist-lib/cloud-contract.cjs +2 -2
  101. package/dist-lib/cloud-contract.mjs +2 -2
  102. package/dist-lib/cloud-test-args.cjs +1 -1
  103. package/dist-lib/cloud-test-args.mjs +1 -1
  104. package/dist-lib/cloud.cjs +3 -3
  105. package/dist-lib/cloud.mjs +3 -3
  106. package/dist-lib/config.cjs +15 -5
  107. package/dist-lib/config.mjs +154 -0
  108. package/dist-lib/detox/index.cjs +495 -139
  109. package/dist-lib/dev-bundle-resolution.cjs +3 -1
  110. package/dist-lib/expo-swift-bundle.cjs +1168 -238
  111. package/dist-lib/expo-swift-metadata.cjs +34 -23
  112. package/dist-lib/expo-swift-metadata.mjs +32 -23
  113. package/dist-lib/home-paths.cjs +2 -2
  114. package/dist-lib/host/bridge-host.cjs +2938 -654
  115. package/dist-lib/host/fetch-proxy-handler.cjs +14 -1
  116. package/dist-lib/host/fetch-proxy-overrides.cjs +7 -1
  117. package/dist-lib/host/fetch-proxy-overrides.mjs +5 -1
  118. package/dist-lib/host/replacement-module-handler.cjs +2 -2
  119. package/dist-lib/host/websocket-proxy.cjs +1 -1
  120. package/dist-lib/index.cjs +981 -353
  121. package/dist-lib/jump-to-source-babel.cjs +1 -1
  122. package/dist-lib/jump-to-source-native.cjs +1 -1
  123. package/dist-lib/kotlin-host.cjs +332 -19
  124. package/dist-lib/menu.cjs +1 -1
  125. package/dist-lib/menu.mjs +1 -1
  126. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  127. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  128. package/dist-lib/metro-production-bundle.cjs +7 -7
  129. package/dist-lib/metro-production-bundle.mjs +5 -5
  130. package/dist-lib/metro.cjs +670 -250
  131. package/dist-lib/native-app-identity-project.cjs +2647 -0
  132. package/dist-lib/native-app-identity-project.mjs +1257 -0
  133. package/dist-lib/native-app-identity.cjs +304 -25
  134. package/dist-lib/native-app-identity.mjs +302 -25
  135. package/dist-lib/native-firebase-metadata.cjs +1 -1
  136. package/dist-lib/native-firebase-metadata.mjs +1 -1
  137. package/dist-lib/plist.cjs +1 -1
  138. package/dist-lib/plist.mjs +1 -1
  139. package/dist-lib/profiles.cjs +1 -1
  140. package/dist-lib/public-brand.cjs +1 -1
  141. package/dist-lib/react-native-host-modules.cjs +5 -1
  142. package/dist-lib/react-native-host-modules.mjs +5 -1
  143. package/dist-lib/scripts/dev-server-scanner.cjs +57 -32
  144. package/dist-lib/sdk.cjs +231 -51
  145. package/dist-lib/sdk.mjs +231 -51
  146. package/dist-lib/skills.cjs +4114 -1376
  147. package/dist-lib/swift-compile.cjs +290 -30
  148. package/dist-lib/swift-compile.mjs +290 -30
  149. package/dist-lib/swift-package.cjs +143 -12
  150. package/dist-lib/swift-package.mjs +137 -11
  151. package/dist-lib/swift-submit.cjs +47 -5
  152. package/dist-lib/swift-submit.mjs +42 -5
  153. package/dist-lib/swift-toolchain.cjs +7 -2
  154. package/dist-lib/swift.cjs +1 -1
  155. package/dist-lib/vite-swift.cjs +1392 -458
  156. package/dist-lib/vite.cjs +13 -17
  157. package/dist-lib/worklet-executable.cjs +248 -33
  158. package/dist-lib/worklet-executable.mjs +248 -33
  159. package/install.sh +10 -1
  160. package/kotlin/{AppSources → AndroidViewSources}/android/content/res/Resources.kt +9 -9
  161. package/kotlin/AndroidViewSources/android/graphics/Canvas.kt +20 -0
  162. package/kotlin/AndroidViewSources/android/view/View.kt +211 -0
  163. package/kotlin/AndroidViewSources/android/widget/FrameLayout.kt +61 -0
  164. package/kotlin/AndroidViewSources/android/widget/LinearLayout.kt +49 -0
  165. package/kotlin/AppSources/android/view/Window.kt +36 -0
  166. package/kotlin/AppSources/android/view/WindowInsets.kt +9 -0
  167. package/kotlin/AppSources/android/view/WindowInsetsController.kt +5 -0
  168. package/kotlin/AppSources/android/window/OnBackInvokedDispatcher.kt +48 -0
  169. package/kotlin/AppSources/androidx/activity/OnBackPressedDispatcher.kt +20 -5
  170. package/kotlin/AppSources/androidx/compose/foundation/layout/WindowInsets.kt +15 -0
  171. package/kotlin/AppSources/androidx/compose/ui/platform/ComposeView.kt +2 -1
  172. package/kotlin/AppSources/dev/peach/app/PeachApp.kt +42 -50
  173. package/kotlin/ComposeSources/PeachComposeHost.kt +200 -84
  174. package/kotlin/ExpoComposeSources/PeachAndroidView.kt +87 -0
  175. package/kotlin/ExpoComposeSources/PeachExpoViewMount.kt +24 -0
  176. package/kotlin/ExpoComposeSources/dev/peach/expo/PeachExpoCompose.kt +28 -0
  177. package/kotlin/ExpoComposeSources/expo/modules/kotlin/views/ExpoComposeView.kt +70 -0
  178. package/kotlin/ExpoSources/dev/peach/expo/PeachExpoRuntime.kt +513 -0
  179. package/kotlin/ExpoSources/dev/peach/expo/PeachExpoTypes.kt +173 -0
  180. package/kotlin/ExpoSources/expo/modules/kotlin/AppContext.kt +20 -0
  181. package/kotlin/ExpoSources/expo/modules/kotlin/Promise.kt +19 -0
  182. package/kotlin/ExpoSources/expo/modules/kotlin/classcomponent/ClassComponentBuilder.kt +198 -0
  183. package/kotlin/ExpoSources/expo/modules/kotlin/exception/CodedException.kt +126 -0
  184. package/kotlin/ExpoSources/expo/modules/kotlin/functions/Functions.kt +132 -0
  185. package/kotlin/ExpoSources/expo/modules/kotlin/jni/JavaScriptTypedArray.kt +81 -0
  186. package/kotlin/ExpoSources/expo/modules/kotlin/modules/Module.kt +98 -0
  187. package/kotlin/ExpoSources/expo/modules/kotlin/objects/ObjectDefinitionBuilder.kt +236 -0
  188. package/kotlin/ExpoSources/expo/modules/kotlin/records/Record.kt +12 -0
  189. package/kotlin/ExpoSources/expo/modules/kotlin/runtime/Runtime.kt +9 -0
  190. package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedObject.kt +50 -0
  191. package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedObjectRegistry.kt +57 -0
  192. package/kotlin/ExpoSources/expo/modules/kotlin/sharedobjects/SharedRef.kt +19 -0
  193. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/ConcreteTypedArrays.kt +158 -0
  194. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/GenericTypedArray.kt +8 -0
  195. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/TypedArray.kt +29 -0
  196. package/kotlin/ExpoSources/expo/modules/kotlin/typedarray/TypedArrayIterator.kt +9 -0
  197. package/kotlin/ExpoSources/expo/modules/kotlin/types/AnyType.kt +155 -0
  198. package/kotlin/ExpoSources/expo/modules/kotlin/types/Either.kt +91 -0
  199. package/kotlin/ExpoSources/expo/modules/kotlin/types/Enumerable.kt +6 -0
  200. package/kotlin/ExpoSources/expo/modules/kotlin/viewevent/ViewEvent.kt +54 -0
  201. package/kotlin/ExpoSources/expo/modules/kotlin/views/ExpoView.kt +23 -0
  202. package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewDefinitionBuilder.kt +71 -0
  203. package/kotlin/ExpoSources/expo/modules/kotlin/views/ViewProps.kt +35 -0
  204. package/kotlin/README.md +13 -3
  205. package/kotlin/Sources/android/os/Build.kt +17 -0
  206. package/kotlin/Sources/android/os/Handler.kt +35 -0
  207. package/kotlin/Sources/android/os/Looper.kt +17 -0
  208. package/kotlin/Sources/android/os/MessageQueue.kt +56 -0
  209. package/kotlin/Sources/android/os/SystemClock.kt +14 -0
  210. package/kotlin/Sources/android/util/Log.kt +64 -0
  211. package/kotlin/Sources/java/security/MessageDigest.kt +114 -0
  212. package/kotlin/Sources/kotlin/text/StringFormat.kt +9 -0
  213. package/kotlin/Sources/org/json/JSON.kt +44 -0
  214. package/kotlin/fixtures/counter/Counter.d.kt.ts +1 -0
  215. package/kotlin/fixtures/counter/Counter.kt +10 -3
  216. package/kotlin/fixtures/counter/CounterApp.native.tsx +1 -1
  217. package/kotlin/fixtures/counter/vite.config.ts +2 -2
  218. package/kotlin/fixtures/headless-counter/Headless.kt +7 -6
  219. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +7 -0
  220. package/kotlin/fixtures/import-animation/Animation.kt +80 -0
  221. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +13 -0
  222. package/kotlin/fixtures/import-animation/README.md +24 -0
  223. package/kotlin/fixtures/import-animation/app/_layout.tsx +4 -0
  224. package/kotlin/fixtures/import-animation/app/index+spa.tsx +1 -0
  225. package/kotlin/fixtures/import-animation/app/routes.d.ts +18 -0
  226. package/kotlin/fixtures/import-animation/package.json +23 -0
  227. package/kotlin/fixtures/import-animation/tsconfig.json +20 -0
  228. package/kotlin/fixtures/import-animation/vite.config.ts +20 -0
  229. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +7 -0
  230. package/kotlin/fixtures/import-editor/Editor.kt +59 -0
  231. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +23 -0
  232. package/kotlin/fixtures/import-editor/README.md +27 -0
  233. package/kotlin/fixtures/import-editor/app/_layout.tsx +4 -0
  234. package/kotlin/fixtures/import-editor/app/index+spa.tsx +1 -0
  235. package/kotlin/fixtures/import-editor/package.json +23 -0
  236. package/kotlin/fixtures/import-editor/tsconfig.json +20 -0
  237. package/kotlin/fixtures/import-editor/vite.config.ts +20 -0
  238. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +7 -0
  239. package/kotlin/fixtures/import-effects/Effects.kt +87 -0
  240. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +13 -0
  241. package/kotlin/fixtures/import-effects/README.md +19 -0
  242. package/kotlin/fixtures/import-effects/app/_layout.tsx +4 -0
  243. package/kotlin/fixtures/import-effects/app/index+spa.tsx +1 -0
  244. package/kotlin/fixtures/import-effects/package.json +23 -0
  245. package/kotlin/fixtures/import-effects/tsconfig.json +20 -0
  246. package/kotlin/fixtures/import-effects/vite.config.ts +20 -0
  247. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +13 -0
  248. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +7 -0
  249. package/kotlin/fixtures/import-layout/Layout.kt +72 -0
  250. package/kotlin/fixtures/import-layout/README.md +24 -0
  251. package/kotlin/fixtures/import-layout/app/_layout.tsx +4 -0
  252. package/kotlin/fixtures/import-layout/app/index+spa.tsx +1 -0
  253. package/kotlin/fixtures/import-layout/package.json +23 -0
  254. package/kotlin/fixtures/import-layout/tsconfig.json +20 -0
  255. package/kotlin/fixtures/import-layout/vite.config.ts +20 -0
  256. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +18 -0
  257. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +7 -0
  258. package/kotlin/fixtures/import-navigation/Navigation.kt +104 -0
  259. package/kotlin/fixtures/import-navigation/README.md +31 -0
  260. package/kotlin/fixtures/import-navigation/app/_layout.tsx +4 -0
  261. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +1 -0
  262. package/kotlin/fixtures/import-navigation/package.json +23 -0
  263. package/kotlin/fixtures/import-navigation/tsconfig.json +20 -0
  264. package/kotlin/fixtures/import-navigation/vite.config.ts +20 -0
  265. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +29 -0
  266. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +7 -0
  267. package/kotlin/fixtures/import-overlays/Overlays.kt +93 -0
  268. package/kotlin/fixtures/import-overlays/README.md +34 -0
  269. package/kotlin/fixtures/import-overlays/app/_layout.tsx +4 -0
  270. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +1 -0
  271. package/kotlin/fixtures/import-overlays/package.json +23 -0
  272. package/kotlin/fixtures/import-overlays/tsconfig.json +20 -0
  273. package/kotlin/fixtures/import-overlays/vite.config.ts +20 -0
  274. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +13 -0
  275. package/kotlin/fixtures/import-scroll/README.md +23 -0
  276. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +7 -0
  277. package/kotlin/fixtures/import-scroll/Scroll.kt +91 -0
  278. package/kotlin/fixtures/import-scroll/app/_layout.tsx +4 -0
  279. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +1 -0
  280. package/kotlin/fixtures/import-scroll/package.json +23 -0
  281. package/kotlin/fixtures/import-scroll/tsconfig.json +20 -0
  282. package/kotlin/fixtures/import-scroll/vite.config.ts +20 -0
  283. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +44 -0
  284. package/kotlin/fixtures/import-selection/README.md +32 -0
  285. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +8 -0
  286. package/kotlin/fixtures/import-selection/Selection.kt +78 -0
  287. package/kotlin/fixtures/import-selection/app/_layout.tsx +4 -0
  288. package/kotlin/fixtures/import-selection/app/index+spa.tsx +1 -0
  289. package/kotlin/fixtures/import-selection/package.json +23 -0
  290. package/kotlin/fixtures/import-selection/tsconfig.json +20 -0
  291. package/kotlin/fixtures/import-selection/vite.config.ts +20 -0
  292. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +13 -0
  293. package/kotlin/fixtures/import-surfaces/README.md +22 -0
  294. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +7 -0
  295. package/kotlin/fixtures/import-surfaces/Surfaces.kt +64 -0
  296. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +4 -0
  297. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +1 -0
  298. package/kotlin/fixtures/import-surfaces/package.json +23 -0
  299. package/kotlin/fixtures/import-surfaces/tsconfig.json +20 -0
  300. package/kotlin/fixtures/import-surfaces/vite.config.ts +20 -0
  301. package/kotlin/fixtures/import-values/ImportValues.native.tsx +35 -0
  302. package/kotlin/fixtures/import-values/README.md +23 -0
  303. package/kotlin/fixtures/import-values/Values.d.kt.ts +11 -0
  304. package/kotlin/fixtures/import-values/Values.kt +66 -0
  305. package/kotlin/fixtures/import-values/app/_layout.tsx +4 -0
  306. package/kotlin/fixtures/import-values/app/index+spa.tsx +1 -0
  307. package/kotlin/fixtures/import-values/package.json +23 -0
  308. package/kotlin/fixtures/import-values/tsconfig.json +20 -0
  309. package/kotlin/fixtures/import-values/vite.config.ts +20 -0
  310. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +38 -0
  311. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +36 -0
  312. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +3 -1
  313. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +50 -0
  314. package/kotlin/fork/NOTICE +6 -1
  315. package/kotlin/fork/README.md +15 -7
  316. package/kotlin/fork/build.sh +2 -0
  317. package/kotlin/fork/compose-worker-globals.patch +186 -4
  318. package/kotlin/fork/fork.json +2 -2
  319. package/kotlin/fork/skiko-worker-clock.patch +12 -0
  320. package/kotlin/toolchain.json +12 -12
  321. package/kotlin/tools/expo-types.main.kts +115 -0
  322. package/package.json +17 -23
  323. package/scripts/dev-server-scanner.ts +92 -66
  324. package/skills/contrast/SKILL.md +2 -2
  325. package/skills/peach-debug/SKILL.md +1 -1
  326. package/skills/peach-perf/SKILL.md +1 -1
  327. package/skills/peach-setup/SKILL.md +2 -1
  328. package/skills/peach-test/SKILL.md +8 -0
  329. package/src/assetCatalogContract.ts +43 -1
  330. package/src/bridge-contract-input.ts +46 -19
  331. package/src/bridge-contract.ts +0 -1
  332. package/src/bundle-channel.mjs +197 -84
  333. package/src/bundleGlobalFooter.ts +38 -0
  334. package/src/capture-contract.ts +107 -33
  335. package/src/cloud-contract.ts +5 -1
  336. package/src/cloud.ts +5 -2
  337. package/src/config.ts +22 -3
  338. package/src/configured-bundle-producer.ts +1 -1
  339. package/src/desktop-host-delivery.ts +95 -1
  340. package/src/dev-bundle-resolution.ts +1 -1
  341. package/src/expo-kotlin-bundle.ts +29 -0
  342. package/src/expo-kotlin-host.ts +201 -0
  343. package/src/expo-swift-host.ts +96 -76
  344. package/src/expoKotlinContract.ts +70 -0
  345. package/src/expoSwiftContract.ts +4 -25
  346. package/src/home-paths.ts +7 -4
  347. package/src/host/bridge-host.ts +23 -3
  348. package/src/host/fetch-proxy-handler.ts +13 -0
  349. package/src/host/fetch-proxy-overrides.ts +11 -0
  350. package/src/host/replacement-module-handler.ts +5 -2
  351. package/src/index.ts +3 -1
  352. package/src/kotlin-host.ts +463 -19
  353. package/src/metro-plugin.ts +56 -28
  354. package/src/metro-production-bundle.ts +2 -2
  355. package/src/native-app-identity-project.ts +190 -0
  356. package/src/native-app-identity.ts +367 -34
  357. package/src/native-firebase-config.ts +69 -15
  358. package/src/native-seam-manifest.ts +6 -0
  359. package/src/one-widget-discovery.ts +2 -1
  360. package/src/openstep-plist.ts +107 -0
  361. package/src/react-native-host-modules.ts +4 -0
  362. package/src/runtime-assets.ts +2 -2
  363. package/src/sim-client.ts +2 -2
  364. package/src/swift-binary-modules.ts +3 -1
  365. package/src/swift-compile.ts +286 -38
  366. package/src/swift-distribution-contract.ts +4 -0
  367. package/src/swift-distribution.lock.json +123 -12
  368. package/src/swift-distribution.ts +7 -3
  369. package/src/swift-host.ts +298 -83
  370. package/src/swift-package-manifest.ts +29 -2
  371. package/src/swift-package.ts +180 -10
  372. package/src/swift-packages.ts +4 -0
  373. package/src/swift-standin-emit.ts +4 -1
  374. package/src/swift-standins.ts +274 -15
  375. package/src/swift-submit.ts +62 -7
  376. package/src/swift-toolchain.ts +6 -1
  377. package/src/swiftContract.ts +126 -3
  378. package/src/vite-plugin-one.ts +13 -16
  379. package/src/vite-plugin-swift.ts +4 -5
  380. package/src/vite-plugin.ts +360 -144
  381. package/src/vite.d.ts +1 -1
  382. package/src/worker-system-chunks.ts +221 -0
  383. package/src/worklet-executable.ts +348 -38
  384. package/src/worklets-babel.ts +1 -1
  385. package/src/xcode-project.ts +243 -127
  386. package/dist-lib/agent-identity.cjs +0 -39
  387. package/dist-lib/agent-sessions.cjs +0 -760
  388. package/dist-lib/cli-constants.cjs +0 -32
  389. package/dist-lib/render-mode.cjs +0 -44
  390. package/kotlin/AppSources/android/view/View.kt +0 -74
  391. package/kotlin/AppSources/android/widget/FrameLayout.kt +0 -6
  392. package/src/render-mode.ts +0 -15
  393. /package/kotlin/{AppSources → AndroidViewSources}/android/content/Context.kt +0 -0
  394. /package/kotlin/{AppSources → AndroidViewSources}/android/content/res/Configuration.kt +0 -0
  395. /package/kotlin/{AppSources → AndroidViewSources}/android/graphics/Color.kt +0 -0
  396. /package/kotlin/{AppSources → AndroidViewSources}/android/util/DisplayMetrics.kt +0 -0
  397. /package/kotlin/{AppSources → AndroidViewSources}/dev/peach/app/JavaFormat.kt +0 -0
  398. /package/kotlin/{AppSources → Sources}/java/lang/Runnable.kt +0 -0
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.940 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! peach v0.1.1400 | (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;
@@ -33,13 +33,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
33
33
  var vite_plugin_one_exports = {};
34
34
  __export(vite_plugin_one_exports, {
35
35
  default: () => vite_plugin_one_default,
36
- rnxPlugin: () => rnxPlugin,
37
- sootsimPlugin: () => sootsimPlugin
36
+ peachPlugin: () => peachPlugin
38
37
  });
39
38
  module.exports = __toCommonJS(vite_plugin_one_exports);
40
39
  var import_fs2 = __toESM(require("fs"), 1);
41
40
  var import_node_crypto3 = require("node:crypto");
42
- var import_node_module2 = require("node:module");
41
+ var import_node_url = require("node:url");
43
42
  var import_path2 = __toESM(require("path"), 1);
44
43
  var import_ws = require("ws");
45
44
 
@@ -554,6 +553,7 @@ async function handleReplacementModuleRequest(req, res, options = {}) {
554
553
  } catch {
555
554
  return false;
556
555
  }
556
+ if (url.pathname !== REPLACEMENT_MODULE_ROUTE) return false;
557
557
  if (options.requireLoopbackOrigin) {
558
558
  const origin = req.headers.origin;
559
559
  const remoteAddress = req.socket.remoteAddress?.replace(/^::ffff:/, "");
@@ -571,7 +571,6 @@ async function handleReplacementModuleRequest(req, res, options = {}) {
571
571
  return true;
572
572
  }
573
573
  }
574
- if (url.pathname !== REPLACEMENT_MODULE_ROUTE) return false;
575
574
  if (options.requestToken && url.searchParams.get("token") !== options.requestToken) {
576
575
  res.writeHead(403, { "Content-Type": "text/plain; charset=utf-8" });
577
576
  res.end("replacement module request token is invalid");
@@ -720,6 +719,8 @@ var SWIFT_HMR_PATH = "/__peach/swift-hmr";
720
719
  var MAX_SWIFT_COMPILE_SOURCE_BYTES = 2 * 1024 * 1024;
721
720
  var MAX_SWIFT_COMPILE_RESOURCE_BYTES = 2 * 1024 * 1024;
722
721
  var MAX_SWIFT_COMPILE_RESOURCE_TOTAL_BYTES = 8 * 1024 * 1024;
722
+ var MAX_SWIFT_COMPILE_METAL_BYTES = 2 * 1024 * 1024;
723
+ var MAX_SWIFT_COMPILE_METAL_TOTAL_BYTES = 8 * 1024 * 1024;
723
724
  var MAX_SWIFT_COMPILE_IMAGE_BYTES = 4 * 1024 * 1024;
724
725
  var MAX_SWIFT_COMPILE_IMAGE_TOTAL_BYTES = 16 * 1024 * 1024;
725
726
 
@@ -1072,8 +1073,8 @@ var loadSwiftHost = () => swiftHost ??= import("peachsim/vite-swift");
1072
1073
  var KOTLIN_ROUTE_PREFIX = "/__peach/kotlin";
1073
1074
  var kotlinHost;
1074
1075
  var loadKotlinHost = () => kotlinHost ??= import("peachsim/kotlin-host");
1075
- function rnxPlugin(options = {}) {
1076
- const prefix = options.prefix || "/__soot";
1076
+ function peachPlugin(options = {}) {
1077
+ const prefix = options.prefix || "/__peachsim";
1077
1078
  return {
1078
1079
  name: "sootsim-one",
1079
1080
  // use-latest-callback ships a CJS main (module.exports, no default) with
@@ -1094,12 +1095,9 @@ function rnxPlugin(options = {}) {
1094
1095
  let swiftModuleRoot;
1095
1096
  const moduleRootFor = () => {
1096
1097
  if (swiftModuleRoot === void 0) {
1097
- const peachsimPackage = (0, import_node_module2.createRequire)(
1098
- import_path2.default.join(server.config.root, "package.json")
1099
- ).resolve("peachsim/package.json");
1100
1098
  const moduleRoot = import_path2.default.resolve(
1101
- import_path2.default.dirname(peachsimPackage),
1102
- "../sootsim-swift"
1099
+ import_path2.default.dirname((0, import_node_url.fileURLToPath)(__sootsim_import_meta_url)),
1100
+ "../../sootsim-swift"
1103
1101
  );
1104
1102
  swiftModuleRoot = import_fs2.default.existsSync(import_path2.default.join(moduleRoot, "toolchain.json")) ? moduleRoot : null;
1105
1103
  }
@@ -1186,7 +1184,7 @@ function rnxPlugin(options = {}) {
1186
1184
  if (!pathname.startsWith(KOTLIN_ROUTE_PREFIX)) return next();
1187
1185
  loadKotlinHost().then(async (host) => {
1188
1186
  if (!kotlinModuleRoot) {
1189
- kotlinModuleRoot = host.peachKotlinModuleRoot(server.config.root);
1187
+ kotlinModuleRoot = host.peachKotlinModuleRoot();
1190
1188
  server.watcher.add(import_path2.default.join(kotlinModuleRoot, "Sources"));
1191
1189
  }
1192
1190
  const served = await host.serveKotlinRequest(pathname, res, {
@@ -1410,10 +1408,8 @@ function rnxPlugin(options = {}) {
1410
1408
  }
1411
1409
  };
1412
1410
  }
1413
- var sootsimPlugin = rnxPlugin;
1414
- var vite_plugin_one_default = rnxPlugin;
1411
+ var vite_plugin_one_default = peachPlugin;
1415
1412
  // Annotate the CommonJS export names for ESM import in node:
1416
1413
  0 && (module.exports = {
1417
- rnxPlugin,
1418
- sootsimPlugin
1414
+ peachPlugin
1419
1415
  });
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.940 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! peach v0.1.1400 | (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;
@@ -30,51 +30,266 @@ var import_acorn = require("acorn");
30
30
  function isNode(value) {
31
31
  return value !== null && typeof value === "object" && typeof Reflect.get(value, "type") === "string";
32
32
  }
33
- function walk(node, visit) {
34
- visit(node);
35
- for (const value of Object.values(node)) {
36
- if (isNode(value)) walk(value, visit);
37
- else if (Array.isArray(value)) {
38
- for (const child of value) if (isNode(child)) walk(child, visit);
39
- }
40
- }
33
+ function childNodes(value) {
34
+ return Array.isArray(value) ? value.filter(isNode) : [];
35
+ }
36
+ function identifierName(node) {
37
+ if (!isNode(node) || node.type !== "Identifier") return void 0;
38
+ const name = Reflect.get(node, "name");
39
+ return typeof name === "string" ? name : void 0;
41
40
  }
42
41
  function propertyName(node) {
43
42
  if (!isNode(node)) return void 0;
44
43
  const name = Reflect.get(node, node.type === "Identifier" ? "name" : "value");
45
44
  return typeof name === "string" ? name : void 0;
46
45
  }
47
- function workletExecutableBodies(syntax) {
48
- if (!isNode(syntax)) throw new Error("peach: expected worklet syntax");
49
- const tree = syntax;
50
- const initNames = /* @__PURE__ */ new Set();
51
- const objects = /* @__PURE__ */ new Set();
52
- walk(tree, (node) => {
53
- if (node.type !== "AssignmentExpression") return;
54
- const left = Reflect.get(node, "left");
55
- if (!isNode(left) || left.type !== "MemberExpression" || propertyName(Reflect.get(left, "property")) !== "__initData")
46
+ function keyName(owner, key) {
47
+ if (Reflect.get(owner, "computed") === true && isNode(key) && key.type === "Identifier")
48
+ return void 0;
49
+ return propertyName(key);
50
+ }
51
+ function patternNames(node) {
52
+ if (!isNode(node)) return [];
53
+ switch (node.type) {
54
+ case "Identifier": {
55
+ const name = identifierName(node);
56
+ return name === void 0 ? [] : [name];
57
+ }
58
+ case "AssignmentPattern":
59
+ return patternNames(Reflect.get(node, "left"));
60
+ case "RestElement":
61
+ return patternNames(Reflect.get(node, "argument"));
62
+ case "ArrayPattern":
63
+ return childNodes(Reflect.get(node, "elements")).flatMap(patternNames);
64
+ case "ObjectPattern":
65
+ return childNodes(Reflect.get(node, "properties")).flatMap(
66
+ (property) => patternNames(
67
+ property.type === "Property" || property.type === "ObjectProperty" ? Reflect.get(property, "value") : property
68
+ )
69
+ );
70
+ default:
71
+ return [];
72
+ }
73
+ }
74
+ var FUNCTION_TYPES = /* @__PURE__ */ new Set([
75
+ "FunctionDeclaration",
76
+ "FunctionExpression",
77
+ "ArrowFunctionExpression"
78
+ ]);
79
+ var MAX_RESOLUTION_DEPTH = 32;
80
+ function newScope(parent, hoist) {
81
+ return { parent, hoist, names: /* @__PURE__ */ new Map() };
82
+ }
83
+ function hoistScope(scope) {
84
+ let current = scope;
85
+ while (!current.hoist && current.parent) current = current.parent;
86
+ return current;
87
+ }
88
+ function declare(scope, name, binding) {
89
+ scope.names.set(name, scope.names.has(name) ? { kind: "opaque" } : binding);
90
+ }
91
+ function declareOpaque(scope, names) {
92
+ for (const name of names) declare(scope, name, { kind: "opaque" });
93
+ }
94
+ function lookup(scope, name) {
95
+ for (let current = scope; current; current = current.parent) {
96
+ const binding = current.names.get(name);
97
+ if (binding) return binding;
98
+ }
99
+ return void 0;
100
+ }
101
+ function declareParam(inner, fn, index, param) {
102
+ const name = identifierName(param);
103
+ if (name !== void 0) {
104
+ declare(inner, name, { kind: "param", fn, index });
105
+ return;
106
+ }
107
+ if (!isNode(param) || param.type !== "ObjectPattern") {
108
+ declareOpaque(inner, patternNames(param));
109
+ return;
110
+ }
111
+ for (const property of childNodes(Reflect.get(param, "properties"))) {
112
+ const key = keyName(property, Reflect.get(property, "key"));
113
+ const value = Reflect.get(property, "value");
114
+ const valueName = identifierName(value);
115
+ if (key !== void 0 && valueName !== void 0 && ["Property", "ObjectProperty"].includes(property.type))
116
+ declare(inner, valueName, { kind: "param", fn, index, key });
117
+ else
118
+ declareOpaque(
119
+ inner,
120
+ patternNames(property.type === "RestElement" ? property : value)
121
+ );
122
+ }
123
+ }
124
+ function enter(node, scope) {
125
+ switch (node.type) {
126
+ case "FunctionDeclaration":
127
+ case "FunctionExpression":
128
+ case "ArrowFunctionExpression": {
129
+ const inner = newScope(scope, true);
130
+ const params = Reflect.get(node, "params");
131
+ if (Array.isArray(params)) {
132
+ params.forEach((param, index) => declareParam(inner, node, index, param));
133
+ }
134
+ const id = Reflect.get(node, "id");
135
+ if (node.type === "FunctionExpression") declareOpaque(inner, patternNames(id));
136
+ if (node.type === "FunctionDeclaration") {
137
+ declareOpaque(scope, patternNames(id));
138
+ declareOpaque(hoistScope(scope), patternNames(id));
139
+ }
140
+ return inner;
141
+ }
142
+ case "BlockStatement":
143
+ case "ForStatement":
144
+ case "ForInStatement":
145
+ case "ForOfStatement":
146
+ case "SwitchStatement":
147
+ case "StaticBlock":
148
+ return newScope(scope, false);
149
+ case "CatchClause": {
150
+ const inner = newScope(scope, false);
151
+ declareOpaque(inner, patternNames(Reflect.get(node, "param")));
152
+ return inner;
153
+ }
154
+ case "VariableDeclaration": {
155
+ const target = Reflect.get(node, "kind") === "var" ? hoistScope(scope) : scope;
156
+ for (const declarator of childNodes(Reflect.get(node, "declarations"))) {
157
+ const id = Reflect.get(declarator, "id");
158
+ const init = Reflect.get(declarator, "init");
159
+ const name = identifierName(id);
160
+ if (name !== void 0 && isNode(init))
161
+ declare(target, name, { kind: "value", init, scope });
162
+ else declareOpaque(target, patternNames(id));
163
+ }
164
+ return scope;
165
+ }
166
+ case "ImportDeclaration":
167
+ for (const specifier of childNodes(Reflect.get(node, "specifiers")))
168
+ declareOpaque(scope, patternNames(Reflect.get(specifier, "local")));
169
+ return scope;
170
+ case "ClassDeclaration":
171
+ declareOpaque(scope, patternNames(Reflect.get(node, "id")));
172
+ return scope;
173
+ default:
174
+ return scope;
175
+ }
176
+ }
177
+ function recordWrites(target, scope, collection) {
178
+ for (const name of patternNames(target)) collection.writes.push({ name, scope });
179
+ }
180
+ function record(node, scope, collection) {
181
+ switch (node.type) {
182
+ case "AssignmentExpression": {
183
+ const left = Reflect.get(node, "left");
184
+ const right = Reflect.get(node, "right");
185
+ if (isNode(left) && left.type === "MemberExpression" && keyName(left, Reflect.get(left, "property")) === "__initData" && isNode(right))
186
+ collection.inits.push({ value: right, scope });
187
+ recordWrites(left, scope, collection);
56
188
  return;
57
- const right = Reflect.get(node, "right");
58
- if (!isNode(right)) return;
59
- if (right.type === "ObjectExpression") objects.add(right);
60
- else if (right.type === "Identifier") {
61
- const name = propertyName(right);
62
- if (name) initNames.add(name);
63
189
  }
64
- });
65
- walk(tree, (node) => {
66
- if (node.type !== "VariableDeclarator") return;
67
- const name = propertyName(Reflect.get(node, "id"));
68
- const init = Reflect.get(node, "init");
69
- if (name && initNames.has(name) && isNode(init) && init.type === "ObjectExpression") {
70
- objects.add(init);
190
+ case "UpdateExpression":
191
+ recordWrites(Reflect.get(node, "argument"), scope, collection);
192
+ return;
193
+ case "ForInStatement":
194
+ case "ForOfStatement":
195
+ recordWrites(Reflect.get(node, "left"), scope, collection);
196
+ return;
197
+ case "CallExpression": {
198
+ const callee = Reflect.get(node, "callee");
199
+ if (isNode(callee) && FUNCTION_TYPES.has(callee.type))
200
+ collection.immediate.set(callee, { call: node, scope });
201
+ return;
71
202
  }
72
- });
203
+ default:
204
+ return;
205
+ }
206
+ }
207
+ function visit(node, scope, collection) {
208
+ record(node, scope, collection);
209
+ const inner = enter(node, scope);
210
+ for (const value of Object.values(node)) {
211
+ if (isNode(value)) visit(value, inner, collection);
212
+ else for (const child of childNodes(value)) visit(child, inner, collection);
213
+ }
214
+ }
215
+ function collectInitData(root) {
216
+ const collection = {
217
+ inits: [],
218
+ immediate: /* @__PURE__ */ new Map(),
219
+ writes: [],
220
+ reassigned: /* @__PURE__ */ new Set()
221
+ };
222
+ visit(root, newScope(void 0, true), collection);
223
+ for (const { name, scope } of collection.writes) {
224
+ const binding = lookup(scope, name);
225
+ if (binding) collection.reassigned.add(binding);
226
+ }
227
+ return collection;
228
+ }
229
+ function immediateArgument(fn, index, collection) {
230
+ const immediate = collection.immediate.get(fn);
231
+ const args = immediate && Reflect.get(immediate.call, "arguments");
232
+ if (!immediate || !Array.isArray(args)) return void 0;
233
+ const preceding = args.slice(0, index + 1);
234
+ if (preceding.some((arg) => isNode(arg) && arg.type === "SpreadElement"))
235
+ return void 0;
236
+ return { argument: args[index], scope: immediate.scope };
237
+ }
238
+ function propertyValue(object, name) {
239
+ let value;
240
+ for (const property of childNodes(Reflect.get(object, "properties"))) {
241
+ if (property.type === "SpreadElement") return void 0;
242
+ if (!["Property", "ObjectProperty"].includes(property.type)) continue;
243
+ if (keyName(property, Reflect.get(property, "key")) !== name) continue;
244
+ const next = Reflect.get(property, "value");
245
+ value = isNode(next) ? next : void 0;
246
+ }
247
+ return value;
248
+ }
249
+ function resolveProperty(owner, name, collection, depth) {
250
+ if (!owner) return void 0;
251
+ const value = propertyValue(owner.object, name);
252
+ return value && resolveObject(value, owner.scope, collection, depth + 1);
253
+ }
254
+ function resolveObject(expression, scope, collection, depth) {
255
+ if (depth > MAX_RESOLUTION_DEPTH) return void 0;
256
+ if (expression.type === "ObjectExpression") return { object: expression, scope };
257
+ if (expression.type === "Identifier") {
258
+ const name = identifierName(expression);
259
+ const binding = name === void 0 ? void 0 : lookup(scope, name);
260
+ if (!binding || collection.reassigned.has(binding)) return void 0;
261
+ if (binding.kind === "value")
262
+ return resolveObject(binding.init, binding.scope, collection, depth + 1);
263
+ if (binding.kind === "param") {
264
+ const passed = immediateArgument(binding.fn, binding.index, collection);
265
+ if (!passed || !isNode(passed.argument)) return void 0;
266
+ const argument = resolveObject(passed.argument, passed.scope, collection, depth + 1);
267
+ return binding.key === void 0 ? argument : resolveProperty(argument, binding.key, collection, depth);
268
+ }
269
+ return void 0;
270
+ }
271
+ if (expression.type === "MemberExpression") {
272
+ const name = keyName(expression, Reflect.get(expression, "property"));
273
+ const object = Reflect.get(expression, "object");
274
+ if (name === void 0 || !isNode(object)) return void 0;
275
+ const owner = resolveObject(object, scope, collection, depth + 1);
276
+ return resolveProperty(owner, name, collection, depth);
277
+ }
278
+ return void 0;
279
+ }
280
+ function workletExecutableBodies(syntax, includeCompiled = false) {
281
+ if (!isNode(syntax)) throw new Error("peach: expected worklet syntax");
282
+ const collection = collectInitData(syntax);
283
+ const objects = /* @__PURE__ */ new Set();
284
+ for (const { value, scope } of collection.inits) {
285
+ const resolved = resolveObject(value, scope, collection, 0);
286
+ if (resolved) objects.add(resolved.object);
287
+ }
73
288
  const bodies = [];
74
289
  for (const object of objects) {
75
290
  const properties = Reflect.get(object, "properties");
76
291
  if (!Array.isArray(properties)) continue;
77
- if (properties.some(
292
+ if (!includeCompiled && properties.some(
78
293
  (property2) => isNode(property2) && propertyName(Reflect.get(property2, "key")) === "__peachExecutable"
79
294
  ))
80
295
  continue;