agent-device 0.20.10 → 0.21.1
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 +2 -2
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.10.apk → agent-device-android-ime-helper-0.21.1.apk} +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.1.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.20.10.manifest.json → agent-device-android-ime-helper-0.21.1.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.1.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.1.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.20.10.manifest.json → agent-device-android-snapshot-helper-0.21.1.manifest.json} +6 -6
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/AudioProbe.swift +35 -33
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/main.swift +6 -1
- package/apple/snapshot-bridge/LICENSE.idb +23 -0
- package/apple/snapshot-bridge/README.md +106 -0
- package/apple/snapshot-bridge/SnapshotBridge.m +286 -0
- package/apple/snapshot-bridge/SnapshotBridgeCapture.h +25 -0
- package/apple/snapshot-bridge/SnapshotBridgeCapture.m +138 -0
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.h +34 -0
- package/apple/snapshot-bridge/SnapshotBridgeRuntime.m +411 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +58 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner.xcodeproj/project.pbxproj +19 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.h +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAXSnapshotBridge.m +20 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerAlertVerification.swift +36 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSelectorMatchPolicy.swift +15 -15
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerStringNormalization.swift +8 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.h +12 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSynthesizedGesture.m +100 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +72 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTapPointPolicy.swift +63 -14
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +677 -83
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +35 -92
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AlertObservation.swift +124 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+BlockingSystemModalResolution.swift +39 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +1058 -213
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +296 -14
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Exceptions.swift +10 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +309 -149
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Keyboard.swift +101 -42
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +24 -17
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +124 -199
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +71 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXElementTypes.swift +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+PrivateAXPresentation.swift +211 -78
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScreenRecorder.swift +30 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+ScrollGesture.swift +254 -24
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SequenceExecution.swift +206 -22
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +465 -494
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotBackendCapabilities.swift +168 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +802 -247
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationInvariant.swift +19 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTiming.swift +185 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedCommitDeadline.swift +206 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +83 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +156 -34
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SystemModal.swift +5 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +35 -318
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +206 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryReadiness.swift +158 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputCandidatePolicy.swift +28 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextInputProbe.swift +101 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +56 -23
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +56 -27
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TvRemote.swift +30 -24
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +126 -80
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +111 -0
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-overlay.swift +47 -86
- package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-trim.swift +32 -79
- package/dist/apple/snapshot-presentation/Package.swift +21 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotGeometry.swift +56 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotModels.swift +259 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentation.swift +153 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationFailure.swift +27 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationInvariant.swift +91 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotPresentationProjection.swift +161 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotScopePolicy.swift +53 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFold.swift +242 -0
- package/dist/apple/snapshot-presentation/Sources/AgentDeviceSnapshotPresentation/SnapshotVisibilityFoldProjection.swift +97 -0
- package/dist/src/adapter.js +1 -0
- package/dist/src/adb-executor.js +2 -0
- package/dist/src/adb-failure.js +1 -0
- package/dist/src/adb-host.js +1 -0
- package/dist/src/adb.js +1 -0
- package/dist/src/agent-browser-lifecycle.js +1 -0
- package/dist/src/agent-browser-process-record.js +1 -0
- package/dist/src/agent-browser-provider.js +1 -0
- package/dist/src/agent-browser-tool.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/ai-sdk.d.ts +2 -2
- package/dist/src/ai-sdk.js +1 -1
- package/dist/src/alert-contract.js +1 -0
- package/dist/src/alert-runtime.js +1 -0
- package/dist/src/android-adb.d.ts +27 -19
- package/dist/src/android-adb.js +1 -1
- package/dist/src/android-input-ownership.js +1 -0
- package/dist/src/android-system-chrome.js +1 -0
- package/dist/src/android.js +1 -1
- package/dist/src/api.js +11 -0
- package/dist/src/app-catalog.js +1 -0
- package/dist/src/app-deployment-resolution.js +2 -0
- package/dist/src/app-helpers.js +1 -1
- package/dist/src/app-inventory-contract.js +1 -0
- package/dist/src/app-inventory.js +1 -0
- package/dist/src/app-launch.js +2 -0
- package/dist/src/app-lifecycle-facade.js +1 -0
- package/dist/src/app-lifecycle.js +3 -6
- package/dist/src/app-lifecycle2.js +2 -2
- package/dist/src/app-lifecycle3.js +1 -0
- package/dist/src/app-log-files.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/app-log-runtime.js +1 -4
- package/dist/src/app-log-runtime2.js +4 -0
- package/dist/src/app-parsers.js +4 -0
- package/dist/src/app-resolution-cache.js +1 -0
- package/dist/src/app-resolution-facade.js +1 -0
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/app-state.js +1 -2
- package/dist/src/apple-runner-platform.js +1 -0
- package/dist/src/application-lifecycle-interaction.js +1 -0
- package/dist/src/application-lifecycle-runtime.js +1 -0
- package/dist/src/apps-simctl.js +1 -0
- package/dist/src/archive.js +4 -0
- package/dist/src/artifact-download.js +1 -0
- package/dist/src/artifacts.d.ts +6 -2
- package/dist/src/artifacts.js +1 -1
- package/dist/src/async-lifecycle.js +1 -0
- package/dist/src/audio-probe-result.js +1 -0
- package/dist/src/audio-probe-runtime.js +1 -0
- package/dist/src/audio-probe-support.js +1 -0
- package/dist/src/auth-session.js +1 -1
- package/dist/src/auth.js +1 -1
- package/dist/src/backend-snapshot-options.js +1 -1
- package/dist/src/{url.js → base-url.js} +1 -1
- package/dist/src/boot-diagnostics.js +2 -2
- package/dist/src/byte-limit-stream.js +1 -1
- package/dist/src/capabilities.js +1 -0
- package/dist/src/capture.js +1 -0
- package/dist/src/catalog.js +1 -0
- package/dist/src/cli-command-aliases.js +1 -0
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +74 -51
- package/dist/src/cli-output.js +1 -1
- package/dist/src/cli-runner.js +1 -1
- package/dist/src/cli.js +4 -6
- package/dist/src/click-button.js +1 -0
- package/dist/src/client-metro-companion.js +1 -0
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +280 -242
- package/dist/src/clipboard.js +1 -0
- package/dist/src/code-signature-cache.js +1 -0
- package/dist/src/code-signature.js +1 -0
- package/dist/src/color.js +1 -0
- package/dist/src/command-metadata.js +1 -1
- package/dist/src/command-schema.js +3 -3
- package/dist/src/command-surface.js +1 -1
- package/dist/src/command-tools.js +2 -2
- package/dist/src/command.js +1 -0
- package/dist/src/compatibility-policy.js +1 -0
- package/dist/src/config.js +1 -1
- package/dist/src/config2.js +1 -0
- package/dist/src/connection-runtime.js +1 -1
- package/dist/src/connection.js +5 -5
- package/dist/src/contracts.d.ts +1 -1
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -0
- package/dist/src/daemon-process.js +1 -0
- package/dist/src/daemon-registration.js +1 -0
- package/dist/src/daemon-shutdown-report.js +1 -1
- package/dist/src/daemon.js +2 -2
- package/dist/src/debug-symbols-facade.js +5 -0
- package/dist/src/deploy-result-target.js +1 -0
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-claim-rule.js +1 -0
- package/dist/src/device-input-state.d.ts +190 -3
- package/dist/src/device-inventory-context.js +1 -0
- package/dist/src/device-isolation.js +1 -0
- package/dist/src/device-release.js +1 -0
- package/dist/src/device-rotation.js +1 -0
- package/dist/src/device-selection-resolver.js +1 -0
- package/dist/src/device-session.js +1 -0
- package/dist/src/device.js +1 -1
- package/dist/src/device2.js +3 -2
- package/dist/src/diagnostics.js +3 -0
- package/dist/src/diagnostics2.js +1 -0
- package/dist/src/dispatch-resolve.js +1 -0
- package/dist/src/doctor-facade.js +1 -0
- package/dist/src/doctor-output.js +1 -0
- package/dist/src/doctor.js +1 -0
- package/dist/src/doctor2.js +1 -0
- package/dist/src/doctor3.js +1 -0
- package/dist/src/durable-resource.js +1 -0
- package/dist/src/entities.js +1 -1
- package/dist/src/error.js +2 -0
- package/dist/src/exec.js +1 -0
- package/dist/src/file.js +1 -0
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/generic-settle.js +1 -1
- package/dist/src/generic.js +1 -1
- package/dist/src/gesture-admission.js +1 -0
- package/dist/src/gesture-plan-types.js +1 -0
- package/dist/src/gesture-plan.js +1 -0
- package/dist/src/gesture-runtime.js +1 -0
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/hdc.js +1 -1
- package/dist/src/helper.js +2 -2
- package/dist/src/host-file.js +1 -0
- package/dist/src/human-control-contract.js +1 -0
- package/dist/src/human-control.js +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +1 -4
- package/dist/src/input-actions2.js +2 -1
- package/dist/src/install-artifact-facade.js +1 -0
- package/dist/src/install-source-network-transport.js +1 -0
- package/dist/src/install-source.d.ts +3 -10
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-positionals.js +1 -0
- package/dist/src/interaction-ref-policy.js +1 -0
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor-operation-catalog.js +1 -0
- package/dist/src/interactor-types.js +1 -0
- package/dist/src/interactor.js +6 -2
- package/dist/src/interactor2.js +1 -1
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.d.ts +1 -1
- package/dist/src/internal/bin.js +1 -2
- package/dist/src/internal/companion-tunnel.d.ts +1 -1
- package/dist/src/internal/companion-tunnel.js +1 -1
- package/dist/src/internal/daemon.d.ts +1 -1
- package/dist/src/internal/daemon.js +2 -4
- package/dist/src/internal/png-worker.d.ts +4 -4
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/internal/run-script-http-child.d.ts +4 -0
- package/dist/src/internal/run-script-http-child.js +1 -0
- package/dist/src/internal/update-check-entry.d.ts +1 -1
- package/dist/src/inventory.js +4 -4
- package/dist/src/inventory2.js +1 -1
- package/dist/src/inventory3.js +1 -1
- package/dist/src/inventory5.js +1 -1
- package/dist/src/inventory6.js +1 -1
- package/dist/src/ios-client.js +16 -0
- package/dist/src/ios-snapshot-acquisition.js +1 -0
- package/dist/src/ios-snapshot-adapter.js +1 -0
- package/dist/src/ios-snapshot-planning.js +1 -0
- package/dist/src/ios-snapshot-runtime.js +1 -0
- package/dist/src/ios-system-surface.js +1 -0
- package/dist/src/json.js +1 -0
- package/dist/src/keyboard-actions.js +1 -0
- package/dist/src/launch-console.js +1 -0
- package/dist/src/lease-context.js +1 -1
- package/dist/src/lease-scope.js +1 -0
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +1610 -7
- package/dist/src/limrun.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -0
- package/dist/src/location-coordinates.js +1 -1
- package/dist/src/logcat.js +1 -1
- package/dist/src/macos-facade.js +1 -0
- package/dist/src/managed-device-scope.js +1 -0
- package/dist/src/mechanics.js +19 -0
- package/dist/src/metro.d.ts +4 -2
- package/dist/src/metro.js +1 -1
- package/dist/src/metro2.js +1 -1
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/multitouch-support.js +1 -0
- package/dist/src/numeric.js +1 -0
- package/dist/src/observability.js +1 -1
- package/dist/src/observation.js +2 -0
- package/dist/src/open-target-resolution.js +1 -0
- package/dist/src/output-path.js +1 -1
- package/dist/src/owner-identity.js +3 -1
- package/dist/src/parameterized-recorded-fill.js +1 -0
- package/dist/src/parser.js +1 -1
- package/dist/src/perf-facade.js +2 -0
- package/dist/src/perf-process-identity.js +1 -0
- package/dist/src/perf-runtime-operation-builder.js +1 -0
- package/dist/src/perf-runtime-plan.js +1 -0
- package/dist/src/perf-runtime.js +1 -0
- package/dist/src/perf.js +1 -4
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/physical-device-facade.js +1 -0
- package/dist/src/platform-request-scope.js +1 -0
- package/dist/src/platform-runtime-android-adb-host.js +1 -0
- package/dist/src/platform-runtime-android-mechanics.js +1 -0
- package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
- package/dist/src/platform-runtime-app-log-process.js +1 -1
- package/dist/src/platform-runtime-host.js +1 -1
- package/dist/src/platform-runtime-managed-owner.js +1 -0
- package/dist/src/platform-runtime-network-web-transport.js +1 -1
- package/dist/src/platform-runtime-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +4 -4
- package/dist/src/platform-runtime-runtime-hints.js +2 -2
- package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-runner-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +1 -0
- package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -0
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/plist.js +1 -1
- package/dist/src/png-worker-contract.js +1 -1
- package/dist/src/prepare-kind.js +1 -0
- package/dist/src/process-exit.js +1 -1
- package/dist/src/process.js +1 -0
- package/dist/src/provider-device-runtime.js +1 -0
- package/dist/src/provider-session-ownership.js +2 -0
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/provider.js +1 -1
- package/dist/src/providers.js +1 -0
- package/dist/src/proxy.js +2 -2
- package/dist/src/react-native-overlay.js +1 -0
- package/dist/src/react-native.js +1 -1
- package/dist/src/record-runtime.js +1 -1
- package/dist/src/record-trace.js +1 -1
- package/dist/src/rect-center.js +1 -0
- package/dist/src/register-builtins.js +1 -0
- package/dist/src/registry.js +40 -28
- package/dist/src/remote-config2.js +1 -1
- package/dist/src/replay-divergence.js +2 -0
- package/dist/src/replay.js +2 -2
- package/dist/src/reporting.js +8 -7
- package/dist/src/request-admission.js +1 -0
- package/dist/src/request-cancel.js +1 -0
- package/dist/src/request-cancellation.js +1 -0
- package/dist/src/request-progress-protocol.js +1 -0
- package/dist/src/request-providers.js +1 -0
- package/dist/src/request-runtime-binding.js +1 -0
- package/dist/src/request.js +1 -0
- package/dist/src/result-serialization.js +1 -0
- package/dist/src/retry.js +1 -0
- package/dist/src/rolldown-runtime.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -0
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -0
- package/dist/src/runner-owner-facade.js +1 -0
- package/dist/src/runner-owner-state.js +1 -0
- package/dist/src/runner-presentation.js +1 -0
- package/dist/src/runner.js +1 -0
- package/dist/src/{runtime-transport.js → runtime-transport-hints.js} +1 -1
- package/dist/src/runtime.js +3 -3
- package/dist/src/runtime2.js +4 -4
- package/dist/src/runtime3.js +1 -1
- package/dist/src/runtime4.js +5 -3
- package/dist/src/runtime5.js +1 -1
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime7.js +1 -1
- package/dist/src/runtime8.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/scoped-provider.js +1 -1
- package/dist/src/screen-recording-completion.js +1 -0
- package/dist/src/screen-recording-live-handle.js +1 -0
- package/dist/src/screen-recording-options.js +1 -0
- package/dist/src/screen-recording-resource-recovery.js +1 -0
- package/dist/src/screen-recording-runtime.js +1 -0
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot-result.js +1 -6
- package/dist/src/screenshot-runtime.js +1 -0
- package/dist/src/screenshot.js +1 -1
- package/dist/src/screenshot2.js +1 -0
- package/dist/src/screenshot3.js +5 -0
- package/dist/src/script.js +1 -0
- package/dist/src/scroll-command.js +1 -0
- package/dist/src/scroll-gesture.js +1 -0
- package/dist/src/scroll-indicator.js +1 -0
- package/dist/src/sdk-batch-runner.d.ts +23 -6
- package/dist/src/sdk-batch-runner.js +2 -3
- package/dist/src/sdk-batch.js +2 -0
- package/dist/src/sdk-contracts.d.ts +170 -41
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-device.js +1 -1
- package/dist/src/sdk-finders.d.ts +1 -1
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-io.js +1 -1
- package/dist/src/sdk-remote-config.d.ts +1 -1
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +524 -140
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +1 -0
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/semantic-index.js +1 -0
- package/dist/src/server.js +4 -4
- package/dist/src/session-allocation.js +1 -0
- package/dist/src/session-artifact-paths.js +1 -0
- package/dist/src/session-observation.js +1 -0
- package/dist/src/session-paths.js +1 -0
- package/dist/src/session-repair-tombstone.js +1 -0
- package/dist/src/session-routing.js +1 -0
- package/dist/src/session-runtime-admission.js +1 -0
- package/dist/src/session-snapshot.js +1 -0
- package/dist/src/session-store.js +4 -0
- package/dist/src/session-target-evidence.js +1 -1
- package/dist/src/session2.js +5 -27
- package/dist/src/settings.js +1 -0
- package/dist/src/shared.js +2 -2
- package/dist/src/simctl-facade.js +1 -0
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator-facade.js +1 -0
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-capture-annotations.js +1 -0
- package/dist/src/snapshot-desktop-projection.js +1 -0
- package/dist/src/snapshot-diagnostics.js +1 -0
- package/dist/src/snapshot-process.js +1 -0
- package/dist/src/snapshot-quality-backend-capabilities.js +1 -0
- package/dist/src/snapshot-quality-verdict.js +1 -0
- package/dist/src/snapshot-runtime-binding.js +1 -0
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-scope.js +1 -1
- package/dist/src/snapshot-state.js +1 -0
- package/dist/src/snapshot.js +1 -8
- package/dist/src/snapshot2.js +1 -1
- package/dist/src/snapshot3.js +1 -1
- package/dist/src/snapshot4.js +1 -0
- package/dist/src/src.js +1 -1
- package/dist/src/src2.js +1 -1
- package/dist/src/src3.js +1 -2
- package/dist/src/src4.js +1 -1
- package/dist/src/src5.js +1 -0
- package/dist/src/src6.js +1 -0
- package/dist/src/src7.js +2 -0
- package/dist/src/src8.js +115 -0
- package/dist/src/startup-recovery-fence.js +1 -0
- package/dist/src/status-markers.js +1 -0
- package/dist/src/string-enum.js +1 -1
- package/dist/src/success-text.js +1 -0
- package/dist/src/surface-snapshot.js +1 -0
- package/dist/src/surface-snapshot2.js +1 -0
- package/dist/src/takeover.js +5 -0
- package/dist/src/tool-provider-facade.js +1 -0
- package/dist/src/tool-provider.js +4 -3
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/tool-provider3.js +1 -1
- package/dist/src/toolchain-probe.js +2 -0
- package/dist/src/touch-reference-frame.js +1 -0
- package/dist/src/touch-runtime.js +1 -0
- package/dist/src/transport.js +3 -0
- package/dist/src/tree.js +1 -0
- package/dist/src/ttl-memo.js +1 -0
- package/dist/src/tv-remote.js +1 -0
- package/dist/src/type-text-runtime.js +1 -0
- package/dist/src/undici.js +99 -0
- package/dist/src/update-check.js +1 -1
- package/dist/src/verified-file.js +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/web.js +2 -1
- package/dist/src/web2.js +1 -0
- package/dist/src/webdriver-ios-snapshot.js +1 -0
- package/dist/src/webdriver-source.js +1 -0
- package/dist/src/window-state.js +1 -0
- package/linux/atspi-dump.py +54 -9
- package/package.json +58 -35
- package/server.json +9 -3
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.20.10.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.10.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.20.10.apk.sha256 +0 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CoordinateTextEntryTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+FlatSnapshotFiltering.swift +0 -168
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+LifecycleCacheTests.swift +0 -6
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+RecordingTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SelectorMatchPolicyTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentation.swift +0 -183
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotPresentationTests.swift +0 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotTraversalIdentityTests.swift +0 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryPolicyTests.swift +0 -4
- package/dist/src/appearance.js +0 -1
- package/dist/src/apps.js +0 -5
- package/dist/src/audio-probe.js +0 -1
- package/dist/src/cli-grammar.js +0 -1
- package/dist/src/command-catalog.js +0 -1
- package/dist/src/debug-symbols.js +0 -5
- package/dist/src/device-input-state.js +0 -2
- package/dist/src/device-ready.js +0 -1
- package/dist/src/dispatch.js +0 -1
- package/dist/src/handler-utils.js +0 -1
- package/dist/src/helper-package-install.js +0 -1
- package/dist/src/host-process.js +0 -3
- package/dist/src/ime-lifecycle.js +0 -2
- package/dist/src/ime-recovery-marker.js +0 -1
- package/dist/src/input-actions3.js +0 -1
- package/dist/src/install-artifact.js +0 -1
- package/dist/src/install-artifact2.js +0 -1
- package/dist/src/interaction-common.js +0 -1
- package/dist/src/interaction-runtime.js +0 -1
- package/dist/src/interaction-snapshot.js +0 -1
- package/dist/src/manifest.js +0 -1
- package/dist/src/method-scope.js +0 -1
- package/dist/src/png-resize.js +0 -1
- package/dist/src/process-lock.js +0 -1
- package/dist/src/runner-lease.js +0 -1
- package/dist/src/runner-sequence.js +0 -1
- package/dist/src/script-source-bundle.js +0 -16
- package/dist/src/sdk-android-adb.d.ts +0 -245
- package/dist/src/sdk-android-adb.js +0 -4
- package/dist/src/sdk.js +0 -1
- package/dist/src/setting-state.js +0 -1
- package/dist/src/shell-quote.js +0 -1
- package/dist/src/snapshot-session.js +0 -1
- package/dist/src/timing-safe-equal.js +0 -1
- package/dist/src/unsupported-interactor.js +0 -1
- package/dist/src/verdict.js +0 -1
- /package/dist/src/{recording-telemetry.js → telemetry.js} +0 -0
|
@@ -30,30 +30,25 @@ struct GestureEvent: Decodable {
|
|
|
30
30
|
let edge: String?
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
enum
|
|
34
|
-
case
|
|
35
|
-
case
|
|
36
|
-
|
|
33
|
+
enum ExportQuality: String {
|
|
34
|
+
case medium
|
|
35
|
+
case high
|
|
36
|
+
}
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@main
|
|
41
|
+
enum RecordingOverlay {
|
|
42
|
+
static func main() {
|
|
43
|
+
do {
|
|
44
|
+
try run()
|
|
45
|
+
} catch {
|
|
46
|
+
fputs("recording-overlay: \(error)\n", stderr)
|
|
47
|
+
exit(1)
|
|
46
48
|
}
|
|
47
49
|
}
|
|
48
50
|
}
|
|
49
51
|
|
|
50
|
-
do {
|
|
51
|
-
try run()
|
|
52
|
-
} catch {
|
|
53
|
-
fputs("recording-overlay: \(error)\n", stderr)
|
|
54
|
-
exit(1)
|
|
55
|
-
}
|
|
56
|
-
|
|
57
52
|
func run() throws {
|
|
58
53
|
let arguments = Array(CommandLine.arguments.dropFirst())
|
|
59
54
|
let parsedArgs = try parseArguments(arguments)
|
|
@@ -61,9 +56,7 @@ func run() throws {
|
|
|
61
56
|
let outputURL = URL(fileURLWithPath: parsedArgs.outputPath)
|
|
62
57
|
let eventsURL = URL(fileURLWithPath: parsedArgs.eventsPath)
|
|
63
58
|
|
|
64
|
-
|
|
65
|
-
try FileManager.default.removeItem(at: outputURL)
|
|
66
|
-
}
|
|
59
|
+
try removeStaleOutput(outputURL)
|
|
67
60
|
|
|
68
61
|
let payload = try Data(contentsOf: eventsURL)
|
|
69
62
|
let envelope = try JSONDecoder().decode(GestureEnvelope.self, from: payload)
|
|
@@ -74,27 +67,15 @@ func run() throws {
|
|
|
74
67
|
}
|
|
75
68
|
|
|
76
69
|
let asset = AVURLAsset(url: inputURL)
|
|
77
|
-
|
|
78
|
-
throw OverlayError.missingVideoTrack
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
let composition = AVMutableComposition()
|
|
82
|
-
guard let compositionVideoTrack = composition.addMutableTrack(
|
|
83
|
-
withMediaType: .video,
|
|
84
|
-
preferredTrackID: kCMPersistentTrackID_Invalid
|
|
85
|
-
) else {
|
|
86
|
-
throw OverlayError.exportFailed("Failed to create composition video track.")
|
|
87
|
-
}
|
|
88
|
-
|
|
70
|
+
let sourceVideoTrack = try sourceVideoTrack(of: asset)
|
|
89
71
|
let fullRange = CMTimeRange(start: .zero, duration: asset.duration)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
try? compositionAudioTrack.insertTimeRange(fullRange, of: sourceAudioTrack, at: .zero)
|
|
72
|
+
let composition = try makeRecordingComposition(
|
|
73
|
+
asset: asset,
|
|
74
|
+
videoTrack: sourceVideoTrack,
|
|
75
|
+
timeRange: fullRange
|
|
76
|
+
)
|
|
77
|
+
guard let compositionVideoTrack = composition.tracks(withMediaType: .video).first else {
|
|
78
|
+
throw RecordingScriptError.exportFailed("Failed to create composition video track.")
|
|
98
79
|
}
|
|
99
80
|
|
|
100
81
|
let renderSize = resolvedRenderSize(for: sourceVideoTrack)
|
|
@@ -145,36 +126,21 @@ func run() throws {
|
|
|
145
126
|
in: parentLayer
|
|
146
127
|
)
|
|
147
128
|
|
|
148
|
-
// Overlay burn-in forces a full re-encode; medium quality keeps simulator videos readable
|
|
149
|
-
// while avoiding very slow highest-quality exports. Pass --quality high to opt into
|
|
150
|
-
// the slower highest-quality export.
|
|
151
|
-
let presetName = exportPresetName(for: parsedArgs.exportQuality, compatibleWith: composition)
|
|
152
|
-
guard let exporter = AVAssetExportSession(asset: composition, presetName: presetName) else {
|
|
153
|
-
throw OverlayError.exportFailed("Failed to create export session.")
|
|
154
|
-
}
|
|
155
129
|
|
|
156
|
-
exporter.outputURL = outputURL
|
|
157
|
-
exporter.outputFileType = .mp4
|
|
158
|
-
exporter.videoComposition = videoComposition
|
|
159
|
-
exporter.shouldOptimizeForNetworkUse = true
|
|
160
130
|
|
|
161
|
-
let semaphore = DispatchSemaphore(value: 0)
|
|
162
|
-
exporter.exportAsynchronously {
|
|
163
|
-
semaphore.signal()
|
|
164
|
-
}
|
|
165
|
-
if semaphore.wait(timeout: .now() + 120) == .timedOut {
|
|
166
|
-
exporter.cancelExport()
|
|
167
|
-
throw OverlayError.exportFailed("Touch overlay export timed out.")
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if exporter.status != .completed {
|
|
171
|
-
throw OverlayError.exportFailed(exporter.error?.localizedDescription ?? "Touch overlay export failed.")
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
131
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
132
|
+
let presetName = exportPresetName(for: parsedArgs.exportQuality, compatibleWith: composition)
|
|
133
|
+
let exporter = try makeRecordingExporter(
|
|
134
|
+
composition,
|
|
135
|
+
presetName: presetName,
|
|
136
|
+
outputURL: outputURL,
|
|
137
|
+
videoComposition: videoComposition
|
|
138
|
+
)
|
|
139
|
+
try runRecordingExport(
|
|
140
|
+
exporter,
|
|
141
|
+
timeoutMessage: "Touch overlay export timed out.",
|
|
142
|
+
failureMessage: "Touch overlay export failed."
|
|
143
|
+
)
|
|
178
144
|
}
|
|
179
145
|
|
|
180
146
|
func parseArguments(
|
|
@@ -183,8 +149,8 @@ func parseArguments(
|
|
|
183
149
|
var inputPath: String?
|
|
184
150
|
var outputPath: String?
|
|
185
151
|
var eventsPath: String?
|
|
186
|
-
|
|
187
|
-
|
|
152
|
+
|
|
153
|
+
|
|
188
154
|
var exportQuality: ExportQuality = .medium
|
|
189
155
|
var index = 0
|
|
190
156
|
|
|
@@ -193,33 +159,28 @@ func parseArguments(
|
|
|
193
159
|
let nextIndex = index + 1
|
|
194
160
|
switch argument {
|
|
195
161
|
case "--input":
|
|
196
|
-
|
|
197
|
-
inputPath = arguments[nextIndex]
|
|
162
|
+
inputPath = try recordingOptionValue(arguments, nextIndex, "--input")
|
|
198
163
|
index += 2
|
|
199
164
|
case "--output":
|
|
200
|
-
|
|
201
|
-
outputPath = arguments[nextIndex]
|
|
165
|
+
outputPath = try recordingOptionValue(arguments, nextIndex, "--output")
|
|
202
166
|
index += 2
|
|
203
167
|
case "--events":
|
|
204
|
-
|
|
205
|
-
eventsPath = arguments[nextIndex]
|
|
168
|
+
eventsPath = try recordingOptionValue(arguments, nextIndex, "--events")
|
|
206
169
|
index += 2
|
|
207
170
|
case "--quality":
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
guard let parsed = ExportQuality(rawValue: arguments[nextIndex]) else {
|
|
212
|
-
throw OverlayError.invalidArgs("--quality must be one of: medium, high")
|
|
171
|
+
let rawValue = try recordingOptionValue(arguments, nextIndex, "--quality")
|
|
172
|
+
guard let parsed = ExportQuality(rawValue: rawValue) else {
|
|
173
|
+
throw RecordingScriptError.invalidArgs("--quality must be one of: medium, high")
|
|
213
174
|
}
|
|
214
175
|
exportQuality = parsed
|
|
215
176
|
index += 2
|
|
216
177
|
default:
|
|
217
|
-
throw
|
|
178
|
+
throw RecordingScriptError.invalidArgs("Unknown argument: \(argument)")
|
|
218
179
|
}
|
|
219
180
|
}
|
|
220
181
|
|
|
221
182
|
guard let inputPath, let outputPath, let eventsPath else {
|
|
222
|
-
throw
|
|
183
|
+
throw RecordingScriptError.invalidArgs(
|
|
223
184
|
"Usage: recording-overlay.swift --input <video> --output <video> --events <json> [--quality <medium|high>]"
|
|
224
185
|
)
|
|
225
186
|
}
|
|
@@ -234,8 +195,8 @@ func exportPresetName(
|
|
|
234
195
|
case .high:
|
|
235
196
|
return AVAssetExportPresetHighestQuality
|
|
236
197
|
case .medium:
|
|
237
|
-
|
|
238
|
-
|
|
198
|
+
|
|
199
|
+
|
|
239
200
|
let compatible = AVAssetExportSession.exportPresets(compatibleWith: asset)
|
|
240
201
|
return compatible.contains(AVAssetExportPresetMediumQuality)
|
|
241
202
|
? AVAssetExportPresetMediumQuality
|
|
@@ -1,102 +1,59 @@
|
|
|
1
1
|
import AVFoundation
|
|
2
2
|
import Foundation
|
|
3
3
|
|
|
4
|
-
enum TrimError: Error, CustomStringConvertible {
|
|
5
|
-
case invalidArgs(String)
|
|
6
|
-
case invalidTrimRange
|
|
7
|
-
case missingVideoTrack
|
|
8
|
-
case exportFailed(String)
|
|
9
4
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return message
|
|
5
|
+
|
|
6
|
+
@main
|
|
7
|
+
enum RecordingTrim {
|
|
8
|
+
static func main() {
|
|
9
|
+
do {
|
|
10
|
+
try run()
|
|
11
|
+
} catch {
|
|
12
|
+
fputs("recording-trim: \(error)\n", stderr)
|
|
13
|
+
exit(1)
|
|
20
14
|
}
|
|
21
15
|
}
|
|
22
16
|
}
|
|
23
17
|
|
|
24
|
-
do {
|
|
25
|
-
try run()
|
|
26
|
-
} catch {
|
|
27
|
-
fputs("recording-trim: \(error)\n", stderr)
|
|
28
|
-
exit(1)
|
|
29
|
-
}
|
|
30
|
-
|
|
31
18
|
func run() throws {
|
|
32
19
|
let arguments = Array(CommandLine.arguments.dropFirst())
|
|
33
20
|
let parsedArgs = try parseArguments(arguments)
|
|
34
21
|
let inputURL = URL(fileURLWithPath: parsedArgs.inputPath)
|
|
35
22
|
let outputURL = URL(fileURLWithPath: parsedArgs.outputPath)
|
|
36
23
|
|
|
37
|
-
|
|
38
|
-
try FileManager.default.removeItem(at: outputURL)
|
|
39
|
-
}
|
|
24
|
+
try removeStaleOutput(outputURL)
|
|
40
25
|
|
|
41
26
|
let asset = AVURLAsset(url: inputURL)
|
|
42
|
-
|
|
43
|
-
throw TrimError.missingVideoTrack
|
|
44
|
-
}
|
|
45
|
-
|
|
27
|
+
let videoTrack = try sourceVideoTrack(of: asset)
|
|
46
28
|
let trimStart = CMTime(seconds: parsedArgs.trimStartMs / 1000.0, preferredTimescale: 600)
|
|
47
29
|
guard CMTimeCompare(trimStart, asset.duration) < 0 else {
|
|
48
|
-
throw
|
|
30
|
+
throw RecordingScriptError.invalidTrimRange
|
|
49
31
|
}
|
|
50
32
|
|
|
51
33
|
let trimmedDuration = CMTimeSubtract(asset.duration, trimStart)
|
|
52
34
|
guard CMTimeCompare(trimmedDuration, .zero) > 0 else {
|
|
53
|
-
throw
|
|
35
|
+
throw RecordingScriptError.invalidTrimRange
|
|
54
36
|
}
|
|
55
37
|
|
|
56
|
-
let composition =
|
|
57
|
-
|
|
38
|
+
let composition = try makeRecordingComposition(
|
|
39
|
+
asset: asset,
|
|
40
|
+
videoTrack: videoTrack,
|
|
41
|
+
timeRange: CMTimeRange(start: trimStart, duration: trimmedDuration)
|
|
42
|
+
)
|
|
43
|
+
composition.tracks(withMediaType: .video).first?.preferredTransform = videoTrack.preferredTransform
|
|
58
44
|
|
|
59
|
-
guard let compositionVideoTrack = composition.addMutableTrack(
|
|
60
|
-
withMediaType: .video,
|
|
61
|
-
preferredTrackID: kCMPersistentTrackID_Invalid
|
|
62
|
-
) else {
|
|
63
|
-
throw TrimError.exportFailed("Failed to create composition video track.")
|
|
64
|
-
}
|
|
65
|
-
try compositionVideoTrack.insertTimeRange(trimmedRange, of: sourceVideoTrack, at: .zero)
|
|
66
|
-
compositionVideoTrack.preferredTransform = sourceVideoTrack.preferredTransform
|
|
67
45
|
|
|
68
|
-
if let sourceAudioTrack = asset.tracks(withMediaType: .audio).first,
|
|
69
|
-
let compositionAudioTrack = composition.addMutableTrack(
|
|
70
|
-
withMediaType: .audio,
|
|
71
|
-
preferredTrackID: kCMPersistentTrackID_Invalid
|
|
72
|
-
) {
|
|
73
|
-
try? compositionAudioTrack.insertTimeRange(trimmedRange, of: sourceAudioTrack, at: .zero)
|
|
74
|
-
}
|
|
75
46
|
|
|
76
47
|
let presetName = AVAssetExportSession.exportPresets(compatibleWith: composition)
|
|
77
48
|
.contains(AVAssetExportPresetPassthrough)
|
|
78
49
|
? AVAssetExportPresetPassthrough
|
|
79
50
|
: AVAssetExportPresetHighestQuality
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
exporter.shouldOptimizeForNetworkUse = true
|
|
87
|
-
|
|
88
|
-
let semaphore = DispatchSemaphore(value: 0)
|
|
89
|
-
exporter.exportAsynchronously {
|
|
90
|
-
semaphore.signal()
|
|
91
|
-
}
|
|
92
|
-
if semaphore.wait(timeout: .now() + 120) == .timedOut {
|
|
93
|
-
exporter.cancelExport()
|
|
94
|
-
throw TrimError.exportFailed("Trim export timed out.")
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if exporter.status != .completed {
|
|
98
|
-
throw TrimError.exportFailed(exporter.error?.localizedDescription ?? "Trim export failed.")
|
|
99
|
-
}
|
|
51
|
+
let exporter = try makeRecordingExporter(composition, presetName: presetName, outputURL: outputURL)
|
|
52
|
+
try runRecordingExport(
|
|
53
|
+
exporter,
|
|
54
|
+
timeoutMessage: "Trim export timed out.",
|
|
55
|
+
failureMessage: "Trim export failed."
|
|
56
|
+
)
|
|
100
57
|
}
|
|
101
58
|
|
|
102
59
|
func parseArguments(_ arguments: [String]) throws -> (inputPath: String, outputPath: String, trimStartMs: Double) {
|
|
@@ -110,29 +67,25 @@ func parseArguments(_ arguments: [String]) throws -> (inputPath: String, outputP
|
|
|
110
67
|
let nextIndex = index + 1
|
|
111
68
|
switch argument {
|
|
112
69
|
case "--input":
|
|
113
|
-
|
|
114
|
-
inputPath = arguments[nextIndex]
|
|
70
|
+
inputPath = try recordingOptionValue(arguments, nextIndex, "--input")
|
|
115
71
|
index += 2
|
|
116
72
|
case "--output":
|
|
117
|
-
|
|
118
|
-
outputPath = arguments[nextIndex]
|
|
73
|
+
outputPath = try recordingOptionValue(arguments, nextIndex, "--output")
|
|
119
74
|
index += 2
|
|
120
75
|
case "--trim-start-ms":
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
guard let parsed = Double(arguments[nextIndex]), parsed >= 0 else {
|
|
125
|
-
throw TrimError.invalidArgs("--trim-start-ms must be a non-negative number")
|
|
76
|
+
let rawValue = try recordingOptionValue(arguments, nextIndex, "--trim-start-ms")
|
|
77
|
+
guard let parsed = Double(rawValue), parsed >= 0 else {
|
|
78
|
+
throw RecordingScriptError.invalidArgs("--trim-start-ms must be a non-negative number")
|
|
126
79
|
}
|
|
127
80
|
trimStartMs = parsed
|
|
128
81
|
index += 2
|
|
129
82
|
default:
|
|
130
|
-
throw
|
|
83
|
+
throw RecordingScriptError.invalidArgs("Unknown argument: \(argument)")
|
|
131
84
|
}
|
|
132
85
|
}
|
|
133
86
|
|
|
134
87
|
guard let inputPath, let outputPath, let trimStartMs else {
|
|
135
|
-
throw
|
|
88
|
+
throw RecordingScriptError.invalidArgs(
|
|
136
89
|
"Usage: recording-trim.swift --input <video> --output <video> --trim-start-ms <ms>"
|
|
137
90
|
)
|
|
138
91
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// swift-tools-version: 5.9
|
|
2
|
+
import PackageDescription
|
|
3
|
+
|
|
4
|
+
let package = Package(
|
|
5
|
+
name: "agent-device-snapshot-presentation",
|
|
6
|
+
platforms: [
|
|
7
|
+
.iOS(.v15),
|
|
8
|
+
.macOS(.v13),
|
|
9
|
+
.tvOS(.v15),
|
|
10
|
+
.visionOS(.v1),
|
|
11
|
+
],
|
|
12
|
+
products: [
|
|
13
|
+
.library(
|
|
14
|
+
name: "AgentDeviceSnapshotPresentation",
|
|
15
|
+
targets: ["AgentDeviceSnapshotPresentation"]
|
|
16
|
+
),
|
|
17
|
+
],
|
|
18
|
+
targets: [
|
|
19
|
+
.target(name: "AgentDeviceSnapshotPresentation"),
|
|
20
|
+
]
|
|
21
|
+
)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import CoreGraphics
|
|
3
|
+
|
|
4
|
+
public enum SnapshotGeometry {
|
|
5
|
+
public static func effectiveFrame(
|
|
6
|
+
reportedFrame: CGRect,
|
|
7
|
+
viewport: CGRect,
|
|
8
|
+
ancestorClip: CGRect?
|
|
9
|
+
) -> CGRect {
|
|
10
|
+
var frame = reportedFrame
|
|
11
|
+
if !viewport.isInfinite {
|
|
12
|
+
frame = clipped(frame, to: viewport)
|
|
13
|
+
}
|
|
14
|
+
if let ancestorClip {
|
|
15
|
+
frame = clipped(frame, to: ancestorClip)
|
|
16
|
+
}
|
|
17
|
+
return frame
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public static func snapshotRect(from frame: CGRect, reportedFrame: CGRect) -> SnapshotRect {
|
|
21
|
+
guard !frame.isNull, !frame.isEmpty else {
|
|
22
|
+
return SnapshotRect(
|
|
23
|
+
x: Double(reportedFrame.minX),
|
|
24
|
+
y: Double(reportedFrame.minY),
|
|
25
|
+
width: 0,
|
|
26
|
+
height: 0
|
|
27
|
+
)
|
|
28
|
+
}
|
|
29
|
+
return SnapshotRect(
|
|
30
|
+
x: Double(frame.origin.x),
|
|
31
|
+
y: Double(frame.origin.y),
|
|
32
|
+
width: Double(max(0, frame.size.width)),
|
|
33
|
+
height: Double(max(0, frame.size.height))
|
|
34
|
+
)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
public static func isGeometricallyActionable(
|
|
38
|
+
enabled: Bool,
|
|
39
|
+
frame: CGRect,
|
|
40
|
+
viewport: CGRect
|
|
41
|
+
) -> Bool {
|
|
42
|
+
guard enabled, !frame.isNull, !frame.isEmpty else { return false }
|
|
43
|
+
if viewport.isInfinite { return true }
|
|
44
|
+
let center = CGPoint(x: frame.midX, y: frame.midY)
|
|
45
|
+
return viewport.contains(center)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private static func clipped(_ frame: CGRect, to clip: CGRect) -> CGRect {
|
|
49
|
+
guard !frame.isNull, !frame.isEmpty else { return frame }
|
|
50
|
+
let intersection = frame.intersection(clip)
|
|
51
|
+
guard !intersection.isNull, !intersection.isEmpty else {
|
|
52
|
+
return CGRect(x: frame.minX, y: frame.minY, width: 0, height: 0)
|
|
53
|
+
}
|
|
54
|
+
return intersection
|
|
55
|
+
}
|
|
56
|
+
}
|