peachsim 0.1.1644 → 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 (608) hide show
  1. package/README.md +12 -0
  2. package/cli/app-catalog.ts +1 -1
  3. package/cli/app-fonts.ts +11 -80
  4. package/cli/app-splash.ts +18 -12
  5. package/cli/bridge-flow-runner.ts +11 -7
  6. package/cli/cloud-client.ts +10 -13
  7. package/cli/command-registry.ts +13 -4
  8. package/cli/commands/box.ts +4 -4
  9. package/cli/commands/control.ts +93 -53
  10. package/cli/commands/coverage-parser.ts +67 -0
  11. package/cli/commands/coverage.ts +550 -0
  12. package/cli/commands/debug.ts +9 -18
  13. package/cli/commands/desktop.ts +19 -7
  14. package/cli/commands/device.ts +14 -9
  15. package/cli/commands/guest-host.ts +6 -10
  16. package/cli/commands/inspect/core.ts +81 -17
  17. package/cli/commands/inspect.ts +13 -8
  18. package/cli/commands/kotlin.ts +2 -2
  19. package/cli/commands/maestro-compare.ts +1 -1
  20. package/cli/commands/platform.ts +20 -11
  21. package/cli/commands/preview.ts +16 -18
  22. package/cli/commands/runtime.ts +3 -2
  23. package/cli/commands/screenshot-layers.ts +1 -1
  24. package/cli/commands/screenshot.ts +1 -1
  25. package/cli/commands/serve.ts +5 -1
  26. package/cli/commands/support.ts +4 -4
  27. package/cli/commands/three-mode.ts +22 -15
  28. package/cli/commands/upload.ts +44 -45
  29. package/cli/current-sim.ts +38 -0
  30. package/cli/desktop-companion.ts +36 -8
  31. package/cli/device-option.ts +1 -1
  32. package/cli/drivers/playwright.ts +1 -0
  33. package/cli/drivers/types.ts +4 -0
  34. package/cli/help-core.ts +1 -1
  35. package/cli/internal-child.ts +2 -1
  36. package/cli/main.ts +9 -3
  37. package/cli/outbound-endpoints.ts +11 -3
  38. package/cli/output-redaction.ts +39 -14
  39. package/cli/remote-simulators.ts +4 -1
  40. package/cli/scene-video.ts +5 -2
  41. package/cli/send-to-box.ts +7 -10
  42. package/cli/telemetry.ts +1 -1
  43. package/cli/ws-bridge.ts +8 -1
  44. package/detox/attempt-events.cjs +3 -1
  45. package/detox/attempt-events.d.cts +1 -1
  46. package/detox/expectations.ts +108 -99
  47. package/detox/frame-offset.d.mts +6 -0
  48. package/detox/frame-offset.mjs +35 -0
  49. package/detox/gestures.ts +6 -18
  50. package/detox/index.ts +169 -101
  51. package/detox/jest-preset.cjs +1 -3
  52. package/detox/jest-transform.cjs +4 -0
  53. package/detox/matchers.ts +3 -0
  54. package/detox/motion-change.cjs +46 -114
  55. package/detox/motion-change.d.cts +5 -27
  56. package/dist-lib/agent-daemon-client.cjs +1 -1
  57. package/dist-lib/agent-events.cjs +1 -1
  58. package/dist-lib/attached-projects.cjs +1 -1
  59. package/dist-lib/auth/shared-session.cjs +1 -1
  60. package/dist-lib/backend-origin.cjs +1 -1
  61. package/dist-lib/beta.cjs +1 -1
  62. package/dist-lib/beta.mjs +1 -1
  63. package/dist-lib/bridge-constants.cjs +1 -1
  64. package/dist-lib/bridge-contract-input.cjs +65 -1
  65. package/dist-lib/bridge-contract-input.mjs +63 -1
  66. package/dist-lib/bridge-contract.cjs +19 -1
  67. package/dist-lib/bridge-contract.mjs +17 -1
  68. package/dist-lib/bundle-channel.cjs +38091 -14846
  69. package/dist-lib/capture-contract.cjs +1 -1
  70. package/dist-lib/capture-contract.mjs +1 -1
  71. package/dist-lib/cloud-contract.cjs +1 -1
  72. package/dist-lib/cloud-contract.mjs +1 -1
  73. package/dist-lib/cloud-test-args.cjs +1 -1
  74. package/dist-lib/cloud-test-args.mjs +1 -1
  75. package/dist-lib/cloud.cjs +1 -1
  76. package/dist-lib/cloud.mjs +1 -1
  77. package/dist-lib/config.cjs +1 -1
  78. package/dist-lib/config.mjs +5 -3
  79. package/dist-lib/detox/index.cjs +1244 -4509
  80. package/dist-lib/detox/jest-preset.cjs +1 -3
  81. package/dist-lib/detox/jest-transform.cjs +4 -0
  82. package/dist-lib/dev-bundle-resolution.cjs +28 -24
  83. package/dist-lib/expo-swift-bundle.cjs +35049 -13125
  84. package/dist-lib/expo-swift-metadata.cjs +1 -1
  85. package/dist-lib/expo-swift-metadata.mjs +1 -1
  86. package/dist-lib/home-paths.cjs +1 -1
  87. package/dist-lib/host/bridge-host.cjs +45112 -63143
  88. package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
  89. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  90. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  91. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  92. package/dist-lib/host/websocket-proxy.cjs +1 -1
  93. package/dist-lib/index.cjs +1909 -2029
  94. package/dist-lib/jump-to-source-babel.cjs +1 -1
  95. package/dist-lib/jump-to-source-native.cjs +1 -1
  96. package/dist-lib/kotlin-host.cjs +2 -2
  97. package/dist-lib/menu.cjs +1 -1
  98. package/dist-lib/menu.mjs +1 -1
  99. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  100. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  101. package/dist-lib/metro-production-bundle.cjs +1 -1
  102. package/dist-lib/metro-production-bundle.mjs +1 -1
  103. package/dist-lib/metro.cjs +380 -522
  104. package/dist-lib/native-app-identity-project.cjs +39 -252
  105. package/dist-lib/native-app-identity-project.mjs +1174 -11
  106. package/dist-lib/native-app-identity.cjs +8 -3
  107. package/dist-lib/native-app-identity.mjs +8 -3
  108. package/dist-lib/native-firebase-metadata.cjs +1 -1
  109. package/dist-lib/native-firebase-metadata.mjs +1 -1
  110. package/dist-lib/plist.cjs +2 -244
  111. package/dist-lib/plist.mjs +1 -1
  112. package/dist-lib/profiles.cjs +1 -1
  113. package/dist-lib/public-brand.cjs +1 -1
  114. package/dist-lib/public-origins-lib-esm.json +290 -0
  115. package/dist-lib/public-origins-lib-static.json +1 -0
  116. package/dist-lib/public-origins-lib.json +1852 -0
  117. package/dist-lib/react-native-host-modules.cjs +1 -1
  118. package/dist-lib/react-native-host-modules.mjs +1 -1
  119. package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
  120. package/dist-lib/sdk.cjs +83 -16
  121. package/dist-lib/sdk.mjs +81 -15
  122. package/dist-lib/skills.cjs +50546 -75098
  123. package/dist-lib/swift-compile.cjs +25897 -1070
  124. package/dist-lib/swift-compile.mjs +25866 -1033
  125. package/dist-lib/swift-package.cjs +79 -1
  126. package/dist-lib/swift-package.mjs +75 -1
  127. package/dist-lib/swift-submit.cjs +1 -1
  128. package/dist-lib/swift-submit.mjs +1 -1
  129. package/dist-lib/swift-toolchain.cjs +1 -1
  130. package/dist-lib/swift.cjs +1 -1
  131. package/dist-lib/vite-swift.cjs +34273 -12349
  132. package/dist-lib/vite.cjs +373 -298
  133. package/dist-lib/worklet-executable.cjs +1 -1
  134. package/dist-lib/worklet-executable.mjs +1 -1
  135. package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
  136. package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
  137. package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
  138. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
  139. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
  140. package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
  141. package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
  142. package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
  143. package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
  144. package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
  145. package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
  146. package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
  147. package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
  148. package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
  149. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
  150. package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
  151. package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
  152. package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
  153. package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
  154. package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
  155. package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
  156. package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
  157. package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
  158. package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
  159. package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
  160. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
  161. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
  162. package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
  163. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
  164. package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
  165. package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
  166. package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
  167. package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
  168. package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
  169. package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
  170. package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
  171. package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
  172. package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
  173. package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
  174. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
  175. package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
  176. package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
  177. package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
  178. package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
  179. package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
  180. package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
  181. package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
  182. package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
  183. package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
  184. package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
  185. package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
  186. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
  187. package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
  188. package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
  189. package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
  190. package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
  191. package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
  192. package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
  193. package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
  194. package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
  195. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
  196. package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
  197. package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
  198. package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
  199. package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
  200. package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
  201. package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
  202. package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
  203. package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
  204. package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
  205. package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
  206. package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
  207. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
  208. package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
  209. package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
  210. package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
  211. package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
  212. package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
  213. package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
  214. package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
  215. package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
  216. package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
  217. package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
  218. package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
  219. package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
  220. package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
  221. package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
  222. package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
  223. package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
  224. package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
  225. package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
  226. package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
  227. package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
  228. package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
  229. package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
  230. package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
  231. package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
  232. package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
  233. package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
  234. package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
  235. package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
  236. package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
  237. package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
  238. package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
  239. package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
  240. package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
  241. package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
  242. package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
  243. package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
  244. package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
  245. package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
  246. package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
  247. package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
  248. package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
  249. package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
  250. package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
  251. package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
  252. package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
  253. package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
  254. package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
  255. package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
  256. package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
  257. package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
  258. package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
  259. package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
  260. package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
  261. package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
  262. package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
  263. package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
  264. package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
  265. package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
  266. package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
  267. package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
  268. package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
  269. package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
  270. package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
  271. package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
  272. package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
  273. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
  274. package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
  275. package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
  276. package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
  277. package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
  278. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
  279. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
  280. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
  281. package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
  282. package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
  283. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
  284. package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
  285. package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
  286. package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
  287. package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
  288. package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
  289. package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
  290. package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
  291. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
  292. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
  293. package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
  294. package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
  295. package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
  296. package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
  297. package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
  298. package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
  299. package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
  300. package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
  301. package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
  302. package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
  303. package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
  304. package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
  305. package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
  306. package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
  307. package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
  308. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
  309. package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
  310. package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
  311. package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
  312. package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
  313. package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
  314. package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
  315. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
  316. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
  317. package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
  318. package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
  319. package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
  320. package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
  321. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
  322. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
  323. package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
  324. package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
  325. package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
  326. package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
  327. package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
  328. package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
  329. package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
  330. package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
  331. package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
  332. package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
  333. package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
  334. package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
  335. package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
  336. package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
  337. package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
  338. package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
  339. package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
  340. package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
  341. package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
  342. package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
  343. package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
  344. package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
  345. package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
  346. package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
  347. package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
  348. package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
  349. package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
  350. package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
  351. package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
  352. package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
  353. package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
  354. package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
  355. package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
  356. package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
  357. package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
  358. package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
  359. package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
  360. package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
  361. package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
  362. package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
  363. package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
  364. package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
  365. package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
  366. package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
  367. package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
  368. package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
  369. package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
  370. package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
  371. package/kotlin/README.md +6 -0
  372. package/package.json +22 -2
  373. package/runtime-companion.json +1 -0
  374. package/skills/contrast/SKILL.md +1 -0
  375. package/src/assetCatalogContract.ts +21 -0
  376. package/src/bridge-contract-input.ts +84 -0
  377. package/src/bridge-contract.ts +35 -3
  378. package/src/browser-launch-policy.ts +1 -0
  379. package/src/bundle-channel.mjs +4 -2
  380. package/src/cli-runtime.ts +55 -0
  381. package/src/crash-fingerprint.ts +26 -0
  382. package/src/dev-bundle-resolution.ts +50 -23
  383. package/src/device-catalog.ts +1159 -0
  384. package/src/host/bridge-host.ts +3 -26
  385. package/src/host/browser-pointer.ts +71 -0
  386. package/src/host/dev-server-package-versions.ts +23 -0
  387. package/src/host/fetch-proxy-handler.ts +17 -4
  388. package/src/installed-package-versions.ts +142 -38
  389. package/src/kotlin-host.ts +1 -1
  390. package/src/metro-plugin.ts +4 -4
  391. package/src/metro-project-root.ts +68 -0
  392. package/src/nitro-adapter.lock.json +26 -0
  393. package/src/nitro-adapter.ts +103 -0
  394. package/src/nitro-bundle.ts +24 -10
  395. package/src/nitro-compile.ts +33 -51
  396. package/src/nitro-source.ts +177 -96
  397. package/src/nitroAdapterContract.ts +217 -0
  398. package/src/nitroContract.ts +24 -11
  399. package/src/process-group.ts +41 -34
  400. package/src/react-bridge-importers.ts +28 -0
  401. package/src/reactNativeConfigurationContract.ts +36 -0
  402. package/src/runtime-assets.ts +7 -2
  403. package/src/runtime-delivery.ts +2 -0
  404. package/src/runtimePlatformContract.ts +70 -0
  405. package/src/screenshots/frame-compose.ts +42 -43
  406. package/src/screenshots/org-deck.ts +9 -4
  407. package/src/screenshots/preset-names.ts +29 -0
  408. package/src/screenshots/registry.ts +5 -5
  409. package/src/screenshots/schema.ts +1 -1
  410. package/src/screenshots/screenshotContract.ts +971 -0
  411. package/src/settings-flags.ts +107 -0
  412. package/src/settingsContract.ts +609 -0
  413. package/src/storageSnapshotContract.ts +344 -0
  414. package/src/stub-pattern-matcher.ts +550 -0
  415. package/src/swift-compile.ts +908 -40
  416. package/src/swift-compiler-digest.ts +13 -1
  417. package/src/swift-distribution.lock.json +49 -22
  418. package/src/swift-host.ts +167 -52
  419. package/src/swift-objc-compile.ts +54 -24
  420. package/src/swift-objc-export.ts +532 -0
  421. package/src/swift-objc-import.ts +769 -0
  422. package/src/swift-objc-metadata.ts +285 -10
  423. package/src/swift-objc-sdk.ts +13970 -158
  424. package/src/swift-objc-standin.ts +137 -1
  425. package/src/swift-package.ts +94 -0
  426. package/src/swift-packages.ts +5 -5
  427. package/src/swift-submit.ts +6 -0
  428. package/src/swiftContract.ts +99 -0
  429. package/src/target-matcher.ts +6 -1
  430. package/src/vite-plugin.ts +14 -40
  431. package/src/worker-system-chunks.ts +1 -1
  432. package/src/workerChunkContract.ts +5 -0
  433. package/src/worklets-babel.ts +24 -5
  434. package/src/xcode-project.ts +36 -7
  435. package/src/xcode-target-members.ts +10 -3
  436. package/cli/drivers/playwright-sim-host.ts +0 -825
  437. package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
  438. package/kotlin/fixtures/counter/Counter.kt +0 -51
  439. package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
  440. package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
  441. package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
  442. package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
  443. package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
  444. package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
  445. package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
  446. package/kotlin/fixtures/counter/package.json +0 -20
  447. package/kotlin/fixtures/counter/tsconfig.json +0 -19
  448. package/kotlin/fixtures/counter/vite.config.ts +0 -20
  449. package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
  450. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
  451. package/kotlin/fixtures/import-animation/Animation.kt +0 -80
  452. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
  453. package/kotlin/fixtures/import-animation/README.md +0 -24
  454. package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
  455. package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
  456. package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
  457. package/kotlin/fixtures/import-animation/package.json +0 -23
  458. package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
  459. package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
  460. package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
  461. package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
  462. package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
  463. package/kotlin/fixtures/import-drawing/README.md +0 -34
  464. package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
  465. package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
  466. package/kotlin/fixtures/import-drawing/package.json +0 -23
  467. package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
  468. package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
  469. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
  470. package/kotlin/fixtures/import-editor/Editor.kt +0 -59
  471. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
  472. package/kotlin/fixtures/import-editor/README.md +0 -27
  473. package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
  474. package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
  475. package/kotlin/fixtures/import-editor/package.json +0 -23
  476. package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
  477. package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
  478. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
  479. package/kotlin/fixtures/import-effects/Effects.kt +0 -87
  480. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
  481. package/kotlin/fixtures/import-effects/README.md +0 -19
  482. package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
  483. package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
  484. package/kotlin/fixtures/import-effects/package.json +0 -23
  485. package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
  486. package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
  487. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
  488. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
  489. package/kotlin/fixtures/import-layout/Layout.kt +0 -72
  490. package/kotlin/fixtures/import-layout/README.md +0 -24
  491. package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
  492. package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
  493. package/kotlin/fixtures/import-layout/package.json +0 -23
  494. package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
  495. package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
  496. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
  497. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
  498. package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
  499. package/kotlin/fixtures/import-navigation/README.md +0 -31
  500. package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
  501. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
  502. package/kotlin/fixtures/import-navigation/package.json +0 -23
  503. package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
  504. package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
  505. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
  506. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
  507. package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
  508. package/kotlin/fixtures/import-overlays/README.md +0 -34
  509. package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
  510. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
  511. package/kotlin/fixtures/import-overlays/package.json +0 -23
  512. package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
  513. package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
  514. package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
  515. package/kotlin/fixtures/import-resources/README.md +0 -26
  516. package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
  517. package/kotlin/fixtures/import-resources/Resources.kt +0 -72
  518. package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
  519. package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
  520. package/kotlin/fixtures/import-resources/package.json +0 -23
  521. package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
  522. package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
  523. package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
  524. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
  525. package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
  526. package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
  527. package/kotlin/fixtures/import-scroll/README.md +0 -38
  528. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
  529. package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
  530. package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
  531. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
  532. package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
  533. package/kotlin/fixtures/import-scroll/package.json +0 -23
  534. package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
  535. package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
  536. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
  537. package/kotlin/fixtures/import-selection/README.md +0 -32
  538. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
  539. package/kotlin/fixtures/import-selection/Selection.kt +0 -78
  540. package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
  541. package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
  542. package/kotlin/fixtures/import-selection/package.json +0 -23
  543. package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
  544. package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
  545. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
  546. package/kotlin/fixtures/import-surfaces/README.md +0 -22
  547. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
  548. package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
  549. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
  550. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
  551. package/kotlin/fixtures/import-surfaces/package.json +0 -23
  552. package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
  553. package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
  554. package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
  555. package/kotlin/fixtures/import-values/README.md +0 -28
  556. package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
  557. package/kotlin/fixtures/import-values/Values.kt +0 -84
  558. package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
  559. package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
  560. package/kotlin/fixtures/import-values/package.json +0 -23
  561. package/kotlin/fixtures/import-values/tsconfig.json +0 -20
  562. package/kotlin/fixtures/import-values/vite.config.ts +0 -20
  563. package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
  564. package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
  565. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
  566. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
  567. package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
  568. package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
  569. package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
  570. package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
  571. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
  572. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
  573. package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
  574. package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
  575. package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
  576. package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
  577. package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
  578. package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
  579. package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
  580. package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
  581. package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
  582. package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
  583. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
  584. package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
  585. package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
  586. package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
  587. package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
  588. package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
  589. package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
  590. package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
  591. package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
  592. package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
  593. package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
  594. package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
  595. package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
  596. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
  597. package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
  598. package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
  599. package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
  600. package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
  601. package/kotlin/fork/README.md +0 -97
  602. package/kotlin/fork/build.sh +0 -176
  603. package/kotlin/fork/compose-worker-globals.patch +0 -1247
  604. package/kotlin/fork/fork.json +0 -46
  605. package/kotlin/fork/publish.ts +0 -99
  606. package/kotlin/fork/skia-android-shaping.patch +0 -189
  607. package/kotlin/fork/skiko-local.init.gradle +0 -10
  608. package/kotlin/fork/skiko-worker-clock.patch +0 -122
