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
@@ -9,6 +9,7 @@ import {
9
9
  } from 'node:fs'
10
10
  import { tmpdir } from 'node:os'
11
11
  import { join } from 'node:path'
12
+ import { Duplex } from 'node:stream'
12
13
  import { setTimeout as sleep } from 'node:timers/promises'
13
14
 
14
15
  const GRACEFUL_TIMEOUT_MS = 3_000
@@ -90,6 +91,7 @@ async function protectProcessFreeze(rootPid: number) {
90
91
  [
91
92
  '-c',
92
93
  `
94
+ (
93
95
  journal=$1
94
96
  cleanup() {
95
97
  trap '' HUP INT TERM
@@ -106,26 +108,53 @@ async function protectProcessFreeze(rootPid: number) {
106
108
  trap 'cleanup; exit 0' HUP INT TERM
107
109
  trap 'rm -f "$journal"; rmdir "\${journal%/*}"' EXIT
108
110
  printf 'ready\n'
109
- if ! IFS= read -r command || [ "$command" != disarm ]; then cleanup; fi
111
+ if ! IFS= read -r command <&3 || [ "$command" != disarm ]; then cleanup; fi
112
+ ) &
110
113
  `,
111
114
  FREEZE_GUARD_NAME,
112
115
  journal,
113
116
  ],
114
117
  {
115
118
  detached: true,
116
- stdio: ['pipe', 'pipe', 'ignore'],
119
+ // the launcher exits before capture, reparenting the guard outside any
120
+ // nested target tree. fd 3 survives that exit, unlike child.stdin.
121
+ stdio: ['ignore', 'pipe', 'ignore', 'pipe'],
117
122
  },
118
123
  )
124
+ let guardClosed = false
119
125
  const closed = new Promise<void>((resolveClose) =>
120
- guard.once('close', () => resolveClose()),
126
+ guard.once('close', () => {
127
+ guardClosed = true
128
+ resolveClose()
129
+ }),
121
130
  )
