peachsim 0.1.1644 → 0.1.1653

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (608) hide show
  1. package/README.md +12 -0
  2. package/cli/app-catalog.ts +1 -1
  3. package/cli/app-fonts.ts +11 -80
  4. package/cli/app-splash.ts +18 -12
  5. package/cli/bridge-flow-runner.ts +11 -7
  6. package/cli/cloud-client.ts +10 -13
  7. package/cli/command-registry.ts +13 -4
  8. package/cli/commands/box.ts +4 -4
  9. package/cli/commands/control.ts +93 -53
  10. package/cli/commands/coverage-parser.ts +67 -0
  11. package/cli/commands/coverage.ts +550 -0
  12. package/cli/commands/debug.ts +9 -18
  13. package/cli/commands/desktop.ts +19 -7
  14. package/cli/commands/device.ts +14 -9
  15. package/cli/commands/guest-host.ts +6 -10
  16. package/cli/commands/inspect/core.ts +81 -17
  17. package/cli/commands/inspect.ts +13 -8
  18. package/cli/commands/kotlin.ts +2 -2
  19. package/cli/commands/maestro-compare.ts +1 -1
  20. package/cli/commands/platform.ts +20 -11
  21. package/cli/commands/preview.ts +16 -18
  22. package/cli/commands/runtime.ts +3 -2
  23. package/cli/commands/screenshot-layers.ts +1 -1
  24. package/cli/commands/screenshot.ts +1 -1
  25. package/cli/commands/serve.ts +5 -1
  26. package/cli/commands/support.ts +4 -4
  27. package/cli/commands/three-mode.ts +22 -15
  28. package/cli/commands/upload.ts +44 -45
  29. package/cli/current-sim.ts +38 -0
  30. package/cli/desktop-companion.ts +36 -8
  31. package/cli/device-option.ts +1 -1
  32. package/cli/drivers/playwright.ts +1 -0
  33. package/cli/drivers/types.ts +4 -0
  34. package/cli/help-core.ts +1 -1
  35. package/cli/internal-child.ts +2 -1
  36. package/cli/main.ts +9 -3
  37. package/cli/outbound-endpoints.ts +11 -3
  38. package/cli/output-redaction.ts +39 -14
  39. package/cli/remote-simulators.ts +4 -1
  40. package/cli/scene-video.ts +5 -2
  41. package/cli/send-to-box.ts +7 -10
  42. package/cli/telemetry.ts +1 -1
  43. package/cli/ws-bridge.ts +8 -1
  44. package/detox/attempt-events.cjs +3 -1
  45. package/detox/attempt-events.d.cts +1 -1
  46. package/detox/expectations.ts +108 -99
  47. package/detox/frame-offset.d.mts +6 -0
  48. package/detox/frame-offset.mjs +35 -0
  49. package/detox/gestures.ts +6 -18
  50. package/detox/index.ts +169 -101
  51. package/detox/jest-preset.cjs +1 -3
  52. package/detox/jest-transform.cjs +4 -0
  53. package/detox/matchers.ts +3 -0
  54. package/detox/motion-change.cjs +46 -114
  55. package/detox/motion-change.d.cts +5 -27
  56. package/dist-lib/agent-daemon-client.cjs +1 -1
  57. package/dist-lib/agent-events.cjs +1 -1
  58. package/dist-lib/attached-projects.cjs +1 -1
  59. package/dist-lib/auth/shared-session.cjs +1 -1
  60. package/dist-lib/backend-origin.cjs +1 -1
  61. package/dist-lib/beta.cjs +1 -1
  62. package/dist-lib/beta.mjs +1 -1
  63. package/dist-lib/bridge-constants.cjs +1 -1
  64. package/dist-lib/bridge-contract-input.cjs +65 -1
  65. package/dist-lib/bridge-contract-input.mjs +63 -1
  66. package/dist-lib/bridge-contract.cjs +19 -1
  67. package/dist-lib/bridge-contract.mjs +17 -1
  68. package/dist-lib/bundle-channel.cjs +38091 -14846
  69. package/dist-lib/capture-contract.cjs +1 -1
  70. package/dist-lib/capture-contract.mjs +1 -1
  71. package/dist-lib/cloud-contract.cjs +1 -1
  72. package/dist-lib/cloud-contract.mjs +1 -1
  73. package/dist-lib/cloud-test-args.cjs +1 -1
  74. package/dist-lib/cloud-test-args.mjs +1 -1
  75. package/dist-lib/cloud.cjs +1 -1
  76. package/dist-lib/cloud.mjs +1 -1
  77. package/dist-lib/config.cjs +1 -1
  78. package/dist-lib/config.mjs +5 -3
  79. package/dist-lib/detox/index.cjs +1244 -4509
  80. package/dist-lib/detox/jest-preset.cjs +1 -3
  81. package/dist-lib/detox/jest-transform.cjs +4 -0
  82. package/dist-lib/dev-bundle-resolution.cjs +28 -24
  83. package/dist-lib/expo-swift-bundle.cjs +35049 -13125
  84. package/dist-lib/expo-swift-metadata.cjs +1 -1
  85. package/dist-lib/expo-swift-metadata.mjs +1 -1
  86. package/dist-lib/home-paths.cjs +1 -1
  87. package/dist-lib/host/bridge-host.cjs +45112 -63143
  88. package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
  89. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  90. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  91. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  92. package/dist-lib/host/websocket-proxy.cjs +1 -1
  93. package/dist-lib/index.cjs +1909 -2029
  94. package/dist-lib/jump-to-source-babel.cjs +1 -1
  95. package/dist-lib/jump-to-source-native.cjs +1 -1
  96. package/dist-lib/kotlin-host.cjs +2 -2
  97. package/dist-lib/menu.cjs +1 -1
  98. package/dist-lib/menu.mjs +1 -1
  99. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  100. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  101. package/dist-lib/metro-production-bundle.cjs +1 -1
  102. package/dist-lib/metro-production-bundle.mjs +1 -1
  103. package/dist-lib/metro.cjs +380 -522
  104. package/dist-lib/native-app-identity-project.cjs +39 -252
  105. package/dist-lib/native-app-identity-project.mjs +1174 -11
  106. package/dist-lib/native-app-identity.cjs +8 -3
  107. package/dist-lib/native-app-identity.mjs +8 -3
  108. package/dist-lib/native-firebase-metadata.cjs +1 -1
  109. package/dist-lib/native-firebase-metadata.mjs +1 -1
  110. package/dist-lib/plist.cjs +2 -244
  111. package/dist-lib/plist.mjs +1 -1
  112. package/dist-lib/profiles.cjs +1 -1
  113. package/dist-lib/public-brand.cjs +1 -1
  114. package/dist-lib/public-origins-lib-esm.json +290 -0
  115. package/dist-lib/public-origins-lib-static.json +1 -0
  116. package/dist-lib/public-origins-lib.json +1852 -0
  117. package/dist-lib/react-native-host-modules.cjs +1 -1
  118. package/dist-lib/react-native-host-modules.mjs +1 -1
  119. package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
  120. package/dist-lib/sdk.cjs +83 -16
  121. package/dist-lib/sdk.mjs +81 -15
  122. package/dist-lib/skills.cjs +50546 -75098
  123. package/dist-lib/swift-compile.cjs +25897 -1070
  124. package/dist-lib/swift-compile.mjs +25866 -1033
  125. package/dist-lib/swift-package.cjs +79 -1
  126. package/dist-lib/swift-package.mjs +75 -1
  127. package/dist-lib/swift-submit.cjs +1 -1
  128. package/dist-lib/swift-submit.mjs +1 -1
  129. package/dist-lib/swift-toolchain.cjs +1 -1
  130. package/dist-lib/swift.cjs +1 -1
  131. package/dist-lib/vite-swift.cjs +34273 -12349
  132. package/dist-lib/vite.cjs +373 -298
  133. package/dist-lib/worklet-executable.cjs +1 -1
  134. package/dist-lib/worklet-executable.mjs +1 -1
  135. package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
  136. package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
  137. package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
  138. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
  139. package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
  140. package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
  141. package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
  142. package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
  143. package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
  144. package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
  145. package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
  146. package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
  147. package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
  148. package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
  149. package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
  150. package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
  151. package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
  152. package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
  153. package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
  154. package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
  155. package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
  156. package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
  157. package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
  158. package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
  159. package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
  160. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
  161. package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
  162. package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
  163. package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
  164. package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
  165. package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
  166. package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
  167. package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
  168. package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
  169. package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
  170. package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
  171. package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
  172. package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
  173. package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
  174. package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
  175. package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
  176. package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
  177. package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
  178. package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
  179. package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
  180. package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
  181. package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
  182. package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
  183. package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
  184. package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
  185. package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
  186. package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
  187. package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
  188. package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
  189. package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
  190. package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
  191. package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
  192. package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
  193. package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
  194. package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
  195. package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
  196. package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
  197. package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
  198. package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
  199. package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
  200. package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
  201. package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
  202. package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
  203. package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
  204. package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
  205. package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
  206. package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
  207. package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
  208. package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
  209. package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
  210. package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
  211. package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
  212. package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
  213. package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
  214. package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
  215. package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
  216. package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
  217. package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
  218. package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
  219. package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
  220. package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
  221. package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
  222. package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
  223. package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
  224. package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
  225. package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
  226. package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
  227. package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
  228. package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
  229. package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
  230. package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
  231. package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
  232. package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
  233. package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
  234. package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
  235. package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
  236. package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
  237. package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
  238. package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
  239. package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
  240. package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
  241. package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
  242. package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
  243. package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
  244. package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
  245. package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
  246. package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
  247. package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
  248. package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
  249. package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
  250. package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
  251. package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
  252. package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
  253. package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
  254. package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
  255. package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
  256. package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
  257. package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
  258. package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
  259. package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
  260. package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
  261. package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
  262. package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
  263. package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
  264. package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
  265. package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
  266. package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
  267. package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
  268. package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
  269. package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
  270. package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
  271. package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
  272. package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
  273. package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
  274. package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
  275. package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
  276. package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
  277. package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
  278. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
  279. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
  280. package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
  281. package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
  282. package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
  283. package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
  284. package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
  285. package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
  286. package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
  287. package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
  288. package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
  289. package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
  290. package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
  291. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
  292. package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
  293. package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
  294. package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
  295. package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
  296. package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
  297. package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
  298. package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
  299. package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
  300. package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
  301. package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
  302. package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
  303. package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
  304. package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
  305. package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
  306. package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
  307. package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
  308. package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
  309. package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
  310. package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
  311. package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
  312. package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
  313. package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
  314. package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
  315. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
  316. package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
  317. package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
  318. package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
  319. package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
  320. package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
  321. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
  322. package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
  323. package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
  324. package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
  325. package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
  326. package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
  327. package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
  328. package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
  329. package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
  330. package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
  331. package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
  332. package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
  333. package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
  334. package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
  335. package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
  336. package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
  337. package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
  338. package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
  339. package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
  340. package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
  341. package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
  342. package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
  343. package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
  344. package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
  345. package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
  346. package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
  347. package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
  348. package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
  349. package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
  350. package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
  351. package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
  352. package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
  353. package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
  354. package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
  355. package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
  356. package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
  357. package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
  358. package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
  359. package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
  360. package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
  361. package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
  362. package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
  363. package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
  364. package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
  365. package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
  366. package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
  367. package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
  368. package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
  369. package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
  370. package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
  371. package/kotlin/README.md +6 -0
  372. package/package.json +22 -2
  373. package/runtime-companion.json +1 -0
  374. package/skills/contrast/SKILL.md +1 -0
  375. package/src/assetCatalogContract.ts +21 -0
  376. package/src/bridge-contract-input.ts +84 -0
  377. package/src/bridge-contract.ts +35 -3
  378. package/src/browser-launch-policy.ts +1 -0
  379. package/src/bundle-channel.mjs +4 -2
  380. package/src/cli-runtime.ts +55 -0
  381. package/src/crash-fingerprint.ts +26 -0
  382. package/src/dev-bundle-resolution.ts +50 -23
  383. package/src/device-catalog.ts +1159 -0
  384. package/src/host/bridge-host.ts +3 -26
  385. package/src/host/browser-pointer.ts +71 -0
  386. package/src/host/dev-server-package-versions.ts +23 -0
  387. package/src/host/fetch-proxy-handler.ts +17 -4
  388. package/src/installed-package-versions.ts +142 -38
  389. package/src/kotlin-host.ts +1 -1
  390. package/src/metro-plugin.ts +4 -4
  391. package/src/metro-project-root.ts +68 -0
  392. package/src/nitro-adapter.lock.json +26 -0
  393. package/src/nitro-adapter.ts +103 -0
  394. package/src/nitro-bundle.ts +24 -10
  395. package/src/nitro-compile.ts +33 -51
  396. package/src/nitro-source.ts +177 -96
  397. package/src/nitroAdapterContract.ts +217 -0
  398. package/src/nitroContract.ts +24 -11
  399. package/src/process-group.ts +41 -34
  400. package/src/react-bridge-importers.ts +28 -0
  401. package/src/reactNativeConfigurationContract.ts +36 -0
  402. package/src/runtime-assets.ts +7 -2
  403. package/src/runtime-delivery.ts +2 -0
  404. package/src/runtimePlatformContract.ts +70 -0
  405. package/src/screenshots/frame-compose.ts +42 -43
  406. package/src/screenshots/org-deck.ts +9 -4
  407. package/src/screenshots/preset-names.ts +29 -0
  408. package/src/screenshots/registry.ts +5 -5
  409. package/src/screenshots/schema.ts +1 -1
  410. package/src/screenshots/screenshotContract.ts +971 -0
  411. package/src/settings-flags.ts +107 -0
  412. package/src/settingsContract.ts +609 -0
  413. package/src/storageSnapshotContract.ts +344 -0
  414. package/src/stub-pattern-matcher.ts +550 -0
  415. package/src/swift-compile.ts +908 -40
  416. package/src/swift-compiler-digest.ts +13 -1
  417. package/src/swift-distribution.lock.json +49 -22
  418. package/src/swift-host.ts +167 -52
  419. package/src/swift-objc-compile.ts +54 -24
  420. package/src/swift-objc-export.ts +532 -0
  421. package/src/swift-objc-import.ts +769 -0
  422. package/src/swift-objc-metadata.ts +285 -10
  423. package/src/swift-objc-sdk.ts +13970 -158
  424. package/src/swift-objc-standin.ts +137 -1
  425. package/src/swift-package.ts +94 -0
  426. package/src/swift-packages.ts +5 -5
  427. package/src/swift-submit.ts +6 -0
  428. package/src/swiftContract.ts +99 -0
  429. package/src/target-matcher.ts +6 -1
  430. package/src/vite-plugin.ts +14 -40
  431. package/src/worker-system-chunks.ts +1 -1
  432. package/src/workerChunkContract.ts +5 -0
  433. package/src/worklets-babel.ts +24 -5
  434. package/src/xcode-project.ts +36 -7
  435. package/src/xcode-target-members.ts +10 -3
  436. package/cli/drivers/playwright-sim-host.ts +0 -825
  437. package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
  438. package/kotlin/fixtures/counter/Counter.kt +0 -51
  439. package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
  440. package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
  441. package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
  442. package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
  443. package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
  444. package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
  445. package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
  446. package/kotlin/fixtures/counter/package.json +0 -20
  447. package/kotlin/fixtures/counter/tsconfig.json +0 -19
  448. package/kotlin/fixtures/counter/vite.config.ts +0 -20
  449. package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
  450. package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
  451. package/kotlin/fixtures/import-animation/Animation.kt +0 -80
  452. package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
  453. package/kotlin/fixtures/import-animation/README.md +0 -24
  454. package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
  455. package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
  456. package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
  457. package/kotlin/fixtures/import-animation/package.json +0 -23
  458. package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
  459. package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
  460. package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
  461. package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
  462. package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
  463. package/kotlin/fixtures/import-drawing/README.md +0 -34
  464. package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
  465. package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
  466. package/kotlin/fixtures/import-drawing/package.json +0 -23
  467. package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
  468. package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
  469. package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
  470. package/kotlin/fixtures/import-editor/Editor.kt +0 -59
  471. package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
  472. package/kotlin/fixtures/import-editor/README.md +0 -27
  473. package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
  474. package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
  475. package/kotlin/fixtures/import-editor/package.json +0 -23
  476. package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
  477. package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
  478. package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
  479. package/kotlin/fixtures/import-effects/Effects.kt +0 -87
  480. package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
  481. package/kotlin/fixtures/import-effects/README.md +0 -19
  482. package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
  483. package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
  484. package/kotlin/fixtures/import-effects/package.json +0 -23
  485. package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
  486. package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
  487. package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
  488. package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
  489. package/kotlin/fixtures/import-layout/Layout.kt +0 -72
  490. package/kotlin/fixtures/import-layout/README.md +0 -24
  491. package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
  492. package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
  493. package/kotlin/fixtures/import-layout/package.json +0 -23
  494. package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
  495. package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
  496. package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
  497. package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
  498. package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
  499. package/kotlin/fixtures/import-navigation/README.md +0 -31
  500. package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
  501. package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
  502. package/kotlin/fixtures/import-navigation/package.json +0 -23
  503. package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
  504. package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
  505. package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
  506. package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
  507. package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
  508. package/kotlin/fixtures/import-overlays/README.md +0 -34
  509. package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
  510. package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
  511. package/kotlin/fixtures/import-overlays/package.json +0 -23
  512. package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
  513. package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
  514. package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
  515. package/kotlin/fixtures/import-resources/README.md +0 -26
  516. package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
  517. package/kotlin/fixtures/import-resources/Resources.kt +0 -72
  518. package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
  519. package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
  520. package/kotlin/fixtures/import-resources/package.json +0 -23
  521. package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
  522. package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
  523. package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
  524. package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
  525. package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
  526. package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
  527. package/kotlin/fixtures/import-scroll/README.md +0 -38
  528. package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
  529. package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
  530. package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
  531. package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
  532. package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
  533. package/kotlin/fixtures/import-scroll/package.json +0 -23
  534. package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
  535. package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
  536. package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
  537. package/kotlin/fixtures/import-selection/README.md +0 -32
  538. package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
  539. package/kotlin/fixtures/import-selection/Selection.kt +0 -78
  540. package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
  541. package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
  542. package/kotlin/fixtures/import-selection/package.json +0 -23
  543. package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
  544. package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
  545. package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
  546. package/kotlin/fixtures/import-surfaces/README.md +0 -22
  547. package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
  548. package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
  549. package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
  550. package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
  551. package/kotlin/fixtures/import-surfaces/package.json +0 -23
  552. package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
  553. package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
  554. package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
  555. package/kotlin/fixtures/import-values/README.md +0 -28
  556. package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
  557. package/kotlin/fixtures/import-values/Values.kt +0 -84
  558. package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
  559. package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
  560. package/kotlin/fixtures/import-values/package.json +0 -23
  561. package/kotlin/fixtures/import-values/tsconfig.json +0 -20
  562. package/kotlin/fixtures/import-values/vite.config.ts +0 -20
  563. package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
  564. package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
  565. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
  566. package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
  567. package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
  568. package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
  569. package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
  570. package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
  571. package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
  572. package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
  573. package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
  574. package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
  575. package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
  576. package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
  577. package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
  578. package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
  579. package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
  580. package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
  581. package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
  582. package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
  583. package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
  584. package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
  585. package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
  586. package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
  587. package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
  588. package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
  589. package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
  590. package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
  591. package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
  592. package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
  593. package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
  594. package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
  595. package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
  596. package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
  597. package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
  598. package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
  599. package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
  600. package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
  601. package/kotlin/fork/README.md +0 -97
  602. package/kotlin/fork/build.sh +0 -176
  603. package/kotlin/fork/compose-worker-globals.patch +0 -1247
  604. package/kotlin/fork/fork.json +0 -46
  605. package/kotlin/fork/publish.ts +0 -99
  606. package/kotlin/fork/skia-android-shaping.patch +0 -189
  607. package/kotlin/fork/skiko-local.init.gradle +0 -10
  608. package/kotlin/fork/skiko-worker-clock.patch +0 -122