@@ -0,0 +1,4 @@
1
+ export { setEngineConfig, setEngineConfigInitializer, resetCapabilityStore, type SootSimEngineConfig, } from './capabilities.d.ts';
2
+ export { bindReact } from './react-bridge.d.ts';
3
+ export { POPOVER_ARROWS, POPOVER_CORNER_RADIUS, placePopover, centerArrowlessPopover, popoverGlassArrow, popoverRegion, } from './ui/popover-placement.d.ts';
4
+ export { HostingSafeAreaContext, systemLayoutMargin, type HostingSafeAreaContainer, } from './ui/hosting-safe-area.d.ts';
@@ -0,0 +1,27 @@
1
+ import type { Ref } from 'react';
2
+ import type { View, ViewProps } from 'react-native';
3
+ type SystemBlurStyle = 'systemUltraThinMaterial' | 'systemThinMaterial' | 'systemMaterial' | 'systemThickMaterial' | 'systemChromeMaterial';
4
+ export type BlurStyle = SystemBlurStyle | `${SystemBlurStyle}Light` | `${SystemBlurStyle}Dark` | 'extraLight' | 'light' | 'dark' | 'regular' | 'prominent';
5
+ export interface ProgressiveBlurViewProps extends ViewProps {
6
+ maxRadius: number;
7
+ direction: 'top' | 'bottom' | 'center';
8
+ startOffset?: number;
9
+ blurStyle?: BlurStyle;
10
+ ref?: Ref<View>;
11
+ }
12
+ interface VariableBlurAppearance {
13
+ fillDarken: number;
14
+ fillLighten: number;
15
+ fillNormal: number;
16
+ plateColor: readonly [number, number, number];
17
+ plateOpacity: number;
18
+ }
19
+ export interface VariableBlurStyle {
20
+ radius: number;
21
+ fillRadius: number;
22
+ captureFactor?: number;
23
+ light: VariableBlurAppearance;
24
+ dark: VariableBlurAppearance;
25
+ radiusMaskHex: string;
26
+ }
27
+ export {};
@@ -0,0 +1,14 @@
1
+ import type { VariableBlurStyle } from './types.d.ts';
2
+ export type UIBlurMaterialStyle = {
3
+ lightSigma: number;
4
+ darkSigma: number;
5
+ light: number[];
6
+ dark: number[];
7
+ amount: number;
8
+ sampleWithinBounds?: true;
9
+ tileMode?: 'mirror';
10
+ colorMatrix?: readonly number[];
11
+ variableBlur?: VariableBlurStyle;
12
+ };
13
+ export declare const IDENTITY_MATERIAL: number[];
14
+ export declare const UI_MATERIAL_RECIPES: Record<string, Omit<UIBlurMaterialStyle, 'amount'>>;
@@ -0,0 +1,11 @@
1
+ import type { ShellNativeEvaluationOwner } from '../../peach-globals/src/index.d.ts';
2
+ export interface ScreenInfo {
3
+ id: string;
4
+ owner: ShellNativeEvaluationOwner | null;
5
+ routeName?: string;
6
+ isActive: boolean;
7
+ headerHeight: number;
8
+ largeTitleState?: 'expanded' | 'collapsed' | 'collapsing' | 'expanding';
9
+ presentation?: string;
10
+ depth?: number;
11
+ }
@@ -0,0 +1,53 @@
1
+ import * as _defaultReact from 'react';
2
+ export declare function bindReact(react: typeof _defaultReact): void;
3
+ export declare function getReact(): typeof _defaultReact;
4
+ export declare function useState<T>(init: T | (() => T)): [T, (v: T | ((prev: T) => T)) => void];
5
+ export declare function use<T>(usable: import('react').Usable<T>): T;
6
+ export declare function useActionState(...args: any[]): any;
7
+ export declare function useEffect(effect: () => void | (() => void | undefined), deps?: readonly any[]): void;
8
+ export declare function useEffectEvent<T extends (...args: any[]) => any>(event: T): T;
9
+ export declare function useLayoutEffect(effect: () => void | (() => void | undefined), deps?: readonly any[]): void;
10
+ export declare function useCallback<T extends (...args: any[]) => any>(cb: T, deps: readonly any[]): T;
11
+ export declare function useId(): string;
12
+ export declare function useRef<T>(init: T): import('react').RefObject<T>;
13
+ export declare function useRef<T>(init: T | null): import('react').RefObject<T | null>;
14
+ export declare function useRef<T = undefined>(): import('react').RefObject<T | undefined>;
15
+ export declare function useMemo<T>(factory: () => T, deps: readonly any[]): T;
16
+ export declare function useOptimistic(...args: any[]): any;
17
+ export declare function useContext<T>(ctx: import('react').Context<T>): T;
18
+ export declare function useReducer(...args: any[]): any;
19
+ export declare function useImperativeHandle(...args: any[]): void;
20
+ export declare function useInsertionEffect(effect: () => void | (() => void | undefined), deps?: readonly any[]): any;
21
+ export declare function useDeferredValue<T>(value: T): T;
22
+ export declare function useTransition(): [boolean, (cb: () => void) => void];
23
+ export declare function useDebugValue(value: any, format?: (v: any) => any): void;
24
+ export declare function useSyncExternalStore<T>(subscribe: (onStoreChange: () => void) => () => void, getSnapshot: () => T, getServerSnapshot?: () => T): T;
25
+ export declare function startTransition(fn: () => void): void;
26
+ export declare function unstable_useCacheRefresh(): () => void;
27
+ export declare function act(...args: any[]): any;
28
+ export declare function cache<T extends (...args: any[]) => any>(fn: T): T;
29
+ export declare function cacheSignal(): import('react').CacheSignal | null;
30
+ export declare function captureOwnerStack(): string | null;
31
+ export declare function createElement(...args: any[]): any;
32
+ export declare function createContext<T>(defaultValue?: T): import('react').Context<T>;
33
+ export declare function forwardRef(render: any): any;
34
+ export declare function createRef<T = unknown>(): import('react').RefObject<T | null>;
35
+ export declare function memo(component: any, compare?: any): any;
36
+ export declare function lazy(factory: any): any;
37
+ export declare function isValidElement(el: unknown): el is _defaultReact.ReactElement;
38
+ export declare function cloneElement(...args: any[]): any;
39
+ export declare const Children: typeof _defaultReact.Children;
40
+ export declare let Activity: any;
41
+ export declare let Fragment: any;
42
+ export declare let Profiler: any;
43
+ export declare let StrictMode: any;
44
+ export declare let Suspense: any;
45
+ export declare let Component: any;
46
+ export declare let PureComponent: any;
47
+ export declare const __CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE: any;
48
+ export declare const __COMPILER_RUNTIME: any;
49
+ export declare const __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: any;
50
+ export declare const version: string;
51
+ declare const _default: typeof _defaultReact;
52
+ export default _default;
53
+ export type { ComponentType, Context, Dispatch, FC, JSX, PropsWithChildren, ReactElement, ReactNode, Ref, RefObject, SetStateAction, } from 'react';
@@ -0,0 +1,26 @@
1
+ import { type NativeAlertsConfig, type SootSimEngineConfig } from './capabilities.d.ts';
2
+ export type { ScreenInfo } from './navigation-types.d.ts';
3
+ export { getEngineConfig, getOptionalEngineConfig, type SootSimEngineConfig, type ColorPickerControlProps, type BottomTabAccessoryPlacement, type BottomTabAccessoryRenderer, type BottomTabBarItem, type BottomTabBarProps, type TabBarIconImage, type GestureSeamOwner, type ScreenEdgeSwipeCommit, type ScreenTransitionAnimation, type ScreenTransitionProgress, isScreenTransitionAnimation, type NativeAlertPromptValue, type NativeAlertsConfig, type NativeNotificationsConfig, type NativePermissionsConfig, type NotifAction, type NotifCategory, type NotifChannel, type NotifChannelGroup, type NotifEvent, type NotifEventType, type NotifForegroundPresenter, type NotifPermission, type NotifPresentation, type NotifSpec, type NotifToken, type NotifTrigger, type NotificationBusInterface, type SystemNotificationSettings, type SystemPermissionDescriptor, type SystemPermissionKind, type SystemPermissionLocationAccuracy, type SystemPermissionState, type SystemPermissionStatus, } from './capabilities.d.ts';
4
+ export declare function getReactNative(): {
5
+ [key: string]: any;
6
+ usePinnedTraitColorScheme: () => 'light' | 'dark' | null;
7
+ Platform: any;
8
+ Dimensions: any;
9
+ UIManager: any;
10
+ Keyboard: any;
11
+ findNodeHandle?: (component: any) => number | null;
12
+ BackHandler: {
13
+ emitBackPress: () => boolean;
14
+ };
15
+ AppRegistry: any;
16
+ NativeEventEmitter: any;
17
+ DeviceEventEmitter: any;
18
+ Animated?: any;
19
+ Easing?: any;
20
+ };
21
+ export declare function getEngine(): SootSimEngineConfig['engine'];
22
+ export declare function getNativeNotifications(): import("../../peach-engine/src/react-bridge.d.ts").NativeNotificationsConfig | undefined;
23
+ export declare function getNativeAlerts(): NativeAlertsConfig;
24
+ export declare function getSystemPermissions(): import("../../peach-engine/src/react-bridge.d.ts").NativePermissionsConfig | undefined;
25
+ export declare function getPlatform(): string;
26
+ export { getReact, useState, use, useActionState, useEffect, useEffectEvent, useLayoutEffect, useCallback, useId, useRef, useMemo, useOptimistic, useContext, useReducer, useImperativeHandle, useInsertionEffect, useDeferredValue, useTransition, useDebugValue, useSyncExternalStore, startTransition, unstable_useCacheRefresh, act, cache, cacheSignal, captureOwnerStack, createElement, createContext, forwardRef, createRef, memo, lazy, isValidElement, cloneElement, Children, Activity, Fragment, Profiler, StrictMode, Suspense, Component, PureComponent, version, __CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, __COMPILER_RUNTIME, __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, type ComponentType, type Context, type Dispatch, type FC, type JSX, type PropsWithChildren, type ReactElement, type ReactNode, type Ref, type RefObject, type SetStateAction, default, } from './react-bridge.d.ts';
@@ -0,0 +1,24 @@
1
+ import { type RefObject } from 'react';
2
+ export interface HostingSafeAreaContainer {
3
+ view: RefObject<unknown>;
4
+ height: number;
5
+ top: number;
6
+ bottom: number;
7
+ left: number;
8
+ right: number;
9
+ margins: {
10
+ left: number;
11
+ right: number;
12
+ };
13
+ rowInset?: number;
14
+ }
15
+ export declare const HostingSafeAreaContext: import("react").Context<HostingSafeAreaContainer | null>;
16
+ export declare function systemLayoutMargin(screen: {
17
+ width: number;
18
+ height: number;
19
+ }): number;
20
+ export declare const SWIFTUI_TOGGLE_TRAILING_PLACEMENT = -1.5;
21
+ export declare function expoUiFormToggleTrackTrailingInset(screen: {
22
+ width: number;
23
+ height: number;
24
+ }): number;
@@ -0,0 +1,53 @@
1
+ export declare const POPOVER_ARROW_DEPTH = 13;
2
+ export declare const POPOVER_ARROW_END_INSET = 19;
3
+ export declare const POPOVER_SIDE_MARGIN = 10;
4
+ export declare const POPOVER_CORNER_RADIUS = 33;
5
+ export declare const POPOVER_ARROW_TIP_RADIUS = 1.5;
6
+ export declare const POPOVER_ARROW_JOIN_RADIUS = 6;
7
+ export type PopoverArrow = 'up' | 'down' | 'left' | 'right';
8
+ export declare const POPOVER_ARROWS: PopoverArrow[];
9
+ export interface PopoverSource {
10
+ absX: number;
11
+ absY: number;
12
+ width: number;
13
+ height: number;
14
+ }
15
+ export declare function centerArrowlessPopover(source: PopoverSource, content: {
16
+ width: number;
17
+ height: number;
18
+ }): {
19
+ cardX: number;
20
+ cardY: number;
21
+ };
22
+ export interface PopoverRegion {
23
+ left: number;
24
+ top: number;
25
+ right: number;
26
+ bottom: number;
27
+ }
28
+ export declare function popoverRegion(windowWidth: number, safeTop: number, safeBottom: number): PopoverRegion;
29
+ export declare function placePopover(source: PopoverSource, content: {
30
+ width: number;
31
+ height: number;
32
+ }, region: PopoverRegion, arrows: PopoverArrow[], narrowsBesideSource?: boolean): {
33
+ cardX: number;
34
+ cardY: number;
35
+ cardWidth: number | undefined;
36
+ direction: PopoverArrow;
37
+ arrowX: number;
38
+ arrowY: number;
39
+ pivotX: number;
40
+ pivotY: number;
41
+ pinned: "end" | "start" | undefined;
42
+ arrowCentre: number;
43
+ };
44
+ export declare function popoverGlassArrow(placed: ReturnType<typeof placePopover>): {
45
+ x: number;
46
+ y: number;
47
+ direction: PopoverArrow;
48
+ depth: number;
49
+ tipRadius: number;
50
+ joinRadius: number;
51
+ pinned: "end" | "start" | undefined;
52
+ centre: number;
53
+ };
@@ -0,0 +1,17 @@
1
+ export type SheetDismissalDecision = readonly [requestId: number, allowed: boolean];
2
+ export type SheetDismissalResult = 'allowed' | 'denied' | 'cancelled';
3
+ export interface SheetDismissalAttempt {
4
+ result: Promise<SheetDismissalResult>;
5
+ cancel: () => void;
6
+ }
7
+ export type SheetDismissalRequest = () => SheetDismissalAttempt;
8
+ export type SheetDismissalLifecycle = {
9
+ phase: 'begin';
10
+ interactive: boolean;
11
+ } | {
12
+ phase: 'interaction';
13
+ cancelled: boolean;
14
+ } | {
15
+ phase: 'cancelled';
16
+ };
17
+ export type SheetDismissalObserver = (event: SheetDismissalLifecycle) => void;
@@ -1,4 +1,4 @@
1
- @file:OptIn(androidx.compose.ui.ExperimentalComposeUiApi::class, androidx.compose.ui.InternalComposeUiApi::class, androidx.compose.ui.text.ExperimentalTextApi::class, kotlin.js.ExperimentalJsExport::class, kotlin.js.ExperimentalWasmJsInterop::class, org.jetbrains.skiko.InternalSkikoApi::class)
1
+ @file:OptIn(androidx.compose.ui.ExperimentalComposeUiApi::class, androidx.compose.ui.InternalComposeUiApi::class, androidx.compose.ui.text.ExperimentalTextApi::class, kotlin.js.ExperimentalJsExport::class, org.jetbrains.skiko.InternalSkikoApi::class)
2
2
 
