peachsim 0.1.1641 → 0.1.1653

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 (618) hide show
  1. package/README.md +12 -0
  2. package/cli/app-bundle-resources.ts +57 -0
  3. package/cli/app-catalog.ts +1 -1
  4. package/cli/app-fonts.ts +11 -80
  5. package/cli/app-splash.ts +18 -12
  6. package/cli/bridge-flow-runner.ts +11 -7
  7. package/cli/cloud-client.ts +10 -13
  8. package/cli/command-registry.ts +13 -4
  9. package/cli/commands/box.ts +4 -4
  10. package/cli/commands/control.ts +105 -53
  11. package/cli/commands/coverage-parser.ts +67 -0
  12. package/cli/commands/coverage.ts +550 -0
  13. package/cli/commands/debug.ts +9 -18
  14. package/cli/commands/desktop.ts +19 -7
  15. package/cli/commands/device.ts +14 -9
  16. package/cli/commands/guest-host.ts +6 -10
  17. package/cli/commands/inspect/core.ts +81 -17
  18. package/cli/commands/inspect.ts +13 -8
  19. package/cli/commands/kotlin.ts +2 -2
  20. package/cli/commands/maestro-compare.ts +1 -1
  21. package/cli/commands/platform.ts +20 -11
  22. package/cli/commands/preview.ts +16 -18
  23. package/cli/commands/runtime.ts +3 -2
  24. package/cli/commands/screenshot-layers.ts +1 -1
  25. package/cli/commands/screenshot.ts +1 -1
  26. package/cli/commands/serve.ts +5 -1
  27. package/cli/commands/support.ts +4 -4
  28. package/cli/commands/three-mode.ts +22 -15
  29. package/cli/commands/upload.ts +44 -45
  30. package/cli/current-sim.ts +38 -0
  31. package/cli/desktop-companion.ts +36 -8
  32. package/cli/device-option.ts +1 -1
  33. package/cli/drivers/playwright.ts +40 -0
  34. package/cli/drivers/types.ts +4 -0
  35. package/cli/help-core.ts +1 -1
  36. package/cli/internal-child.ts +2 -1
  37. package/cli/main.ts +9 -3
  38. package/cli/outbound-endpoints.ts +15 -5
  39. package/cli/output-redaction.ts +39 -14
  40. package/cli/remote-simulators.ts +4 -1
  41. package/cli/scene-video.ts +5 -2
  42. package/cli/send-to-box.ts +7 -10
  43. package/cli/telemetry.ts +1 -1
  44. package/cli/ws-bridge.ts +8 -1
  45. package/detox/attempt-events.cjs +3 -1
  46. package/detox/attempt-events.d.cts +1 -1
  47. package/detox/expectations.ts +108 -99
  48. package/detox/frame-offset.d.mts +6 -0
  49. package/detox/frame-offset.mjs +35 -0
  50. package/detox/gestures.ts +6 -18
  51. package/detox/index.ts +169 -101
  52. package/detox/jest-preset.cjs +1 -3
  53. package/detox/jest-transform.cjs +4 -0
  54. package/detox/matchers.ts +3 -0
  55. package/detox/motion-change.cjs +52 -118
  56. package/detox/motion-change.d.cts +6 -27
  57. package/detox/motion-leg-starts.cjs +20 -0
  58. package/detox/motion-leg-starts.d.cts +8 -0
  59. package/dist-lib/agent-daemon-client.cjs +1 -1
  60. package/dist-lib/agent-events.cjs +1 -1
  61. package/dist-lib/attached-projects.cjs +1 -1
  62. package/dist-lib/auth/shared-session.cjs +1 -1
  63. package/dist-lib/backend-origin.cjs +3 -3
  64. package/dist-lib/beta.cjs +1 -1
  65. package/dist-lib/beta.mjs +1 -1
  66. package/dist-lib/bridge-constants.cjs +1 -1
  67. package/dist-lib/bridge-contract-input.cjs +65 -1
  68. package/dist-lib/bridge-contract-input.mjs +63 -1
  69. package/dist-lib/bridge-contract.cjs +19 -1
  70. package/dist-lib/bridge-contract.mjs +17 -1
  71. package/dist-lib/bundle-channel.cjs +38332 -14940
  72. package/dist-lib/capture-contract.cjs +1 -1
  73. package/dist-lib/capture-contract.mjs +1 -1
  74. package/dist-lib/cloud-contract.cjs +1 -1
  75. package/dist-lib/cloud-contract.mjs +1 -1
  76. package/dist-lib/cloud-test-args.cjs +1 -1
  77. package/dist-lib/cloud-test-args.mjs +1 -1
  78. package/dist-lib/cloud.cjs +1 -1
  79. package/dist-lib/cloud.mjs +1 -1
  80. package/dist-lib/config.cjs +1 -1
  81. package/dist-lib/config.mjs +5 -3
  82. package/dist-lib/detox/index.cjs +1247 -4511
  83. package/dist-lib/detox/jest-preset.cjs +1 -3
  84. package/dist-lib/detox/jest-transform.cjs +4 -0
  85. package/dist-lib/dev-bundle-resolution.cjs +28 -24
  86. package/dist-lib/expo-swift-bundle.cjs +35243 -13172
  87. package/dist-lib/expo-swift-metadata.cjs +1 -1
  88. package/dist-lib/expo-swift-metadata.mjs +1 -1
  89. package/dist-lib/home-paths.cjs +1 -1
  90. package/dist-lib/host/bridge-host.cjs +45285 -63163
  91. package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
  92. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  93. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  94. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  95. package/dist-lib/host/websocket-proxy.cjs +1 -1
  96. package/dist-lib/index.cjs +1997 -2069
  97. package/dist-lib/jump-to-source-babel.cjs +1 -1
  98. package/dist-lib/jump-to-source-native.cjs +1 -1
  99. package/dist-lib/kotlin-host.cjs +2 -2
  100. package/dist-lib/menu.cjs +14 -6
  101. package/dist-lib/menu.mjs +14 -6
  102. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  103. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  104. package/dist-lib/metro-production-bundle.cjs +1 -1
  105. package/dist-lib/metro-production-bundle.mjs +1 -1
  106. package/dist-lib/metro.cjs +468 -563
  107. package/dist-lib/native-app-identity-project.cjs +128 -292
  108. package/dist-lib/native-app-identity-project.mjs +1262 -51
  109. package/dist-lib/native-app-identity.cjs +8 -3
  110. package/dist-lib/native-app-identity.mjs +8 -3
  111. package/dist-lib/native-firebase-metadata.cjs +1 -1
  112. package/dist-lib/native-firebase-metadata.mjs +1 -1
  113. package/dist-lib/plist.cjs +2 -244
  114. package/dist-lib/plist.mjs +1 -1
  115. package/dist-lib/profiles.cjs +1 -1
  116. package/dist-lib/public-brand.cjs +1 -1
  117. package/dist-lib/public-origins-lib-esm.json +290 -0
  118. package/dist-lib/public-origins-lib-static.json +1 -0
  119. package/dist-lib/public-origins-lib.json +1852 -0
  120. package/dist-lib/react-native-host-modules.cjs +1 -1
  121. package/dist-lib/react-native-host-modules.mjs +1 -1
  122. package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
  123. package/dist-lib/sdk.cjs +84 -16
  124. package/dist-lib/sdk.mjs +82 -15
  125. package/dist-lib/skills.cjs +51248 -75450
  126. package/dist-lib/swift-compile.cjs +26154 -1245
  127. package/dist-lib/swift-compile.mjs +26151 -1230
  128. package/dist-lib/swift-package.cjs +79 -1
  129. package/dist-lib/swift-package.mjs +75 -1
  130. package/dist-lib/swift-submit.cjs +1 -1
  131. package/dist-lib/swift-submit.mjs +1 -1
  132. package/dist-lib/swift-toolchain.cjs +1 -1
  133. package/dist-lib/swift.cjs +1 -1
  134. package/dist-lib/vite-swift.cjs +34394 -12323
  135. package/dist-lib/vite.cjs +373 -298
  136. package/dist-lib/worklet-executable.cjs +1 -1
  137. package/dist-lib/worklet-executable.mjs +1 -1
  138. package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
  139. package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
  140. package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
  141. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
  142. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
  143. package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
  144. package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
  145. package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
  146. package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
  147. package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
  148. package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
  149. package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
  150. package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
  151. package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
  152. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
  153. package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
  154. package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
  155. package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
  156. package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
  157. package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
  158. package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
  159. package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
  160. package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
  161. package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
  162. package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
  163. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
  164. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
  165. package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
  166. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
  167. package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
  168. package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
  169. package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
  170. package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
  171. package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
  172. package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
  173. package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
  174. package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
  175. package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
  176. package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
  177. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
  178. package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
  179. package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
  180. package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
  181. package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
  182. package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
  183. package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
  184. package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
  185. package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
  186. package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
  187. package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
  188. package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
  189. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
  190. package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
  191. package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
  192. package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
  193. package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
  194. package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
  195. package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
  196. package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
  197. package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
  198. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
  199. package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
  200. package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
  201. package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
  202. package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
  203. package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
  204. package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
  205. package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
  206. package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
  207. package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
  208. package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
  209. package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
  210. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
  211. package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
  212. package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
  213. package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
  214. package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
  215. package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
  216. package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
  217. package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
  218. package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
  219. package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
  220. package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
  221. package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
  222. package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
  223. package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
  224. package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
  225. package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
  226. package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
  227. package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
  228. package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
  229. package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
  230. package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
  231. package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
  232. package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
  233. package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
  234. package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
  235. package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
  236. package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
  237. package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
  238. package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
  239. package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
  240. package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
  241. package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
  242. package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
  243. package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
  244. package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
  245. package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
  246. package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
  247. package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
  248. package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
  249. package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
  250. package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
  251. package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
  252. package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
  253. package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
  254. package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
  255. package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
  256. package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
  257. package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
  258. package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
  259. package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
  260. package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
  261. package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
  262. package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
  263. package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
  264. package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
  265. package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
  266. package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
  267. package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
  268. package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
  269. package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
  270. package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
  271. package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
  272. package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
  273. package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
  274. package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
  275. package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
  276. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
  277. package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
  278. package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
  279. package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
  280. package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
  281. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
  282. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
  283. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
  284. package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
  285. package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
  286. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
  287. package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
  288. package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
  289. package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
  290. package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
  291. package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
  292. package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
  293. package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
  294. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
  295. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
  296. package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
  297. package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
  298. package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
  299. package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
  300. package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
  301. package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
  302. package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
  303. package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
  304. package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
  305. package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
  306. package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
  307. package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
  308. package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
  309. package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
  310. package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
  311. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
  312. package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
  313. package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
  314. package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
  315. package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
  316. package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
  317. package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
  318. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
  319. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
  320. package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
  321. package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
  322. package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
  323. package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
  324. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
  325. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
  326. package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
  327. package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
  328. package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
  329. package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
  330. package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
  331. package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
  332. package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
  333. package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
  334. package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
  335. package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
  336. package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
  337. package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
  338. package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
  339. package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
  340. package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
  341. package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
  342. package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
  343. package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
  344. package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
  345. package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
  346. package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
  347. package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
  348. package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
  349. package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
  350. package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
  351. package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
  352. package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
  353. package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
  354. package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
  355. package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
  356. package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
  357. package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
  358. package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
  359. package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
  360. package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
  361. package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
  362. package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
  363. package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
  364. package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
  365. package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
  366. package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
  367. package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
  368. package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
  369. package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
  370. package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
  371. package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
  372. package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
  373. package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
  374. package/kotlin/README.md +6 -0
  375. package/package.json +22 -2
  376. package/runtime-companion.json +1 -0
  377. package/skills/contrast/SKILL.md +1 -0
  378. package/src/appBundleResourcesContract.ts +51 -0
  379. package/src/assetCatalogContract.ts +21 -0
  380. package/src/backend-origin.ts +3 -1
  381. package/src/bridge-contract-input.ts +84 -0
  382. package/src/bridge-contract.ts +35 -3
  383. package/src/browser-launch-policy.ts +1 -0
  384. package/src/bundle-channel.mjs +4 -2
  385. package/src/cli-runtime.ts +55 -0
  386. package/src/crash-fingerprint.ts +26 -0
  387. package/src/dev-bundle-resolution.ts +50 -23
  388. package/src/device-catalog.ts +1159 -0
  389. package/src/host/bridge-host.ts +20 -37
  390. package/src/host/browser-pointer.ts +71 -0
  391. package/src/host/dev-server-package-versions.ts +23 -0
  392. package/src/host/fetch-proxy-handler.ts +17 -4
  393. package/src/host/staged-host-files.ts +28 -4
  394. package/src/installed-package-versions.ts +142 -38
  395. package/src/kotlin-host.ts +1 -1
  396. package/src/launchMetadataContract.ts +1 -0
  397. package/src/menu.ts +12 -4
  398. package/src/metro-plugin.ts +4 -4
  399. package/src/metro-project-root.ts +68 -0
  400. package/src/native-app-identity-project.ts +47 -38
  401. package/src/nitro-adapter.lock.json +26 -0
  402. package/src/nitro-adapter.ts +103 -0
  403. package/src/nitro-bundle.ts +24 -10
  404. package/src/nitro-compile.ts +33 -51
  405. package/src/nitro-source.ts +177 -96
  406. package/src/nitroAdapterContract.ts +217 -0
  407. package/src/nitroContract.ts +24 -11
  408. package/src/process-group.ts +41 -34
  409. package/src/react-bridge-importers.ts +28 -0
  410. package/src/reactNativeConfigurationContract.ts +36 -0
  411. package/src/runtime-assets.ts +7 -2
  412. package/src/runtime-delivery.ts +8 -7
  413. package/src/runtimePlatformContract.ts +70 -0
  414. package/src/screenshots/frame-compose.ts +42 -43
  415. package/src/screenshots/org-deck.ts +9 -4
  416. package/src/screenshots/preset-names.ts +29 -0
  417. package/src/screenshots/registry.ts +5 -5
  418. package/src/screenshots/schema.ts +1 -1
  419. package/src/screenshots/screenshotContract.ts +971 -0
  420. package/src/settings-flags.ts +107 -0
  421. package/src/settingsContract.ts +609 -0
  422. package/src/storageSnapshotContract.ts +344 -0
  423. package/src/stub-pattern-matcher.ts +550 -0
  424. package/src/swift-compile.ts +926 -47
  425. package/src/swift-compiler-digest.ts +17 -3
  426. package/src/swift-distribution.lock.json +49 -22
  427. package/src/swift-host.ts +167 -52
  428. package/src/swift-objc-compile.ts +86 -26
  429. package/src/swift-objc-export.ts +532 -0
  430. package/src/swift-objc-import.ts +769 -0
  431. package/src/swift-objc-metadata.ts +285 -10
  432. package/src/swift-objc-sdk.ts +13970 -158
  433. package/src/swift-objc-standin.ts +137 -1
  434. package/src/swift-package.ts +94 -0
  435. package/src/swift-packages.ts +5 -5
  436. package/src/swift-root-lock.ts +241 -92
  437. package/src/swift-submit.ts +6 -0
  438. package/src/swiftContract.ts +99 -0
  439. package/src/target-matcher.ts +6 -1
  440. package/src/vite-plugin.ts +14 -40
  441. package/src/worker-system-chunks.ts +1 -1
  442. package/src/workerChunkContract.ts +5 -0
  443. package/src/worklets-babel.ts +24 -5
  444. package/src/xcode-project.ts +103 -11
  445. package/src/xcode-target-members.ts +10 -3
  446. package/cli/drivers/playwright-sim-host.ts +0 -825
  447. package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
  448. package/kotlin/fixtures/counter/Counter.kt +0 -51
  449. package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
  450. package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
  451. package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
  452. package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
  453. package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
  454. package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
  455. package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
  456. package/kotlin/fixtures/counter/package.json +0 -20
  457. package/kotlin/fixtures/counter/tsconfig.json +0 -19
  458. package/kotlin/fixtures/counter/vite.config.ts +0 -20
  459. package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
  460. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
  461. package/kotlin/fixtures/import-animation/Animation.kt +0 -80
  462. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
  463. package/kotlin/fixtures/import-animation/README.md +0 -24
  464. package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
  465. package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
  466. package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
  467. package/kotlin/fixtures/import-animation/package.json +0 -23
  468. package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
  469. package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
  470. package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
  471. package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
  472. package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
  473. package/kotlin/fixtures/import-drawing/README.md +0 -34
  474. package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
  475. package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
  476. package/kotlin/fixtures/import-drawing/package.json +0 -23
  477. package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
  478. package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
  479. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
  480. package/kotlin/fixtures/import-editor/Editor.kt +0 -59
  481. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
  482. package/kotlin/fixtures/import-editor/README.md +0 -27
  483. package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
  484. package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
  485. package/kotlin/fixtures/import-editor/package.json +0 -23
  486. package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
  487. package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
  488. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
  489. package/kotlin/fixtures/import-effects/Effects.kt +0 -87
  490. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
  491. package/kotlin/fixtures/import-effects/README.md +0 -19
  492. package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
  493. package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
  494. package/kotlin/fixtures/import-effects/package.json +0 -23
  495. package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
  496. package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
  497. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
  498. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
  499. package/kotlin/fixtures/import-layout/Layout.kt +0 -72
  500. package/kotlin/fixtures/import-layout/README.md +0 -24
  501. package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
  502. package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
  503. package/kotlin/fixtures/import-layout/package.json +0 -23
  504. package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
  505. package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
  506. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
  507. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
  508. package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
  509. package/kotlin/fixtures/import-navigation/README.md +0 -31
  510. package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
  511. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
  512. package/kotlin/fixtures/import-navigation/package.json +0 -23
  513. package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
  514. package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
  515. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
  516. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
  517. package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
  518. package/kotlin/fixtures/import-overlays/README.md +0 -34
  519. package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
  520. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
  521. package/kotlin/fixtures/import-overlays/package.json +0 -23
  522. package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
  523. package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
  524. package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
  525. package/kotlin/fixtures/import-resources/README.md +0 -26
  526. package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
  527. package/kotlin/fixtures/import-resources/Resources.kt +0 -72
  528. package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
  529. package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
  530. package/kotlin/fixtures/import-resources/package.json +0 -23
  531. package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
  532. package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
  533. package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
  534. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
  535. package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
  536. package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
  537. package/kotlin/fixtures/import-scroll/README.md +0 -38
  538. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
  539. package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
  540. package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
  541. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
  542. package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
  543. package/kotlin/fixtures/import-scroll/package.json +0 -23
  544. package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
  545. package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
  546. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
  547. package/kotlin/fixtures/import-selection/README.md +0 -32
  548. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
  549. package/kotlin/fixtures/import-selection/Selection.kt +0 -78
  550. package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
  551. package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
  552. package/kotlin/fixtures/import-selection/package.json +0 -23
  553. package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
  554. package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
  555. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
  556. package/kotlin/fixtures/import-surfaces/README.md +0 -22
  557. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
  558. package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
  559. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
  560. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
  561. package/kotlin/fixtures/import-surfaces/package.json +0 -23
  562. package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
  563. package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
  564. package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
  565. package/kotlin/fixtures/import-values/README.md +0 -28
  566. package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
  567. package/kotlin/fixtures/import-values/Values.kt +0 -84
  568. package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
  569. package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
  570. package/kotlin/fixtures/import-values/package.json +0 -23
  571. package/kotlin/fixtures/import-values/tsconfig.json +0 -20
  572. package/kotlin/fixtures/import-values/vite.config.ts +0 -20
  573. package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
  574. package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
  575. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
  576. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
  577. package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
  578. package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
  579. package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
  580. package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
  581. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
  582. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
  583. package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
  584. package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
  585. package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
  586. package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
  587. package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
  588. package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
  589. package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
  590. package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
  591. package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
  592. package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
  593. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
  594. package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
  595. package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
  596. package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
  597. package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
  598. package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
  599. package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
  600. package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
  601. package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
  602. package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
  603. package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
  604. package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
  605. package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
  606. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
  607. package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
  608. package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
  609. package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
  610. package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
  611. package/kotlin/fork/README.md +0 -97
  612. package/kotlin/fork/build.sh +0 -176
  613. package/kotlin/fork/compose-worker-globals.patch +0 -1247
  614. package/kotlin/fork/fork.json +0 -46
  615. package/kotlin/fork/publish.ts +0 -99
  616. package/kotlin/fork/skia-android-shaping.patch +0 -189
  617. package/kotlin/fork/skiko-local.init.gradle +0 -10
  618. package/kotlin/fork/skiko-worker-clock.patch +0 -122
