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
@@ -3,9 +3,10 @@ import type { ConfiguredOneWidget } from './oneWidgetContract'
3
3
 
4
4
  export async function readConfiguredOneWidget(
5
5
  bundleUrl: string,
6
+ fetchScan: (url: string, init: RequestInit) => Promise<Response> = fetch,
6
7
  ): Promise<ConfiguredOneWidget | null> {
7
8
  try {
8
- const response = await fetch(new URL('/__server-scan', bundleUrl).href, {
9
+ const response = await fetchScan(new URL('/__server-scan', bundleUrl).href, {
9
10
  signal: AbortSignal.timeout(30_000),
10
11
  })
11
12
  if (!response.ok || !response.headers.get('content-type')?.includes('json'))
@@ -0,0 +1,107 @@
1
+ export type PlistValue = string | PlistValue[] | { [key: string]: PlistValue }
2
+ export type PlistDict = { [key: string]: PlistValue }
3
+
4
+ export const isDict = (value: PlistValue | undefined): value is PlistDict =>
5
+ typeof value === 'object' && value !== null && !Array.isArray(value)
6
+
7
+ export const str = (value: PlistValue | undefined): string | undefined =>
8
+ typeof value === 'string' ? value : undefined
9
+
10
+ export const list = (value: PlistValue | undefined): string[] =>
11
+ Array.isArray(value)
12
+ ? value.filter((item): item is string => typeof item === 'string')
13
+ : []
14
+
15
+ // project.pbxproj is an old-style (openstep) property list: dictionaries,
16
+ // arrays and strings, with c comments. node's plist package reads only xml.
17
+ export function parseOpenStepPlist(text: string): PlistValue {
18
+ let i = 0
19
+ const fail = (message: string): never => {
20
+ const line = text.slice(0, i).split('\n').length
21
+ throw new Error(`project.pbxproj line ${line}: ${message}`)
22
+ }
23
+ const skip = () => {
24
+ for (;;) {
25
+ const ch = text[i]
26
+ if (ch === ' ' || ch === '\t' || ch === '\n' || ch === '\r') i++
27
+ else if (ch === '/' && text[i + 1] === '*') {
28
+ const end = text.indexOf('*/', i + 2)
29
+ if (end < 0) fail('unterminated comment')
30
+ i = end + 2
31
+ } else if (ch === '/' && text[i + 1] === '/') {
32
+ const end = text.indexOf('\n', i)
33
+ i = end < 0 ? text.length : end + 1
34
+ } else return
35
+ }
36
+ }
37
+ const quoted = (): string => {
38
+ i++
39
+ let out = ''
40
+ for (;;) {
41
+ const ch = text[i++]
42
+ if (ch === undefined) fail('unterminated string')
43
+ if (ch === '"') return out
44
+ if (ch !== '\\') {
45
+ out += ch
46
+ continue
47
+ }
48
+ const next = text[i++]
49
+ if (next === 'n') out += '\n'
50
+ else if (next === 't') out += '\t'
51
+ else if (next === 'r') out += '\r'
52
+ else if (next === 'U') {
53
+ out += String.fromCharCode(parseInt(text.slice(i, i + 4), 16))
54
+ i += 4
55
+ } else out += next
56
+ }
57
+ }
58
+ const value = (): PlistValue => {
59
+ skip()
60
+ const ch = text[i]
61
+ if (ch === '{') {
62
+ i++
63
+ const dict: PlistDict = {}
64
+ for (;;) {
65
+ skip()
66
+ if (text[i] === '}') {
67
+ i++
68
+ return dict
69
+ }
70
+ const key = value()
71
+ if (typeof key !== 'string') fail('dictionary key is not a string')
72
+ skip()
73
+ if (text[i++] !== '=') fail('expected =')
74
+ // two objects under one id leave every reference to it ambiguous
75
+ if (Object.hasOwn(dict, key as string)) fail(`duplicate key ${key}`)
76
+ dict[key as string] = value()
77
+ skip()
78
+ if (text[i++] !== ';') fail('expected ;')
79
+ }
80
+ }
81
+ if (ch === '(') {
82
+ i++
83
+ const list: PlistValue[] = []
84
+ for (;;) {
85
+ skip()
86
+ if (text[i] === ')') {
87
+ i++
88
+ return list
89
+ }
90
+ list.push(value())
91
+ skip()
92
+ if (text[i] === ',') i++
93
+ else if (text[i] !== ')') fail('expected , or )')
94
+ }
95
+ }
96
+ if (ch === '"') return quoted()
97
+ const start = i
98
+ while (i < text.length && /[A-Za-z0-9_$+/:.\-<>]/.test(text[i]!)) i++
99
+ if (i === start) fail(`unexpected ${JSON.stringify(ch ?? 'end of file')}`)
100
+ return text.slice(start, i)
101
+ }
102
+ if (text.startsWith('// !$*UTF8*$!')) i = text.indexOf('\n') + 1
103
+ const root = value()
104
+ skip()
105
+ if (i !== text.length) fail('trailing content')
106
+ return root
107
+ }
@@ -6,6 +6,10 @@
6
6
  * preserves upstream platform, style, event-emitter, and TurboModule behavior.
7
7
  */
8
8
  export const REACT_NATIVE_PASSTHROUGH_SPECIFIERS: readonly string[] = [
9
+ // sdk 58 reads these upstream getters and wraps the original metro logger.
10
+ 'react-native/unstable-internals-do-not-use',
11
+ 'react-native/src/unstable-internals-do-not-use',
12
+ 'react-native/Libraries/Utilities/HMRClient',
9
13
  'react-native/Libraries/vendor/emitter',
10
14
  'react-native/Libraries/Components/View/ReactNativeStyleAttributes',
11
15
  'react-native/Libraries/StyleSheet',
@@ -16,12 +16,12 @@ export const SOOTSIM_RUNTIME_MISSING_MESSAGE =
16
16
  //
17
17
  // there is exactly one rule for which engine gets served: INSIDE the Contrast
18
18
  // monorepo dev checkout the fresh dev-stack build (public/sootsim, kept current
19
- // by `bun dev`'s watch:sootsim) IS the engine; OUTSIDE it (a published CLI in a
19
+ // by `bun dev`'s watch:peach) IS the engine; OUTSIDE it (a published CLI in a
20
20
  // user's project, or an isolated home) the installed runtime IS. this is a mode
21
21
  // boundary, not a preference or a runtime fallback chain — the check is
22
22
  // structural (the monorepo layout is present next to this module) and
23
23
  // deterministic (the dev build's files exist). it exists because the daemon and
24
- // the /__soot plugin otherwise serve ~/.peach/runtimes/<active>, a PUBLISHED
24
+ // the /__peachsim plugin otherwise serve ~/.peach/runtimes/<active>, a PUBLISHED
25
25
  // runtime that `bun dev` never refreshes, so local engine edits are invisible
26
26
  // until a manual publish — the silent trap that cost a full night of
27
27
  // already-fixed bugs re-reproducing.
package/src/sim-client.ts CHANGED
@@ -196,11 +196,11 @@ const TARGET_SEARCH_PARAMS = [
196
196
  export function buildSimOpenUrl(currentUrl: string, target: number | string): string {
197
197
  const url = new URL(currentUrl)
198
198
  for (const param of TARGET_SEARCH_PARAMS) url.searchParams.delete(param)
199
- // shell route grammar: an optional /__soot prefix, then /rn, /rn/<port>, or
199
+ // shell route grammar: an optional /__peachsim prefix, then /rn, /rn/<port>, or
200
200
  // /app/<name>. the current route is replaced wholesale, keeping the prefix.
201
201
  const pathname = url.pathname.replace(/\/+$/, '') || '/'
202
202
  const prefix =
203
- pathname === '/__soot' || pathname.startsWith('/__soot/') ? '/__soot' : ''
203
+ pathname === '/__peachsim' || pathname.startsWith('/__peachsim/') ? '/__peachsim' : ''
204
204
  const normalized = String(target).trim()
205
205
  if (/^\d+$/.test(normalized)) {
206
206
  // `/rn/<port>` — the shell's own connect route resolves the metro bundle
@@ -23,9 +23,11 @@ function frameworkModules(paths: string[]): string[] {
23
23
  return [...modules].sort()
24
24
  }
25
25
 
26
+ // byte offsets index the archive itself: a host that gzips range responses
27
+ // (dl.google.com) otherwise answers with offsets into its compressed copy.
26
28
  async function range(url: string, spec: string) {
27
29
  const response = await fetch(url, {
28
- headers: { range: `bytes=${spec}` },
30
+ headers: { range: `bytes=${spec}`, 'accept-encoding': 'identity' },
29
31
  signal: AbortSignal.timeout(20_000),
30
32
  })
31
33
  const match = /^bytes (\d+)-\d+\/(\d+)$/.exec(