3
3
  import androidx.compose.foundation.LocalPlatformMagnifierFactory
4
4
  import androidx.compose.runtime.Composable
@@ -1,5 +1,3 @@
1
- @file:OptIn(kotlin.js.ExperimentalWasmJsInterop::class)
2
-
3
1
  package com.facebook.jni
4
2
 
5
3
  import dev.peach.jni.isNativeRuntimeActive
@@ -1,5 +1,3 @@
1
- @file:OptIn(kotlin.js.ExperimentalWasmJsInterop::class)
2
-
3
1
  package dev.peach.jni
4
2
 
5
3
  import kotlin.js.*
@@ -1,5 +1,3 @@
1
- @file:OptIn(kotlin.js.ExperimentalWasmJsInterop::class)
2
-
3
1
  package dev.peach.jni.integration
4
2
 
5
3
  import dev.peach.jni.*
package/kotlin/README.md CHANGED
@@ -72,3 +72,9 @@ The eager Vite entry must remain byte-identical. Compose dispatch runs in a
72
72
  browser worker with no document, after official Skiko initializes. This proves
73
73
  runtime behavior, with no Compose UI or Android pixel grade. UI fixtures still
74
74
  use the paired Compose oracle.
75
+
76
+ The npm package publishes the `*Sources/` directories, `tools/` and
77
+ `toolchain.json` required by client compilation, plus this documentation and
78
+ the fork licenses and notices. `fork/` patches, pins and producer scripts,
79
+ and development fixtures remain in private Git. The package smoke check rejects
80
+ these build inputs in actual npm payloads, including a supplied tarball.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peachsim",
3
- "version": "0.1.1644",
3
+ "version": "0.1.1653",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for peach.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -313,9 +313,26 @@
313
313
  "install.mjs",