@@ -1,3 +1,5 @@
1
+ import { createHash, randomUUID } from 'crypto'
2
+ import { readFileSync, rmSync } from 'fs'
1
3
  // peach record upload — publish a recording from a running simulator. scene
2
4
  // recordings carry their own content identity; --live-bundle adds the app
3
5
  // bundle for interactive playback under the existing bundle identity.
@@ -7,44 +9,19 @@
7
9
  // owner turns on Public link from the preview page's share menu. uploads
8
10
  // require a signed-in desktop session or an api key so the share is
9
11
  // associated with the user's account.
10
-
11
- import { createHash, randomUUID } from 'crypto'
12
- import { readFileSync, rmSync } from 'fs'
13
12
  import { tmpdir } from 'os'
14
13
  import path from 'path'
15
14
  import { gzipSync, gunzipSync } from 'zlib'
16
15
  import { readProfileTrace } from '@peach/globals/profile-trace'
17
16
  import { toProfileFile, type ProfileFile } from '@peach/globals/profiler'
18
- import { resolveAppFontsWire } from 'peach-engine/engine/config-plugin-fonts'
19
- import { shouldCompress } from 'peach-engine/preview/compress'
20
- import { brotliBundle } from 'peach-engine/preview/compress-node'
21
- import {
22
- canonicalPublicPreviewOrigin,
23
- runPresignedUpload,
24
- type InitRequestBody,
25
- } from 'peach-engine/preview/presigned-upload'
26
- import {
27
- hasShareableStorage,
28
- type ShareableStorageSnapshot,
29
- } from 'peach-engine/preview/storage-snapshot-contract'
30
- import {
31
- TRACE_CAPTURE_POSTROLL_MS,
32
- TRACE_CAPTURE_PREROLL_MS,
33
- isTraceTimelineEvent,
34
- parseTraceTimelineJsonl,
35
- } from 'peach-engine/preview/trace'
36
- import {
37
- mergeProfileTimeline,
38
- profileFrameSummary,
39
- } from 'peach-engine/profiler/profile-trace'
40
- import { readSceneRecordingUpload } from 'peach-engine/remote-stream/scene-recording'
41
- import {
42
- resolvedExpoAppIconUrl,
43
- expoConfigFromManifest,
44
- } from '../../../peach-engine/src/engine/expo-manifest'
45
17
  import { loopbackOriginOf } from '../../src/backend-origin'
