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
@@ -0,0 +1,107 @@
1
+ // auto-generate CLI flag definitions from the settings schema
2
+
3
+ import {
4
+ settingsSchema,
5
+ isSettingKey,
6
+ type SettingKey,
7
+ type SettingsValues,
8
+ } from './settingsContract.ts'
9
+
10
+ export interface FlagDef {
11
+ name: string // --flag-name
12
+ short?: string // -f
13
+ key: SettingKey
14
+ type: 'string' | 'number' | 'boolean'
15
+ description: string
16
+ options?: readonly string[]
17
+ default: any
18
+ }
19
+
20
+ // build flag definitions from schema — only settings with cliFlag defined
21
+ const _flags: FlagDef[] = []
22
+ for (const [key, def] of Object.entries(settingsSchema)) {
23
+ if (!def.cliFlag || !isSettingKey(key)) continue
24
+ _flags.push({
25
+ name: `--${def.cliFlag}`,
26
+ short: def.cliFlagShort ? `-${def.cliFlagShort}` : undefined,
27
+ key,
28
+ type: def.type === 'enum' ? 'string' : def.type,
29
+ description: def.description,
30
+ options: def.options,
31
+ default: def.default,
32
+ })
33
+ }
34
+
35
+ export const cliFlags: readonly FlagDef[] = _flags
36
+
37
+ /** parse CLI args and extract settings overrides */
38
+ export function parseSettingsFlags(args: string[]): {
39
+ settings: Partial<SettingsValues>
40
+ remaining: string[]
41
+ } {
42
+ const settings: Record<string, any> = {}
43
+ const remaining: string[] = []
44
+ let i = 0
45
+
46
+ while (i < args.length) {
47
+ const arg = args[i]
48
+
49
+ // stop at -- separator
50
+ if (arg === '--') {
51
+ remaining.push(...args.slice(i))
52
+ break
53
+ }
54
+
55
+ const flag = cliFlags.find((f) => f.name === arg || f.short === arg)
56
+ if (flag) {
57
+ if (flag.type === 'boolean') {
58
+ settings[flag.key] = true
59
+ i++
60
+ } else {
61
+ const val = args[i + 1]
62
+ if (val === undefined) {
63
+ remaining.push(arg)
64
+ i++
65
+ continue
66
+ }
67
+ if (flag.type === 'number') {
68
+ const num = Number(val)
69
+ if (Number.isNaN(num)) {
70
+ remaining.push(arg, val)
71
+ i += 2
72
+ continue
73
+ }
74
+ settings[flag.key] = num
75
+ } else {
76
+ // validate enum values
77
+ if (flag.options && !flag.options.includes(val)) {
78
+ console.error(
79
+ ` warning: invalid value "${val}" for ${arg} (expected: ${flag.options.join('|')})`,
80
+ )
81
+ i += 2
82
+ continue
83
+ }
84
+ settings[flag.key] = val
85
+ }
86
+ i += 2
87
+ }
88
+ } else {
89
+ remaining.push(arg)
90
+ i++
91
+ }
92
+ }
93
+
94
+ return { settings, remaining }
95
+ }
96
+
97
+ /** format flag list for --help output */
98
+ export function formatFlagHelp(): string {
99
+ const lines: string[] = []
100
+ for (const flag of cliFlags) {
101
+ const nameStr = flag.short ? `${flag.short}, ${flag.name}` : ` ${flag.name}`
102
+ const optStr = flag.options ? ` [${flag.options.join('|')}]` : ''
103
+ const defStr = flag.default !== undefined ? ` (default: ${flag.default})` : ''
104
+ lines.push(` ${nameStr.padEnd(24)}${flag.description}${optStr}${defStr}`)
105
+ }
106
+ return lines.join('\n')
107
+ }
@@ -0,0 +1,609 @@
1
+ import {
2
+ DEFAULT_PROFILER_CATEGORIES,
3
+ formatProfilerCategories,
4
+ } from '@peach/globals/profiler'
5
+ import {
6
+ SOOTSIM_AMBIENT_GLOW_LEVELS,
7
+ SOOTSIM_RENDER_RESOLUTION_LEVELS,
8
+ SOOTSIM_STAGE_BACKGROUNDS,
9
+ type SootSimAmbientGlowLevel,
10
+ type SootSimRenderResolution,
11
+ type SootSimStageBackground,
12
+ } from 'peachsim/menu'
13
+ import {
14
+ type DeviceModel,
15
+ type DevicePosture,
16
+ type LandscapeSide,
17
+ listDeviceModels,
18
+ DEFAULT_DEVICE,
19
+ } from './device-catalog.ts'
20
+ import { DEFAULT_REACT_NATIVE_CONFIGURATION } from './reactNativeConfigurationContract.ts'
21
+ import {
22
+ BACKGROUND_PRESET_NAMES,
23
+ POSE_PRESET_NAMES,
24
+ SCREENSHOT_CANVAS_NAMES,
25
+ TEXT_PRESET_NAMES,
26
+ type BackgroundPresetName,
27
+ type PosePresetName,
28
+ type ScreenshotCanvasName,
29
+ type TextPresetName,
30
+ } from './screenshots/preset-names.ts'
31
+
32
+ export type SettingType = 'string' | 'number' | 'boolean' | 'enum'
33
+
34
+ export interface SettingDef<T = any> {
35
+ type: SettingType
36
+ default: T
37
+ description: string
38
+ cliFlag?: string // --flag-name (omit for settings not exposed as CLI flags)
39
+ cliFlagShort?: string // single-char shorthand like -d
40
+ options?: readonly string[] // for enum type
41
+ group: SettingGroup
42
+ validate?: (value: T) => boolean
43
+ }
44
+
45
+ export type SettingGroup =
46
+ | 'device'
47
+ | 'appearance'
48
+ | 'network'
49
+ | 'locale'
50
+ | 'simulator'
51
+ | 'privacy'
52
+ | 'agent'
53
+
54
+ export type AgentProvider = 'codex' | 'claude'
55
+
56
+ export type A11yMode = 'off' | 'delayed' | 'active'
57
+
58
+ export type A11yDepth = 'shallow' | 'deep'
59
+
60
+ export type ColorScheme = 'light' | 'dark' | 'auto'
61
+
62
+ // the glow's strength lives on the public menu protocol so the menus, the
63
+ // electron shared config and the hosts that seed it all read one definition.
64
+ export type AmbientGlowLevel = SootSimAmbientGlowLevel
65
+
66
+ // the render resolution level lives on the same protocol for the same reason.
67
+ export type RenderResolution = SootSimRenderResolution
68
+
69
+ // and the stage background, for the same reason.
70
+ export type StageBackground = SootSimStageBackground
71
+
72
+ export type NetworkCondition = 'wifi' | 'lte' | 'fast-3g' | 'slow-3g' | 'offline'
73
+
74
+ export type Orientation = 'portrait' | 'landscape'
75
+
76
+ // all settings
77
+ export interface SettingsValues {
78
+ // device
79
+ deviceModel: DeviceModel
80
+ posture: DevicePosture
81
+ orientation: Orientation
82
+ landscapeSide: LandscapeSide
83
+ // portrayed os version overriding the device profile; empty means the
84
+ // profile truth. boot-pinned only (?osVersion=), never persisted
85
+ osVersionOverride: string
86
+ // settings > general > keyboard > predictive text (TIPreferences
87
+ // KeyboardPrediction); off hides the QuickType lane above the keys
88
+ predictiveText: boolean
89
+ // appearance
90
+ colorScheme: ColorScheme
91
+ reduceMotion: boolean
92
+ boldText: boolean
93
+ fontSize: number
94
+ largerAccessibilitySizes: boolean
95
+ reduceTransparency: boolean
96
+ // settings > accessibility > display & text size > increase contrast
97
+ // (UIAccessibilityDarkerSystemColorsEnabled)
98
+ increaseContrast: boolean
99
+ // display & text size > show borders (UIAccessibilityButtonShapesEnabled)
100
+ showBorders: boolean
101
+ // display & text size > on/off labels (_UIAccessibilityIsOnOffSwitchLabelsEnabled)
102
+ onOffLabels: boolean
103
+ // display & text size > differentiate without color
104
+ // (UIAccessibilityShouldDifferentiateWithoutColor)
105
+ differentiateWithoutColor: boolean
106
+ // display & text size > smart invert (UIAccessibilityIsInvertColorsEnabled)
107
+ smartInvert: boolean
108
+ // motion > prefer cross-fade transitions. the row shows only while reduce
109
+ // motion is on, and UIAccessibilityPrefersCrossFadeTransitions reads both
110
+ preferCrossFadeTransitions: boolean
111
+ // settings > appearance > liquid glass: 0 most clear, 1 most tinted
112
+ glassTintAmount: number
113
+ // network
114
+ networkCondition: NetworkCondition
115
+ // locale
116
+ language: string
117
+ region: string
118
+ // simulator
119
+ renderDensity: number
120
+ renderResolution: RenderResolution
121
+ slowAnimations: boolean
122
+ // the Performance pane's chosen recording categories, comma separated
123
+ profilerCategories: string
124
+ showTouches: boolean
125
+ showFrame: boolean
126
+ showMenuBar: boolean
127
+ showRail: boolean
128
+ agentIndicator: boolean
129
+ solidWindow: boolean
130
+ ambientGlow: AmbientGlowLevel
131
+ stageBackground: StageBackground
132
+ stageChecker: boolean
133
+ screenshotMode: boolean
134
+ screenshotCanvasEditing: boolean
135
+ threeMode: boolean
136
+ threeRecordingEditor: boolean
137
+ screenshotCanvas: ScreenshotCanvasName
138
+ screenshotBackground: BackgroundPresetName
139
+ screenshotText: TextPresetName
140
+ screenshotPose: PosePresetName
141
+ screenshotDynamicSize: boolean
142
+ showStatusBar: boolean
143
+ showHomeIndicator: boolean
144
+ alwaysShowLiveWebViews: boolean
145
+ a11yMode: A11yMode
146
+ a11yDepth: A11yDepth
147
+ inspectMode: boolean
148
+ // privacy
149
+ productAnalytics: boolean
150
+ crashReports: boolean
151
+ sendToBoxCarryAuth: boolean
152
+ // agent
153
+ agentProvider: AgentProvider
154
+ }
155
+
156
+ export type SettingKey = keyof SettingsValues
157
+
158
+ // these values belong to the simulated device. erase-all resets them while
159
+ // preserving simulator-app preferences such as bezels, rail, and privacy controls.
160
+ export const SIMULATED_DEVICE_SETTING_KEYS = [
161
+ 'predictiveText',
162
+ 'colorScheme',
163
+ 'reduceMotion',
164
+ 'boldText',
165
+ 'fontSize',
166
+ 'largerAccessibilitySizes',
167
+ 'glassTintAmount',
168
+ 'reduceTransparency',
169
+ 'increaseContrast',
170
+ 'showBorders',
171
+ 'onOffLabels',
172
+ 'differentiateWithoutColor',
173
+ 'smartInvert',
174
+ 'preferCrossFadeTransitions',
175
+ ] as const satisfies readonly SettingKey[]
176
+
177
+ export const settingsSchema: Record<SettingKey, SettingDef> = {
178
+ // device
179
+ deviceModel: {
180
+ type: 'enum',
181
+ default: DEFAULT_DEVICE,
182
+ description: 'device model to simulate',
183
+ cliFlag: 'device',
184
+ cliFlagShort: 'd',
185
+ options: listDeviceModels(),
186
+ group: 'device',
187
+ },
188
+ posture: {
189
+ type: 'enum',
190
+ default: 'closed',
191
+ description: 'posture for devices that support more than one physical state',
192
+ options: ['closed', 'open'] as const,
193
+ group: 'device',
194
+ },
195
+ orientation: {
196
+ type: 'enum',
197
+ default: 'portrait',
198
+ description: 'screen orientation',
199
+ cliFlag: 'orientation',
200
+ options: ['portrait', 'landscape'] as const,
201
+ group: 'device',
202
+ },
203
+ landscapeSide: {
204
+ type: 'enum',
205
+ default: 'left',
206
+ description: 'which landscape the device turns to: left (clockwise) or right',
207
+ cliFlag: 'landscape-side',
208
+ options: ['left', 'right'] as const,
209
+ group: 'device',
210
+ },
211
+
212
+ osVersionOverride: {
213
+ type: 'string',
214
+ default: '',
215
+ description:
216
+ "os version the device reports instead of its profile's (empty = the profile's version); set per launch with ?osVersion=, never saved",
217
+ group: 'device',
218
+ },
219
+
220
+ predictiveText: {
221
+ type: 'boolean',
222
+ default: true,
223
+ description: 'keyboard predictive text (off hides the QuickType lane)',
224
+ group: 'device',
225
+ },
226
+
227
+ // appearance
228
+ colorScheme: {
229
+ type: 'enum',
230
+ default: 'auto',
231
+ description: 'color scheme (auto follows system preference)',
232
+ cliFlag: 'theme',
233
+ cliFlagShort: 't',
234
+ options: ['light', 'dark', 'auto'] as const,
235
+ group: 'appearance',
236
+ },
237
+ reduceMotion: {
238
+ type: 'boolean',
239
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.reduceMotion,
240
+ description: 'reduce motion',
241
+ group: 'appearance',
242
+ },
243
+ boldText: {
244
+ type: 'boolean',
245
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.boldText,
246
+ description: 'bold text',
247
+ group: 'appearance',
248
+ },
249
+ fontSize: {
250
+ type: 'number',
251
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.fontSize,
252
+ description: 'font size multiplier (1.0 = default)',
253
+ group: 'appearance',
254
+ // android permits continuous font scales; ios settings and capture urls
255
+ // constrain their own inputs to the discrete dynamic type ramp.
256
+ validate: (value: number) => value >= 0.5 && value <= 4,
257
+ },
258
+ largerAccessibilitySizes: {
259
+ type: 'boolean',
260
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.largerAccessibilitySizes,
261
+ description: 'show accessibility categories in the dynamic type size picker',
262
+ group: 'appearance',
263
+ },
264
+ reduceTransparency: {
265
+ type: 'boolean',
266
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.reduceTransparency,
267
+ description: 'reduce transparency',
268
+ group: 'appearance',
269
+ },
270
+ increaseContrast: {
271
+ type: 'boolean',
272
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.increaseContrast,
273
+ description: 'increase contrast',
274
+ group: 'appearance',
275
+ },
276
+ showBorders: {
277
+ type: 'boolean',
278
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.showBorders,
279
+ description: 'show borders on text buttons',
280
+ group: 'appearance',
281
+ },
282
+ onOffLabels: {
283
+ type: 'boolean',
284
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.onOffLabels,
285
+ description: 'on/off labels inside switches',
286
+ group: 'appearance',
287
+ },
288
+ differentiateWithoutColor: {
289
+ type: 'boolean',
290
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.differentiateWithoutColor,
291
+ description: 'differentiate without color',
292
+ group: 'appearance',
293
+ },
294
+ smartInvert: {
295
+ type: 'boolean',
296
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.smartInvert,
297
+ description: 'smart invert',
298
+ group: 'appearance',
299
+ },
300
+ preferCrossFadeTransitions: {
301
+ type: 'boolean',
302
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.preferCrossFadeTransitions,
303
+ description: 'prefer cross-fade transitions while reduce motion is on',
304
+ group: 'appearance',
305
+ },
306
+ // ios persists the slider as com.apple.UIKit UIViewGlassTintAmount in steps
307
+ // of 0.05; with the key absent the material reads the middle.
308
+ glassTintAmount: {
309
+ type: 'number',
310
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.glassTintAmount,
311
+ description: 'liquid glass tint amount (0 most clear, 0.5 default, 1 most tinted)',
312
+ group: 'appearance',
313
+ validate: (value: number) => value >= 0 && value <= 1,
314
+ },
315
+
316
+ // network
317
+ networkCondition: {
318
+ type: 'enum',
319
+ default: 'wifi',
320
+ description: 'simulated network condition',
321
+ cliFlag: 'network',
322
+ options: ['wifi', 'lte', 'fast-3g', 'slow-3g', 'offline'] as const,
323
+ group: 'network',
324
+ },
325
+
326
+ // locale
327
+ language: {
328
+ type: 'string',
329
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.language,
330
+ description: 'language code (ISO 639-1)',
331
+ cliFlag: 'language',
332
+ group: 'locale',
333
+ },
334
+ region: {
335
+ type: 'string',
336
+ default: DEFAULT_REACT_NATIVE_CONFIGURATION.region,
337
+ description: 'region code (ISO 3166-1)',
338
+ cliFlag: 'region',
339
+ group: 'locale',
340
+ },
341
+
342
+ // simulator
343
+ renderDensity: {
344
+ type: 'number',
345
+ default: 0,
346
+ description:
347
+ 'explicit render density in device pixels per point for high-resolution capture (0 = follow the render resolution level)',
348
+ group: 'simulator',
349
+ validate: (v: number) => v === 0 || (v >= 1 && v <= 9),
350
+ },
351
+ renderResolution: {
352
+ type: 'enum',
353
+ default: 'medium',
354
+ description:
355
+ 'how many pixels Peach renders per iphone point (high = device native, medium = 2, low = on-screen pixels capped at native)',
356
+ options: SOOTSIM_RENDER_RESOLUTION_LEVELS,
357
+ group: 'simulator',
358
+ },
359
+ slowAnimations: {
360
+ type: 'boolean',
361
+ default: false,
362
+ description: 'Run simulated app and OS animations at one tenth speed',
363
+ group: 'simulator',
364
+ },
365
+ profilerCategories: {
366
+ type: 'string',
367
+ default: formatProfilerCategories(DEFAULT_PROFILER_CATEGORIES),
368
+ description: 'Categories the Performance pane records, comma separated',
369
+ group: 'simulator',
370
+ },
371
+ showTouches: {
372
+ type: 'boolean',
373
+ default: false,
374
+ description: 'show touch indicators',
375
+ cliFlag: 'show-touches',
376
+ group: 'simulator',
377
+ },
378
+ showFrame: {
379
+ type: 'boolean',
380
+ default: true,
381
+ description: 'show device frame',
382
+ cliFlag: 'frame',
383
+ group: 'simulator',
384
+ },
385
+ showMenuBar: {
386
+ type: 'boolean',
387
+ default: true,
388
+ description: 'keep the menu bar visible instead of revealing it at the top edge',
389
+ group: 'simulator',
390
+ },
391
+ showRail: {
392
+ type: 'boolean',
393
+ default: true,
394
+ description: 'keep the rail visible instead of revealing it on hover',
395
+ group: 'simulator',
396
+ },
397
+ agentIndicator: {
398
+ type: 'boolean',
399
+ default: true,
400
+ description:
401
+ 'show the connected agent indicator over the device while a CLI or agent drives it',
402
+ cliFlag: 'agent-indicator',
403
+ group: 'simulator',
404
+ },
405
+ solidWindow: {
406
+ type: 'boolean',
407
+ default: false,
408
+ description:
409
+ 'desktop app: always use the solid, freely-resizable window instead of the device-shaped transparent one (3d mode uses it regardless)',
410
+ group: 'simulator',
411
+ },
412
+ ambientGlow: {
413
+ type: 'enum',
414
+ default: 'off',
415
+ description:
416
+ "bleed the app's own edge colors outward behind the device, like bias lighting behind a TV (off, soft, full)",
417
+ options: SOOTSIM_AMBIENT_GLOW_LEVELS,
418
+ cliFlag: 'ambient-glow',
419
+ group: 'simulator',
420
+ },
421
+ stageBackground: {
422
+ type: 'enum',
423
+ default: 'system',
424
+ description:
425
+ "the stage behind the device: system follows the computer's appearance (white in light mode, black in dark), or light, dark or gray",
426
+ options: SOOTSIM_STAGE_BACKGROUNDS,
427
+ cliFlag: 'stage-background',
428
+ group: 'simulator',
429
+ },
430
+ stageChecker: {
431
+ type: 'boolean',
432
+ default: true,
433
+ description: 'a faint checker pattern on the stage behind the device, under the glow',
434
+ group: 'simulator',
435
+ },
436
+ screenshotMode: {
437
+ type: 'boolean',
438
+ default: false,
439
+ description: 'show screenshot composition mode in the browser shell',
440
+ group: 'simulator',
441
+ },
442
+ screenshotCanvasEditing: {
443
+ type: 'boolean',
444
+ default: false,
445
+ description:
446
+ 'experimental figma-style slide editing: draggable copy block, drop-in image layers (owner review pending)',
447
+ group: 'simulator',
448
+ },
449
+ threeMode: {
450
+ type: 'boolean',
451
+ default: false,
452
+ description: 'show the experimental 3d device stage in the browser shell',
453
+ group: 'simulator',
454
+ },
455
+ threeRecordingEditor: {
456
+ type: 'boolean',
457
+ default: false,
458
+ description: 'dock the 3d recording editor in the 3d stage (toggled from its rail)',
459
+ group: 'simulator',
460
+ },
461
+ screenshotCanvas: {
462
+ type: 'enum',
463
+ default: 'iphone-6-9',
464
+ description: 'target app-store canvas preset for screenshot mode',
465
+ options: SCREENSHOT_CANVAS_NAMES,
466
+ group: 'simulator',
467
+ },
468
+ screenshotBackground: {
469
+ type: 'enum',
470
+ default: 'dark',
471
+ description: 'background preset rendered inside the screenshot canvas',
472
+ options: BACKGROUND_PRESET_NAMES,
473
+ group: 'simulator',
474
+ },
475
+ screenshotText: {
476
+ type: 'enum',
477
+ default: 'bold-top',
478
+ description: 'text layout preset for the screenshot canvas',
479
+ options: TEXT_PRESET_NAMES,
480
+ group: 'simulator',
481
+ },
482
+ screenshotPose: {
483
+ type: 'enum',
484
+ default: 'straight',
485
+ description: 'device pose preset inside the screenshot canvas',
486
+ options: POSE_PRESET_NAMES,
487
+ group: 'simulator',
488
+ },
489
+ screenshotDynamicSize: {
490
+ type: 'boolean',
491
+ default: false,
492
+ description:
493
+ 'let the screenshot canvas rect fit available space (off = pin to exact preset pixels)',
494
+ group: 'simulator',
495
+ },
496
+ showStatusBar: {
497
+ type: 'boolean',
498
+ default: true,
499
+ description: 'show status bar',
500
+ group: 'simulator',
501
+ },
502
+ showHomeIndicator: {
503
+ type: 'boolean',
504
+ default: true,
505
+ description: 'show home indicator',
506
+ group: 'simulator',
507
+ },
508
+ alwaysShowLiveWebViews: {
509
+ type: 'boolean',
510
+ default: false,
511
+ description: 'always render WebViews as live browser views',
512
+ group: 'simulator',
513
+ },
514
+ a11yMode: {
515
+ type: 'enum',
516
+ default: 'delayed',
517
+ description: 'accessibility tree sync mode (off, delayed=100ms, active=30ms)',
518
+ options: ['off', 'delayed', 'active'] as const,
519
+ group: 'simulator',
520
+ },
521
+ a11yDepth: {
522
+ type: 'enum',
523
+ default: 'deep',
524
+ description: 'accessibility tree structure depth (shallow or deep)',
525
+ options: ['shallow', 'deep'] as const,
526
+ group: 'simulator',
527
+ },
528
+ inspectMode: {
529
+ type: 'boolean',
530
+ default: false,
531
+ description: 'inspect mode',
532
+ group: 'simulator',
533
+ },
534
+
535
+ // privacy
536
+ productAnalytics: {
537
+ type: 'boolean',
538
+ default: true,
539
+ description: 'send bounded product usage analytics',
540
+ group: 'privacy',
541
+ },
542
+ crashReports: {
543
+ type: 'boolean',
544
+ default: true,
545
+ description: 'send anonymous crash reports',
546
+ group: 'privacy',
547
+ },
548
+ sendToBoxCarryAuth: {
549
+ type: 'boolean',
550
+ default: true,
551
+ description:
552
+ 'send to box carries the signed-in session into the box it creates (off = the app boots signed out)',
553
+ group: 'privacy',
554
+ },
555
+
556
+ // agent — default ai agent used by the prompt bar's auto-attach + startSession.
557
+ agentProvider: {
558
+ type: 'enum',
559
+ default: 'codex',
560
+ description: 'ai agent used by the peach agent prompt bar',
561
+ options: ['codex', 'claude'] as const,
562
+ group: 'agent',
563
+ },
564
+ }
565
+
566
+ const SETTING_VALUE_TYPES = {
567
+ string: 'string',
568
+ enum: 'string',
569
+ number: 'number',
570
+ boolean: 'boolean',
571
+ } as const satisfies Record<SettingType, string>
572
+
573
+ // the one gate for every write and load: a value of the wrong type (an object
574
+ // written into language) would otherwise reach every app's configuration and
575
+ // persist across launches.
576
+ export function isValidSettingValue(key: SettingKey, value: unknown): boolean {
577
+ const def = settingsSchema[key]
578
+ if (!def || typeof value !== SETTING_VALUE_TYPES[def.type]) return false
579
+ if (def.options && !def.options.some((option) => option === value)) return false
580
+ return !def.validate || def.validate(value)
581
+ }
582
+
583
+ export const DEFAULT_SIMULATED_DEVICE_SETTINGS = {
584
+ predictiveText: settingsSchema.predictiveText.default,
585
+ colorScheme: settingsSchema.colorScheme.default,
586
+ reduceMotion: settingsSchema.reduceMotion.default,
587
+ boldText: settingsSchema.boldText.default,
588
+ fontSize: settingsSchema.fontSize.default,
589
+ largerAccessibilitySizes: settingsSchema.largerAccessibilitySizes.default,
590
+ glassTintAmount: settingsSchema.glassTintAmount.default,
591
+ reduceTransparency: settingsSchema.reduceTransparency.default,
592
+ increaseContrast: settingsSchema.increaseContrast.default,
593
+ showBorders: settingsSchema.showBorders.default,
594
+ onOffLabels: settingsSchema.onOffLabels.default,
595
+ differentiateWithoutColor: settingsSchema.differentiateWithoutColor.default,
596
+ smartInvert: settingsSchema.smartInvert.default,
597
+ preferCrossFadeTransitions: settingsSchema.preferCrossFadeTransitions.default,
598
+ } satisfies Pick<SettingsValues, (typeof SIMULATED_DEVICE_SETTING_KEYS)[number]>
599
+
600
+ export function isSettingKey(key: string): key is SettingKey {
601
+ return Object.hasOwn(settingsSchema, key)
602
+ }
603
+
604
+ export function getSettingsByGroup(group: SettingGroup): [SettingKey, SettingDef][] {
605
+ return Object.entries(settingsSchema).filter(
606
+ (entry): entry is [SettingKey, SettingDef] =>
607
+ isSettingKey(entry[0]) && entry[1].group === group,
608
+ )
609
+ }