314
314
  "install.sh",
315
315
  "dist-lib/",
316
+ "dist-types/",
317
+ "runtime-companion.json",
316
318
  "src/",
317
319
  "cli/",
318
- "kotlin/",
320
+ "kotlin/AndroidViewSources/",
321
+ "kotlin/AppSources/",
322
+ "kotlin/CompilerSources/",
323
+ "kotlin/ComposeSources/",
324
+ "kotlin/ExpoComposeSources/",
325
+ "kotlin/ExpoSources/",
326
+ "kotlin/JniPlatformSources/",
327
+ "kotlin/JniSources/",
328
+ "kotlin/JniTransportSources/",
329
+ "kotlin/Sources/",
330
+ "kotlin/tools/",
331
+ "kotlin/toolchain.json",
332
+ "kotlin/README.md",
333
+ "kotlin/fork/LICENSE",
334
+ "kotlin/fork/SKIA_LICENSE",
335
+ "kotlin/fork/NOTICE",
319
336
  "skills/",
320
337
  "scripts/dev-server-scanner.ts",
321
338
  "scripts/optional-demo-registry.ts",
@@ -374,5 +391,8 @@
374
391
  "typescript": "7.1.0-beta",
375
392
  "vite": "8.3.3",
376
393
  "yaml": "^2.8.3"
