peachsim 0.1.1641 → 0.1.1653

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (618) hide show
  1. package/README.md +12 -0
  2. package/cli/app-bundle-resources.ts +57 -0
  3. package/cli/app-catalog.ts +1 -1
  4. package/cli/app-fonts.ts +11 -80
  5. package/cli/app-splash.ts +18 -12
  6. package/cli/bridge-flow-runner.ts +11 -7
  7. package/cli/cloud-client.ts +10 -13
  8. package/cli/command-registry.ts +13 -4
  9. package/cli/commands/box.ts +4 -4
  10. package/cli/commands/control.ts +105 -53
  11. package/cli/commands/coverage-parser.ts +67 -0
  12. package/cli/commands/coverage.ts +550 -0
  13. package/cli/commands/debug.ts +9 -18
  14. package/cli/commands/desktop.ts +19 -7
  15. package/cli/commands/device.ts +14 -9
  16. package/cli/commands/guest-host.ts +6 -10
  17. package/cli/commands/inspect/core.ts +81 -17
  18. package/cli/commands/inspect.ts +13 -8
  19. package/cli/commands/kotlin.ts +2 -2
  20. package/cli/commands/maestro-compare.ts +1 -1
  21. package/cli/commands/platform.ts +20 -11
  22. package/cli/commands/preview.ts +16 -18
  23. package/cli/commands/runtime.ts +3 -2
  24. package/cli/commands/screenshot-layers.ts +1 -1
  25. package/cli/commands/screenshot.ts +1 -1
  26. package/cli/commands/serve.ts +5 -1
  27. package/cli/commands/support.ts +4 -4
  28. package/cli/commands/three-mode.ts +22 -15
  29. package/cli/commands/upload.ts +44 -45
  30. package/cli/current-sim.ts +38 -0
  31. package/cli/desktop-companion.ts +36 -8
  32. package/cli/device-option.ts +1 -1
  33. package/cli/drivers/playwright.ts +40 -0
  34. package/cli/drivers/types.ts +4 -0
  35. package/cli/help-core.ts +1 -1
  36. package/cli/internal-child.ts +2 -1
  37. package/cli/main.ts +9 -3
  38. package/cli/outbound-endpoints.ts +15 -5
  39. package/cli/output-redaction.ts +39 -14
  40. package/cli/remote-simulators.ts +4 -1
  41. package/cli/scene-video.ts +5 -2
  42. package/cli/send-to-box.ts +7 -10
  43. package/cli/telemetry.ts +1 -1
  44. package/cli/ws-bridge.ts +8 -1
  45. package/detox/attempt-events.cjs +3 -1
  46. package/detox/attempt-events.d.cts +1 -1
  47. package/detox/expectations.ts +108 -99
  48. package/detox/frame-offset.d.mts +6 -0
  49. package/detox/frame-offset.mjs +35 -0
  50. package/detox/gestures.ts +6 -18
  51. package/detox/index.ts +169 -101
  52. package/detox/jest-preset.cjs +1 -3
  53. package/detox/jest-transform.cjs +4 -0
  54. package/detox/matchers.ts +3 -0
  55. package/detox/motion-change.cjs +52 -118
  56. package/detox/motion-change.d.cts +6 -27
  57. package/detox/motion-leg-starts.cjs +20 -0
  58. package/detox/motion-leg-starts.d.cts +8 -0
  59. package/dist-lib/agent-daemon-client.cjs +1 -1
  60. package/dist-lib/agent-events.cjs +1 -1
  61. package/dist-lib/attached-projects.cjs +1 -1
  62. package/dist-lib/auth/shared-session.cjs +1 -1
  63. package/dist-lib/backend-origin.cjs +3 -3
  64. package/dist-lib/beta.cjs +1 -1
  65. package/dist-lib/beta.mjs +1 -1
  66. package/dist-lib/bridge-constants.cjs +1 -1
  67. package/dist-lib/bridge-contract-input.cjs +65 -1
  68. package/dist-lib/bridge-contract-input.mjs +63 -1
  69. package/dist-lib/bridge-contract.cjs +19 -1
  70. package/dist-lib/bridge-contract.mjs +17 -1
  71. package/dist-lib/bundle-channel.cjs +38332 -14940
  72. package/dist-lib/capture-contract.cjs +1 -1
  73. package/dist-lib/capture-contract.mjs +1 -1
  74. package/dist-lib/cloud-contract.cjs +1 -1
  75. package/dist-lib/cloud-contract.mjs +1 -1
  76. package/dist-lib/cloud-test-args.cjs +1 -1
  77. package/dist-lib/cloud-test-args.mjs +1 -1
  78. package/dist-lib/cloud.cjs +1 -1
  79. package/dist-lib/cloud.mjs +1 -1
  80. package/dist-lib/config.cjs +1 -1
  81. package/dist-lib/config.mjs +5 -3
  82. package/dist-lib/detox/index.cjs +1247 -4511
  83. package/dist-lib/detox/jest-preset.cjs +1 -3
  84. package/dist-lib/detox/jest-transform.cjs +4 -0
  85. package/dist-lib/dev-bundle-resolution.cjs +28 -24
  86. package/dist-lib/expo-swift-bundle.cjs +35243 -13172
  87. package/dist-lib/expo-swift-metadata.cjs +1 -1
  88. package/dist-lib/expo-swift-metadata.mjs +1 -1
  89. package/dist-lib/home-paths.cjs +1 -1
  90. package/dist-lib/host/bridge-host.cjs +45285 -63163
  91. package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
  92. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  93. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  94. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  95. package/dist-lib/host/websocket-proxy.cjs +1 -1
  96. package/dist-lib/index.cjs +1997 -2069
  97. package/dist-lib/jump-to-source-babel.cjs +1 -1
  98. package/dist-lib/jump-to-source-native.cjs +1 -1
  99. package/dist-lib/kotlin-host.cjs +2 -2
  100. package/dist-lib/menu.cjs +14 -6
  101. package/dist-lib/menu.mjs +14 -6
  102. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  103. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  104. package/dist-lib/metro-production-bundle.cjs +1 -1
  105. package/dist-lib/metro-production-bundle.mjs +1 -1
  106. package/dist-lib/metro.cjs +468 -563
  107. package/dist-lib/native-app-identity-project.cjs +128 -292
  108. package/dist-lib/native-app-identity-project.mjs +1262 -51
  109. package/dist-lib/native-app-identity.cjs +8 -3
  110. package/dist-lib/native-app-identity.mjs +8 -3
  111. package/dist-lib/native-firebase-metadata.cjs +1 -1
  112. package/dist-lib/native-firebase-metadata.mjs +1 -1
  113. package/dist-lib/plist.cjs +2 -244
  114. package/dist-lib/plist.mjs +1 -1
  115. package/dist-lib/profiles.cjs +1 -1
  116. package/dist-lib/public-brand.cjs +1 -1
  117. package/dist-lib/public-origins-lib-esm.json +290 -0
  118. package/dist-lib/public-origins-lib-static.json +1 -0
  119. package/dist-lib/public-origins-lib.json +1852 -0
  120. package/dist-lib/react-native-host-modules.cjs +1 -1
  121. package/dist-lib/react-native-host-modules.mjs +1 -1
  122. package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
  123. package/dist-lib/sdk.cjs +84 -16
  124. package/dist-lib/sdk.mjs +82 -15
  125. package/dist-lib/skills.cjs +51248 -75450
  126. package/dist-lib/swift-compile.cjs +26154 -1245
  127. package/dist-lib/swift-compile.mjs +26151 -1230
  128. package/dist-lib/swift-package.cjs +79 -1
  129. package/dist-lib/swift-package.mjs +75 -1
  130. package/dist-lib/swift-submit.cjs +1 -1
  131. package/dist-lib/swift-submit.mjs +1 -1
  132. package/dist-lib/swift-toolchain.cjs +1 -1
  133. package/dist-lib/swift.cjs +1 -1
  134. package/dist-lib/vite-swift.cjs +34394 -12323
  135. package/dist-lib/vite.cjs +373 -298
  136. package/dist-lib/worklet-executable.cjs +1 -1
  137. package/dist-lib/worklet-executable.mjs +1 -1
  138. package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
  139. package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
  140. package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
  141. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
  142. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
  143. package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
  144. package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
  145. package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
  146. package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
  147. package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
  148. package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
  149. package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
  150. package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
  151. package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
  152. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
  153. package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
  154. package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
  155. package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
  156. package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
  157. package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
  158. package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
  159. package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
  160. package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
  161. package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
  162. package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
  163. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
  164. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
  165. package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
  166. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
  167. package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
  168. package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
  169. package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
  170. package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
  171. package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
  172. package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
  173. package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
  174. package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
  175. package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
  176. package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
  177. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
  178. package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
  179. package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
  180. package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
  181. package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
  182. package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
  183. package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
  184. package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
  185. package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
  186. package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
  187. package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
  188. package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
  189. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
  190. package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
  191. package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
  192. package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
  193. package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
  194. package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
  195. package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
  196. package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
  197. package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
  198. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
  199. package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
  200. package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
  201. package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
  202. package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
  203. package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
  204. package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
  205. package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
  206. package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
  207. package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
  208. package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
  209. package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
  210. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
  211. package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
  212. package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
  213. package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
  214. package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
  215. package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
  216. package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
  217. package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
  218. package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
  219. package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
  220. package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
  221. package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
  222. package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
  223. package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
  224. package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
  225. package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
  226. package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
  227. package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
  228. package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
  229. package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
  230. package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
  231. package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
  232. package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
  233. package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
  234. package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
  235. package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
  236. package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
  237. package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
  238. package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
  239. package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
  240. package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
  241. package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
  242. package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
  243. package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
  244. package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
  245. package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
  246. package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
  247. package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
  248. package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
  249. package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
  250. package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
  251. package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
  252. package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
  253. package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
  254. package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
  255. package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
  256. package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
  257. package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
  258. package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
  259. package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
  260. package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
  261. package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
  262. package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
  263. package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
  264. package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
  265. package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
  266. package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
  267. package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
  268. package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
  269. package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
  270. package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
  271. package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
  272. package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
  273. package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
  274. package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
  275. package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
  276. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
  277. package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
  278. package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
  279. package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
  280. package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
  281. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
  282. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
  283. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
  284. package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
  285. package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
  286. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
  287. package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
  288. package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
  289. package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
  290. package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
  291. package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
  292. package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
  293. package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
  294. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
  295. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
  296. package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
  297. package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
  298. package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
  299. package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
  300. package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
  301. package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
  302. package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
  303. package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
  304. package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
  305. package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
  306. package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
  307. package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
  308. package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
  309. package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
  310. package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
  311. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
  312. package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
  313. package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
  314. package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
  315. package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
  316. package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
  317. package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
  318. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
  319. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
  320. package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
  321. package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
  322. package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
  323. package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
  324. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
  325. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
  326. package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
  327. package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
  328. package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
  329. package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
  330. package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
  331. package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
  332. package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
  333. package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
  334. package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
  335. package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
  336. package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
  337. package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
  338. package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
  339. package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
  340. package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
  341. package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
  342. package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
  343. package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
  344. package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
  345. package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
  346. package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
  347. package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
  348. package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
  349. package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
  350. package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
  351. package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
  352. package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
  353. package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
  354. package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
  355. package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
  356. package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
  357. package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
  358. package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
  359. package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
  360. package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
  361. package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
  362. package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
  363. package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
  364. package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
  365. package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
  366. package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
  367. package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
  368. package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
  369. package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
  370. package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
  371. package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
  372. package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
  373. package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
  374. package/kotlin/README.md +6 -0
  375. package/package.json +22 -2
  376. package/runtime-companion.json +1 -0
  377. package/skills/contrast/SKILL.md +1 -0
  378. package/src/appBundleResourcesContract.ts +51 -0
  379. package/src/assetCatalogContract.ts +21 -0
  380. package/src/backend-origin.ts +3 -1
  381. package/src/bridge-contract-input.ts +84 -0
  382. package/src/bridge-contract.ts +35 -3
  383. package/src/browser-launch-policy.ts +1 -0
  384. package/src/bundle-channel.mjs +4 -2
  385. package/src/cli-runtime.ts +55 -0
  386. package/src/crash-fingerprint.ts +26 -0
  387. package/src/dev-bundle-resolution.ts +50 -23
  388. package/src/device-catalog.ts +1159 -0
  389. package/src/host/bridge-host.ts +20 -37
  390. package/src/host/browser-pointer.ts +71 -0
  391. package/src/host/dev-server-package-versions.ts +23 -0
  392. package/src/host/fetch-proxy-handler.ts +17 -4
  393. package/src/host/staged-host-files.ts +28 -4
  394. package/src/installed-package-versions.ts +142 -38
  395. package/src/kotlin-host.ts +1 -1
  396. package/src/launchMetadataContract.ts +1 -0
  397. package/src/menu.ts +12 -4
  398. package/src/metro-plugin.ts +4 -4
  399. package/src/metro-project-root.ts +68 -0
  400. package/src/native-app-identity-project.ts +47 -38
  401. package/src/nitro-adapter.lock.json +26 -0
  402. package/src/nitro-adapter.ts +103 -0
  403. package/src/nitro-bundle.ts +24 -10
  404. package/src/nitro-compile.ts +33 -51
  405. package/src/nitro-source.ts +177 -96
  406. package/src/nitroAdapterContract.ts +217 -0
  407. package/src/nitroContract.ts +24 -11
  408. package/src/process-group.ts +41 -34
  409. package/src/react-bridge-importers.ts +28 -0
  410. package/src/reactNativeConfigurationContract.ts +36 -0
  411. package/src/runtime-assets.ts +7 -2
  412. package/src/runtime-delivery.ts +8 -7
  413. package/src/runtimePlatformContract.ts +70 -0
  414. package/src/screenshots/frame-compose.ts +42 -43
  415. package/src/screenshots/org-deck.ts +9 -4
  416. package/src/screenshots/preset-names.ts +29 -0
  417. package/src/screenshots/registry.ts +5 -5
  418. package/src/screenshots/schema.ts +1 -1
  419. package/src/screenshots/screenshotContract.ts +971 -0
  420. package/src/settings-flags.ts +107 -0
  421. package/src/settingsContract.ts +609 -0
  422. package/src/storageSnapshotContract.ts +344 -0
  423. package/src/stub-pattern-matcher.ts +550 -0
  424. package/src/swift-compile.ts +926 -47
  425. package/src/swift-compiler-digest.ts +17 -3
  426. package/src/swift-distribution.lock.json +49 -22
  427. package/src/swift-host.ts +167 -52
  428. package/src/swift-objc-compile.ts +86 -26
  429. package/src/swift-objc-export.ts +532 -0
  430. package/src/swift-objc-import.ts +769 -0
  431. package/src/swift-objc-metadata.ts +285 -10
  432. package/src/swift-objc-sdk.ts +13970 -158
  433. package/src/swift-objc-standin.ts +137 -1
  434. package/src/swift-package.ts +94 -0
  435. package/src/swift-packages.ts +5 -5
  436. package/src/swift-root-lock.ts +241 -92
  437. package/src/swift-submit.ts +6 -0
  438. package/src/swiftContract.ts +99 -0
  439. package/src/target-matcher.ts +6 -1
  440. package/src/vite-plugin.ts +14 -40
  441. package/src/worker-system-chunks.ts +1 -1
  442. package/src/workerChunkContract.ts +5 -0
  443. package/src/worklets-babel.ts +24 -5
  444. package/src/xcode-project.ts +103 -11
  445. package/src/xcode-target-members.ts +10 -3
  446. package/cli/drivers/playwright-sim-host.ts +0 -825
  447. package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
  448. package/kotlin/fixtures/counter/Counter.kt +0 -51
  449. package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
  450. package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
  451. package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
  452. package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
  453. package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
  454. package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
  455. package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
  456. package/kotlin/fixtures/counter/package.json +0 -20
  457. package/kotlin/fixtures/counter/tsconfig.json +0 -19
  458. package/kotlin/fixtures/counter/vite.config.ts +0 -20
  459. package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
  460. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
  461. package/kotlin/fixtures/import-animation/Animation.kt +0 -80
  462. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
  463. package/kotlin/fixtures/import-animation/README.md +0 -24
  464. package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
  465. package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
  466. package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
  467. package/kotlin/fixtures/import-animation/package.json +0 -23
  468. package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
  469. package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
  470. package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
  471. package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
  472. package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
  473. package/kotlin/fixtures/import-drawing/README.md +0 -34
  474. package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
  475. package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
  476. package/kotlin/fixtures/import-drawing/package.json +0 -23
  477. package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
  478. package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
  479. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
  480. package/kotlin/fixtures/import-editor/Editor.kt +0 -59
  481. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
  482. package/kotlin/fixtures/import-editor/README.md +0 -27
  483. package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
  484. package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
  485. package/kotlin/fixtures/import-editor/package.json +0 -23
  486. package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
  487. package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
  488. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
  489. package/kotlin/fixtures/import-effects/Effects.kt +0 -87
  490. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
  491. package/kotlin/fixtures/import-effects/README.md +0 -19
  492. package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
  493. package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
  494. package/kotlin/fixtures/import-effects/package.json +0 -23
  495. package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
  496. package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
  497. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
  498. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
  499. package/kotlin/fixtures/import-layout/Layout.kt +0 -72
  500. package/kotlin/fixtures/import-layout/README.md +0 -24
  501. package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
  502. package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
  503. package/kotlin/fixtures/import-layout/package.json +0 -23
  504. package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
  505. package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
  506. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
  507. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
  508. package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
  509. package/kotlin/fixtures/import-navigation/README.md +0 -31
  510. package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
  511. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
  512. package/kotlin/fixtures/import-navigation/package.json +0 -23
  513. package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
  514. package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
  515. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
  516. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
  517. package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
  518. package/kotlin/fixtures/import-overlays/README.md +0 -34
  519. package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
  520. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
  521. package/kotlin/fixtures/import-overlays/package.json +0 -23
  522. package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
  523. package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
  524. package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
  525. package/kotlin/fixtures/import-resources/README.md +0 -26
  526. package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
  527. package/kotlin/fixtures/import-resources/Resources.kt +0 -72
  528. package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
  529. package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
  530. package/kotlin/fixtures/import-resources/package.json +0 -23
  531. package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
  532. package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
  533. package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
  534. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
  535. package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
  536. package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
  537. package/kotlin/fixtures/import-scroll/README.md +0 -38
  538. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
  539. package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
  540. package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
  541. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
  542. package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
  543. package/kotlin/fixtures/import-scroll/package.json +0 -23
  544. package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
  545. package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
  546. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
  547. package/kotlin/fixtures/import-selection/README.md +0 -32
  548. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
  549. package/kotlin/fixtures/import-selection/Selection.kt +0 -78
  550. package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
  551. package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
  552. package/kotlin/fixtures/import-selection/package.json +0 -23
  553. package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
  554. package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
  555. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
  556. package/kotlin/fixtures/import-surfaces/README.md +0 -22
  557. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
  558. package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
  559. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
  560. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
  561. package/kotlin/fixtures/import-surfaces/package.json +0 -23
  562. package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
  563. package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
  564. package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
  565. package/kotlin/fixtures/import-values/README.md +0 -28
  566. package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
  567. package/kotlin/fixtures/import-values/Values.kt +0 -84
  568. package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
  569. package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
  570. package/kotlin/fixtures/import-values/package.json +0 -23
  571. package/kotlin/fixtures/import-values/tsconfig.json +0 -20
  572. package/kotlin/fixtures/import-values/vite.config.ts +0 -20
  573. package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
  574. package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
  575. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
  576. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
  577. package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
  578. package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
  579. package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
  580. package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
  581. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
  582. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
  583. package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
  584. package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
  585. package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
  586. package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
  587. package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
  588. package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
  589. package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
  590. package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
  591. package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
  592. package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
  593. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
  594. package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
  595. package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
  596. package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
  597. package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
  598. package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
  599. package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
  600. package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
  601. package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
  602. package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
  603. package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
  604. package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
  605. package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
  606. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
  607. package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
  608. package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
  609. package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
  610. package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
  611. package/kotlin/fork/README.md +0 -97
  612. package/kotlin/fork/build.sh +0 -176
  613. package/kotlin/fork/compose-worker-globals.patch +0 -1247
  614. package/kotlin/fork/fork.json +0 -46
  615. package/kotlin/fork/publish.ts +0 -99
  616. package/kotlin/fork/skia-android-shaping.patch +0 -189
  617. package/kotlin/fork/skiko-local.init.gradle +0 -10
  618. package/kotlin/fork/skiko-worker-clock.patch +0 -122