18
+ import { getCliRuntime } from '../../src/cli-runtime.ts'
46
19
  import { parseExpoManifestBody } from '../../src/expo-manifest-body'
47
20
  import { rnxPublicBrand } from '../../src/public-brand'
21
+ import {
22
+ hasShareableStorage,
23
+ ShareableStorageSnapshot,
24
+ } from '../../src/storageSnapshotContract.ts'
48
25
  import { fetchAppFontFiles } from '../app-fonts'
49
26
  import { fetchAppSplashImages } from '../app-splash'
50
27
  import { authHeaderValue, githubUploadIdentity, resolveCliAuth } from '../auth'
@@ -59,8 +36,9 @@ import {
59
36
  evalInBridge,
60
37
  parseBridgeCliArgs,
61
38
  } from '../ws-bridge'
39
+ import type { BundleSnapshot } from '#peach-cli-contract/preview/capture-bundle'
40
+ import type { InitRequestBody } from '#peach-cli-contract/preview/presigned-upload'
62
41
  import type { SootSimTimelineEvent } from '@peach/globals'
63
- import type { BundleSnapshot } from 'peach-engine/preview/capture-bundle'
64
42
 
65
43
  interface UploadOptions {
66
44
  port?: number
@@ -375,9 +353,13 @@ function traceTimelineQuery(args: {
375
353
  }): { since?: number; until?: number; limit: number } {
376
354
  if (args.recordedDurationMs && args.recordingStartedAtMs) {
377
355
  return {
378
- since: args.recordingStartedAtMs - TRACE_CAPTURE_PREROLL_MS,
356
+ since:
357
+ args.recordingStartedAtMs -
358
+ getCliRuntime().preview_trace.TRACE_CAPTURE_PREROLL_MS,
379
359
  until:
380
- args.recordingStartedAtMs + args.recordedDurationMs + TRACE_CAPTURE_POSTROLL_MS,
360
+ args.recordingStartedAtMs +
361
+ args.recordedDurationMs +
362
+ getCliRuntime().preview_trace.TRACE_CAPTURE_POSTROLL_MS,
381
363
  limit: 2000,
382
364
  }
383
365
  }
@@ -388,7 +370,7 @@ function readTraceTimelineEventsFile(filePath: string): SootSimTimelineEvent[] {
388
370
  const bytes = readFileSync(filePath)
389
371
  const isGzip = bytes[0] === 0x1f && bytes[1] === 0x8b
390
372
  const text = (isGzip ? gunzipSync(bytes) : bytes).toString('utf8')
391
- return parseTraceTimelineJsonl(text)
373
+ return getCliRuntime().preview_trace.parseTraceTimelineJsonl(text)
392
374
  }
393
375
 
394
376
  async function readTraceProfileFile(filePath: string): Promise<ProfileFile> {
@@ -693,14 +675,17 @@ export async function runUpload(
693
675
  : []
694
676
  traceTimelineEvents = [
695
677
  ...traceTimelineEvents,
696
- ...timelineEvents.filter(isTraceTimelineEvent),
678
+ ...timelineEvents.filter(getCliRuntime().preview_trace.isTraceTimelineEvent),
697
679
  ].sort((a, b) => a.t - b.t || a.seq - b.seq)
698
680
  } finally {
699
681
  bridge.close()
700
682
  }
701
683
 
702
684
  if (traceProfile)
703
- traceTimelineEvents = mergeProfileTimeline(traceTimelineEvents, traceProfile)
685
+ traceTimelineEvents = getCliRuntime().profiler_profile_trace.mergeProfileTimeline(
686
+ traceTimelineEvents,
687
+ traceProfile,
688
+ )
704
689
 
705
690
  if (!snapshot) {
706
691
  console.error(
@@ -881,7 +866,10 @@ export async function runUpload(
881
866
  let sceneStream: InitRequestBody['sceneStream']
882
867
  if (scenePath) {
883
868
  sceneBytes = readFileSync(scenePath)
884
- const { header, slot } = await readSceneRecordingUpload(sceneBytes)
869
+ const { header, slot } =
870
+ await getCliRuntime().remote_stream_scene_recording.readSceneRecordingUpload(
871
+ sceneBytes,
872
+ )
885
873
  sceneStream = slot
886
874
  console.log(
887
875
  ` attaching scene stream: ${(sceneBytes.byteLength / 1024).toFixed(1)} KiB, ${header.frameCount} frames over ${Math.round(header.durationMs)}ms`,
@@ -949,7 +937,7 @@ export async function runUpload(
949
937
  responseHeaders?: Array<{ name: string; value: string }>,
950
938
  requestVaryHash?: string,
951
939
  ): PreparedFile => {
952
- const compress = shouldCompress(contentType)
940
+ const compress = getCliRuntime().preview_compress.shouldCompress(contentType)
953
941
  const bytes = compress ? gzipSync(raw) : raw
954
942
  return {
955
943
  url,
@@ -972,7 +960,10 @@ export async function runUpload(
972
960
  // pipelines store identical bytes keyed by sha256(url).
973
961
  const appFontFiles: PreparedFile[] = []
974
962
  const appFontsWire = hasBundle
975
- ? await resolveAppFontsWire(appFontsWireFromPageHref(snapshot.pageHref), fetch)
963
+ ? await getCliRuntime().engine_config_plugin_fonts.resolveAppFontsWire(
964
+ appFontsWireFromPageHref(snapshot.pageHref),
965
+ fetch,
966
+ )
976
967
  : ''
977
968
  if (appFontsWire) {
978
969
  const fonts = await fetchAppFontFiles(appFontsWire, {
@@ -1043,7 +1034,7 @@ export async function runUpload(
1043
1034
  })
1044
1035
  if (response.ok && !response.headers.get('content-type')?.includes('html')) {
1045
1036
  const manifest: unknown = parseExpoManifestBody(await response.text())
1046
- const config = expoConfigFromManifest(manifest)
1037
+ const config = getCliRuntime().engine_expo_manifest.expoConfigFromManifest(manifest)
1047
1038
  if (config) {
1048
1039
  appManifest = manifestUrl
1049
1040
  appIdentityFiles.push(
@@ -1056,7 +1047,11 @@ export async function runUpload(
1056
1047
  'application/json',
1057
1048
  ),
1058
1049
  )
1059
- const iconUrl = resolvedExpoAppIconUrl(config, platform, snapshot.bundleUrl)
1050
+ const iconUrl = getCliRuntime().engine_expo_manifest.resolvedExpoAppIconUrl(
1051
+ config,
1052
+ platform,
1053
+ snapshot.bundleUrl,
1054
+ )
1060
1055
  if (iconUrl) {
1061
1056
  try {
1062
1057
  const icon = await fetch(iconUrl, { signal: AbortSignal.timeout(30_000) })
@@ -1116,7 +1111,9 @@ export async function runUpload(
1116
1111
  // brotli source bytes for the upload. finalize verifies the source hash,
1117
1112
  // minifies in the node build container, and stores one canonical brotli
1118
1113
  // bundle. assets stay gzip below.
1119
- const bundleBr = bundleBytes ? brotliBundle(bundleBytes) : undefined
1114
+ const bundleBr = bundleBytes
1115
+ ? getCliRuntime().preview_compress_node.brotliBundle(bundleBytes)
1116
+ : undefined
1120
1117
  const identityBytes = bundleBytes ?? sceneBytes
1121
1118
  if (!identityBytes) throw new Error('upload requires a bundle or scene recording')
1122
1119
  const contentHash = createHash('sha256').update(identityBytes).digest('hex')
@@ -1181,7 +1178,9 @@ export async function runUpload(
1181
1178
  storage: storageGz
1182
1179
  ? { sizeBytes: storageGz.byteLength, encoding: 'gzip' }
1183
1180
  : undefined,
1184
- traceFrameStats: traceProfile ? profileFrameSummary(traceProfile) : undefined,
1181
+ traceFrameStats: traceProfile
1182
+ ? getCliRuntime().profiler_profile_trace.profileFrameSummary(traceProfile)
1183
+ : undefined,
1185
1184
  recordedDurationMs,
1186
1185
  recordingStartedAtMs,
1187
1186
  capture,
@@ -1250,7 +1249,7 @@ export async function runUpload(
1250
1249
 
1251
1250
  let finalize
1252
1251
  try {
1253
- const result = await runPresignedUpload({
1252
+ const result = await getCliRuntime().preview_presigned_upload.runPresignedUpload({
1254
1253
  originBase: origin,
1255
1254
  initBody,
1256
1255
  bundleBytes: bundleBr,
@@ -1308,7 +1307,7 @@ export async function runUpload(
1308
1307
  peachExit(1, message)
1309
1308
  }
1310
1309
 
1311
- const previewUrl = `${canonicalPublicPreviewOrigin(publicOrigin)}${finalize.url}`
1310
+ const previewUrl = `${getCliRuntime().preview_presigned_upload.canonicalPublicPreviewOrigin(publicOrigin)}${finalize.url}`
1312
1311
  console.log(`\n stored ${finalize.filesStored ?? 0} extra files`)
1313
1312
  console.log(` preview: ${previewUrl}`)
1314
1313
 
@@ -191,6 +191,7 @@ export function readCurrentTarget(): LocalCurrentTarget | null {
191
191
  rmSync(filepath, { force: true })
192
192
  return null
193
193
  }
194
+ if (Reflect.get(parsed, 'pendingOpen') === true) return null
194
195
  const version = Reflect.get(parsed, 'version')
195
196
  const plane = Reflect.get(parsed, 'plane')
196
197
  const simId = Reflect.get(parsed, 'simId')
@@ -241,3 +242,40 @@ export function saveCurrentSimId(simId: string) {
241
242
  export function clearCurrentSimId() {
242
243
  rmSync(getCurrentSimPath(), { force: true })
243
244
  }
245
+
246
+ // `peach open` has started choosing a new target and none is pinned yet. the
247
+ // mark holds until a successful open/use pins a sim or the pin is cleared, so
248
+ // a failed open cannot hand later mutating commands to whichever other tab the
249
+ // bridge happens to hold.
250
+ export function markOpenPending() {
251
+ writeSecureJsonAtomic(getCurrentSimPath(), {
252
+ version: CURRENT_SIM_VERSION,
253
+ plane: 'local',
254
+ pendingOpen: true,
255
+ updatedAt: new Date().toISOString(),
256
+ })
257
+ }
258
+
259
+ // refuses a command that would choose its own sim while an open is pending.
260
+ // callers pass it only for commands with no sim the user named.
261
+ export function assertNoPendingOpen() {
262
+ if (!isOpenPending()) return
263
+ throw new Error(
264
+ 'the last `peach open` did not pin a sim, so this command would land on whichever tab is connected. run `peach open` again, `peach use <sim>`, or pass --sim <id>',
265
+ )
266
+ }
267
+
268
+ function isOpenPending(): boolean {
269
+ const filepath = getCurrentSimPath()
270
+ if (!existsSync(filepath)) return false
271
+ try {
272
+ const parsed: unknown = JSON.parse(readFileSync(filepath, 'utf8'))
273
+ return (
274
+ parsed !== null &&
275
+ typeof parsed === 'object' &&
276
+ Reflect.get(parsed, 'pendingOpen') === true
277
+ )
278
+ } catch {
279
+ return false
280
+ }
281
+ }
@@ -134,12 +134,15 @@ function retiredElectronApps(): string[] {
134
134
  }
135
135
 
136
136
  // existing Electron apps stay on disk; CLI users receive the migration once.
137
- // the notice names those apps and does not reject a native host beside them.
137
+ // the notice names those apps and does not reject a native host beside them;
138
+ // it recommends installing only when no native host is selected and present.
138
139
  export function notifyDesktopMigration(): void {
139
140
  if (process.platform !== 'darwin' && process.platform !== 'linux') return
140
141
  const legacy = retiredElectronApps()
141
142
  const marker = join(rnxHomeDir(), 'electron-native-migration')
142
143
  if (legacy.length === 0 || existsSync(marker)) return
144
+ const nativeApp = nativeDesktopOverrideError() ? null : getNativeDesktopAppPath()
145
+ const nativeReady = nativeApp !== null && existsSync(nativeExecutable(nativeApp))
143
146
  mkdirSync(rnxHomeDir(), { recursive: true })
144
147
  try {
145
148
  writeFileSync(marker, '', { flag: 'wx' })
@@ -148,7 +151,10 @@ export function notifyDesktopMigration(): void {
148
151
  throw error
149
152
  }
150
153
  console.error(
151
- ` Electron has retired on Mac and Linux (${legacy.join(', ')}). Install the native app: peach desktop install`,
154
+ ` Electron has retired on Mac and Linux (${legacy.join(', ')}). ` +
155
+ (nativeReady
156
+ ? `The native app at ${nativeApp} is in use.`
157
+ : 'Install the native app: peach desktop install'),
152
158
  )
153
159
  }
154
160
 
@@ -198,7 +204,21 @@ export function nativeDesktopIsDefault(): boolean {
198
204
  )
199
205
  }
200
206
 
207
+ // why PEACH_DESKTOP_APP cannot select a host; launch rejects it, the installer
208
+ // and the migration notice do not use it
209
+ function nativeDesktopOverrideError(): string | null {
210
+ const explicitApp = process.env.PEACH_DESKTOP_APP
211
+ if (!explicitApp) return null
212
+ if (process.platform === 'darwin' && !explicitApp.endsWith('.app'))
213
+ return 'PEACH_DESKTOP_APP must name a Mac .app bundle'
214
+ if (process.platform !== 'darwin' && process.platform !== 'linux')
215
+ return 'native desktop requires macOS or Linux'
216
+ return null
217
+ }
218
+
201
219
  export function getNativeDesktopAppPath(): string | null {
220
+ const overrideError = nativeDesktopOverrideError()
221
+ if (overrideError) throw new Error(overrideError)
202
222
  const explicitApp = process.env.PEACH_DESKTOP_APP
203
223
  if (!explicitApp)
204
224
  return process.platform === 'linux'
@@ -206,18 +226,20 @@ export function getNativeDesktopAppPath(): string | null {
206
226
  ? '/usr/bin/peach-desktop'
207
227
  : null
208
228
  : activeDesktopHostApp()
209
- if (process.platform === 'darwin' && !explicitApp.endsWith('.app'))
210
- throw new Error('PEACH_DESKTOP_APP must name a Mac .app bundle')
211
- if (process.platform !== 'darwin' && process.platform !== 'linux')
212
- throw new Error('native desktop requires macOS or Linux')
213
229
  return resolve(explicitApp)
214
230
  }
215
231
 
232
+ function nativeExecutable(appPath: string): string {
233
+ return process.platform === 'darwin'
234
+ ? join(appPath, 'Contents/MacOS/PeachDesktop')
235
+ : appPath
236
+ }
237
+
216
238
  function findNativeDesktopCompanion(): DesktopCompanionInstall | null {
217
239
  const appPath = getNativeDesktopAppPath()
218
240
  if (!appPath) return null
219
241
  const mac = process.platform === 'darwin'
220
- if (!existsSync(mac ? join(appPath, 'Contents/MacOS/PeachDesktop') : appPath)) {
242
+ if (!existsSync(nativeExecutable(appPath))) {
221
243
  throw new Error(
222
244
  `native desktop executable missing in ${appPath}${mac ? ' (run `peach desktop install --native --force`)' : ''}`,
223
245
  )
@@ -394,6 +416,7 @@ export async function launchDesktopCompanion(
394
416
  if (opts.ownerPid && opts.ownerPid > 1) extraArgs.push(`--owner-pid=${opts.ownerPid}`)
395
417
 
396
418
  if (install.kind === 'native-mac-app') {
419
+ const explicitApp = Boolean(process.env.PEACH_DESKTOP_APP)
397
420
  const launchUrl =
398
421
  url ||
399
422
  opts.profileId ||
@@ -404,6 +427,7 @@ export async function launchDesktopCompanion(
404
427
  ? buildMacLaunchUrl(url, opts, true)
405
428
  : ''
406
429
  if (
430
+ !explicitApp &&
407
431
  opts.bridgePort &&
408
432
  launchUrl &&
409
433
  (await openInConnectedMacApp(opts.bridgePort, launchUrl))
@@ -413,7 +437,11 @@ export async function launchDesktopCompanion(
413
437
  // `open -n -a` spawns an instance bound to this caller's PEACH_HOME and
414
438
  // bridge port rather than handing the URL to another session's running
415
439
  // PeachDesktop process; subsequent opens on the same bridge reuse that
416
- // instance via openInConnectedMacApp above.
440
+ // instance via openInConnectedMacApp above unless a build is explicitly selected.
441
+ // a connected host cannot establish the selected build or its launch preferences.
442
+ if (explicitApp) {
443
+ extraArgs.push('-SUEnableAutomaticChecks', 'NO', '-SUAutomaticallyUpdate', 'NO')
444
+ }
417
445
  extraArgs.push('--no-personal-home')
418
446
  // a CLI launch builds its windows from its own args: skip appkit's restore of a prior
419
447
  // crashed session, whose reopen alert blocks boot, without clearing the saved state
@@ -1,4 +1,4 @@
1
- import { devices, listSelectableDeviceModels } from 'peach-engine/settings/devices'
1
+ import { devices, listSelectableDeviceModels } from '../src/device-catalog.ts'
2
2
 
3
3
  export function validateDeviceOption(device: string | undefined): boolean {
4
4
  if (!device || device in devices) return true
@@ -274,6 +274,7 @@ async function launch(opts: DriverLaunchOptions): Promise<DriverLaunchResult> {
274
274
  launched: true,
275
275
  message: `playwright ${hostCommand ? 'native host' : 'Chromium'} launched → ${targetUrl.href}${ownerNote}`,
276
276
  pid: child.pid,
277
+ process: child,
277
278
  target: resolved.spec,
278
279
  attachUrl: targetUrl.href,
279
280
  connectAckFile,
@@ -2,6 +2,8 @@
2
2
  // playwright-owned profile. desktop launches the native host; electron the
3
3
  // Electron companion.
4
4
 
5
+ import type { ChildProcess } from 'node:child_process'
6
+
5
7
  export type DriverId = 'desktop' | 'electron' | 'playwright'
6
8
 
7
9
  // broad category for grouping / filtering. "native" is a desktop host;
@@ -85,6 +87,8 @@ export interface DriverLaunchResult {
85
87
  // expose what makes sense for its environment. pid for spawned processes,
86
88
  // `target` for an install path, `attachUrl` for automation drivers.
87
89
  pid?: number
90
+ // the spawned handle, for drivers whose process tree the caller must stop.
91
+ process?: ChildProcess
88
92
  target?: string
89
93
  attachUrl?: string
90
94
  connectAckFile?: string
package/cli/help-core.ts CHANGED
@@ -4,11 +4,11 @@ import {
4
4
  renderCliGroupHelp,
5
5
  renderCliIndexHelp,
6
6
  } from '@peach/skills/cli/renderers'
7
- import { formatFlagHelp } from 'peach-engine/settings/cli-flags'
8
7
  import {
9
8
  DEFAULT_SOOTSIM_BRIDGE_PORT,
10
9
  DEFAULT_SOOTSIM_BRIDGE_URL,
11
10
  } from '../src/bridge-constants'
11
+ import { formatFlagHelp } from '../src/settings-flags.ts'
12
12
  import {
13
13
  getRnxCommandAvailability,
14
14
  getRnxFirstPositional,
@@ -195,7 +195,8 @@ export async function runScript(scriptPath: string, args: string[]): Promise<voi
195
195
  * an absolute path the driver hands it in the environment, launches chrome,
196
196
  * and keeps this process alive until the browser goes away. */
197
197
  async function playwrightHost(): Promise<void> {
198
- const { PLAYWRIGHT_SIM_HOST } = await import('./drivers/playwright-sim-host')
198
+ const { getCliRuntime } = await import('../src/cli-runtime')
199
+ const { PLAYWRIGHT_SIM_HOST } = getCliRuntime().playwright_sim_host
199
200
  const run: unknown = vm.runInThisContext(
200
201
  `(function(require){${PLAYWRIGHT_SIM_HOST}\n})`,
201
202
  { filename: 'rnx-playwright-host.js' },
package/cli/main.ts CHANGED
@@ -1,9 +1,9 @@
1
+ import { Console } from 'node:console'
1
2
  // the peach CLI proper: argv parsing, the one-time privacy choice, and the
2
3
  // single lazy-imported command a run dispatches to. `./bin` imports this only
3
4
  // when none of its hidden entry points claimed the process.
4
-
5
- import { Console } from 'node:console'
6
5
  import { automaticPeachUpdatesEnabled } from '../src/automatic-update-policy'
6
+ import { getCliRuntime } from '../src/cli-runtime.ts'
7
7
  import { exitWithFlushedOutput } from '../src/process-output'
8
8
  import { rnxPublicBrand } from '../src/public-brand'
9
9
  import { levenshtein } from './levenshtein'
@@ -330,7 +330,7 @@ if (theme && theme !== 'light' && theme !== 'dark' && theme !== 'auto') {
330
330
 
331
331
  // apply device/theme to settings store if provided
332
332
  if (device || theme) {
333
- const { settingsStore } = await import('peach-engine/settings/store')
333
+ const { settingsStore } = await Promise.resolve(getCliRuntime().settings_store)
334
334
  const overrides: Record<string, any> = {}
335
335
  if (device) overrides.deviceModel = device
336
336
  if (theme) overrides.colorScheme = theme
@@ -708,6 +708,12 @@ try {
708
708
  break
709
709
  }
710
710
 
711
+ case 'coverage': {
712
+ const { runCoverage } = await import('./commands/coverage')
713
+ process.exitCode = await runCoverage(parsed.commandArgs)
714
+ break
715
+ }
716
+
711
717
  case 'project-report': {
712
718
  const { runProjectReport } = await import('./commands/project-report')
713
719
  await exitWithFlush(runProjectReport(parsed.commandArgs))
@@ -216,6 +216,14 @@ export const OUTBOUND_ENDPOINTS: Record<string, OutboundEndpointDeclaration> = {
216
216
  payload:
217
217
  'HTTP GET of a pinned, sha256-checked toolchain file; fires only when the user builds a Kotlin app and the file is not cached',
218
218
  },
219
+ coverage_parser_download: {
220
+ category: 'explicit-user-action',
221
+ destination:
222
+ 'https://registry.npmjs.org/@typescript/typescript-<platform>/-/ pinned parser tarball',
223
+ preConsent: false,
224
+ payload:
225
+ 'HTTP GET of the pinned, sha512-checked native parser when peach coverage has no matching installed or cached parser; version, platform and architecture only, with no source or project data',
226
+ },
219
227
  linux_browser_libs_download: {
220
228
  category: 'runtime-delivery',
221
229
  destination:
@@ -658,7 +666,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
658
666
  },
659
667
  "packages/peach-engine/src/settings/persistence.ts :: fetch :: '/__sootsim/shared-config'":
660
668
  { category: 'same_origin_runtime', count: 1 },
661
- 'packages/peachsim/cli/app-fonts.ts :: fetch :: `${origin}/`': {
669
+ 'packages/peachsim/src/metro-project-root.ts :: fetch :: `${origin}/`': {
662
670
  category: 'local_development',
663
671
  count: 1,
664
672
  },
@@ -791,7 +799,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
791
799
  },
792
800
  'packages/peach-engine/src/components/native-ui/ShareSheetView.tsx :: fetch-alias :: `/__fetch-proxy?url=${encodeURIComponent()}`':
793
801
  { category: 'guest_app_network', count: 1 },
794
- 'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: `/__fetch-proxy?url=${encodeURIComponent()}`':
802
+ 'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: `${pageOrigin}/__fetch-proxy?url=${encodeURIComponent()}`':
795
803
  { category: 'guest_app_network', count: 1 },
796
804
  'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: targetUrl': {
797
805
  category: 'guest_app_network',
@@ -839,7 +847,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
839
847
  category: 'guest_app_network',
840
848
  count: 1,
841
849
  },
842
- 'packages/peachsim/cli/app-fonts.ts :: fetch :: `${origin}/status`': {
850
+ 'packages/peachsim/src/metro-project-root.ts :: fetch :: `${origin}/status`': {
843
851
  category: 'local_development',
844
852
  count: 1,
845
853
  },
@@ -5,6 +5,7 @@
5
5
 
6
6
  import { createHash } from 'node:crypto'
7
7
  import { format, inspect } from 'node:util'
8
+ import { PEACH_CONFIG_QUERY_PARAM } from '../src/config'
8
9
 
9
10
  // the commands that print only through this process's console and streams.
10
11
  // anything else may hand its output to a child process, which no wrapper here
@@ -45,7 +46,7 @@ const PAIR = new RegExp(
45
46
  'g',
46
47
  )
47
48
  const STRING_TOKEN = new RegExp(STRING, 'g')
48
- const QUERY_PAIR = /([?&;]([\w.%-]+)=)([^&#\s"']+)/g
49
+ const QUERY_PAIR = /([?&;]([\w.%-]+)=)([^&#\s"'\\]+)/g
49
50
  const HEADER_LINE = /^(\s*([\w-]+)\s*:\s+)(\S.*)$/gm
50
51
  const MASKED = /^<redacted:[0-9a-f]{4}>$/
51
52
 
@@ -63,10 +64,10 @@ function maskQuoted(quoted: string): string {
63
64
  // a string can carry a document of its own: json escaped inside a json string,
64
65
  // or json inside a js string. its decoded contents are redacted and encoded
65
66
  // back the same way; each level is shorter, so this ends.
66
- function redactString(quoted: string): string {
67
+ function redactString(quoted: string, configurationOnly: boolean): string {
67
68
  if (quoted.startsWith("'")) {
68
69
  const inner = quoted.slice(1, -1)
69
- const redacted = redactForSharing(inner)
70
+ const redacted = redactText(inner, configurationOnly)
70
71
  return redacted === inner ? quoted : `'${redacted}'`
71
72
  }
72
73
  let decoded: string
@@ -75,7 +76,7 @@ function redactString(quoted: string): string {
75
76
  } catch {
76
77
  decoded = quoted.slice(1, -1).replace(/\\(["\\/])/g, '$1')
77
78
  }
78
- const redacted = redactForSharing(decoded)
79
+ const redacted = redactText(decoded, configurationOnly)
79
80
  return redacted === decoded ? quoted : JSON.stringify(redacted)
80
81
  }
81
82
 
@@ -95,33 +96,57 @@ function redactPair(
95
96
  quotedName: string | undefined,
96
97
  bareName: string,
97
98
  value: string,
99
+ configurationOnly: boolean,
98
100
  ): string {
99
- if (!SECRET_NAME.test(quotedName ?? bareName)) {
101
+ const name = quotedName ?? bareName
102
+ if (name === PEACH_CONFIG_QUERY_PARAM) return `${prefix}"[redacted]"`
103
+ if (configurationOnly || !SECRET_NAME.test(name)) {
100
104
  if (!/^["'[]/.test(value)) return pair
101
105
  const inner = value.startsWith('[')
102
- ? value.replace(STRING_TOKEN, redactString)
103
- : redactString(value)
106
+ ? value.replace(STRING_TOKEN, (quoted) => redactString(quoted, configurationOnly))
107
+ : redactString(value, configurationOnly)
104
108
  return inner === value ? pair : `${prefix}${inner}`
105
109
  }
106
110
  if (value.startsWith('[')) return `${prefix}${value.replace(STRING_TOKEN, maskQuoted)}`
107
111
  return `${prefix}${/^["']/.test(value) ? maskQuoted(value) : `"${mask(value)}"`}`
108
112
  }
109
113
 
114
+ // configuration is always private, including arbitrary env names. share the
115
+ // string/query traversal with optional account redaction so nested encodings
116
+ // receive the same policy before persistence and when printing launch urls.
117
+ export function redactConfigurationForDiagnostics(text: string): string {
118
+ return redactText(text, true)
119
+ }
120
+
110
121
  export function redactForSharing(text: string): string {
111
- return text
112
- .replace(JWT, mask)
113
- .replace(GOOGLE_API_KEY, mask)
114
- .replace(BEARER, (match, scheme: string) => `${scheme} ${mask(match)}`)
115
- .replace(PAIR, redactPair)
122
+ return redactText(text, false)
123
+ }
124
+
125
+ function redactText(text: string, configurationOnly: boolean): string {
126
+ if (!configurationOnly) {
127
+ text = text
128
+ .replace(JWT, mask)
129
+ .replace(GOOGLE_API_KEY, mask)
130
+ .replace(BEARER, (match, scheme: string) => `${scheme} ${mask(match)}`)
131
+ }
132
+ const redacted = text
133
+ .replace(PAIR, (pair, prefix, quotedName, bareName, value) =>
134
+ redactPair(pair, prefix, quotedName, bareName, value, configurationOnly),
135
+ )
116
136
  .replace(QUERY_PAIR, (pair, prefix: string, name: string, value: string) => {
117
- if (SECRET_NAME.test(decodeOrSelf(name))) return `${prefix}${mask(value)}`
137
+ const decodedName = decodeOrSelf(name)
138
+ if (decodedName === PEACH_CONFIG_QUERY_PARAM) return `${prefix}%5Bredacted%5D`
139
+ if (!configurationOnly && SECRET_NAME.test(decodedName))
140
+ return `${prefix}${mask(value)}`
118
141
  // a launch url can carry a whole config object, or another url with its
119
142
  // own query, as one encoded value; each decode is shorter, so this ends.
120
143
  if (!/%[0-9a-f]{2}/i.test(value)) return pair
121
144
  const decoded = decodeOrSelf(value)
122
- const redacted = redactForSharing(decoded)
145
+ const redacted = redactText(decoded, configurationOnly)
123
146
  return redacted === decoded ? pair : `${prefix}${encodeURIComponent(redacted)}`
124
147
  })
148
+ if (configurationOnly) return redacted
149
+ return redacted
125
150
  .replace(HEADER_LINE, (line, prefix: string, name: string, value: string) =>
126
151
  SECRET_NAME.test(name) ? `${prefix}${mask(value)}` : line,
127
152
  )
@@ -106,7 +106,10 @@ export async function stopAccountRemoteSimulator(
106
106
  })
107
107
  await deleteCloudBox({
108
108
  connectUrl: cloudBoxConnectUrl(reference.endpoint, reference.boxId),
109
- accessToken: account.authorization.replace(/^Bearer /, ''),
109
+ authority: {
110
+ kind: 'account',
111
+ credential: account.authorization.replace(/^Bearer /, ''),
112
+ },
110
113
  })
111
114
  return { simId: sim.simId }
112
115
  }
@@ -1,7 +1,7 @@
1
1
  import { writeFile } from 'node:fs/promises'
2
2
  import { createRequire } from 'node:module'
3
- import { readSceneRecordingUpload } from 'peach-engine/remote-stream/scene-recording'
4
3
  import { launchReapedChrome } from '../../../scripts/lib/reap-browser'
4
+ import { getCliRuntime } from '../src/cli-runtime.ts'
5
5
  import {
6
6
  ensurePlaywrightBrowser,
7
7
  provisionPlaywright,
@@ -19,7 +19,10 @@ export async function renderSceneToVideo(options: {
19
19
  renderTimeMs: number
20
20
  sizeBytes: number
21
21
  }> {
22
- const { header } = await readSceneRecordingUpload(options.scene)
22
+ const { header } =
23
+ await getCliRuntime().remote_stream_scene_recording.readSceneRecordingUpload(
24
+ options.scene,
25
+ )
23
26
  const resolved = await provisionPlaywright()
24
27
  const installed = await ensurePlaywrightBrowser(resolved, true)
25
28
  if (!installed.ok) throw new Error(installed.message)