394
+ },
395
+ "imports": {
396
+ "#peach-cli-contract/*": "./dist-types/packages/peach-engine/src/*.d.ts"
377
397
  }
378
398
  }
@@ -0,0 +1 @@
1
+ {"abi":1,"sha256":"d58f0fedc3c0065faaafcf578781567b6cdac88e5c062a8354111d37fdf3c465","file":"node/cli-d58f0fedc3c0065faaafcf578781567b6cdac88e5c062a8354111d37fdf3c465.cjs"}
@@ -60,6 +60,7 @@ automation, inspecting the render tree, and managing sims.
60
60
  | `peach close` | close a connected sim |
61
61
  | `peach setup` | configure optional local conveniences |
62
62
  | `peach doctor` | check what of an app Peach runs |
63
+ | `peach coverage` | scan repository source for mapped APIs and unknown reach |
63
64
  | `peach project-report` | print local project and toolchain metadata |
64
65
  | `peach support` | ask for help, report a problem, and read our replies |
65
66
  | `peach desktop` | launch or install the desktop companion |
@@ -60,6 +60,8 @@ export interface SfSymbolImageDrawing {
60
60
  referencePointSize: number
61
61
  basePointSize: number
62
62
  baselineOffsetUnrounded: number
63
+ // coreui's glyph cap height at basePointSize, before scale rounding
64
+ capHeightUnrounded: number
63
65
  referenceCanvasSize: readonly [number, number]
64
66
  insets: readonly [number, number, number, number]
65
67
  layers: readonly { d: string; opacity: number; eraser: boolean; threshold?: number }[]
@@ -115,6 +117,25 @@ export function sfSymbolImageDimensions(
115
117
  }
116
118
  }