@@ -1,10 +1,9 @@
1
+ import { getCliRuntime } from '../../src/cli-runtime.ts'
1
2
  import {
2
3
  devices,
3
- getDevice,
4
4
  listSelectableDeviceModels,
5
5
  type DeviceModel,
6
- } from 'peach-engine/settings/devices'
7
- import { DUO_REST_PROGRESS, type DuoFoldRest } from 'peach-engine/settings/duo-fold-bus'
6
+ } from '../../src/device-catalog.ts'
8
7
  import { SOOTSIM_SHELL_COMMAND_NAME } from '../../src/menu'
9
8
  import { peachExit } from '../run-rnx'
10
9
  import {
@@ -14,6 +13,7 @@ import {
14
13
  parseBridgeCliArgs,
15
14
  type ParsedBridgeCliArgs,
16
15
  } from '../ws-bridge'
16
+ import type { DuoFoldRest } from '#peach-cli-contract/settings/duo-fold-bus'
17
17
 
18
18
  interface DeviceCommandOptions {
19
19
  port?: number
@@ -48,7 +48,7 @@ examples:
48
48
  }
49
49
 
50
50
  function printDevice(model: DeviceModel) {
51
- const spec = getDevice(model)
51
+ const spec = getCliRuntime().settings_devices.getDevice(model)
52
52
  console.log(
53
53
  ` ${model.padEnd(14)} ${String(spec.width).padStart(4)}x${String(spec.height).padEnd(4)} pt ${String(spec.width * spec.scale).padStart(4)}x${String(spec.height * spec.scale).padEnd(4)} px ${spec.name}`,
54
54
  )
@@ -65,7 +65,7 @@ async function readCurrentDevice(
65
65
  )) ?? { deviceModel: null }
66
66
  const model = typeof settings.deviceModel === 'string' ? settings.deviceModel : null
67
67
  if (!model || !(model in devices)) return null
68
- const spec = getDevice(
68
+ const spec = getCliRuntime().settings_devices.getDevice(
69
69
  model as DeviceModel,
70
70
  settings.posture === 'open' || settings.posture === 'closed'
71
71
  ? settings.posture
@@ -88,10 +88,15 @@ async function readCurrentDevice(
88
88
  }
89
89
 
90
90
  function isDuoRest(value: unknown): value is DuoFoldRest {
91
- return typeof value === 'string' && value in DUO_REST_PROGRESS
91
+ return (
92
+ typeof value === 'string' &&
93
+ value in getCliRuntime().settings_duo_fold_bus.DUO_REST_PROGRESS
94
+ )
92
95
  }
93
96
 
94
- const DUO_RESTS = Object.keys(DUO_REST_PROGRESS).filter(isDuoRest)
97
+ const DUO_RESTS = Object.keys(
98
+ getCliRuntime().settings_duo_fold_bus.DUO_REST_PROGRESS,
99
+ ).filter(isDuoRest)
95
100
 
96
101
  type CurrentPostureSnapshot = {
97
102
  model: DeviceModel
@@ -165,7 +170,7 @@ export async function runDeviceCommand(args: string[], opts: DeviceCommandOption
165
170
  'deviceModel',
166
171
  model,
167
172
  )
168
- const spec = getDevice(model as DeviceModel)
173
+ const spec = getCliRuntime().settings_devices.getDevice(model as DeviceModel)
169
174
  console.log(
170
175
  ` ${changed ? 'set' : 'kept'} device: ${model} (${spec.width}x${spec.height} pt, ${spec.width * spec.scale}x${spec.height * spec.scale} px)${changed ? ' — reloading sim' : ''}`,
171
176
  )
@@ -228,7 +233,7 @@ export async function runDeviceCommand(args: string[], opts: DeviceCommandOption
228
233
  const settled = () => {
229
234
  const fold = globalThis.__sootsimDuoFold
230
235
  return !!fold && fold.rest === ${JSON.stringify(target)} && !fold.active &&
231
- Math.abs(fold.progress - ${DUO_REST_PROGRESS[target]}) < 1e-6
236
+ Math.abs(fold.progress - ${getCliRuntime().settings_duo_fold_bus.DUO_REST_PROGRESS[target]}) < 1e-6
232
237
  }
233
238
  const check = () => {
234
239
  if (settled()) resolve(true)
@@ -2,6 +2,7 @@
2
2
  // and the teardown of the simulator, driver and bridge their open started.
3
3
  import { isLoopbackHost } from '../../src/backend-origin'
4
4
  import { clearCurrentSimId, readCurrentSimId } from '../current-sim'
5
+ import { terminateProcessGroup } from '../../src/process-group'
5
6
  import { createBridge } from '../ws-bridge'
6
7
  import {
7
8
  printDriverDiagnosticLogTail,
@@ -74,18 +75,13 @@ export async function closeGuestResources(
74
75
  closed = false
75
76
  }
76
77
  }
77
- if (
78
- resources.driver?.driverId === 'playwright' &&
79
- resources.driver.launched &&
80
- resources.driver.pid
81
- ) {
78
+ if (resources.driver?.driverId === 'playwright' && resources.driver.process) {
79
+ // the host owns a browser tree; wait until it and its descendants are gone.
82
80
  try {
83
- process.kill(resources.driver.pid, 'SIGTERM')
81
+ await terminateProcessGroup(resources.driver.process)
84
82
  } catch (error) {
85
- if (!(error instanceof Error && 'code' in error && error.code === 'ESRCH')) {
86
- console.error(String(error))
87
- closed = false
88
- }
83
+ console.error(` ${label} driver cleanup failed: ${String(error)}`)
84
+ closed = false
89
85
  }
90
86
  }
91
87
  if (resources.bridge && !resources.bridgeReady) resources.bridge.kill('SIGTERM')
@@ -15,12 +15,18 @@ import {
15
15
  HEADLESS_TENANT_FETCH_HUNG_MARKER,
16
16
  readyProbeContentBasis,
17
17
  readyProbeIsReady,
18
+ type DiagnosticsOptions,
19
+ type DiagnosticsResult,
18
20
  type SemanticWaitCondition,
19
21
  type SemanticWaitResult,
20
22
  type WsBridgeCommand,
21
23
  } from '../../../src/bridge-contract'
22
- import { SEMANTIC_WAIT_MAX_TIMEOUT_MS } from '../../../src/bridge-contract-input'
24
+ import {
25
+ parseDiagnosticsResult,
26
+ SEMANTIC_WAIT_MAX_TIMEOUT_MS,
27
+ } from '../../../src/bridge-contract-input'
23
28
  export { readyProbeHasContent, readyProbeIsReady } from '../../../src/bridge-contract'
29
+ import type { KeyboardLayoutSnapshot } from '#peach-cli-contract/render-worker/native-ui-protocol'
24
30
  import type {
25
31
  SimSemanticNode,
26
32
  SimSemanticQueryResult,
@@ -36,7 +42,6 @@ import type {
36
42
  SootSimTimelineQueryResult,
37
43
  SootSimTimelineSummary,
38
44
  } from '@peach/globals'
39
- import type { KeyboardLayoutSnapshot } from 'peach-engine/render-worker/native-ui-protocol'
40
45
 
41
46
  // resolve a wait's `--max-ms <n>` budget, tolerating the spellings agents and
42
47
  // humans actually type (`--maxMs`, `--maxms`, `--max_ms`). `--timeout`, the
@@ -1994,29 +1999,50 @@ export async function inspectScreens(bridge: InspectBridge): Promise<ScreensRepo
1994
1999
 
1995
2000
  // ─── debug channels ───
1996
2001
 
1997
- // the `window.__sootsimDebug` channels the engine instruments. `all` is a
1998
- // meta-target accepted by enable/disable.
1999
- export const DEBUG_CHANNELS = [
2000
- 'portals',
2001
- 'sheets',
2002
- 'layout',
2003
- 'onlayout',
2004
- 'animated',
2005
- 'render',
2006
- 'touch',
2007
- 'yoga',
2008
- ] as const
2002
+ // remote diagnostics stay on the typed read surface; evaluation retains its
2003
+ // separate debug-scope requirement.
2004
+ async function inspectCloudDiagnostics(
2005
+ bridge: InspectBridge,
2006
+ diagnostics: DiagnosticsOptions = {},
2007
+ ): Promise<DiagnosticsResult> {
2008
+ return parseDiagnosticsResult(await bridge.send({ type: 'diagnostics', diagnostics }))
2009
+ }
2009
2010
 
2010
- // `debug status` — which debug channels are currently enabled + their counts.
2011
- export async function inspectDebugStatus(bridge: InspectBridge): Promise<unknown> {
2011
+ // `debug status` reads the currently enabled debug channels.
2012
+ export async function inspectDebugStatus(
2013
+ bridge: InspectBridge,
2014
+ host = false,
2015
+ ): Promise<unknown> {
2016
+ if (bridge.plane === 'cloud' && !host) {
2017
+ return (await inspectCloudDiagnostics(bridge)).channels
2018
+ }
2012
2019
  return bridge.send({ type: 'evaluate', code: 'window.__sootsimDebug.status()' })
2013
2020
  }
2014
2021
 
2015
2022
  // `debug flags` — the engine's debug feature flags.
2016
- export async function inspectDebugFlags(bridge: InspectBridge): Promise<unknown> {
2023
+ export async function inspectDebugFlags(
2024
+ bridge: InspectBridge,
2025
+ host = false,
2026
+ ): Promise<unknown> {
2027
+ if (bridge.plane === 'cloud' && !host) {
2028
+ const { channels, availableChannels } = await inspectCloudDiagnostics(bridge)
2029
+ return Object.fromEntries(
2030
+ availableChannels.map((channel) => [channel, channels.includes(channel)]),
2031
+ )
2032
+ }
2017
2033
  return bridge.send({ type: 'evaluate', code: 'window.__sootsimDebug.flags()' })
2018
2034
  }
2019
2035
 
2036
+ export async function inspectDebugChannels(
2037
+ bridge: InspectBridge,
2038
+ host = false,
2039
+ ): Promise<unknown> {
2040
+ if (bridge.plane === 'cloud' && !host) {
2041
+ return (await inspectCloudDiagnostics(bridge)).availableChannels
2042
+ }
2043
+ return bridge.send({ type: 'evaluate', code: 'window.__sootsimDebug.channels()' })
2044
+ }
2045
+
2020
2046
  // `debug find sheets|portals` — locate all live sheet / portal nodes.
2021
2047
  // routed through the test bridge (not the page __sootsimDebug global) so the
2022
2048
  // walk runs against the worker's live tree — the page-local tree is empty
@@ -2024,7 +2050,11 @@ export async function inspectDebugFlags(bridge: InspectBridge): Promise<unknown>
2024
2050
  export async function inspectDebugFind(
2025
2051
  bridge: InspectBridge,
2026
2052
  target: 'sheets' | 'portals' | 'boundaries',
2053
+ host = false,
2027
2054
  ): Promise<unknown> {
2055
+ if (bridge.plane === 'cloud' && !host) {
2056
+ return (await inspectCloudDiagnostics(bridge, { find: target })).found
2057
+ }
2028
2058
  return bridge.send({
2029
2059
  type: 'evaluate',
2030
2060
  code: `window.__sootsimTest.debugFind(${JSON.stringify(target)})`,
@@ -2060,6 +2090,14 @@ export async function inspectDebugRecent(
2060
2090
  limit = 50,
2061
2091
  host = false,
2062
2092
  ): Promise<unknown> {
2093
+ if (bridge.plane === 'cloud' && !host) {
2094
+ return (
2095
+ await inspectCloudDiagnostics(bridge, {
2096
+ ...(channel && channel !== 'all' ? { recentChannel: channel } : {}),
2097
+ recentLimit: limit,
2098
+ })
2099
+ ).events
2100
+ }
2063
2101
  return callDebugBridge(
2064
2102
  bridge,
2065
2103
  `recent(${channel && channel !== 'all' ? JSON.stringify(channel) : 'undefined'}, ${limit})`,
@@ -2075,6 +2113,11 @@ export async function setDebugChannels(
2075
2113
  channels: string[],
2076
2114
  host = false,
2077
2115
  ): Promise<unknown> {
2116
+ if (bridge.plane === 'cloud' && !host) {
2117
+ return (
2118
+ await inspectCloudDiagnostics(bridge, { channelControl: { action, channels } })
2119
+ ).channels
2120
+ }
2078
2121
  const args =
2079
2122
  channels.length > 0
2080
2123
  ? channels.map((c) => JSON.stringify(c)).join(', ')
@@ -2087,6 +2130,27 @@ export async function setDebugChannels(
2087
2130
  return callDebugBridge(bridge, expression)
2088
2131
  }
2089
2132
 
2133
+ export async function toggleDebugChannel(
2134
+ bridge: InspectBridge,
2135
+ channel: string,
2136
+ host = false,
2137
+ ): Promise<unknown> {
2138
+ if (bridge.plane === 'cloud' && !host) {
2139
+ const { channels } = await inspectCloudDiagnostics(bridge, {
2140
+ channelControl: { action: 'toggle', channels: [channel] },
2141
+ })
2142
+ return channels.includes(channel)
2143
+ }
2144
+ const result = await callDebugBridge(bridge, `toggle(${JSON.stringify(channel)})`, true)
2145
+ if (!host) {
2146
+ await callDebugBridge(
2147
+ bridge,
2148
+ `${result ? 'enable' : 'disable'}(${JSON.stringify(channel)})`,
2149
+ )
2150
+ }
2151
+ return result
2152
+ }
2153
+
2090
2154
  // ─── memory ───
2091
2155
 
2092
2156
  export interface ImageLoaderStats {
@@ -3467,13 +3467,17 @@ export async function runInspect(args: string[], opts: InspectOptions) {
3467
3467
  // early in that case instead of waiting the full budget.
3468
3468
  let issuedReload = false
3469
3469
  let inPlaceReload = false
3470
+ // a reload rewrites the sim's running app, so it takes the cli lease
3471
+ // like any other write. a live foreign lease refuses here, before the
3472
+ // sim is touched, and the refusal must not be swallowed by the
3473
+ // reconnect handling below.
3474
+ await evalInBridge(bridge, 'window.__sootsimConsole?.clear()', {
3475
+ acquireLock: true,
3476
+ })
3470
3477
  try {
3471
- await bridge.send({
3472
- type: 'evaluate',
3473
- code: 'window.__sootsimConsole?.clear()',
3474
- })
3475
3478
  const reloadResult = await bridge.send({
3476
3479
  type: 'evaluate',
3480
+ acquireLock: true,
3477
3481
  code: `;(async () => {
3478
3482
  // in-place guest reload is only valid while the page still runs
3479
3483
  // the engine build the server would serve NOW. the shell dev
@@ -3602,10 +3606,11 @@ export async function runInspect(args: string[], opts: InspectOptions) {
3602
3606
  }
3603
3607
 
3604
3608
  case 'storage-clear': {
3605
- await clearConsole(bridge)
3606
- const cleared = await bridge.send({
3607
- type: 'evaluate',
3608
- code: resetGuestAppStateEval(true),
3609
+ await evalInBridge(bridge, 'window.__sootsimConsole?.clear()', {
3610
+ acquireLock: true,
3611
+ })
3612
+ const cleared = await evalInBridge(bridge, resetGuestAppStateEval(true), {
3613
+ acquireLock: true,
3609
3614
  })
3610
3615
  if (cleared !== true) {
3611
3616
  if (wantsJson(effectiveArgs)) {
@@ -1,20 +1,20 @@
1
1
  import fs from 'node:fs'
2
2
  import http from 'node:http'
3
3
  import path from 'node:path'
4
- import { DEFAULT_DEVICE_BY_PLATFORM, devices } from 'peach-engine/settings/devices'
5
4
  import { WebSocket, WebSocketServer } from 'ws'
5
+ import { DEFAULT_DEVICE_BY_PLATFORM, devices } from '../../src/device-catalog.ts'
6
6
  import { kotlinGuestBundle } from '../../src/guest-bundle'
7
7
  import {
8
8
  readAndroidPins,
9
9
  readKotlinApp,
10
10
  type KotlinAppProject,
11
11
  } from '../../src/kotlin-app'
12
+ import { peachKotlinModuleRoot } from '../../src/kotlin-module'
12
13
  import {
13
14
  KOTLIN_DISCOVERY_PATH,
14
15
  KOTLIN_GUEST_PATH,
15
16
  type KotlinHostDiscovery,
16
17
  } from '../../src/kotlinDiscoveryContract'
17
- import { peachKotlinModuleRoot } from '../../src/kotlin-module'
18
18
  import { PeachExit } from '../run-rnx'
19
19
  import { runOpenCommand, type OpenCommandResources } from './control'
20
20
  import {
@@ -7,8 +7,8 @@ import { spawn, spawnSync } from 'child_process'
7
7
  import * as fs from 'fs'
8
8
  import * as os from 'os'
9
9
  import * as path from 'path'
10
- import { devices } from 'peach-engine/settings/devices'
11
10
  import { PNG } from 'pngjs'
11
+ import { devices } from '../../src/device-catalog.ts'
12
12
  import { rnxHomeDir } from '../../src/home-paths'
13
13
  import { parseFlowFile } from '../flow-file'
14
14
  import {
@@ -1,19 +1,17 @@
1
+ import { createHash } from 'node:crypto'
1
2
  // `peach ios` and `peach android` — start a simulator on that platform.
2
3
  //
3
4
  // the platform picks the device; the command context picks where the sim runs
4
5
  // (this machine, a local box, or the `peach remote` namespace). this file resolves
5
6
  // the device and hands the rest to the normal open path.
6
-
7
- import { createHash } from 'node:crypto'
7
+ import { getCliRuntime } from '../../src/cli-runtime.ts'
8
8
  import {
9
9
  DEFAULT_DEVICE_BY_PLATFORM,
10
10
  devices,
11
- getRuntimePlatform,
12
11
  listSelectableDeviceModels,
13
12
  type DeviceModel,
14
13
  type RuntimePlatform,
15
- } from 'peach-engine/settings/devices'
16
- import { settingsStore } from 'peach-engine/settings/store'
14
+ } from '../../src/device-catalog.ts'
17
15
  import { rnxPublicBrand } from '../../src/public-brand'
18
16
  import { UnsupportedRemoteHostError } from '../cloud-client'
19
17
  import { rethrowIfExit } from '../run-rnx'
@@ -155,13 +153,17 @@ export async function runPlatformCommand(
155
153
  )
156
154
  return 1
157
155
  }
158
- const devicePlatform = getRuntimePlatform(explicitDevice)
156
+ const devicePlatform =
157
+ getCliRuntime().settings_devices.getRuntimePlatform(explicitDevice)
159
158
  if (devicePlatform !== platform) {
160
159
  console.error(
161
160
  ` ${rnxPublicBrand.commandName} ${platform}: --device ${explicitDevice} is ` +
162
161
  `${PLATFORM_LABEL[devicePlatform]}, not ${PLATFORM_LABEL[platform]}.\n` +
163
162
  ` pick one of: ${listSelectableDeviceModels()
164
- .filter((model) => getRuntimePlatform(model) === platform)
163
+ .filter(
164
+ (model) =>
165
+ getCliRuntime().settings_devices.getRuntimePlatform(model) === platform,
166
+ )
165
167
  .join(', ')}`,
166
168
  )
167
169
  return 1
@@ -171,9 +173,11 @@ export async function runPlatformCommand(
171
173
  // keep the user's own device when it already belongs to the platform they
172
174
  // asked for, so `peach ios` after `peach device set iphone-16` does not
173
175
  // silently snap back to the default model.
174
- const current = settingsStore.get('deviceModel')
175
- if (getRuntimePlatform(current) !== platform) {
176
- settingsStore.apply({ deviceModel: DEFAULT_DEVICE_BY_PLATFORM[platform] })
176
+ const current = getCliRuntime().settings_store.settingsStore.get('deviceModel')
177
+ if (getCliRuntime().settings_devices.getRuntimePlatform(current) !== platform) {
178
+ getCliRuntime().settings_store.settingsStore.apply({
179
+ deviceModel: DEFAULT_DEVICE_BY_PLATFORM[platform],
180
+ })
177
181
  selectedDevice = DEFAULT_DEVICE_BY_PLATFORM[platform]
178
182
  } else {
179
183
  selectedDevice = current
@@ -235,8 +239,13 @@ export async function runPlatformCommand(
235
239
  return 1
236
240
  }
237
241
 
242
+ // the open path derives the bundle platform from --device alone, so the
243
+ // resolved device always travels with it, including the kept or default one.
244
+ const openArgs = args.includes('--device')
245
+ ? args
246
+ : [...args.filter((arg) => arg !== assignedDevice), '--device', selectedDevice]
238
247
  const { runOpenCommand } = await import('./control')
239
- await runOpenCommand(args, { port: opts.port })
248
+ await runOpenCommand(openArgs, { port: opts.port })
240
249
  return 0
241
250
  }
242
251
 
@@ -5,16 +5,12 @@ import { createRequire } from 'node:module'
5
5
  import { createServer } from 'node:net'
6
6
  import { tmpdir } from 'node:os'
7
7
  import { dirname, join, resolve } from 'node:path'
8
- import { brotliBundle } from 'peach-engine/preview/compress-node'
9
- import {
10
- runPresignedUpload,
11
- type InitRequestBody,
12
- } from 'peach-engine/preview/presigned-upload'
13
8
  import { warmNativeBundle } from '../../../contrast-runner/src/bundleWarm'
14
9
  import {
15
10
  readPreviewBuildReceipt,
16
11
  type PreviewBuildReceipt,
17
12
  } from '../../../contrast-runner/src/previewBuildContract'
13
+ import { getCliRuntime } from '../../src/cli-runtime.ts'
18
14
  import { isRecord } from '../../src/is-record'
19
15
  import { terminateProcessGroup } from '../../src/process-group'
20
16
  import { authHeaderValue, cloudAccountIdOrExit, resolveCliAuth } from '../auth'
@@ -23,6 +19,7 @@ import { publishLiveDevStack, type PublishedLiveDevStack } from '../cloud-test-t
23
19
  import { openUrl } from '../open-url'
24
20
  import { detectProject } from './detect'
25
21
  import { resolveDefaultUploadOrigin, resolvePublicPreviewOrigin } from './upload'
22
+ import type { InitRequestBody } from '#peach-cli-contract/preview/presigned-upload'
26
23
 
27
24
  function takeValue(args: string[], flag: string): string | null {
28
25
  const index = args.indexOf(flag)
@@ -80,7 +77,7 @@ export async function runPreview(args: string[]): Promise<number> {
80
77
  return 0
81
78
  }
82
79
  const artifact = await producePreviewArtifact(target)
83
- const bundle = brotliBundle(artifact.bytes)
80
+ const bundle = getCliRuntime().preview_compress_node.brotliBundle(artifact.bytes)
84
81
  const initBody: InitRequestBody = {
85
82
  kind: 'build',
86
83
  buildPlatform: platform,
@@ -98,18 +95,19 @@ export async function runPreview(args: string[]): Promise<number> {
98
95
  : { model: 'iphone-16', width: 402, height: 874 },
99
96
  files: [],
100
97
  }
101
- const { finalize } = await runPresignedUpload({
102
- originBase: origin,
103
- endpoints: {
104
- init: '/api/v1/previews',
105
- finalize: '/api/v1/previews/finalize',
106
- },
107
- initBody,
108
- bundleBytes: bundle,
109
- filesByHash: new Map(),
110
- authHeader: authHeaderValue(auth),
111
- accountId,
112
- })
98
+ const { finalize } =
99
+ await getCliRuntime().preview_presigned_upload.runPresignedUpload({
100
+ originBase: origin,
101
+ endpoints: {
102
+ init: '/api/v1/previews',
103
+ finalize: '/api/v1/previews/finalize',
104
+ },
105
+ initBody,
106
+ bundleBytes: bundle,
107
+ filesByHash: new Map(),
108
+ authHeader: authHeaderValue(auth),
109
+ accountId,
110
+ })
113
111
  const url = finalize.url.startsWith('http')
114
112
  ? finalize.url
115
113
  : `${publicOrigin}${finalize.url}`
@@ -1,3 +1,4 @@
1
+ import fs from 'fs'
1
2
  // peach runtime — manage engine runtimes under ~/.peach/runtimes/.
2
3
  //
3
4
  // runtimes are versioned tarballs hosted behind the configured CDN origin
@@ -10,10 +11,9 @@
10
11
  //
11
12
  // the daemon-side state (active runtime) is mirrored in ~/.peach/runtimes/active
12
13
  // so the CLI can change it even when the daemon isn't running.
13
-
14
- import fs from 'fs'
15
14
  import { compareSemver } from '@contrast/runtime-delivery'
16
15
  import { WebSocket } from 'ws'
16
+ import { verifyCliCompanion } from '../../src/cli-runtime'
17
17
  import {
18
18
  ensureRnxHome,
19
19
  readActiveRuntime,
@@ -125,6 +125,7 @@ async function runtimeInstall(args: string[], opts: RuntimeOptions) {
125
125
  }
126
126
 
127
127
  async function activateVersion(version: string) {
128
+ verifyCliCompanion(runtimeDir(version))
128
129
  writeActiveRuntime(version)
129
130
  console.log(` active: ${version}`)
130
131
  // a running daemon reads the active file on every new sim and lockfile
@@ -9,7 +9,7 @@
9
9
 
10
10
  import { mkdirSync, writeFileSync } from 'fs'
11
11
  import { resolve } from 'path'
12
- import { devices } from 'peach-engine/settings/devices'
12
+ import { devices } from '../../src/device-catalog.ts'
13
13
  import { buildResolveRectEval, type SampleRect } from '../browser-evals'
14
14
  import { peachExit } from '../run-rnx'
15
15
  import { callInBridge, createBridgeFromParsed, parseBridgeCliArgs } from '../ws-bridge'
@@ -8,9 +8,9 @@
8
8
 
9
9
  import { mkdirSync } from 'fs'
10
10
  import { dirname, resolve } from 'path'
11
- import { devices, type DeviceModel } from 'peach-engine/settings/devices'
12
11
  import { launchReapedChrome } from '../../../../scripts/lib/reap-browser'
13
12
  import { DEFAULT_SOOTSIM_BRIDGE_PORT } from '../../src/bridge-constants'
13
+ import { devices, type DeviceModel } from '../../src/device-catalog.ts'
14
14
  import { composeFramedScreenshot } from '../../src/screenshots/frame-compose'
15
15
  import { buildResolveRectEval, type SampleRect } from '../browser-evals'
16
16
  import { createCloudBridgeForParsed } from '../cloud-client'
@@ -16,6 +16,7 @@ import {
16
16
  ensureRnxHome,
17
17
  isDaemonLockfileFresh,
18
18
  readDaemonLockfile,
19
+ rnxHomeDir,
19
20
  } from '../../src/home-paths'
20
21
  import { SootSimBridgeHost } from '../../src/host/bridge-host'
21
22
  import { findMonorepoRoot, resolveDevCheckoutRuntimeRoot } from '../../src/runtime-assets'
@@ -88,7 +89,10 @@ examples:
88
89
  console.error(
89
90
  ` a peach bridge is already running (pid ${existingLock.pid}, port ${existingLock.bridgePort})`,
90
91
  )
91
- console.error(` stop it with 'peach daemon stop' first`)
92
+ console.error(
93
+ ` it owns the peach home ${rnxHomeDir()}. use that bridge on port ${existingLock.bridgePort}, or set PEACH_HOME to a separate directory to run your own.`,
94
+ )
95
+ console.error(` stop it with 'peach daemon stop' only if you own it`)
92
96
  peachExit(1)
93
97
  }
94
98
 
@@ -1,3 +1,4 @@
1
+ import { resolve } from 'node:path'
1
2
  // peach support — ask for help, report a problem, and read our replies
2
3
  // (plans/peach-cloud/partner-support.md). every item belongs to the account the
3
4
  // CLI login names, so `status` lists them without the caller keeping ids.
@@ -6,13 +7,11 @@
6
7
  // peach support report [--app <dir>] [--dry-run] [--yes] "<description>"
7
8
  // peach support status [--id <id>] [--new] [--json]
8
9
  // peach support fund [--amount <usd>]
9
-
10
- import { resolve } from 'node:path'
11
- import { TOPUP_DEFAULT_USD } from 'peach-engine/billing/plans'
12
10
  import {
13
11
  readSharedDesktopAuthSession,
14
12
  writeSharedDesktopAuthSession,
15
13
  } from '../../src/auth/shared-session'
14
+ import { getCliRuntime } from '../../src/cli-runtime.ts'
16
15
  import { readSharedConfig, writeSharedConfig } from '../../src/home-paths'
17
16
  import { openUrl } from '../open-url'
18
17
  import { runReportIssue, supportEndpoint, toolchainContext } from './report-issue'
@@ -273,7 +272,8 @@ async function runAsk(args: string[]): Promise<number> {
273
272
  // paid, and binds the funded account to this login
274
273
  async function runFund(args: string[]): Promise<number> {
275
274
  const at = args.indexOf('--amount')
276
- const amountUsd = at >= 0 ? Number(args[at + 1]) : TOPUP_DEFAULT_USD
275
+ const amountUsd =
276
+ at >= 0 ? Number(args[at + 1]) : getCliRuntime().billing_plans.TOPUP_DEFAULT_USD
277
277
  if (!Number.isFinite(amountUsd) || amountUsd <= 0) {
278
278
  process.stderr.write(` --amount takes dollars\n${USAGE}`)
279
279
  return 1
@@ -1,20 +1,16 @@
1
+ import { createHash } from 'node:crypto'
1
2
  // peach mode three — toggle the live browser 3d device stage.
2
3
  //
3
4
  // wraps the existing `toggle-three-mode` shell action so CLI, rail, and
4
5
  // menu all use the same plugin-owned state path.
5
-
6
- import { createHash } from 'node:crypto'
7
6
  import { mkdirSync, readFileSync, readdirSync, unlinkSync, writeFileSync } from 'node:fs'
8
7
  import { dirname, extname, resolve } from 'node:path'
9
- import {
10
- collectTimelineAssetRefs,
11
- timelineAssetRefOf,
12
- } from 'peach-engine/screenshots/timeline-assets'
8
+ import { getCliRuntime } from '../../src/cli-runtime.ts'
9
+ import { isRecord } from '../../src/is-record'
13
10
  import {
14
11
  isThreeModeSetting,
15
12
  THREE_MODE_SETTING_IDS,
16
- } from 'peach-engine/screenshots/tokens'
17
- import { isRecord } from '../../src/is-record'
13
+ } from '../../src/screenshots/screenshotContract.ts'
18
14
  import { peachExit } from '../run-rnx'
19
15
  import {
20
16
  callInBridgeWrite,
@@ -369,7 +365,9 @@ function readDistinctTimelineAssets(
369
365
  baseDirectory: string,
370
366
  ): DistinctTimelineAsset[] {
371
367
  const byHash = new Map<string, DistinctTimelineAsset>()
372
- for (const ref of collectTimelineAssetRefs(value)) {
368
+ for (const ref of getCliRuntime().screenshots_timeline_assets.collectTimelineAssetRefs(
369
+ value,
370
+ )) {
373
371
  const assetPath = resolve(baseDirectory, ref.src)
374
372
  const bytes = readFileSync(assetPath)
375
373
  const hash = createHash('sha256').update(bytes).digest('hex')
@@ -391,20 +389,29 @@ function readDistinctTimelineAssets(
391
389
  function rewriteTimelineAssetSrcs(
392
390
  value: unknown,
393
391
  urlBySrc: Map<string, string>,
392
+ inWallpaper = false,
394
393
  ): unknown {
395
394
  if (Array.isArray(value)) {
396
- return value.map((entry) => rewriteTimelineAssetSrcs(entry, urlBySrc))
395
+ return value.map((entry) => rewriteTimelineAssetSrcs(entry, urlBySrc, inWallpaper))
397
396
  }
398
397
  if (!isRecord(value)) return value
399
398
 
400
399
  const result: Record<string, unknown> = {}
401
400
  for (const [key, entry] of Object.entries(value)) {
402
- result[key] = rewriteTimelineAssetSrcs(entry, urlBySrc)
401
+ result[key] = rewriteTimelineAssetSrcs(
402
+ entry,
403
+ urlBySrc,
404
+ getCliRuntime().screenshots_timeline_assets.isWallpaperChild(key, inWallpaper),
405
+ )
403
406
  }
404
- const ref = timelineAssetRefOf(result)
405
- if (ref) {
406
- const url = urlBySrc.get(ref.src)
407
- if (url) result.src = url
407
+ for (const {
408
+ field,
409
+ } of getCliRuntime().screenshots_timeline_assets.timelineAssetFieldsOf(
410
+ result,
411
+ inWallpaper,
412
+ )) {
413
+ const url = urlBySrc.get(String(result[field]))
414
+ if (url) result[field] = url
408
415
  }
409
416
  return result
410
417
  }