@@ -1,11 +1,9 @@
1
- // native recordings and SootSim live frames must use this exact definition.
2
- // retained static Android crops measured as high as 0.0331% after the channel
3
- // filter. the smallest corrected component transition with visible motion was
4
- // 0.1748%, so a 0.1% floor separates every measured static and moving frame.
5
- const MOTION_CHANGE_DEFINITION = Object.freeze({
6
- channelThreshold: 24,
7
- minimumChangePercent: 0.1,
8
- })
1
+ const {
2
+ MOTION_CHANGE_DEFINITION,
3
+ DISCRETE_FRAME_TIMING_TOLERANCE_MS,
4
+ parseDiscreteFrameCadence,
5
+ } = require('../../peach-conformance/src/cases/checkpoint-evidence.cjs')
6
+ const { frameTimingRoundingBound } = require('./frame-offset.mjs')
9
7
 
10
8
  function measureMotionChange(input) {
11
9
  if (!input || typeof input !== 'object' || Array.isArray(input)) {
@@ -112,8 +110,10 @@ const PAIRED_MOTION_MINIMUM_CHANGE_PERCENT = 0.3
112
110
  const SETTLE_BLIP_MAXIMUM_CHANGE_PERCENT = 0.6
113
111
 
114
112
  // a present or dismiss records one second (60 transitions); a gesture ladder
115
- // records four. a gesture jumps at its touch cadence and each capture phases
116
- // that cadence differently, so a gesture is graded by total travel instead of
113
+ // records four. repeated animation ladders can also exceed that length, but
114
+ // their declared cycles retain frame pairing. a gesture jumps at its touch
115
+ // cadence and each capture phases that cadence differently, so it is graded by
116
+ // total travel instead of
117
117
  // by frame. travel is judged over the whole gesture and again over each quarter
118
118
  // so one jump or a lagging release cannot pass on its total.
119
119
  const GESTURE_MOTION_MIN_TRANSITIONS = 120
@@ -127,7 +127,7 @@ const GESTURE_QUARTER_TRAVEL_RATIO_RANGE = Object.freeze({ min: 0.5, max: 2 })
127
127
  // against a moving oracle fails. a gesture needs sootsim's total travel within
128
128
  // a range of the oracle's. both lanes hold the same unique stage-label
129
129
  // transitions in the same order; every measurement must exist.
130
- function evaluateMotionTransitions(transitions, oracleTarget) {
130
+ function evaluateMotionTransitions(transitions, oracleTarget, repeating) {
131
131
  const key = (transition) => `${transition.fromLabel}\u0000${transition.toLabel}`
132
132
  const oracle = transitions.filter((transition) => transition.target === oracleTarget)
133
133
  const sootsim = transitions.filter((transition) => transition.target === 'sootsim')
@@ -149,7 +149,9 @@ function evaluateMotionTransitions(transitions, oracleTarget) {
149
149
  )
150
150
  .reduce((total, transition) => total + transition.changePercent, 0)
151
151
  const movesNear = (list, index) =>
152
- [index - 1, index, index + 1].some((neighbour) => list[neighbour]?.passedMinimum === true)
152
+ [index - 1, index, index + 1].some(
153
+ (neighbour) => list[neighbour]?.passedMinimum === true,
154
+ )
153
155
  const pairedChange = (transition) =>
154
156
  transition.changePercent >= PAIRED_MOTION_MINIMUM_CHANGE_PERCENT
155
157
  const settleBlip = (list) => {
@@ -175,7 +177,7 @@ function evaluateMotionTransitions(transitions, oracleTarget) {
175
177
  Math.floor((list.length * (index + 1)) / 4),
176
178
  )
177
179
  const follows =
178
- oracle.length >= GESTURE_MOTION_MIN_TRANSITIONS
180
+ !repeating && oracle.length >= GESTURE_MOTION_MIN_TRANSITIONS
179
181
  ? within(travel(sootsim), travel(oracle), GESTURE_TRAVEL_RATIO_RANGE) &&
180
182
  [0, 1, 2, 3].every((index) =>
181
183
  within(
@@ -192,108 +194,17 @@ function evaluateMotionTransitions(transitions, oracleTarget) {
192
194
  ) &&
193
195
  sootsim.every(
194
196
  (transition, index) =>
195
- !pairedChange(transition) || index === sootsimBlip || movesNear(oracle, index),
197
+ !pairedChange(transition) ||
198
+ index === sootsimBlip ||
199
+ movesNear(oracle, index),
196
200
  )
197
201
  return {
198
202
  moving: moving.length,
199
- passed:
200
- measured &&
201
- oracle.length > 0 &&
202
- paired &&
203
- moving.length > 0 &&
204
- follows,
203
+ passed: measured && oracle.length > 0 && paired && moving.length > 0 && follows,
205
204
  }
206
205
  }
207
206
 
208
207
  const DISPLAY_LINK_INTERVAL_MS = 1000 / 60
209
- const DISCRETE_FRAME_TIMING_TOLERANCE_MS = 1000 / 60 + 1000 / 600
210
-
211
- function parseDiscreteFrameCadence(value) {
212
- const fail = (message) => {
213
- throw new Error(`discrete frame cadence ${message}`)
214
- }
215
- if (!value || value.kind !== 'discrete-frame' || !value.asset || !value.probe)
216
- fail('requires an explicit asset and probe')
217
- for (const field of ['fixtureSha256', 'encodedSha256', 'calibrationSha256']) {
218
- if (!/^[a-f0-9]{64}$/.test(value.asset[field])) fail(`has invalid ${field}`)
219
- }
220
- for (const field of ['fixturePath', 'calibrationPath']) {
221
- if (
222
- typeof value.asset[field] !== 'string' ||
223
- !value.asset[field] ||
224
- value.asset[field].startsWith('/') ||
225
- value.asset[field].split('/').includes('..')
226
- )
227
- fail(`has invalid ${field}`)
228
- }
229
- if (
230
- typeof value.probe.elementName !== 'string' ||
231
- !value.probe.elementName ||
232
- !Number.isFinite(value.probe.inset) ||
233
- value.probe.inset < 0
234
- )
235
- fail('has invalid probe')
236
- if (!Array.isArray(value.asset.frames) || value.asset.frames.length < 2)
237
- fail('needs at least two frames')
238
- for (const [index, frame] of value.asset.frames.entries()) {
239
- if (
240
- !frame ||
241
- !Number.isFinite(frame.durationMs) ||
242
- frame.durationMs <= 2 * DISCRETE_FRAME_TIMING_TOLERANCE_MS
243
- )
244
- fail(`frame ${index} duration is unresolvable`)
245
- if (
246
- !Array.isArray(frame.uniformRgba) ||
247
- frame.uniformRgba.length !== 4 ||
248
- frame.uniformRgba.some(
249
- (channel) => !Number.isInteger(channel) || channel < 0 || channel > 255,
250
- )
251
- )
252
- fail(`frame ${index} needs uniform rgba`)
253
- const next = value.asset.frames[(index + 1) % value.asset.frames.length]
254
- if (
255
- next?.uniformRgba &&
256
- frame.uniformRgba.every((channel, i) => channel === next.uniformRgba[i])
257
- )
258
- fail('adjacent phases must differ')
259
- }
260
- for (let i = 0; i < value.asset.frames.length; i++) {
261
- for (let j = i + 1; j < value.asset.frames.length; j++) {
262
- if (
263
- !value.asset.frames[i].uniformRgba.some(
264
- (channel, k) =>
265
- Math.abs(channel - value.asset.frames[j].uniformRgba[k]) >
266
- MOTION_CHANGE_DEFINITION.channelThreshold,
267
- )
268
- )
269
- fail('phase colors cannot resolve the shared visible-change gate')
270
- }
271
- }
272
- if (value.mode === 'playing') {
273
- if (
274
- !Number.isInteger(value.entryFrame) ||
275
- value.entryFrame < 0 ||
276
- value.entryFrame >= value.asset.frames.length ||
277
- value.minimumTransitions !== 2
278
- )
279
- fail('playing mode needs an entry frame and two transitions')
280
- } else if (value.mode === 'frozen') {
281
- if (
282
- !Array.isArray(value.waitIntervalsMs) ||
283
- value.waitIntervalsMs.length < 2 ||
284
- value.waitIntervalsMs.some((ms) => !Number.isFinite(ms) || ms <= 0)
285
- )
286
- fail('frozen mode needs two positive waits')
287
- if (
288
- !Array.isArray(value.captures) ||
289
- value.captures.length !== value.waitIntervalsMs.length ||
290
- value.captures.some((id) => typeof id !== 'string' || !id) ||
291
- new Set(value.captures).size !== value.captures.length
292
- )
293
- fail('frozen mode needs distinct capture identities')
294
- } else fail('has an unknown mode')
295
- return value
296
- }
297
208
 
298
209
  function classifyDiscreteFrame(input) {
299
210
  // self-contained so the exact classifier can be installed inside a page.
@@ -381,8 +292,10 @@ function evaluateDiscreteFrameTrace(input) {
381
292
  // media lifetime. a virtual trace must include every tick through its end.
382
293
  const last = observations.at(-1)
383
294
  if (
384
- observations[0].atMs > coverageStartMs ||
385
- (clock === 'peach-virtual' && last.atMs < coverageEndMs) ||
295
+ observations[0].atMs - coverageStartMs >
296
+ frameTimingRoundingBound(observations[0].atMs, coverageStartMs) ||
297
+ (clock === 'peach-virtual' &&
298
+ coverageEndMs - last.atMs > frameTimingRoundingBound(coverageEndMs, last.atMs)) ||
386
299
  (clock === 'native-presentation' &&
387
300
  (!Number.isFinite(input.mediaDurationMs) ||
388
301
  input.mediaDurationMs < coverageEndMs ||
@@ -430,8 +343,17 @@ function evaluateDiscreteFrameTrace(input) {
430
343
  if (!before || before.phase === null || before.phase === anchor.phase)
431
344
  throw new Error('discrete trace entry did not change from the pre-trigger phase')
432
345
  const endMs = anchor.atMs + windowMs
433
- if (coverageEndMs < endMs) throw new Error('discrete playing trace is truncated')
434
- const rows = observations.filter((row) => row.atMs >= anchor.atMs && row.atMs <= endMs)
346
+ if (
347
+ endMs - coverageEndMs >
348
+ frameTimingRoundingBound(anchor.atMs, windowMs, endMs, coverageEndMs)
349
+ )
350
+ throw new Error('discrete playing trace is truncated')
351
+ const rows = observations.filter(
352
+ (row) =>
353
+ row.atMs >= anchor.atMs &&
354
+ row.atMs - endMs <=
355
+ frameTimingRoundingBound(row.atMs, anchor.atMs, windowMs, endMs),
356
+ )
435
357
  if (rows.some((row) => row.phase === null))
436
358
  throw new Error('discrete playing trace has an unexpected frame')
437
359
  const changes = rows.filter((row, i) => i === 0 || row.phase !== rows[i - 1].phase)
@@ -451,7 +373,10 @@ function evaluateDiscreteFrameTrace(input) {
451
373
  cadence.asset.frames[previous.phase].durationMs +
452
374
  (i === 1 && cadence.entryFrame === 0 ? DISPLAY_LINK_INTERVAL_MS : 0)
453
375
  const observedMs = changes[i].atMs - previous.atMs
454
- if (Math.abs(observedMs - expectedMs) > DISCRETE_FRAME_TIMING_TOLERANCE_MS)
376
+ if (
377
+ Math.abs(observedMs - expectedMs) - DISCRETE_FRAME_TIMING_TOLERANCE_MS >
378
+ frameTimingRoundingBound(changes[i].atMs, previous.atMs, observedMs, expectedMs)
379
+ )
455
380
  throw new Error(
456
381
  `discrete trace wrong cadence: phase ${previous.phase}, expected ${expectedMs}ms, observed ${observedMs}ms`,
457
382
  )
@@ -527,9 +452,20 @@ function motionCyclePeriods(reference, sootsim) {
527
452
  return reference.slice(1).map((onset, index) => {
528
453
  const referenceMs = onset.atMs - reference[index].atMs
529
454
  const sootsimMs = sootsim[index + 1].atMs - sootsim[index].atMs
455
+ const driftMs = Math.abs(referenceMs - sootsimMs)
456
+ const roundingMs = frameTimingRoundingBound(
457
+ onset.atMs,
458
+ reference[index].atMs,
459
+ sootsim[index + 1].atMs,
460
+ sootsim[index].atMs,
461
+ referenceMs,
462
+ sootsimMs,
463
+ driftMs,
464
+ MOTION_CYCLE_PERIOD_TOLERANCE_MS,
465
+ )
530
466
  return {
531
467
  id: onset.id,
532
- passed: Math.abs(referenceMs - sootsimMs) <= MOTION_CYCLE_PERIOD_TOLERANCE_MS,
468
+ passed: driftMs - MOTION_CYCLE_PERIOD_TOLERANCE_MS <= roundingMs,
533
469
  referenceMs,
534
470
  sootsimMs,
535
471
  }
@@ -568,7 +504,8 @@ function evaluateMotionPublication(stages, transitions, oracleTarget, cycleOnset
568
504
  last.passedThreshold &&
569
505
  (!needsIntermediates || movingPassed >= PUBLICATION_MIN_INTERMEDIATE_PASSES) &&
570
506
  cyclePeriods.every((period) => period.passed) &&
571
- evaluateMotionTransitions(transitions, oracleTarget).passed,
507
+ evaluateMotionTransitions(transitions, oracleTarget, cyclePeriods.length > 0)
508
+ .passed,
572
509
  cyclePeriods,
573
510
  intermediateCount: intermediates.length,
574
511
  intermediatePassed,
@@ -577,14 +514,11 @@ function evaluateMotionPublication(stages, transitions, oracleTarget, cycleOnset
577
514
  }
578
515
 
579
516
  module.exports = {
580
- MOTION_CHANGE_DEFINITION,
581
517
  evaluateMotionPublication,
582
518
  motionCycleOnsets,
583
519
  measureMotionChange,
584
520
  measureProofMotionChange,
585
521
  evaluateMotionTransitions,
586
- DISCRETE_FRAME_TIMING_TOLERANCE_MS,
587
- parseDiscreteFrameCadence,
588
522
  classifyDiscreteFrame,
589
523
  evaluateDiscreteFrameTrace,
590
524
  }
@@ -1,7 +1,8 @@
1
- export type MotionChangeDefinition = {
2
- channelThreshold: number
3
- minimumChangePercent: number
4
- }
1
+ import type {
2
+ MotionChangeDefinition,
3
+ DiscreteFrameAsset,
4
+ DiscreteFrameCadence,
5
+ } from '../../peach-conformance/src/cases/checkpoint-evidence.cjs'
5
6
 
6
7
  type MotionChangePixels = ArrayLike<number>
7
8
 
@@ -24,8 +25,6 @@ export type MotionChangeMeasurement = {
24
25
  totalPixels: number
25
26
  }
26
27
 
27
- export const MOTION_CHANGE_DEFINITION: Readonly<MotionChangeDefinition>
28
-
29
28
  export function measureMotionChange(
30
29
  input: MotionChangeInput,
31
30
  ): MotionChangeMeasurement | null
@@ -50,6 +49,7 @@ export type MotionTransitionSample = {
50
49
  export function evaluateMotionTransitions(
51
50
  transitions: MotionTransitionSample[],
52
51
  oracleTarget: string,
52
+ repeating: boolean,
53
53
  ): {
54
54
  moving: number
55
55
  passed: boolean
@@ -87,25 +87,6 @@ export function evaluateMotionPublication(
87
87
  movingPassed: number
88
88
  }
89
89
 
90
- export type DiscreteFrameAsset = {
91
- fixturePath: string
92
- fixtureSha256: string
93
- encodedSha256: string
94
- calibrationPath: string
95
- calibrationSha256: string
96
- frames: readonly {
97
- durationMs: number
98
- uniformRgba: readonly [number, number, number, number]
99
- }[]
100
- }
101
- export type DiscreteFrameCadence = {
102
- kind: 'discrete-frame'
103
- asset: DiscreteFrameAsset
104
- probe: { elementName: string; inset: number }
105
- } & (
106
- | { mode: 'playing'; entryFrame: number; minimumTransitions: 2 }
107
- | { mode: 'frozen'; waitIntervalsMs: readonly number[]; captures: readonly string[] }
108
- )
109
90
  export type DiscreteFrameObservation = {
110
91
  frameIndex: number
111
92
  atMs: number
@@ -149,8 +130,6 @@ export type DiscreteFrameDecision = {
149
130
  holds: { phase: number; expectedMs: number; observedMs: number }[]
150
131
  waitIntervals?: { startMs: number; endMs: number }[]
151
132
  }
152
- export const DISCRETE_FRAME_TIMING_TOLERANCE_MS: number
153
- export function parseDiscreteFrameCadence(value: unknown): DiscreteFrameCadence
154
133
  export function classifyDiscreteFrame(input: {
155
134
  pixels?: ArrayLike<number>
156
135
  frames?: DiscreteFrameAsset['frames']
@@ -0,0 +1,20 @@
1
+ // animation start witnesses are diagnostics; they never replace pixel or cycle grading.
2
+ function animationLegStarts(value) {
3
+ if (!Array.isArray(value) || value.length === 0)
4
+ throw new Error('animation leg starts must be a non-empty array')
5
+ return value.map((row) => {
6
+ if (
7
+ !row ||
8
+ typeof row.track !== 'string' ||
9
+ !row.track ||
10
+ typeof row.leg !== 'string' ||
11
+ !row.leg ||
12
+ !Number.isFinite(row.atMs) ||
13
+ !Number.isFinite(row.startValue)
14
+ )
15
+ throw new Error('invalid animation leg start witness')
16
+ return { track: row.track, leg: row.leg, atMs: row.atMs, startValue: row.startValue }
17
+ })
18
+ }
19
+
20
+ module.exports = { animationLegStarts }
@@ -0,0 +1,8 @@
1
+ export type AnimationLegStart = {
2
+ track: string
3
+ leg: string
4
+ atMs: number
5
+ startValue: number
6
+ }
7
+
8
+ export function animationLegStarts(value: unknown): AnimationLegStart[]
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (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;
@@ -39,7 +39,7 @@ __export(backend_origin_exports, {
39
39
  resolveContrastBackendOrigin: () => resolveContrastBackendOrigin
40
40
  });
41
41
  module.exports = __toCommonJS(backend_origin_exports);
42
- var DEFAULT_CONTRAST_BACKEND_ORIGIN = "https://contrast.dev";
42
+ var DEFAULT_CONTRAST_BACKEND_ORIGIN = "https://peachsim.com";
43
43
  var LOOPBACK_PROBE_HOSTNAMES = ["127.0.0.1", "::1"];
44
44
  function normalizeHostname(hostname) {
45
45
  return hostname.replace(/^\[|\]$/g, "").toLowerCase();
@@ -100,7 +100,7 @@ function isBrowserAssetProxyUrl(value) {
100
100
  var PEACHSIM_NATIVE_HOST = "native.peachsim.com";
101
101
  function isContrastBackendHost(hostname) {
102
102
  const normalized = normalizeHostname(hostname);
103
- return isLoopbackHost(normalized) || normalized === "contrast.dev" || normalized.endsWith(".contrast.dev") || normalized === PEACHSIM_NATIVE_HOST;
103
+ return isLoopbackHost(normalized) || normalized === "contrast.dev" || normalized.endsWith(".contrast.dev") || normalized === "peachsim.com" || normalized === "www.peachsim.com" || normalized === PEACHSIM_NATIVE_HOST;
104
104
  }
105
105
  function isContrastBackendOrigin(origin) {
106
106
  try {
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (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
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (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;
@@ -25,6 +25,8 @@ __export(bridge_contract_input_exports, {
25
25
  BridgeInputError: () => BridgeInputError,
26
26
  SEMANTIC_WAIT_MAX_TIMEOUT_MS: () => SEMANTIC_WAIT_MAX_TIMEOUT_MS,
27
27
  findInvalidPointerSequence: () => findInvalidPointerSequence,
28
+ parseDiagnosticsOptions: () => parseDiagnosticsOptions,
29
+ parseDiagnosticsResult: () => parseDiagnosticsResult,
28
30
  parsePerformStep: () => parsePerformStep,
29
31
  parseResetOptions: () => parseResetOptions,
30
32
  parseScreenshotOptions: () => parseScreenshotOptions,
@@ -314,6 +316,66 @@ function findInvalidPointerSequence(steps) {
314
316
  error: `perform.steps[${next.value[1]}] (touchDown) has no matching touchUp or touchCancel for pointer ${next.value[0]}`
315
317
  };
316
318
  }
319
+ function diagnosticsChannels(value, path) {
320
+ if (!Array.isArray(value)) validationFailure(path, "must be a list of channel names");
321
+ return value.map((channel) => stringValue(channel, path));
322
+ }
323
+ function parseDiagnosticsResult(value) {
324
+ if (!isRecord(value) || !Array.isArray(value.channels) || !value.channels.every((channel) => typeof channel === "string") || !Array.isArray(value.availableChannels) || !value.availableChannels.every((channel) => typeof channel === "string") || !Array.isArray(value.events)) {
325
+ validationFailure(
326
+ "remote diagnostics",
327
+ "returned an incompatible native host response"
328
+ );
329
+ }
330
+ return {
331
+ channels: value.channels,
332
+ availableChannels: value.availableChannels,
333
+ runtime: value.runtime,
334
+ found: value.found,
335
+ events: value.events
336
+ };
337
+ }
338
+ function parseDiagnosticsOptions(value) {
339
+ const options = recordValue(value, "diagnostics");
340
+ const channels = options.channels === void 0 ? void 0 : diagnosticsChannels(options.channels, "diagnostics.channels");
341
+ let channelControl;
342
+ if (options.channelControl !== void 0) {
343
+ if (channels !== void 0) {
344
+ validationFailure("diagnostics.channelControl", "cannot be combined with channels");
345
+ }
346
+ const control = recordValue(options.channelControl, "diagnostics.channelControl");
347
+ const action = control.action;
348
+ if (action !== "enable" && action !== "disable" && action !== "toggle") {
349
+ validationFailure(
350
+ "diagnostics.channelControl.action",
351
+ "must be enable, disable, or toggle"
352
+ );
353
+ }
354
+ const selected = diagnosticsChannels(
355
+ control.channels,
356
+ "diagnostics.channelControl.channels"
357
+ );
358
+ if (action === "toggle" && (selected.length !== 1 || selected[0] === "all")) {
359
+ validationFailure("diagnostics.channelControl", "toggle requires one channel");
360
+ }
361
+ channelControl = { action, channels: selected };
362
+ }
363
+ const find = options.find;
364
+ if (find !== void 0 && find !== "sheets" && find !== "portals" && find !== "boundaries") {
365
+ validationFailure("diagnostics.find", "must be sheets, portals, or boundaries");
366
+ }
367
+ return {
368
+ ...channels === void 0 ? {} : { channels },
369
+ ...channelControl === void 0 ? {} : { channelControl },
370
+ ...find === void 0 ? {} : { find },
371
+ ...options.recentChannel === void 0 ? {} : {
372
+ recentChannel: stringValue(options.recentChannel, "diagnostics.recentChannel")
373
+ },
374
+ ...options.recentLimit === void 0 ? {} : {
375
+ recentLimit: numberValue(options.recentLimit, "diagnostics.recentLimit")
376
+ }
377
+ };
378
+ }
317
379
  function parseStateOptions(value) {
318
380
  const input = recordValue(value, "state");
319
381
  const route = optionalBoolean(input, "route", "state");
@@ -487,6 +549,8 @@ function parseTapTarget(value) {
487
549
  BridgeInputError,
488
550
  SEMANTIC_WAIT_MAX_TIMEOUT_MS,
489
551
  findInvalidPointerSequence,
552
+ parseDiagnosticsOptions,
553
+ parseDiagnosticsResult,
490
554
  parsePerformStep,
491
555
  parseResetOptions,
492
556
  parseScreenshotOptions,
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_MAX_MS = 5e3;
@@ -278,6 +278,66 @@ function findInvalidPointerSequence(steps) {
278
278
  error: `perform.steps[${next.value[1]}] (touchDown) has no matching touchUp or touchCancel for pointer ${next.value[0]}`
279
279
  };
280
280
  }
281
+ function diagnosticsChannels(value, path) {
282
+ if (!Array.isArray(value)) validationFailure(path, "must be a list of channel names");
283
+ return value.map((channel) => stringValue(channel, path));
284
+ }
285
+ function parseDiagnosticsResult(value) {
286
+ if (!isRecord(value) || !Array.isArray(value.channels) || !value.channels.every((channel) => typeof channel === "string") || !Array.isArray(value.availableChannels) || !value.availableChannels.every((channel) => typeof channel === "string") || !Array.isArray(value.events)) {
287
+ validationFailure(
288
+ "remote diagnostics",
289
+ "returned an incompatible native host response"
290
+ );
291
+ }
292
+ return {
293
+ channels: value.channels,
294
+ availableChannels: value.availableChannels,
295
+ runtime: value.runtime,
296
+ found: value.found,
297
+ events: value.events
298
+ };
299
+ }
300
+ function parseDiagnosticsOptions(value) {
301
+ const options = recordValue(value, "diagnostics");
302
+ const channels = options.channels === void 0 ? void 0 : diagnosticsChannels(options.channels, "diagnostics.channels");
303
+ let channelControl;
304
+ if (options.channelControl !== void 0) {
305
+ if (channels !== void 0) {
306
+ validationFailure("diagnostics.channelControl", "cannot be combined with channels");
307
+ }
308
+ const control = recordValue(options.channelControl, "diagnostics.channelControl");
309
+ const action = control.action;
310
+ if (action !== "enable" && action !== "disable" && action !== "toggle") {
311
+ validationFailure(
312
+ "diagnostics.channelControl.action",
313
+ "must be enable, disable, or toggle"
314
+ );
315
+ }
316
+ const selected = diagnosticsChannels(
317
+ control.channels,
318
+ "diagnostics.channelControl.channels"
319
+ );
320
+ if (action === "toggle" && (selected.length !== 1 || selected[0] === "all")) {
321
+ validationFailure("diagnostics.channelControl", "toggle requires one channel");
322
+ }
323
+ channelControl = { action, channels: selected };
324
+ }
325
+ const find = options.find;
326
+ if (find !== void 0 && find !== "sheets" && find !== "portals" && find !== "boundaries") {
327
+ validationFailure("diagnostics.find", "must be sheets, portals, or boundaries");
328
+ }
329
+ return {
330
+ ...channels === void 0 ? {} : { channels },
331
+ ...channelControl === void 0 ? {} : { channelControl },
332
+ ...find === void 0 ? {} : { find },
333
+ ...options.recentChannel === void 0 ? {} : {
334
+ recentChannel: stringValue(options.recentChannel, "diagnostics.recentChannel")
335
+ },
336
+ ...options.recentLimit === void 0 ? {} : {
337
+ recentLimit: numberValue(options.recentLimit, "diagnostics.recentLimit")
338
+ }
339
+ };
340
+ }
281
341
  function parseStateOptions(value) {
282
342
  const input = recordValue(value, "state");
283
343
  const route = optionalBoolean(input, "route", "state");
@@ -450,6 +510,8 @@ export {
450
510
  BridgeInputError,
451
511
  SEMANTIC_WAIT_MAX_TIMEOUT_MS,
452
512
  findInvalidPointerSequence,
513
+ parseDiagnosticsOptions,
514
+ parseDiagnosticsResult,
453
515
  parsePerformStep,
454
516
  parseResetOptions,
455
517
  parseScreenshotOptions,
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1641 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1653 | (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;
@@ -29,6 +29,8 @@ __export(bridge_contract_exports, {
29
29
  SEMANTIC_READY_POLL_MS: () => SEMANTIC_READY_POLL_MS,
30
30
  SIM_LONG_PRESS_DEFAULT_MS: () => SIM_LONG_PRESS_DEFAULT_MS,
31
31
  SIM_LONG_PRESS_MAX_MS: () => SIM_LONG_PRESS_MAX_MS,
32
+ WRITE_COMMAND_TYPES: () => WRITE_COMMAND_TYPES,
33
+ commandWritesSim: () => commandWritesSim,
32
34
  performStepRefusal: () => performStepRefusal,
33
35
  readyProbeContentBasis: () => readyProbeContentBasis,
34
36
  readyProbeHasContent: () => readyProbeHasContent,
@@ -122,6 +124,20 @@ function readyProbeHasContent(probe) {
122
124
  function readyProbeIsReady(probe) {
123
125
  return readyProbeContentBasis(probe) !== "" && probe.externalReady !== false && !probe.externalError && !probe.loadingText;
124
126
  }
127
+ var WRITE_COMMAND_TYPES = /* @__PURE__ */ new Set([
128
+ "tap",
129
+ "keyboard",
130
+ "longPress",
131
+ "perform",
132
+ "reset",
133
+ "camera"
134
+ ]);
135
+ function commandWritesSim(msg) {
136
+ if (typeof msg.type !== "string") return false;
137
+ if (msg.acquireLock === true) return true;
138
+ if (msg.readOnly === true) return false;
139
+ return WRITE_COMMAND_TYPES.has(msg.type);
140
+ }
125
141
  // Annotate the CommonJS export names for ESM import in node:
126
142
  0 && (module.exports = {
127
143
  HEADLESS_TENANT_FETCH_HUNG_MARKER,
@@ -131,6 +147,8 @@ function readyProbeIsReady(probe) {
131
147
  SEMANTIC_READY_POLL_MS,
132
148
  SIM_LONG_PRESS_DEFAULT_MS,
133
149
  SIM_LONG_PRESS_MAX_MS,
150
+ WRITE_COMMAND_TYPES,
151
+ commandWritesSim,
134
152
  performStepRefusal,
135
153
  readyProbeContentBasis,
136
154
  readyProbeHasContent,