122
- guard.stdin.on('error', () => {})
131
+ const control = guard.stdio[3]
132
+ const output = guard.stdout
133
+ if (!(control instanceof Duplex) || !output) {
134
+ guard.kill()
135
+ await closed
136
+ rmSync(directory, { recursive: true, force: true })
137
+ throw new Error('process freeze guard control pipe is unavailable')
138
+ }
139
+ control.on('error', () => {})
123
140
  try {
124
141
  await new Promise<void>((resolveReady, reject) => {
125
- let output = ''
126
- guard.stdout.on('data', (bytes: Buffer) => {
127
- output += bytes.toString()
128
- if (output.includes('ready\n')) resolveReady()
142
+ let readyOutput = ''
143
+ let launcherExited = false
144
+ const ready = () => {
145
+ if (launcherExited && readyOutput.includes('ready\n')) resolveReady()
146
+ }
147
+ output.on('data', (bytes: Buffer) => {
148
+ readyOutput += bytes.toString()
149
+ ready()
150
+ })
151
+ guard.once('exit', (code, signal) => {
152
+ if (code !== 0 || signal !== null) {
153
+ reject(new Error('process freeze guard launcher failed'))
154
+ return
155
+ }
156
+ launcherExited = true
157
+ ready()
129
158
  })
130
159
  guard.once('error', reject)
131
160
  guard.once('close', () =>
@@ -133,47 +162,25 @@ async function protectProcessFreeze(rootPid: number) {
133
162
  )
134
163
  })
135
164
  } catch (error) {
136
- guard.stdin.destroy()
165
+ control.destroy()
137
166
  await closed
138
167
  rmSync(directory, { recursive: true, force: true })
139
168
  throw error
140
169
  }
141
170
  return {
142
171
  record(pid: number) {
143
- if (guard.exitCode !== null || guard.signalCode !== null)
172
+ if (guardClosed || control.destroyed)
144
173
  throw new Error('process freeze guard exited during capture')
145
174
  appendFileSync(journal, `pid ${pid}\n`)
146
175
  },
147
176
  async release(disarm: boolean) {
148
- guard.stdin.end(disarm ? 'disarm\n' : undefined)
177
+ control.end(disarm ? 'disarm\n' : undefined)
149
178
  await closed
150
179
  rmSync(directory, { recursive: true, force: true })
151
180
  },
152
181
  }
153
182
  }
154
183
 
155
- // a nested capture's guard is a descendant of this tree but must keep running
156
- // to resume its own targets, so a freeze never reaches it. ps exits 1 when
157
- // some pids already vanished, so only a spawn failure or timeout is an error.
158
- function withoutFreezeGuards(pids: number[]): number[] {
159
- if (pids.length === 0) return pids
160
- const result = spawnSync('ps', ['-o', 'pid=,command=', '-p', pids.join(',')], {
161
- encoding: 'utf8',
162
- stdio: ['ignore', 'pipe', 'pipe'],
163
- timeout: FORCED_EXIT_TIMEOUT_MS,
164
- killSignal: 'SIGKILL',
165
- })
166
- if (result.error || (result.status !== 0 && result.status !== 1))
167
- throw new Error(result.error?.message || `ps exited ${result.status}`)
168
- const guards = new Set(
169
- result.stdout
170
- .split('\n')
171
- .filter((line) => line.includes(FREEZE_GUARD_NAME))
172
- .map((line) => Number(line.trim().split(/\s+/)[0])),
173
- )
174
- return pids.filter((pid) => !guards.has(pid))
175
- }
176
-
177
184
  // reparented members remain in the group; detached descendants need their
178
185
  // recorded pids. both can leave zombies, which signal zero cannot distinguish
179
186
  // from running processes. inspect their states together before confirming exit.
@@ -266,7 +273,7 @@ export async function terminateProcessGroup(
266
273
  }
267
274
  let children: number[]
268
275
  try {
269
- children = withoutFreezeGuards(listProcessChildren(parents, remaining))
276
+ children = listProcessChildren(parents, remaining)
270
277
  } catch (error) {
271
278
  inspectionError = new Error(`could not inspect descendants: ${String(error)}`)
272
279
  break
@@ -0,0 +1,28 @@
1
+ // which importers of `react` are routed through the peach-kit react bridge.
2
+ // shared by the vite plugins and the esbuild browser artifacts.
3
+
4
+ // the engine, compat, kit and reconciler sources the renderer shares a React with
5
+ export function isEngineReactImporter(importer: string): boolean {
6
+ return (
7
+ importer.includes('/peachsim/src/') ||
8
+ importer.includes('/peach-engine/src/') ||
9
+ importer.includes('/peach-compat/src/') ||
10
+ importer.includes('/peach-compat/dist-pressability/') ||
11
+ importer.includes('/peach-kit/src/') ||
12
+ importer.includes('react-reconciler')
13
+ )
14
+ }
15
+
16
+ // the bridge's own import of react would loop, and the stub registry needs the
17
+ // real React (with __CLIENT_INTERNALS) for bundle stubs. these match the files,
18
+ // not any path containing the name, so a checkout directory cannot trip them.
19
+ export function keepsRealReact(importer: string): boolean {
20
+ return /\/(react-bridge|stub-registry)\.[cm]?[jt]sx?$/.test(importer)
21
+ }
22
+
23
+ // workers are built, so any pure-JS RN-ecosystem package in node_modules is
24
+ // bridged too. the bridge and the stub registry keep the real React.
25
+ export function isWorkerReactBridgeImporter(importer: string): boolean {
26
+ if (keepsRealReact(importer)) return false
27
+ return isEngineReactImporter(importer) || importer.includes('/node_modules/')
28
+ }
@@ -0,0 +1,36 @@
1
+ import type { SettingsValues } from './settingsContract.ts'
2
+
3
+ // render workers mirror only these host-owned values. importing the settings
4
+ // store here would also boot device selection, persistence and the ui schema.
5
+ export const DEFAULT_REACT_NATIVE_CONFIGURATION = {
6
+ // the appearance setting itself (automatic, light or dark); the resolved
7
+ // scheme reaches workers through Appearance
8
+ colorScheme: 'auto',
9
+ language: 'en',
10
+ region: 'US',
11
+ fontSize: 1,
12
+ boldText: false,
13
+ reduceMotion: false,
14
+ largerAccessibilitySizes: false,
15
+ glassTintAmount: 0.5,
16
+ reduceTransparency: false,
17
+ increaseContrast: false,
18
+ showBorders: false,
19
+ onOffLabels: false,
20
+ differentiateWithoutColor: false,
21
+ smartInvert: false,
22
+ preferCrossFadeTransitions: false,
23
+ } satisfies Partial<SettingsValues>
24
+
25
+ export type ReactNativeConfigurationKey = keyof typeof DEFAULT_REACT_NATIVE_CONFIGURATION
26
+
27
+ export type ReactNativeConfigurationSnapshot = Pick<
28
+ SettingsValues,
29
+ ReactNativeConfigurationKey
30
+ >
31
+
32
+ export const REACT_NATIVE_CONFIGURATION_KEYS = Object.keys(
33
+ DEFAULT_REACT_NATIVE_CONFIGURATION,
34
+ ).filter(
35
+ (key): key is ReactNativeConfigurationKey => key in DEFAULT_REACT_NATIVE_CONFIGURATION,
36
+ )
@@ -54,7 +54,7 @@ export function findMonorepoRoot(): string | null {
54
54
  /** the fresh dev-stack engine build to serve when running inside the Contrast
55
55
  * monorepo dev checkout, or null when the installed runtime should serve
56
56
  * (published CLI, packaged electron, or an isolated PEACH_HOME). */
57
- export function resolveDevCheckoutRuntimeRoot(): string | null {
57
+ export function resolveDevCheckoutRuntimeAssetRoot(): string | null {
58
58
  // an explicit home that has a STAGED/active runtime is the isolation the
59
59
  // CI/local-publish path sets up to validate the installed-runtime code path —
60
60
  // honor that staged runtime. an explicit home with NO active runtime is just
@@ -65,7 +65,12 @@ export function resolveDevCheckoutRuntimeRoot(): string | null {
65
65
  if (process.env.PEACH_HOME && readActiveRuntime()) return null
66
66
  const root = findMonorepoRoot()
67
67
  if (!root) return null
68
- const devBuild = path.join(root, 'public/sootsim')
68
+ return path.join(root, 'public/sootsim')
69
+ }
70
+
71
+ export function resolveDevCheckoutRuntimeRoot(): string | null {
72
+ const devBuild = resolveDevCheckoutRuntimeAssetRoot()
73
+ if (!devBuild) return null
69
74
  // require the runtime shape the installed runtime also has, so serving it is
70
75
  // a drop-in (index.html shell + engine/ + both engine-tenant workers).
71
76
  if (
@@ -3,7 +3,7 @@
3
3
  // the machinery itself (hosted manifest, sha256-verified tarballs, channels,
4
4
  // channel resolution, and auto-update) lives in @contrast/runtime-delivery and
5
5
  // knows nothing about peach. this file supplies peach's identity, public env
6
- // overrides, and the contrast.dev/runtimes hosting layout.
6
+ // overrides, and the peachsim.com/runtimes hosting layout.
7
7
  //
8
8
  // @contrast/runtime-delivery is an internal workspace package that is never
9
9
  // published, so both the CLI bundle and dist-lib inline it (see the `alias`
@@ -11,6 +11,7 @@
11
11
  // out as a bare require.
12
12
 
13
13
  import { createRuntimeDelivery, type RuntimeProduct } from '@contrast/runtime-delivery'
14
+ import { verifyCliCompanion } from './cli-runtime'
14
15
  import {
15
16
  cacheDir,
16
17
  configFilePath,
@@ -20,14 +21,13 @@ import {
20
21
  runtimesDir,
21
22
  writeActiveRuntime,
22
23
  } from './home-paths.ts'
23
- import { rnxPublicBrand } from './public-brand.ts'
24
+ import { peachPublicBrand } from './public-brand.ts'
24
25
 
25
- export const DEFAULT_RUNTIME_CDN_ORIGIN = 'https://contrast.dev'
26
+ export const DEFAULT_RUNTIME_CDN_ORIGIN = peachPublicBrand.origin
26
27
 
27
- /** the official curated changelog and the machine-readable release feed. the
28
- * peach site is static, so its /api traffic is owned by contrast.dev. */
29
- export const RNX_CHANGELOG_URL = `${rnxPublicBrand.origin}/changelog`
30
- export const RNX_CHANGELOG_API_URL = 'https://contrast.dev/api/changelog/sootsim'
28
+ /** the official curated changelog and the machine-readable release feed. */
29
+ export const RNX_CHANGELOG_URL = `${peachPublicBrand.origin}/changelog`
30
+ export const RNX_CHANGELOG_API_URL = `${peachPublicBrand.origin}/api/changelog/sootsim`
31
31
 
32
32
  export const RNX_RUNTIME_PRODUCT: RuntimeProduct = {
33
33
  id: 'peach',
@@ -38,6 +38,7 @@ export const RNX_RUNTIME_PRODUCT: RuntimeProduct = {
38
38
  // engine-tenant/ beneath it. index.html is what the daemon and the
39
39
  // vite/metro plugins serve, so its absence means the tarball is not one.
40
40
  installedMarker: 'index.html',
41
+ verifyInstall: verifyCliCompanion,
41
42
  env: {
42
43
  cdnOrigin: 'PEACH_CDN_ORIGIN',
43
44
  channel: 'PEACH_RUNTIME_CHANNEL',
@@ -0,0 +1,70 @@
1
+ import type { RuntimePlatform } from './device-catalog.ts'
2
+
3
+ export interface RuntimePlatformAdapterRegistry<Value> {
4
+ readonly ios: Value
5
+ readonly android: Value
6
+ }
7
+
8
+ interface IOSRuntimePlatformAdapter {
9
+ readonly id: 'ios'
10
+ readonly displayName: 'iOS'
11
+ readonly isIOS: true
12
+ readonly isAndroid: false
13
+ select<Value>(registry: RuntimePlatformAdapterRegistry<Value>): Value
14
+ }
15
+
16
+ interface AndroidRuntimePlatformAdapter {
17
+ readonly id: 'android'
18
+ readonly displayName: 'Android'
19
+ readonly isIOS: false
20
+ readonly isAndroid: true
21
+ select<Value>(registry: RuntimePlatformAdapterRegistry<Value>): Value
22
+ }
23
+
24
+ export type RuntimePlatformAdapter =
25
+ | IOSRuntimePlatformAdapter
26
+ | AndroidRuntimePlatformAdapter
27
+
28
+ const IOS_ADAPTER = Object.freeze({
29
+ id: 'ios',
30
+ displayName: 'iOS',
31
+ isIOS: true,
32
+ isAndroid: false,
33
+ select: <Value>(registry: RuntimePlatformAdapterRegistry<Value>) => registry.ios,
34
+ } satisfies IOSRuntimePlatformAdapter)
35
+
36
+ const ANDROID_ADAPTER = Object.freeze({
37
+ id: 'android',
38
+ displayName: 'Android',
39
+ isIOS: false,
40
+ isAndroid: true,
41
+ select: <Value>(registry: RuntimePlatformAdapterRegistry<Value>) => registry.android,
42
+ } satisfies AndroidRuntimePlatformAdapter)
43
+
44
+ const RUNTIME_PLATFORM_ADAPTERS = Object.freeze({
45
+ ios: IOS_ADAPTER,
46
+ android: ANDROID_ADAPTER,
47
+ } satisfies Record<RuntimePlatform, RuntimePlatformAdapter>)
48
+
49
+ export function isRuntimePlatform(value: unknown): value is RuntimePlatform {
50
+ return value === 'ios' || value === 'android'
51
+ }
52
+
53
+ export function parseRuntimePlatform(
54
+ value: unknown,
55
+ boundary = 'runtime platform',
56
+ ): RuntimePlatform {
57
+ if (!isRuntimePlatform(value)) {
58
+ const received = typeof value === 'string' ? JSON.stringify(value) : String(value)
59
+ throw new Error(
60
+ `invalid ${boundary}: expected "ios" or "android", received ${received}`,
61
+ )
62
+ }
63
+ return value
64
+ }
65
+
66
+ export function getRuntimePlatformAdapter<Platform extends RuntimePlatform>(
67
+ platform: Platform,
68
+ ): (typeof RUNTIME_PLATFORM_ADAPTERS)[Platform] {
69
+ return RUNTIME_PLATFORM_ADAPTERS[platform]
70
+ }
@@ -1,26 +1,7 @@
1
- import {
2
- LEGACY_BOTTOM_BEZEL,
3
- LEGACY_FRAME_RADIUS,
4
- LEGACY_HOME_BUTTON_RING,
5
- LEGACY_HOME_BUTTON_SIZE,
6
- LEGACY_SIDE_BEZEL,
7
- LEGACY_TOP_BEZEL,
8
- SIDE_BUTTON_RESERVE,
9
- } from 'peach-engine/ios/chrome-metrics'
10
- import {
11
- housingLayerHtml,
12
- resolveHousingArt,
13
- type HousingLayer,
14
- } from 'peach-engine/ios/duo-housing'
15
- import {
16
- cornerRadii,
17
- formatCornerRadii,
18
- getDevice,
19
- resolveDeviceFrameGeometry,
20
- type CornerRadii,
21
- type DeviceModel,
22
- } from 'peach-engine/settings/devices'
23
1
  import { launchProvisionedPlaywright } from '../../cli/drivers/playwright-provisioning'
2
+ import { getCliRuntime } from '../cli-runtime.ts'
3
+ import { cornerRadii, type CornerRadii, type DeviceModel } from '../device-catalog.ts'
4
+ import type { HousingLayer } from '#peach-cli-contract/ios/duo-housing'
24
5
 
25
6
  const METALLIC_RING_SHADOW =
26
7
  'inset 0 0 0 0.5px #000, inset 0 0 0 2px #757575, inset 0 0 0 5px #212121'
@@ -74,7 +55,7 @@ export interface FramedScreenshotLayout {
74
55
  // - the browser rail / gutter
75
56
  // The screen bitmap itself still comes from the raw bridge screenshot.
76
57
  export function getFramedScreenshotLayout(model: DeviceModel): FramedScreenshotLayout {
77
- const spec = getDevice(model)
58
+ const spec = getCliRuntime().settings_devices.getDevice(model)
78
59
  const renderScale = spec.scale
79
60
  // legacy = home-button iPhone (SE). the canvas workspace also has no island /
80
61
  // home indicator / corner radius, but no status bar, so gate on statusBar > 0
@@ -87,28 +68,39 @@ export function getFramedScreenshotLayout(model: DeviceModel): FramedScreenshotL
87
68
  spec.cornerRadius.topLeft === 0
88
69
  const logicalScreenWidth = spec.width
89
70
  const logicalScreenHeight = spec.height
90
- const modernGeometry = resolveDeviceFrameGeometry(spec)
71
+ const modernGeometry = getCliRuntime().settings_devices.resolveDeviceFrameGeometry(spec)
91
72
  const housingLayers = isLegacyHardware
92
73
  ? null
93
- : resolveHousingArt(spec.posture ?? 'closed', modernGeometry, {
94
- orientation: spec.orientation,
95
- landscapeSide: spec.landscapeSide,
96
- })
74
+ : getCliRuntime().ios_duo_housing.resolveHousingArt(
75
+ spec.posture ?? 'closed',
76
+ modernGeometry,
77
+ {
78
+ orientation: spec.orientation,
79
+ landscapeSide: spec.landscapeSide,
80
+ },
81
+ )
97
82
  const logicalFrameWidth = isLegacyHardware
98
- ? spec.width + LEGACY_SIDE_BEZEL * 2
83
+ ? spec.width + getCliRuntime().ios_chrome_metrics.LEGACY_SIDE_BEZEL * 2
99
84
  : modernGeometry.frameWidth
100
85
  const logicalFrameHeight = isLegacyHardware
101
- ? spec.height + LEGACY_TOP_BEZEL + LEGACY_BOTTOM_BEZEL
86
+ ? spec.height +
87
+ getCliRuntime().ios_chrome_metrics.LEGACY_TOP_BEZEL +
88
+ getCliRuntime().ios_chrome_metrics.LEGACY_BOTTOM_BEZEL
102
89
  : modernGeometry.frameHeight
103
- const logicalFrameLeft = SIDE_BUTTON_RESERVE
90
+ const logicalFrameLeft = getCliRuntime().ios_chrome_metrics.SIDE_BUTTON_RESERVE
104
91
  const logicalFrameTop = FRAME_OUTLINE_BLEED
105
92
  const logicalOuterWidth = logicalFrameWidth + logicalFrameLeft * 2
106
93
  const logicalOuterHeight = logicalFrameHeight + FRAME_OUTLINE_BLEED * 2
107
94
  const logicalScreenLeft =
108
- logicalFrameLeft + (isLegacyHardware ? LEGACY_SIDE_BEZEL : modernGeometry.screenLeft)
109
- const logicalScreenTop = isLegacyHardware ? LEGACY_TOP_BEZEL : modernGeometry.screenTop
95
+ logicalFrameLeft +
96
+ (isLegacyHardware
97
+ ? getCliRuntime().ios_chrome_metrics.LEGACY_SIDE_BEZEL
98
+ : modernGeometry.screenLeft)
99
+ const logicalScreenTop = isLegacyHardware
100
+ ? getCliRuntime().ios_chrome_metrics.LEGACY_TOP_BEZEL
101
+ : modernGeometry.screenTop
110
102
  const logicalFrameRadius = isLegacyHardware
111
- ? cornerRadii(LEGACY_FRAME_RADIUS)
103
+ ? cornerRadii(getCliRuntime().ios_chrome_metrics.LEGACY_FRAME_RADIUS)
112
104
  : modernGeometry.frameRadius
113
105
  const buttons: FrameButtonLayout[] = [
114
106
  {
@@ -172,12 +164,17 @@ export function getFramedScreenshotLayout(model: DeviceModel): FramedScreenshotL
172
164
  legacyHomeButton: isLegacyHardware
173
165
  ? {
174
166
  top:
175
- LEGACY_TOP_BEZEL +
167
+ getCliRuntime().ios_chrome_metrics.LEGACY_TOP_BEZEL +
176
168
  spec.height +
177
- (LEGACY_BOTTOM_BEZEL - LEGACY_HOME_BUTTON_SIZE) / 2,
178
- left: spec.width / 2 - LEGACY_HOME_BUTTON_SIZE / 2 + LEGACY_SIDE_BEZEL,
179
- size: LEGACY_HOME_BUTTON_SIZE,
180
- ring: LEGACY_HOME_BUTTON_RING,
169
+ (getCliRuntime().ios_chrome_metrics.LEGACY_BOTTOM_BEZEL -
170
+ getCliRuntime().ios_chrome_metrics.LEGACY_HOME_BUTTON_SIZE) /
171
+ 2,
172
+ left:
173
+ spec.width / 2 -
174
+ getCliRuntime().ios_chrome_metrics.LEGACY_HOME_BUTTON_SIZE / 2 +
175
+ getCliRuntime().ios_chrome_metrics.LEGACY_SIDE_BEZEL,
176
+ size: getCliRuntime().ios_chrome_metrics.LEGACY_HOME_BUTTON_SIZE,
177
+ ring: getCliRuntime().ios_chrome_metrics.LEGACY_HOME_BUTTON_RING,
181
178
  }
182
179
  : null,
183
180
  showHomeIndicator: spec.homeIndicatorHeight > 0,
@@ -240,7 +237,7 @@ function renderFrameHtml(
240
237
  style="
241
238
  position:absolute;
242
239
  inset:0;
243
- border-radius:${formatCornerRadii(layout.logicalFrameRadius)};
240
+ border-radius:${getCliRuntime().settings_devices.formatCornerRadii(layout.logicalFrameRadius)};
244
241
  box-shadow:${layout.metallicRingShadow};
245
242
  pointer-events:none;
246
243
  z-index:10;
@@ -251,7 +248,9 @@ function renderFrameHtml(
251
248
 
252
249
  // the folding body's rail, glass ring, corner art, and hinge barrel. no
253
250
  // z-index, so the screen div after it paints on top.
254
- const housingHtml = (layout.housingLayers ?? []).map(housingLayerHtml).join('')
251
+ const housingHtml = (layout.housingLayers ?? [])
252
+ .map(getCliRuntime().ios_duo_housing.housingLayerHtml)
253
+ .join('')
255
254
 
256
255
  const legacyHomeButtonHtml = layout.legacyHomeButton
257
256
  ? `
@@ -372,7 +371,7 @@ function renderFrameHtml(
372
371
  left:${layout.logicalFrameLeft}px;
373
372
  width:${layout.logicalFrameWidth}px;
374
373
  height:${layout.logicalFrameHeight}px;
375
- border-radius:${layout.housingLayers ? '0' : formatCornerRadii(layout.logicalFrameRadius)};
374
+ border-radius:${layout.housingLayers ? '0' : getCliRuntime().settings_devices.formatCornerRadii(layout.logicalFrameRadius)};
376
375
  box-sizing:border-box;
377
376
  overflow:visible;
378
377
  background:${layout.frameBackground};
@@ -391,7 +390,7 @@ function renderFrameHtml(
391
390
  left:${layout.logicalScreenLeft - layout.logicalFrameLeft}px;
392
391
  width:${layout.logicalScreenWidth}px;
393
392
  height:${layout.logicalScreenHeight}px;
394
- border-radius:${formatCornerRadii(layout.logicalScreenRadius)};
393
+ border-radius:${getCliRuntime().settings_devices.formatCornerRadii(layout.logicalScreenRadius)};
395
394
  overflow:hidden;
396
395
  background:#000;
397
396
  "
@@ -1,3 +1,4 @@
1
+ import { resolveBgColorValue } from './screenshotContract.ts'
1
2
  // fetch the team's screenshot deck (the copy / colors founders set up in the
2
3
  // org dashboard) and overlay it onto a screenshots plan, so the programmatic
3
4
  // `peach screenshot appstore --plan … --org … --repo …` flow renders the org's
@@ -5,8 +6,6 @@
5
6
  // which screen each slide captures and the device frame; the deck owns copy +
6
7
  // colors. 3d scenes don't translate to the cli's 2d composer, so only copy and
7
8
  // colors carry over (the 3d hero look stays the in-browser screenshot mode).
8
-
9
- import { resolveBgColorValue } from 'peach-engine/screenshots/tokens'
10
9
  import type { BackgroundSpec } from './registry'
11
10
  import type { NormalizedScreenshotsPlan } from './schema'
12
11
 
@@ -81,8 +80,14 @@ export function applyOrgDeckToPlan(
81
80
  type: 'gradient',
82
81
  direction: 180,
83
82
  stops: [
84
- { offset: 0, color: resolveBgColorValue(frame.bgTop) },
85
- { offset: 1, color: resolveBgColorValue(frame.bgBottom) },
83
+ {
84
+ offset: 0,
85
+ color: resolveBgColorValue(frame.bgTop),
86
+ },
87
+ {
88
+ offset: 1,
89
+ color: resolveBgColorValue(frame.bgBottom),
90
+ },
86
91
  ],
87
92
  }
88
93
  slide.background = background
@@ -0,0 +1,29 @@
1
+ export const SCREENSHOT_CANVAS_NAMES = [
2
+ 'iphone-6-9',
3
+ 'iphone-6-1',
4
+ 'ipad-pro-13',
5
+ 'android-phone',
6
+ 'android-tablet-7',
7
+ 'android-tablet-10',
8
+ ] as const
9
+ export type ScreenshotCanvasName = (typeof SCREENSHOT_CANVAS_NAMES)[number]
10
+
11
+ export const BACKGROUND_PRESET_NAMES = ['dark', 'cyan', 'gold', 'red'] as const
12
+ export type BackgroundPresetName = (typeof BACKGROUND_PRESET_NAMES)[number]
13
+
14
+ export const TEXT_PRESET_NAMES = [
15
+ 'bold-top',
16
+ 'editorial-left',
17
+ 'minimal-bottom',
18
+ 'none',
19
+ ] as const
20
+ export type TextPresetName = (typeof TEXT_PRESET_NAMES)[number]
21
+
22
+ export const POSE_PRESET_NAMES = [
23
+ 'straight',
24
+ 'tilted-left',
25
+ 'tilted-right',
26
+ 'cut-bottom',
27
+ 'cut-top',
28
+ ] as const
29
+ export type PosePresetName = (typeof POSE_PRESET_NAMES)[number]
@@ -1,12 +1,12 @@
1
1
  // composer-facing registry. shared tokens live in
2
- // `sootsim-engine/src/screenshots/tokens.ts` so the live browser
2
+ // `screenshotContract.ts` so the live browser
3
3
  // screenshot mode and the post-process composer render from the same
4
4
  // canvas / background / text / pose / animation / clamp vocabulary.
5
5
  //
6
6
  // this module re-exports those tokens plus the composer-specific
7
7
  // `FrameComposeSpec` shape.
8
8
 
9
- import type { DeviceModel } from 'peach-engine/settings/devices'
9
+ import type { DeviceModel } from '../device-catalog.ts'
10
10
 
11
11
  export {
12
12
  BACKGROUND_PRESETS,
@@ -19,7 +19,7 @@ export {
19
19
  cloneBackgroundSpec,
20
20
  resolveBackgroundPreset,
21
21
  resolveCanvasPreset,
22
- } from 'peach-engine/screenshots/tokens'
22
+ } from './screenshotContract.ts'
23
23
 
24
24
  export type {
25
25
  BackgroundPresetName,
@@ -30,9 +30,9 @@ export type {
30
30
  PosePresetName,
31
31
  ScreenshotCanvasName,
32
32
  TextPresetName,
33
- } from 'peach-engine/screenshots/tokens'
33
+ } from './screenshotContract.ts'
34
34
 
35
- import type { FrameShadowSpec, PosePresetName } from 'peach-engine/screenshots/tokens'
35
+ import type { FrameShadowSpec, PosePresetName } from './screenshotContract.ts'
36
36
 
37
37
  export interface FrameComposeSpec {
38
38
  show: boolean
@@ -1,7 +1,7 @@
1
1
  import { readFileSync } from 'fs'
2
2
  import path from 'path'
3
- import { devices, type DeviceModel } from 'peach-engine/settings/devices'
4
3
  import yaml from 'yaml'
4
+ import { devices, type DeviceModel } from '../device-catalog.ts'
5
5
  import { isRecord } from '../is-record'
6
6
  import {
7
7
  cloneBackgroundSpec,