117
119
 
120
+ // uiimage's baseline above the image bottom and its cap height, in device
121
+ // pixels: each glyph metric rounds at the display scale, and the baseline
122
+ // rides on the bottom bearing
123
+ // (docs/ios-framework-oracle/sf-symbol-image-alignment-metrics-and-weight-scale-boundary-uikitcore-coreui.md)
124
+ export function sfSymbolImageAlignment(
125
+ drawing: SfSymbolImageMetadata,
126
+ pointSize: number,
127
+ scale: number,
128
+ ) {
129
+ const dimensions = sfSymbolImageDimensions(drawing, pointSize, scale)
130
+ const round = (value: number) =>
131
+ Math.round((value * pointSize * scale) / drawing.basePointSize)
132
+ return {
133
+ ...dimensions,
134
+ baseline: round(drawing.baselineOffsetUnrounded) + dimensions.insets[3],
135
+ capHeight: round(drawing.capHeightUnrounded),
136
+ }
137
+ }
138
+
118
139
  // roundtrip Float64 decimal coordinates with shared svg verb programs.
119
140
  export interface SfSymbolPathEncoding {
120
141
  format: 'float64-table'
@@ -5,6 +5,8 @@ import { isRecord } from './is-record'
5
5
  // WebSocket routes) validates its request bodies here rather than growing a
6
6
  // second reader for the same shapes.
7
7
  import type {
8
+ DiagnosticsOptions,
9
+ DiagnosticsResult,
8
10
  ResetOptions,
9
11
  SemanticWaitOptions,
10
12
  SimSemanticQuery,
@@ -343,6 +345,88 @@ export function findInvalidPointerSequence(
343
345
  }
344
346
  }
345
347
 
348
+ function diagnosticsChannels(value: unknown, path: string): string[] {
349
+ if (!Array.isArray(value)) validationFailure(path, 'must be a list of channel names')
350
+ return value.map((channel) => stringValue(channel, path))
351
+ }
352
+
353
+ export function parseDiagnosticsResult(value: unknown): DiagnosticsResult {
354
+ if (
355
+ !isRecord(value) ||
356
+ !Array.isArray(value.channels) ||
357
+ !value.channels.every((channel) => typeof channel === 'string') ||
358
+ !Array.isArray(value.availableChannels) ||
359
+ !value.availableChannels.every((channel) => typeof channel === 'string') ||
360
+ !Array.isArray(value.events)
361
+ ) {
362
+ validationFailure(
363
+ 'remote diagnostics',
364
+ 'returned an incompatible native host response',
365
+ )
366
+ }
367
+ return {
368
+ channels: value.channels,
369
+ availableChannels: value.availableChannels,
370
+ runtime: value.runtime,
371
+ found: value.found,
372
+ events: value.events,
373
+ }
374
+ }
375
+
376
+ export function parseDiagnosticsOptions(value: unknown): DiagnosticsOptions {
377
+ const options = recordValue(value, 'diagnostics')
378
+ const channels =
379
+ options.channels === undefined
380
+ ? undefined
381
+ : diagnosticsChannels(options.channels, 'diagnostics.channels')
382
+ let channelControl: DiagnosticsOptions['channelControl']
383
+ if (options.channelControl !== undefined) {
384
+ if (channels !== undefined) {
385
+ validationFailure('diagnostics.channelControl', 'cannot be combined with channels')
386
+ }
387
+ const control = recordValue(options.channelControl, 'diagnostics.channelControl')
388
+ const action = control.action
389
+ if (action !== 'enable' && action !== 'disable' && action !== 'toggle') {
390
+ validationFailure(
391
+ 'diagnostics.channelControl.action',
392
+ 'must be enable, disable, or toggle',
393
+ )
394
+ }
395
+ const selected = diagnosticsChannels(
396
+ control.channels,
397
+ 'diagnostics.channelControl.channels',
398
+ )
399
+ if (action === 'toggle' && (selected.length !== 1 || selected[0] === 'all')) {
400
+ validationFailure('diagnostics.channelControl', 'toggle requires one channel')
401
+ }
402
+ channelControl = { action, channels: selected }
403
+ }
404
+ const find = options.find
405
+ if (
406
+ find !== undefined &&
407
+ find !== 'sheets' &&
408
+ find !== 'portals' &&
409
+ find !== 'boundaries'
410
+ ) {
411
+ validationFailure('diagnostics.find', 'must be sheets, portals, or boundaries')
412
+ }
413
+ return {
414
+ ...(channels === undefined ? {} : { channels }),
415
+ ...(channelControl === undefined ? {} : { channelControl }),
416
+ ...(find === undefined ? {} : { find }),
417
+ ...(options.recentChannel === undefined
418
+ ? {}
419
+ : {
420
+ recentChannel: stringValue(options.recentChannel, 'diagnostics.recentChannel'),
421
+ }),
422
+ ...(options.recentLimit === undefined
423
+ ? {}
424
+ : {
425
+ recentLimit: numberValue(options.recentLimit, 'diagnostics.recentLimit'),
426
+ }),
427
+ }
428
+ }
429
+
346
430
  export function parseStateOptions(value: unknown): SimStateOptions {
347
431
  const input = recordValue(value, 'state')
348
432
  const route = optionalBoolean(input, 'route', 'state')
@@ -437,9 +437,15 @@ export interface SemanticWaitResult {
437
437
  // ---------------------------------------------------------------------------
438
438
 
439
439
  export interface DiagnosticsOptions {
440
- // debug channels to record from this point on. omitted leaves recording as
441
- // it is; an empty list stops recording.
440
+ // debug channel selection. omitted leaves recording as it is; replacement
441
+ // with an empty list stops recording.
442
442
  channels?: readonly string[]
443
+ // controls update the tenant's selection atomically instead of replacing it.
444
+ // enable/disable accept 'all' or an empty list for every native channel.
445
+ channelControl?: {
446
+ action: 'enable' | 'disable' | 'toggle'
447
+ channels: readonly string[]
448
+ }
443
449
  find?: 'sheets' | 'portals' | 'boundaries'
444
450
  recentChannel?: string
445
451
  recentLimit?: number
@@ -447,8 +453,9 @@ export interface DiagnosticsOptions {
447
453
 
448
454
  export interface DiagnosticsResult {
449
455
  channels: string[]
456
+ availableChannels: string[]
450
457
  runtime: unknown
451
- found: unknown[] | null
458
+ found: unknown
452
459
  events: unknown[]
453
460
  }
454
461
 
@@ -657,3 +664,28 @@ export interface LocationResult {
657
664
  fix?: LocationFix
658
665
  error?: string
659
666
  }
667
+
668
+ // commands that change what a sim shows or runs must respect the cli lease.
669
+ // observational/lifecycle commands pass through the host without taking or
670
+ // checking one so cleanup never gets stuck behind a stale cli owner.
671
+ export const WRITE_COMMAND_TYPES: ReadonlySet<string> = new Set([
672
+ 'tap',
673
+ 'keyboard',
674
+ 'longPress',
675
+ 'perform',
676
+ 'reset',
677
+ 'camera',
678
+ ])
679
+
680
+ // `call` and `evaluate` are mostly queries, so they opt into the lease with
681
+ // acquireLock=true when they mutate (a reload, a storage clear).
682
+ export function commandWritesSim(msg: {
683
+ type?: unknown
684
+ acquireLock?: unknown
685
+ readOnly?: unknown
686
+ }): boolean {
687
+ if (typeof msg.type !== 'string') return false
688
+ if (msg.acquireLock === true) return true
689
+ if (msg.readOnly === true) return false
690
+ return WRITE_COMMAND_TYPES.has(msg.type)
691
+ }
@@ -0,0 +1 @@
1
+ export const DRIVER_AUTOPLAY_POLICY = '--autoplay-policy=no-user-gesture-required'
@@ -1,11 +1,11 @@
1
1
  // publish the plain OTA bundle for Peach without changing the phone's bytecode.
2
2
  import { createHash } from 'node:crypto'
3
3
  import { Script } from 'node:vm'
4
- import { terminateProcessGroup } from './process-group'
5
4
  import { isLoopbackHost } from './backend-origin'
6
5
  import { insertExpoKotlinFooter } from './expoKotlinContract'
7
6
  import { insertExpoSwiftFooter } from './expoSwiftContract'
8
7
  import { insertNitroFooter } from './nitroContract'
8
+ import { terminateProcessGroup } from './process-group'
9
9
 
10
10
  const digest = (bytes) => createHash('sha256').update(bytes).digest('hex')
11
11
  const segment = /^[a-zA-Z0-9._-]+$/
@@ -286,7 +286,8 @@ export async function publishBundleChannel(release, { put, fetchObject = fetch }
286
286
  // peach boots an app from the dev server's bundle: it carries the module graph
287
287
  // peach maps native seams by, which a release build erases. snapshot each
288
288
  // platform's bundle from a running dev server and package the files its
289
- // assets register, with the app's local Expo native modules for that platform.
289
+ // assets register, with the app's local Expo native modules for that platform
290
+ // and, on ios, one executable of its installed Nitro providers.
290
291
  export async function snapshotDevServerBundles(
291
292
  origin,
292
293
  projectRoot,
@@ -343,6 +344,7 @@ export async function snapshotDevServerBundles(
343
344
  expoSwift: await (
344
345
  await import('./expo-swift-bundle')
345
346
  ).buildExpoSwiftBundle(projectRoot),
347
+ nitro: await (await import('./nitro-bundle')).buildNitroBundle(projectRoot),
346
348
  }
347
349
  : {
348
350
  expoKotlin: await (
@@ -0,0 +1,55 @@
1
+ import { createHash } from 'node:crypto'
2
+ import { readFileSync } from 'node:fs'
3
+ import { createRequire } from 'node:module'
4
+ import { join } from 'node:path'
5
+ import companionIdentity from '../runtime-companion.json' with { type: 'json' }
6
+ import {
7
+ resolveActiveRuntimeRoot,
8
+ resolveDevCheckoutRuntimeAssetRoot,
9
+ } from './runtime-assets'
10
+ import type * as CliRuntime from '#peach-cli-contract/cli-companion'
11
+
12
+ export const CLI_COMPANION_ABI = 1
13
+
14
+ export function cliCompanionPath(): string {
15
+ return `node/cli-${companionIdentity.sha256}.cjs`
16
+ }
17
+
18
+ export function verifyCliCompanion(root: string): void {
19
+ const file = join(root, cliCompanionPath())
20
+ let bytes: Buffer
21
+ try {
22
+ bytes = readFileSync(file)
23
+ } catch (cause) {
24
+ throw new Error(
25
+ 'Peach runtime is missing the companion required by this CLI; run `peach runtime install`',
26
+ { cause },
27
+ )
28
+ }
29
+ const hash = createHash('sha256').update(bytes).digest('hex')
30
+ if (hash !== companionIdentity.sha256) {
31
+ throw new Error(
32
+ 'Peach runtime companion does not match this CLI; run `peach runtime install`',
33
+ )
34
+ }
35
+ }
36
+
37
+ let loaded: { root: string; runtime: typeof CliRuntime } | undefined
38
+
39
+ // select once per runtime, verify before evaluation, and retain the real functions
40
+ // so host serializers receive their implementation rather than a forwarding closure.
41
+ export function getCliRuntime(): typeof CliRuntime {
42
+ if (loaded) return loaded.runtime
43
+ const root = resolveDevCheckoutRuntimeAssetRoot() ?? resolveActiveRuntimeRoot()
44
+ if (!root) throw new Error('No Peach runtime installed; run `peach runtime install`')
45
+ verifyCliCompanion(root)
46
+ const require = createRequire(import.meta.url)
47
+ const runtime: typeof CliRuntime = require(join(root, cliCompanionPath()))
48
+ if (runtime.cliCompanionAbi !== CLI_COMPANION_ABI) {
49
+ throw new Error(
50
+ 'Incompatible Peach runtime companion ABI; run `peach runtime install`',
51
+ )
52
+ }
53
+ loaded = { root, runtime }
54
+ return runtime
55
+ }
@@ -0,0 +1,26 @@
1
+ // the text an automatic crash report's signature hashes, shared by the app's
2
+ // red screen and the CLI. it keeps the error kind and the message's words and
3
+ // blanks everything that varies between occurrences of one crash (paths and
4
+ // URLs, quoted values, numbers, hex ids), and leaves stacks out entirely, so
5
+ // one crash dedupes onto one report whatever its frames, directories or data.
6
+ export function crashFingerprint(
7
+ source: 'app' | 'cli',
8
+ kind: string,
9
+ message: string,
10
+ ): string {
11
+ let fuzzy = message.toLowerCase()
12
+ // redacted locations nest (<v1/users/<n>/>); collapse them from the inside out
13
+ for (let previous = ''; previous !== fuzzy; ) {
14
+ previous = fuzzy
15
+ fuzzy = fuzzy.replace(/<[^<>]*>/g, '\u0000')
16
+ }
17
+ fuzzy = fuzzy
18
+ .replace(/https?:\/\/\S+/g, '\u0000')
19
+ .replace(/(["'`])[^"'`]*\1/g, "''")
20
+ .replace(/\b0x[0-9a-f]+\b|\b[0-9a-f]{8,}\b/g, '#')
21
+ .replace(/\d+/g, '#')
22
+ .replace(/\u0000/g, '<>')
23
+ .replace(/\s+/g, ' ')
24
+ .trim()
25
+ return `${source}\n${kind.trim()}\n${fuzzy}`
26
+ }