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.
- package/README.md +12 -0
- package/cli/app-bundle-resources.ts +57 -0
- package/cli/app-catalog.ts +1 -1
- package/cli/app-fonts.ts +11 -80
- package/cli/app-splash.ts +18 -12
- package/cli/bridge-flow-runner.ts +11 -7
- package/cli/cloud-client.ts +10 -13
- package/cli/command-registry.ts +13 -4
- package/cli/commands/box.ts +4 -4
- package/cli/commands/control.ts +105 -53
- package/cli/commands/coverage-parser.ts +67 -0
- package/cli/commands/coverage.ts +550 -0
- package/cli/commands/debug.ts +9 -18
- package/cli/commands/desktop.ts +19 -7
- package/cli/commands/device.ts +14 -9
- package/cli/commands/guest-host.ts +6 -10
- package/cli/commands/inspect/core.ts +81 -17
- package/cli/commands/inspect.ts +13 -8
- package/cli/commands/kotlin.ts +2 -2
- package/cli/commands/maestro-compare.ts +1 -1
- package/cli/commands/platform.ts +20 -11
- package/cli/commands/preview.ts +16 -18
- package/cli/commands/runtime.ts +3 -2
- package/cli/commands/screenshot-layers.ts +1 -1
- package/cli/commands/screenshot.ts +1 -1
- package/cli/commands/serve.ts +5 -1
- package/cli/commands/support.ts +4 -4
- package/cli/commands/three-mode.ts +22 -15
- package/cli/commands/upload.ts +44 -45
- package/cli/current-sim.ts +38 -0
- package/cli/desktop-companion.ts +36 -8
- package/cli/device-option.ts +1 -1
- package/cli/drivers/playwright.ts +40 -0
- package/cli/drivers/types.ts +4 -0
- package/cli/help-core.ts +1 -1
- package/cli/internal-child.ts +2 -1
- package/cli/main.ts +9 -3
- package/cli/outbound-endpoints.ts +15 -5
- package/cli/output-redaction.ts +39 -14
- package/cli/remote-simulators.ts +4 -1
- package/cli/scene-video.ts +5 -2
- package/cli/send-to-box.ts +7 -10
- package/cli/telemetry.ts +1 -1
- package/cli/ws-bridge.ts +8 -1
- package/detox/attempt-events.cjs +3 -1
- package/detox/attempt-events.d.cts +1 -1
- package/detox/expectations.ts +108 -99
- package/detox/frame-offset.d.mts +6 -0
- package/detox/frame-offset.mjs +35 -0
- package/detox/gestures.ts +6 -18
- package/detox/index.ts +169 -101
- package/detox/jest-preset.cjs +1 -3
- package/detox/jest-transform.cjs +4 -0
- package/detox/matchers.ts +3 -0
- package/detox/motion-change.cjs +52 -118
- package/detox/motion-change.d.cts +6 -27
- package/detox/motion-leg-starts.cjs +20 -0
- package/detox/motion-leg-starts.d.cts +8 -0
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +3 -3
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +65 -1
- package/dist-lib/bridge-contract-input.mjs +63 -1
- package/dist-lib/bridge-contract.cjs +19 -1
- package/dist-lib/bridge-contract.mjs +17 -1
- package/dist-lib/bundle-channel.cjs +38332 -14940
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud-test-args.cjs +1 -1
- package/dist-lib/cloud-test-args.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/config.mjs +5 -3
- package/dist-lib/detox/index.cjs +1247 -4511
- package/dist-lib/detox/jest-preset.cjs +1 -3
- package/dist-lib/detox/jest-transform.cjs +4 -0
- package/dist-lib/dev-bundle-resolution.cjs +28 -24
- package/dist-lib/expo-swift-bundle.cjs +35243 -13172
- package/dist-lib/expo-swift-metadata.cjs +1 -1
- package/dist-lib/expo-swift-metadata.mjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +45285 -63163
- package/dist-lib/host/fetch-proxy-handler.cjs +3544 -11
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1997 -2069
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/kotlin-host.cjs +2 -2
- package/dist-lib/menu.cjs +14 -6
- package/dist-lib/menu.mjs +14 -6
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +468 -563
- package/dist-lib/native-app-identity-project.cjs +128 -292
- package/dist-lib/native-app-identity-project.mjs +1262 -51
- package/dist-lib/native-app-identity.cjs +8 -3
- package/dist-lib/native-app-identity.mjs +8 -3
- package/dist-lib/native-firebase-metadata.cjs +1 -1
- package/dist-lib/native-firebase-metadata.mjs +1 -1
- package/dist-lib/plist.cjs +2 -244
- package/dist-lib/plist.mjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/public-origins-lib-esm.json +290 -0
- package/dist-lib/public-origins-lib-static.json +1 -0
- package/dist-lib/public-origins-lib.json +1852 -0
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +14 -253
- package/dist-lib/sdk.cjs +84 -16
- package/dist-lib/sdk.mjs +82 -15
- package/dist-lib/skills.cjs +51248 -75450
- package/dist-lib/swift-compile.cjs +26154 -1245
- package/dist-lib/swift-compile.mjs +26151 -1230
- package/dist-lib/swift-package.cjs +79 -1
- package/dist-lib/swift-package.mjs +75 -1
- package/dist-lib/swift-submit.cjs +1 -1
- package/dist-lib/swift-submit.mjs +1 -1
- package/dist-lib/swift-toolchain.cjs +1 -1
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite-swift.cjs +34394 -12323
- package/dist-lib/vite.cjs +373 -298
- package/dist-lib/worklet-executable.cjs +1 -1
- package/dist-lib/worklet-executable.mjs +1 -1
- package/dist-types/packages/peach-compat/src/engine-config.d.ts +2 -0
- package/dist-types/packages/peach-compat/src/stubs/form-sheet-spring.d.ts +9 -0
- package/dist-types/packages/peach-compat/src/stubs/native-evaluation-lease.d.ts +47 -0
- package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-cookies.d.ts +113 -0
- package/dist-types/packages/peach-compat/src/stubs/native-seams/react-native-gesture-handler.d.ts +154 -0
- package/dist-types/packages/peach-compat/src/stubs/screen-transition-math.d.ts +756 -0
- package/dist-types/packages/peach-compat/src/stubs/transition-scalar.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/billing/plans.d.ts +64 -0
- package/dist-types/packages/peach-engine/src/browser-page-target.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/bundle-platform-url.d.ts +3 -0
- package/dist-types/packages/peach-engine/src/capture/browser-accessibility-host.d.ts +3 -0
- package/dist-types/packages/peach-engine/src/capture/browser-composite.d.ts +55 -0
- package/dist-types/packages/peach-engine/src/capture/browserAccessibilityContract.d.ts +27 -0
- package/dist-types/packages/peach-engine/src/capture/nativeScreenCaptureContract.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/cli-companion.d.ts +36 -0
- package/dist-types/packages/peach-engine/src/components/native-ui/webview-frame-bridge.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/config.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/engine/android-stretch-effect.d.ts +57 -0
- package/dist-types/packages/peach-engine/src/engine/animated-driven-style.d.ts +47 -0
- package/dist-types/packages/peach-engine/src/engine/animated-value.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/engine/animated.d.ts +195 -0
- package/dist-types/packages/peach-engine/src/engine/animation-clockContract.d.ts +15 -0
- package/dist-types/packages/peach-engine/src/engine/animation-graph.d.ts +148 -0
- package/dist-types/packages/peach-engine/src/engine/app-catalog-wire.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/engine/app-font-registry.d.ts +87 -0
- package/dist-types/packages/peach-engine/src/engine/attributed-paragraph-paint.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/engine/attributed-paragraph.d.ts +123 -0
- package/dist-types/packages/peach-engine/src/engine/audioContract.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/engine/canvaskit-api.d.ts +93 -0
- package/dist-types/packages/peach-engine/src/engine/canvaskit-renderer.d.ts +216 -0
- package/dist-types/packages/peach-engine/src/engine/config-plugin-fonts.d.ts +40 -0
- package/dist-types/packages/peach-engine/src/engine/config-plugin-splash.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/engine/cull-visibility.d.ts +44 -0
- package/dist-types/packages/peach-engine/src/engine/damage-rect.d.ts +19 -0
- package/dist-types/packages/peach-engine/src/engine/engine-resource.d.ts +6 -0
- package/dist-types/packages/peach-engine/src/engine/expo-manifest.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/engine/fiber-debug-metadata.d.ts +30 -0
- package/dist-types/packages/peach-engine/src/engine/font-config.d.ts +139 -0
- package/dist-types/packages/peach-engine/src/engine/generated/sf-pro-font.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/engine/glass-material.d.ts +31 -0
- package/dist-types/packages/peach-engine/src/engine/host-composite.d.ts +100 -0
- package/dist-types/packages/peach-engine/src/engine/hosted-semantics.d.ts +49 -0
- package/dist-types/packages/peach-engine/src/engine/image-audit.d.ts +70 -0
- package/dist-types/packages/peach-engine/src/engine/image-loader.d.ts +350 -0
- package/dist-types/packages/peach-engine/src/engine/inspect-info.d.ts +27 -0
- package/dist-types/packages/peach-engine/src/engine/inspect-outline.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/engine/inspect-visibility.d.ts +33 -0
- package/dist-types/packages/peach-engine/src/engine/ios-fast-scroll.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/engine/layout-sab.d.ts +43 -0
- package/dist-types/packages/peach-engine/src/engine/liquid-glass-rect.d.ts +23 -0
- package/dist-types/packages/peach-engine/src/engine/liquid-glass-shaders.d.ts +9 -0
- package/dist-types/packages/peach-engine/src/engine/liquid-glass.d.ts +283 -0
- package/dist-types/packages/peach-engine/src/engine/live-object-counts.d.ts +6 -0
- package/dist-types/packages/peach-engine/src/engine/lottie-runtime.d.ts +32 -0
- package/dist-types/packages/peach-engine/src/engine/lottie-types.d.ts +138 -0
- package/dist-types/packages/peach-engine/src/engine/memory-counts.d.ts +27 -0
- package/dist-types/packages/peach-engine/src/engine/metalDirectContract.d.ts +108 -0
- package/dist-types/packages/peach-engine/src/engine/metalShaderContract.d.ts +217 -0
- package/dist-types/packages/peach-engine/src/engine/native-animation-driver.d.ts +112 -0
- package/dist-types/packages/peach-engine/src/engine/native-animation-graph.d.ts +62 -0
- package/dist-types/packages/peach-engine/src/engine/native-layout.d.ts +133 -0
- package/dist-types/packages/peach-engine/src/engine/native-resources.d.ts +26 -0
- package/dist-types/packages/peach-engine/src/engine/nativeReanimatedContract.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/engine/nativeReplayContract.d.ts +64 -0
- package/dist-types/packages/peach-engine/src/engine/node.d.ts +589 -0
- package/dist-types/packages/peach-engine/src/engine/paint-boundary-types.d.ts +112 -0
- package/dist-types/packages/peach-engine/src/engine/paint-boundary.d.ts +57 -0
- package/dist-types/packages/peach-engine/src/engine/portalContract.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/engine/portals.d.ts +20 -0
- package/dist-types/packages/peach-engine/src/engine/render-damage.d.ts +107 -0
- package/dist-types/packages/peach-engine/src/engine/riveContract.d.ts +420 -0
- package/dist-types/packages/peach-engine/src/engine/rn-spring.d.ts +51 -0
- package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +379 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-momentum-math.d.ts +152 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-pan-contacts.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-platform.d.ts +75 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-range.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/engine/scroll-velocity.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/engine/scroll.d.ts +320 -0
- package/dist-types/packages/peach-engine/src/engine/signal.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/engine/snapshot-cache-policy.d.ts +6 -0
- package/dist-types/packages/peach-engine/src/engine/svg-geometry.d.ts +41 -0
- package/dist-types/packages/peach-engine/src/engine/text-attachment-paragraphs.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/engine/text-decoration.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/engine/text-line-break.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/engine/text-paint-receipt.d.ts +98 -0
- package/dist-types/packages/peach-engine/src/engine/text-paragraph.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/engine/text-paragraphContract.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/engine/text-transform.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/engine/types.d.ts +657 -0
- package/dist-types/packages/peach-engine/src/engine/visible-frame.d.ts +54 -0
- package/dist-types/packages/peach-engine/src/engine/webrtcContract.d.ts +74 -0
- package/dist-types/packages/peach-engine/src/graphite-stats-fields.d.ts +184 -0
- package/dist-types/packages/peach-engine/src/guest-import-meta.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/guest-module-overrides.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/ios/app-card-types.d.ts +7 -0
- package/dist-types/packages/peach-engine/src/ios/apps/canvas-map-data.d.ts +177 -0
- package/dist-types/packages/peach-engine/src/ios/aux-home-scene.d.ts +54 -0
- package/dist-types/packages/peach-engine/src/ios/chrome-metrics.d.ts +47 -0
- package/dist-types/packages/peach-engine/src/ios/constants.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/ios/duo-housing.d.ts +37 -0
- package/dist-types/packages/peach-engine/src/ios/home/types.d.ts +29 -0
- package/dist-types/packages/peach-engine/src/ios/home-app-catalog.d.ts +43 -0
- package/dist-types/packages/peach-engine/src/ios/photo-store.d.ts +73 -0
- package/dist-types/packages/peach-engine/src/ios/photoLibraryContract.d.ts +166 -0
- package/dist-types/packages/peach-engine/src/ios/shell-controller-types.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/ios/shell-transition-debug.d.ts +18 -0
- package/dist-types/packages/peach-engine/src/metro-asset-path.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/metro-fingerprint-registry-client.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/metro-fingerprint.d.ts +38 -0
- package/dist-types/packages/peach-engine/src/native-preview-bundle.d.ts +44 -0
- package/dist-types/packages/peach-engine/src/observability/types.d.ts +74 -0
- package/dist-types/packages/peach-engine/src/peach-warm-manifest.d.ts +32 -0
- package/dist-types/packages/peach-engine/src/permissions/app-settings-client.d.ts +25 -0
- package/dist-types/packages/peach-engine/src/permissions/system-permission-types.d.ts +20 -0
- package/dist-types/packages/peach-engine/src/platform/android-back-panel.d.ts +131 -0
- package/dist-types/packages/peach-engine/src/platform/android-gesture-exclusion.d.ts +28 -0
- package/dist-types/packages/peach-engine/src/platform/android-predictive-back.d.ts +33 -0
- package/dist-types/packages/peach-engine/src/platform/system-bars-state.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/playwright-sim-host.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/preview/bundle-layout.d.ts +8 -0
- package/dist-types/packages/peach-engine/src/preview/bundle-variantContract.d.ts +24 -0
- package/dist-types/packages/peach-engine/src/preview/capture-bundle.d.ts +26 -0
- package/dist-types/packages/peach-engine/src/preview/compress-node.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/preview/compress.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/preview/presigned-upload.d.ts +60 -0
- package/dist-types/packages/peach-engine/src/preview/trace.d.ts +144 -0
- package/dist-types/packages/peach-engine/src/preview/upload-protocol.d.ts +152 -0
- package/dist-types/packages/peach-engine/src/profiler/animation-recording-loader.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/profiler/profile-trace.d.ts +4 -0
- package/dist-types/packages/peach-engine/src/react-bridge.d.ts +3 -0
- package/dist-types/packages/peach-engine/src/react-native/AppState.d.ts +45 -0
- package/dist-types/packages/peach-engine/src/react-native/Appearance.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/react-native/framework-colors-data.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/react-native/host-services.d.ts +42 -0
- package/dist-types/packages/peach-engine/src/react-native/layout-animation.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/react-native/platform-colors.d.ts +17 -0
- package/dist-types/packages/peach-engine/src/remote-stream/client-config.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/remote-stream/cloud-display.d.ts +58 -0
- package/dist-types/packages/peach-engine/src/remote-stream/scene-recording.d.ts +45 -0
- package/dist-types/packages/peach-engine/src/render-worker/animated-drive-output.d.ts +35 -0
- package/dist-types/packages/peach-engine/src/render-worker/app-load.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/render-worker/aux-surface-types.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/render-worker/canvaskit-shared.d.ts +42 -0
- package/dist-types/packages/peach-engine/src/render-worker/canvaskit-webgpu.d.ts +434 -0
- package/dist-types/packages/peach-engine/src/render-worker/canvaskit-worker-init.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-backend.d.ts +31 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-gpu.d.ts +202 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-protocol.d.ts +1945 -0
- package/dist-types/packages/peach-engine/src/render-worker/compositor-runtime/scroll-drag-resample.d.ts +44 -0
- package/dist-types/packages/peach-engine/src/render-worker/css-keyframes-drive.d.ts +36 -0
- package/dist-types/packages/peach-engine/src/render-worker/edit-menu-geometry.d.ts +8 -0
- package/dist-types/packages/peach-engine/src/render-worker/engine-resource-relay.d.ts +21 -0
- package/dist-types/packages/peach-engine/src/render-worker/expo-widgetContract.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/render-worker/gesture-seam-protocol.d.ts +152 -0
- package/dist-types/packages/peach-engine/src/render-worker/graph-linked-value.d.ts +29 -0
- package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler-contract.d.ts +49 -0
- package/dist-types/packages/peach-engine/src/render-worker/graphite-pipeline-compiler.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/render-worker/host-service-protocol.d.ts +756 -0
- package/dist-types/packages/peach-engine/src/render-worker/image-lifecycle-event.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/render-worker/image-pixel-contract.d.ts +48 -0
- package/dist-types/packages/peach-engine/src/render-worker/live-frame-mirror.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/render-worker/map-command-channel.d.ts +189 -0
- package/dist-types/packages/peach-engine/src/render-worker/mapNativeContract.d.ts +101 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-dynamic-synchronizable.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-menu-gesture.d.ts +9 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-ui-commandContract.d.ts +23 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-ui-protocol.d.ts +1087 -0
- package/dist-types/packages/peach-engine/src/render-worker/native-widgetContract.d.ts +100 -0
- package/dist-types/packages/peach-engine/src/render-worker/nativeAnimMirrorContract.d.ts +174 -0
- package/dist-types/packages/peach-engine/src/render-worker/nativeSyncReplyContract.d.ts +11 -0
- package/dist-types/packages/peach-engine/src/render-worker/one-native-contentContract.d.ts +54 -0
- package/dist-types/packages/peach-engine/src/render-worker/pointerSampleContract.d.ts +14 -0
- package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +880 -0
- package/dist-types/packages/peach-engine/src/render-worker/reanimated-css-contract.d.ts +63 -0
- package/dist-types/packages/peach-engine/src/render-worker/reanimated-readiness.d.ts +29 -0
- package/dist-types/packages/peach-engine/src/render-worker/resilient-frame-clock.d.ts +22 -0
- package/dist-types/packages/peach-engine/src/render-worker/retained-app-load.d.ts +20 -0
- package/dist-types/packages/peach-engine/src/render-worker/screen-edge-swipe-commit-protocol.d.ts +1 -0
- package/dist-types/packages/peach-engine/src/render-worker/screen-form-sheet-commit-protocol.d.ts +26 -0
- package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror-tenant.d.ts +37 -0
- package/dist-types/packages/peach-engine/src/render-worker/scroll-mirror.d.ts +164 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-event-registry.d.ts +119 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-gesture-regions.d.ts +41 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-protocol.d.ts +603 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-scene-schema.d.ts +101 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-tree-inline-sources.d.ts +13 -0
- package/dist-types/packages/peach-engine/src/render-worker/shell-tree-wire.d.ts +87 -0
- package/dist-types/packages/peach-engine/src/render-worker/test-bridge-protocol.d.ts +47 -0
- package/dist-types/packages/peach-engine/src/render-worker/text-inputContract.d.ts +93 -0
- package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +102 -0
- package/dist-types/packages/peach-engine/src/render-worker/webgpu-frame-transaction.d.ts +292 -0
- package/dist-types/packages/peach-engine/src/render-worker/webgpu-readback-scheduler.d.ts +107 -0
- package/dist-types/packages/peach-engine/src/render-worker/webview-capture-protocol.d.ts +16 -0
- package/dist-types/packages/peach-engine/src/render-worker/worker-input-runtime.d.ts +211 -0
- package/dist-types/packages/peach-engine/src/render-worker/worker-storage.d.ts +33 -0
- package/dist-types/packages/peach-engine/src/render-worker/worklet-runtime.d.ts +987 -0
- package/dist-types/packages/peach-engine/src/render-worker/worklet-sab.d.ts +24 -0
- package/dist-types/packages/peach-engine/src/rolldown-bundle-inventory.d.ts +84 -0
- package/dist-types/packages/peach-engine/src/rolldown-production-fingerprint.d.ts +31 -0
- package/dist-types/packages/peach-engine/src/screenshots/timeline-assets.d.ts +10 -0
- package/dist-types/packages/peach-engine/src/screenshots/tokens.d.ts +9 -0
- package/dist-types/packages/peach-engine/src/settings/devices.d.ts +70 -0
- package/dist-types/packages/peach-engine/src/settings/duo-fold-bus.d.ts +87 -0
- package/dist-types/packages/peach-engine/src/settings/interface-rotation.d.ts +30 -0
- package/dist-types/packages/peach-engine/src/settings/react-native-configuration.d.ts +12 -0
- package/dist-types/packages/peach-engine/src/settings/scene-geometryContract.d.ts +40 -0
- package/dist-types/packages/peach-engine/src/settings/store.d.ts +37 -0
- package/dist-types/packages/peach-engine/src/shell-events.d.ts +203 -0
- package/dist-types/packages/peach-engine/src/shell-intent.d.ts +68 -0
- package/dist-types/packages/peach-engine/src/sootsim-event.d.ts +35 -0
- package/dist-types/packages/peach-engine/src/top-overlay-state.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/web-authentication-automation-host.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/webAuthenticationContract.d.ts +34 -0
- package/dist-types/packages/peach-engine/src/webview-automation-host.d.ts +180 -0
- package/dist-types/packages/peach-engine/src/wireframe-mode.d.ts +16 -0
- package/dist-types/packages/peach-globals/src/frameBreakdownContract.d.ts +16 -0
- package/dist-types/packages/peach-globals/src/index.d.ts +3311 -0
- package/dist-types/packages/peach-globals/src/nativeSurfaceContract.d.ts +76 -0
- package/dist-types/packages/peach-globals/src/pointerSourceEventContract.d.ts +8 -0
- package/dist-types/packages/peach-globals/src/profileTrace.d.ts +11 -0
- package/dist-types/packages/peach-globals/src/profilerContract.d.ts +223 -0
- package/dist-types/packages/peach-kit/src/capabilities.d.ts +721 -0
- package/dist-types/packages/peach-kit/src/internal.d.ts +4 -0
- package/dist-types/packages/peach-kit/src/materials/types.d.ts +27 -0
- package/dist-types/packages/peach-kit/src/materials/uikit-blur-material.d.ts +14 -0
- package/dist-types/packages/peach-kit/src/navigation-types.d.ts +11 -0
- package/dist-types/packages/peach-kit/src/react-bridge.d.ts +53 -0
- package/dist-types/packages/peach-kit/src/runtime.d.ts +26 -0
- package/dist-types/packages/peach-kit/src/ui/hosting-safe-area.d.ts +24 -0
- package/dist-types/packages/peach-kit/src/ui/popover-placement.d.ts +53 -0
- package/dist-types/packages/peach-kit/src/ui/presentationContract.d.ts +17 -0
- package/kotlin/ComposeSources/PeachComposeHost.kt +1 -1
- package/kotlin/JniSources/com/facebook/jni/HybridData.kt +0 -2
- package/kotlin/JniSources/dev/peach/jni/NativeBindings.kt +0 -2
- package/kotlin/JniTransportSources/dev/peach/jni/integration/JniTransport.kt +0 -2
- package/kotlin/README.md +6 -0
- package/package.json +22 -2
- package/runtime-companion.json +1 -0
- package/skills/contrast/SKILL.md +1 -0
- package/src/appBundleResourcesContract.ts +51 -0
- package/src/assetCatalogContract.ts +21 -0
- package/src/backend-origin.ts +3 -1
- package/src/bridge-contract-input.ts +84 -0
- package/src/bridge-contract.ts +35 -3
- package/src/browser-launch-policy.ts +1 -0
- package/src/bundle-channel.mjs +4 -2
- package/src/cli-runtime.ts +55 -0
- package/src/crash-fingerprint.ts +26 -0
- package/src/dev-bundle-resolution.ts +50 -23
- package/src/device-catalog.ts +1159 -0
- package/src/host/bridge-host.ts +20 -37
- package/src/host/browser-pointer.ts +71 -0
- package/src/host/dev-server-package-versions.ts +23 -0
- package/src/host/fetch-proxy-handler.ts +17 -4
- package/src/host/staged-host-files.ts +28 -4
- package/src/installed-package-versions.ts +142 -38
- package/src/kotlin-host.ts +1 -1
- package/src/launchMetadataContract.ts +1 -0
- package/src/menu.ts +12 -4
- package/src/metro-plugin.ts +4 -4
- package/src/metro-project-root.ts +68 -0
- package/src/native-app-identity-project.ts +47 -38
- package/src/nitro-adapter.lock.json +26 -0
- package/src/nitro-adapter.ts +103 -0
- package/src/nitro-bundle.ts +24 -10
- package/src/nitro-compile.ts +33 -51
- package/src/nitro-source.ts +177 -96
- package/src/nitroAdapterContract.ts +217 -0
- package/src/nitroContract.ts +24 -11
- package/src/process-group.ts +41 -34
- package/src/react-bridge-importers.ts +28 -0
- package/src/reactNativeConfigurationContract.ts +36 -0
- package/src/runtime-assets.ts +7 -2
- package/src/runtime-delivery.ts +8 -7
- package/src/runtimePlatformContract.ts +70 -0
- package/src/screenshots/frame-compose.ts +42 -43
- package/src/screenshots/org-deck.ts +9 -4
- package/src/screenshots/preset-names.ts +29 -0
- package/src/screenshots/registry.ts +5 -5
- package/src/screenshots/schema.ts +1 -1
- package/src/screenshots/screenshotContract.ts +971 -0
- package/src/settings-flags.ts +107 -0
- package/src/settingsContract.ts +609 -0
- package/src/storageSnapshotContract.ts +344 -0
- package/src/stub-pattern-matcher.ts +550 -0
- package/src/swift-compile.ts +926 -47
- package/src/swift-compiler-digest.ts +17 -3
- package/src/swift-distribution.lock.json +49 -22
- package/src/swift-host.ts +167 -52
- package/src/swift-objc-compile.ts +86 -26
- package/src/swift-objc-export.ts +532 -0
- package/src/swift-objc-import.ts +769 -0
- package/src/swift-objc-metadata.ts +285 -10
- package/src/swift-objc-sdk.ts +13970 -158
- package/src/swift-objc-standin.ts +137 -1
- package/src/swift-package.ts +94 -0
- package/src/swift-packages.ts +5 -5
- package/src/swift-root-lock.ts +241 -92
- package/src/swift-submit.ts +6 -0
- package/src/swiftContract.ts +99 -0
- package/src/target-matcher.ts +6 -1
- package/src/vite-plugin.ts +14 -40
- package/src/worker-system-chunks.ts +1 -1
- package/src/workerChunkContract.ts +5 -0
- package/src/worklets-babel.ts +24 -5
- package/src/xcode-project.ts +103 -11
- package/src/xcode-target-members.ts +10 -3
- package/cli/drivers/playwright-sim-host.ts +0 -825
- package/kotlin/fixtures/counter/Counter.d.kt.ts +0 -17
- package/kotlin/fixtures/counter/Counter.kt +0 -51
- package/kotlin/fixtures/counter/CounterApp.native.tsx +0 -61
- package/kotlin/fixtures/counter/CounterApp.tsx +0 -3
- package/kotlin/fixtures/counter/CounterScreen.d.kt.ts +0 -8
- package/kotlin/fixtures/counter/CounterScreen.kt +0 -56
- package/kotlin/fixtures/counter/app/_layout.tsx +0 -4
- package/kotlin/fixtures/counter/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/counter/app/routes.d.ts +0 -18
- package/kotlin/fixtures/counter/package.json +0 -20
- package/kotlin/fixtures/counter/tsconfig.json +0 -19
- package/kotlin/fixtures/counter/vite.config.ts +0 -20
- package/kotlin/fixtures/headless-counter/Headless.kt +0 -234
- package/kotlin/fixtures/import-animation/Animation.d.kt.ts +0 -7
- package/kotlin/fixtures/import-animation/Animation.kt +0 -80
- package/kotlin/fixtures/import-animation/ImportAnimation.native.tsx +0 -13
- package/kotlin/fixtures/import-animation/README.md +0 -24
- package/kotlin/fixtures/import-animation/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-animation/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-animation/app/routes.d.ts +0 -18
- package/kotlin/fixtures/import-animation/package.json +0 -23
- package/kotlin/fixtures/import-animation/tsconfig.json +0 -20
- package/kotlin/fixtures/import-animation/vite.config.ts +0 -20
- package/kotlin/fixtures/import-drawing/Drawing.d.kt.ts +0 -7
- package/kotlin/fixtures/import-drawing/Drawing.kt +0 -101
- package/kotlin/fixtures/import-drawing/ImportDrawing.native.tsx +0 -18
- package/kotlin/fixtures/import-drawing/README.md +0 -34
- package/kotlin/fixtures/import-drawing/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-drawing/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-drawing/package.json +0 -23
- package/kotlin/fixtures/import-drawing/tsconfig.json +0 -20
- package/kotlin/fixtures/import-drawing/vite.config.ts +0 -20
- package/kotlin/fixtures/import-editor/Editor.d.kt.ts +0 -7
- package/kotlin/fixtures/import-editor/Editor.kt +0 -59
- package/kotlin/fixtures/import-editor/ImportEditor.native.tsx +0 -23
- package/kotlin/fixtures/import-editor/README.md +0 -27
- package/kotlin/fixtures/import-editor/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-editor/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-editor/package.json +0 -23
- package/kotlin/fixtures/import-editor/tsconfig.json +0 -20
- package/kotlin/fixtures/import-editor/vite.config.ts +0 -20
- package/kotlin/fixtures/import-effects/Effects.d.kt.ts +0 -7
- package/kotlin/fixtures/import-effects/Effects.kt +0 -87
- package/kotlin/fixtures/import-effects/ImportEffects.native.tsx +0 -13
- package/kotlin/fixtures/import-effects/README.md +0 -19
- package/kotlin/fixtures/import-effects/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-effects/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-effects/package.json +0 -23
- package/kotlin/fixtures/import-effects/tsconfig.json +0 -20
- package/kotlin/fixtures/import-effects/vite.config.ts +0 -20
- package/kotlin/fixtures/import-layout/ImportLayout.native.tsx +0 -13
- package/kotlin/fixtures/import-layout/Layout.d.kt.ts +0 -7
- package/kotlin/fixtures/import-layout/Layout.kt +0 -72
- package/kotlin/fixtures/import-layout/README.md +0 -24
- package/kotlin/fixtures/import-layout/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-layout/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-layout/package.json +0 -23
- package/kotlin/fixtures/import-layout/tsconfig.json +0 -20
- package/kotlin/fixtures/import-layout/vite.config.ts +0 -20
- package/kotlin/fixtures/import-navigation/ImportNavigation.native.tsx +0 -18
- package/kotlin/fixtures/import-navigation/Navigation.d.kt.ts +0 -7
- package/kotlin/fixtures/import-navigation/Navigation.kt +0 -104
- package/kotlin/fixtures/import-navigation/README.md +0 -31
- package/kotlin/fixtures/import-navigation/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-navigation/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-navigation/package.json +0 -23
- package/kotlin/fixtures/import-navigation/tsconfig.json +0 -20
- package/kotlin/fixtures/import-navigation/vite.config.ts +0 -20
- package/kotlin/fixtures/import-overlays/ImportOverlays.native.tsx +0 -29
- package/kotlin/fixtures/import-overlays/Overlays.d.kt.ts +0 -7
- package/kotlin/fixtures/import-overlays/Overlays.kt +0 -93
- package/kotlin/fixtures/import-overlays/README.md +0 -34
- package/kotlin/fixtures/import-overlays/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-overlays/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-overlays/package.json +0 -23
- package/kotlin/fixtures/import-overlays/tsconfig.json +0 -20
- package/kotlin/fixtures/import-overlays/vite.config.ts +0 -20
- package/kotlin/fixtures/import-resources/ImportResources.native.tsx +0 -18
- package/kotlin/fixtures/import-resources/README.md +0 -26
- package/kotlin/fixtures/import-resources/Resources.d.kt.ts +0 -6
- package/kotlin/fixtures/import-resources/Resources.kt +0 -72
- package/kotlin/fixtures/import-resources/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-resources/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-resources/package.json +0 -23
- package/kotlin/fixtures/import-resources/tsconfig.json +0 -20
- package/kotlin/fixtures/import-resources/vite.config.ts +0 -20
- package/kotlin/fixtures/import-scroll/ImportNested.native.tsx +0 -10
- package/kotlin/fixtures/import-scroll/ImportScroll.native.tsx +0 -13
- package/kotlin/fixtures/import-scroll/Nested.d.kt.ts +0 -4
- package/kotlin/fixtures/import-scroll/Nested.kt +0 -64
- package/kotlin/fixtures/import-scroll/README.md +0 -38
- package/kotlin/fixtures/import-scroll/Scroll.d.kt.ts +0 -7
- package/kotlin/fixtures/import-scroll/Scroll.kt +0 -91
- package/kotlin/fixtures/import-scroll/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-scroll/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-scroll/app/nested+spa.tsx +0 -1
- package/kotlin/fixtures/import-scroll/package.json +0 -23
- package/kotlin/fixtures/import-scroll/tsconfig.json +0 -20
- package/kotlin/fixtures/import-scroll/vite.config.ts +0 -20
- package/kotlin/fixtures/import-selection/ImportSelection.native.tsx +0 -44
- package/kotlin/fixtures/import-selection/README.md +0 -32
- package/kotlin/fixtures/import-selection/Selection.d.kt.ts +0 -8
- package/kotlin/fixtures/import-selection/Selection.kt +0 -78
- package/kotlin/fixtures/import-selection/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-selection/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-selection/package.json +0 -23
- package/kotlin/fixtures/import-selection/tsconfig.json +0 -20
- package/kotlin/fixtures/import-selection/vite.config.ts +0 -20
- package/kotlin/fixtures/import-surfaces/ImportSurfaces.native.tsx +0 -13
- package/kotlin/fixtures/import-surfaces/README.md +0 -22
- package/kotlin/fixtures/import-surfaces/Surfaces.d.kt.ts +0 -7
- package/kotlin/fixtures/import-surfaces/Surfaces.kt +0 -64
- package/kotlin/fixtures/import-surfaces/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-surfaces/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-surfaces/package.json +0 -23
- package/kotlin/fixtures/import-surfaces/tsconfig.json +0 -20
- package/kotlin/fixtures/import-surfaces/vite.config.ts +0 -20
- package/kotlin/fixtures/import-values/ImportValues.native.tsx +0 -61
- package/kotlin/fixtures/import-values/README.md +0 -28
- package/kotlin/fixtures/import-values/Values.d.kt.ts +0 -15
- package/kotlin/fixtures/import-values/Values.kt +0 -84
- package/kotlin/fixtures/import-values/app/_layout.tsx +0 -4
- package/kotlin/fixtures/import-values/app/index+spa.tsx +0 -1
- package/kotlin/fixtures/import-values/package.json +0 -23
- package/kotlin/fixtures/import-values/tsconfig.json +0 -20
- package/kotlin/fixtures/import-values/vite.config.ts +0 -20
- package/kotlin/fixtures/kotlin-app/app/build.gradle.kts +0 -30
- package/kotlin/fixtures/kotlin-app/app/src/main/AndroidManifest.xml +0 -13
- package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/MainActivity.kt +0 -60
- package/kotlin/fixtures/kotlin-app/app/src/main/java/dev/contrast/kotlinapp/ProbeApplication.kt +0 -18
- package/kotlin/fixtures/kotlin-app/build.gradle.kts +0 -5
- package/kotlin/fixtures/kotlin-app/gradle.properties +0 -4
- package/kotlin/fixtures/kotlin-app/settings.gradle.kts +0 -4
- package/kotlin/fixtures/kotlin-app-variants/Anim.kt +0 -62
- package/kotlin/fixtures/kotlin-app-variants/BarBehavior.kt +0 -38
- package/kotlin/fixtures/kotlin-app-variants/BarVisibility.kt +0 -36
- package/kotlin/fixtures/kotlin-app-variants/Bitmaps.kt +0 -50
- package/kotlin/fixtures/kotlin-app-variants/Browse.kt +0 -73
- package/kotlin/fixtures/kotlin-app-variants/Colors.kt +0 -41
- package/kotlin/fixtures/kotlin-app-variants/Controls.kt +0 -62
- package/kotlin/fixtures/kotlin-app-variants/Drag.kt +0 -56
- package/kotlin/fixtures/kotlin-app-variants/Draw.kt +0 -74
- package/kotlin/fixtures/kotlin-app-variants/Drawables.kt +0 -53
- package/kotlin/fixtures/kotlin-app-variants/Focus.kt +0 -62
- package/kotlin/fixtures/kotlin-app-variants/Form.kt +0 -47
- package/kotlin/fixtures/kotlin-app-variants/Icons.kt +0 -59
- package/kotlin/fixtures/kotlin-app-variants/Ime.kt +0 -53
- package/kotlin/fixtures/kotlin-app-variants/Lists.kt +0 -57
- package/kotlin/fixtures/kotlin-app-variants/Nav.kt +0 -47
- package/kotlin/fixtures/kotlin-app-variants/Note.kt +0 -40
- package/kotlin/fixtures/kotlin-app-variants/Overlays.kt +0 -56
- package/kotlin/fixtures/kotlin-app-variants/Pan.kt +0 -38
- package/kotlin/fixtures/kotlin-app-variants/Pickers.kt +0 -44
- package/kotlin/fixtures/kotlin-app-variants/Press.kt +0 -43
- package/kotlin/fixtures/kotlin-app-variants/Scroll.kt +0 -63
- package/kotlin/fixtures/kotlin-app-variants/Sheet.kt +0 -43
- package/kotlin/fixtures/kotlin-app-variants/Strings.kt +0 -49
- package/kotlin/fixtures/kotlin-app-variants/Tabs.kt +0 -47
- package/kotlin/fixtures/kotlin-app-variants/TextWidth.kt +0 -45
- package/kotlin/fixtures/kotlin-app-variants/TransientInsets.kt +0 -50
- package/kotlin/fixtures/kotlin-app-variants/Transition.kt +0 -69
- package/kotlin/fixtures/kotlin-app-variants/ViewConfig.kt +0 -22
- package/kotlin/fixtures/kotlin-app-variants/Widgets.kt +0 -67
- package/kotlin/fixtures/runtime-state/RuntimeState.kt +0 -200
- package/kotlin/fork/README.md +0 -97
- package/kotlin/fork/build.sh +0 -176
- package/kotlin/fork/compose-worker-globals.patch +0 -1247
- package/kotlin/fork/fork.json +0 -46
- package/kotlin/fork/publish.ts +0 -99
- package/kotlin/fork/skia-android-shaping.patch +0 -189
- package/kotlin/fork/skiko-local.init.gradle +0 -10
- package/kotlin/fork/skiko-worker-clock.patch +0 -122
package/cli/commands/upload.ts
CHANGED
|
@@ -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:
|
|
356
|
+
since:
|
|
357
|
+
args.recordingStartedAtMs -
|
|
358
|
+
getCliRuntime().preview_trace.TRACE_CAPTURE_PREROLL_MS,
|
|
379
359
|
until:
|
|
380
|
-
args.recordingStartedAtMs +
|
|
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(
|
|
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 } =
|
|
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(
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
package/cli/current-sim.ts
CHANGED
|
@@ -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
|
+
}
|
package/cli/desktop-companion.ts
CHANGED
|
@@ -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(', ')}).
|
|
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(
|
|
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
|
package/cli/device-option.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { devices, listSelectableDeviceModels } from '
|
|
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
|
|
@@ -18,6 +18,7 @@ import { createServer } from 'net'
|
|
|
18
18
|
import { tmpdir } from 'os'
|
|
19
19
|
import { join } from 'path'
|
|
20
20
|
import { AUTOMATION_SIM_IDLE_REAP_TTL_MS } from '../../src/bridge-constants'
|
|
21
|
+
import { getCliVersion } from '../../src/cli-version'
|
|
21
22
|
import {
|
|
22
23
|
desktopHostDelivery,
|
|
23
24
|
desktopHostPlatform,
|
|
@@ -54,6 +55,38 @@ function probe(): DriverAvailability {
|
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
57
|
|
|
58
|
+
// every bridge since the fetch transport landed serves its route, so a 404
|
|
59
|
+
// from a server whose /healthz identifies a peach bridge means that bridge
|
|
60
|
+
// predates this cli. without that identity the port may hold something else,
|
|
61
|
+
// and the message says only what was observed. restarting closes every sim
|
|
62
|
+
// the bridge hosts, so the cli never does it.
|
|
63
|
+
async function olderBridgeMessage(bridgePort: number): Promise<string> {
|
|
64
|
+
const restart = `run \`peach daemon restart\` to load the matching bridge; it closes every sim that bridge hosts, so it was not restarted.`
|
|
65
|
+
let health: unknown = null
|
|
66
|
+
try {
|
|
67
|
+
const response = await fetch(`http://127.0.0.1:${bridgePort}/healthz`, {
|
|
68
|
+
signal: AbortSignal.timeout(10_000),
|
|
69
|
+
})
|
|
70
|
+
health = await response.json()
|
|
71
|
+
} catch {
|
|
72
|
+
// an unreadable /healthz leaves the server unidentified
|
|
73
|
+
}
|
|
74
|
+
const field = (key: string) =>
|
|
75
|
+
health && typeof health === 'object' ? Reflect.get(health, key) : null
|
|
76
|
+
const pid = field('pid')
|
|
77
|
+
if (field('ok') !== true || typeof pid !== 'number') {
|
|
78
|
+
return `port ${bridgePort} has no fetch transport route and its /healthz did not identify a peach bridge, so this peach cli ${getCliVersion()} cannot use it. if an older peach bridge holds that port, ${restart}`
|
|
79
|
+
}
|
|
80
|
+
const runtime = field('activeRuntime')
|
|
81
|
+
const details = [
|
|
82
|
+
`pid ${pid}`,
|
|
83
|
+
typeof runtime === 'string' ? `runtime ${runtime}` : null,
|
|
84
|
+
]
|
|
85
|
+
.filter((part) => part !== null)
|
|
86
|
+
.join(', ')
|
|
87
|
+
return `the peach bridge on port ${bridgePort} (${details}) has no fetch transport route, so it predates this peach cli ${getCliVersion()}. ${restart}`
|
|
88
|
+
}
|
|
89
|
+
|
|
57
90
|
// resolve the Chrome user-data dir for a profiled launch. a non-empty
|
|
58
91
|
// return means the host should use a persistent context; '' means a plain
|
|
59
92
|
// (in-memory) browser launch.
|
|
@@ -111,6 +144,12 @@ async function launch(opts: DriverLaunchOptions): Promise<DriverLaunchResult> {
|
|
|
111
144
|
`http://127.0.0.1:${opts.bridgePort}/__peach/fetch-transport`,
|
|
112
145
|
{ signal: AbortSignal.timeout(10_000) },
|
|
113
146
|
)
|
|
147
|
+
if (response.status === 404) {
|
|
148
|
+
return {
|
|
149
|
+
launched: false,
|
|
150
|
+
message: await olderBridgeMessage(opts.bridgePort),
|
|
151
|
+
}
|
|
152
|
+
}
|
|
114
153
|
if (!response.ok) throw new Error(`transport discovery returned ${response.status}`)
|
|
115
154
|
const descriptor: unknown = await response.json()
|
|
116
155
|
if (!descriptor || typeof descriptor !== 'object')
|
|
@@ -235,6 +274,7 @@ async function launch(opts: DriverLaunchOptions): Promise<DriverLaunchResult> {
|
|
|
235
274
|
launched: true,
|
|
236
275
|
message: `playwright ${hostCommand ? 'native host' : 'Chromium'} launched → ${targetUrl.href}${ownerNote}`,
|
|
237
276
|
pid: child.pid,
|
|
277
|
+
process: child,
|
|
238
278
|
target: resolved.spec,
|
|
239
279
|
attachUrl: targetUrl.href,
|
|
240
280
|
connectAckFile,
|
package/cli/drivers/types.ts
CHANGED
|
@@ -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,
|
package/cli/internal-child.ts
CHANGED
|
@@ -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 {
|
|
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
|
|
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))
|
|
@@ -38,7 +38,7 @@ export const OUTBOUND_ENDPOINTS: Record<string, OutboundEndpointDeclaration> = {
|
|
|
38
38
|
runtime_delivery: {
|
|
39
39
|
category: 'runtime-delivery',
|
|
40
40
|
destination:
|
|
41
|
-
'https://
|
|
41
|
+
'https://peachsim.com/runtimes/manifest.json and selected runtime tarball; with `peach desktop install --native`, https://r2.rnxsim.com/releases/native/<channel>/ manifest and versioned host zip',
|
|
42
42
|
preConsent: true,
|
|
43
43
|
payload: 'HTTP runtime or desktop host version request; no project or app data',
|
|
44
44
|
},
|
|
@@ -107,7 +107,7 @@ export const OUTBOUND_ENDPOINTS: Record<string, OutboundEndpointDeclaration> = {
|
|
|
107
107
|
},
|
|
108
108
|
release_notes: {
|
|
109
109
|
category: 'explicit-user-action',
|
|
110
|
-
destination: 'https://
|
|
110
|
+
destination: 'https://peachsim.com/api/changelog/sootsim',
|
|
111
111
|
preConsent: false,
|
|
112
112
|
payload: 'requested runtime version only',
|
|
113
113
|
},
|
|
@@ -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:
|
|
@@ -639,6 +647,8 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
|
|
|
639
647
|
{ category: 'local_development', count: 1 },
|
|
640
648
|
'packages/peachsim/cli/drivers/playwright.ts :: fetch :: `http://127.0.0.1:${opts.bridgePort}/__peach/fetch-transport`':
|
|
641
649
|
{ category: 'local_development', count: 1 },
|
|
650
|
+
'packages/peachsim/cli/drivers/playwright.ts :: fetch :: `http://127.0.0.1:${bridgePort}/healthz`':
|
|
651
|
+
{ category: 'local_development', count: 1 },
|
|
642
652
|
"packages/peach-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref, 'grid')":
|
|
643
653
|
{ category: 'contrast_user_action', count: 1 },
|
|
644
654
|
'packages/peach-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref, variant)':
|
|
@@ -656,7 +666,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
|
|
|
656
666
|
},
|
|
657
667
|
"packages/peach-engine/src/settings/persistence.ts :: fetch :: '/__sootsim/shared-config'":
|
|
658
668
|
{ category: 'same_origin_runtime', count: 1 },
|
|
659
|
-
'packages/peachsim/
|
|
669
|
+
'packages/peachsim/src/metro-project-root.ts :: fetch :: `${origin}/`': {
|
|
660
670
|
category: 'local_development',
|
|
661
671
|
count: 1,
|
|
662
672
|
},
|
|
@@ -789,7 +799,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
|
|
|
789
799
|
},
|
|
790
800
|
'packages/peach-engine/src/components/native-ui/ShareSheetView.tsx :: fetch-alias :: `/__fetch-proxy?url=${encodeURIComponent()}`':
|
|
791
801
|
{ category: 'guest_app_network', count: 1 },
|
|
792
|
-
'packages/peachsim/src/dev-bundle-resolution.ts :: fetch ::
|
|
802
|
+
'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: `${pageOrigin}/__fetch-proxy?url=${encodeURIComponent()}`':
|
|
793
803
|
{ category: 'guest_app_network', count: 1 },
|
|
794
804
|
'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: targetUrl': {
|
|
795
805
|
category: 'guest_app_network',
|
|
@@ -837,7 +847,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
|
|
|
837
847
|
category: 'guest_app_network',
|
|
838
848
|
count: 1,
|
|
839
849
|
},
|
|
840
|
-
'packages/peachsim/
|
|
850
|
+
'packages/peachsim/src/metro-project-root.ts :: fetch :: `${origin}/status`': {
|
|
841
851
|
category: 'local_development',
|
|
842
852
|
count: 1,
|
|
843
853
|
},
|