agent-device 0.21.24 → 0.21.25
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/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.25.apk.sha256 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.24.manifest.json → agent-device-android-ime-helper-0.21.25.manifest.json} +4 -4
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.apk.sha256 +1 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.25.manifest.json +16 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +159 -4
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerHttpRequestFraming.swift +139 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerPeer.swift +41 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerListenerToken.swift +25 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Environment.swift +18 -11
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Navigation.swift +25 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedTextEntry.swift +0 -3
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +1 -3
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryConfirmation.swift +59 -26
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +47 -103
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +142 -54
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TypeExecution.swift +4 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +21 -19
- package/dist/src/absence-observation-errors.js +1 -0
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb-executor.js +2 -2
- package/dist/src/adb-failure.js +2 -2
- package/dist/src/agent-browser-lifecycle.js +1 -1
- package/dist/src/agent-browser-process-record.js +1 -1
- package/dist/src/agent-browser-provider.js +1 -1
- package/dist/src/agent-browser-tool.js +1 -1
- package/dist/src/agent-device-client.js +2 -2
- package/dist/src/android-adb.js +1 -1
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/android-system-surface-disclosure.js +1 -0
- package/dist/src/android-text-entry.js +1 -0
- package/dist/src/android.js +1 -1
- package/dist/src/app-backend.js +1 -1
- package/dist/src/app-helpers.js +1 -1
- package/dist/src/app-launch.js +1 -1
- package/dist/src/app-lifecycle.js +4 -3
- package/dist/src/app-lifecycle2.js +2 -2
- package/dist/src/app-log-files.js +1 -1
- package/dist/src/app-log-reconnect.js +1 -1
- package/dist/src/app-log-runtime2.js +3 -3
- package/dist/src/app-resolution-facade.js +1 -1
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/apple-runner-platform.js +1 -1
- package/dist/src/artifact-download.js +1 -1
- package/dist/src/auth.js +1 -1
- package/dist/src/aws-device-farm-connection.js +1 -1
- package/dist/src/back-mode.js +1 -1
- package/dist/src/boot-diagnostics.js +1 -1
- package/dist/src/browserstack-connection.js +1 -1
- package/dist/src/capture-disclosure.js +1 -0
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +17 -14
- package/dist/src/cli-output.js +1 -1
- package/dist/src/cli-runner.js +3 -1
- package/dist/src/cli.js +3 -3
- package/dist/src/client-companion-tunnel.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +8 -2
- package/dist/src/code-signature-cache.js +1 -1
- package/dist/src/code-signature.js +1 -1
- package/dist/src/command-metadata.js +73 -1
- package/dist/src/command-policy.js +1 -0
- 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/connection-runtime.js +1 -1
- package/dist/src/connection-verification.js +1 -1
- package/dist/src/connection.js +3 -3
- package/dist/src/contracts.js +1 -1
- package/dist/src/daemon-client-lease-beat.js +1 -1
- package/dist/src/daemon-client-lifecycle.js +1 -1
- package/dist/src/daemon-client-liveness-probe.js +1 -1
- package/dist/src/daemon-policy-file.js +1 -1
- package/dist/src/daemon-registration-owner.js +1 -1
- package/dist/src/daemon-registration.js +1 -1
- package/dist/src/daemon-resolution.js +3 -1
- package/dist/src/debug-symbols-facade.js +1 -1
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-input-state.d.ts +5 -3
- package/dist/src/device-inventory-context.js +1 -1
- package/dist/src/device-readiness-runtime.js +1 -1
- package/dist/src/device-release.js +1 -1
- package/dist/src/device-shell.js +1 -1
- package/dist/src/device.js +3 -1
- package/dist/src/devicectl.js +1 -1
- package/dist/src/diagnostics.js +1 -1
- package/dist/src/doctor-facade.js +1 -1
- package/dist/src/durable-capture-resource.js +1 -1
- package/dist/src/durable-resource.js +1 -1
- package/dist/src/engine-eval-script.js +1 -1
- package/dist/src/error.js +1 -1
- package/dist/src/exec.js +1 -1
- package/dist/src/expo-dev-client-launch.js +1 -0
- package/dist/src/file.js +3 -1
- 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-plan.js +1 -1
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/harmonyos.js +1 -1
- package/dist/src/hdc.js +1 -1
- package/dist/src/helper.js +2 -2
- package/dist/src/human-control.js +1 -1
- package/dist/src/ime-rebind.js +1 -1
- package/dist/src/ime-state.js +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/input-actions.js +1 -1
- package/dist/src/input-actions2.js +2 -2
- package/dist/src/install-source-network-transport.js +1 -1
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-error.js +1 -0
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor-operation-catalog.js +1 -1
- package/dist/src/interactor.js +5 -5
- package/dist/src/interactor2.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +5 -1
- package/dist/src/internal/png-worker.js +1 -1
- package/dist/src/inventory.js +2 -2
- package/dist/src/inventory6.js +1 -1
- package/dist/src/io.d.ts +2 -2
- package/dist/src/ios-client.js +1 -1
- package/dist/src/ios-settings.js +1 -1
- package/dist/src/ios-snapshot-acquisition.js +1 -1
- package/dist/src/ios-snapshot-adapter.js +1 -1
- package/dist/src/ios-snapshot-engine.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/keyed-lock.js +1 -1
- package/dist/src/launch-confirmation.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun-runtime-dependencies.js +1 -1
- package/dist/src/limrun.d.ts +2 -10
- package/dist/src/limrun.js +1 -1
- package/dist/src/linux.js +1 -1
- package/dist/src/load.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -1
- package/dist/src/log-stream.js +9 -9
- package/dist/src/mechanics.js +16 -16
- 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/observability.js +1 -1
- package/dist/src/open-target-resolution.js +1 -1
- package/dist/src/output-path.js +1 -1
- package/dist/src/overlay.js +1 -3
- package/dist/src/perf-facade.js +1 -1
- package/dist/src/perf-runtime-operation-builder.js +1 -1
- package/dist/src/perf-runtime.js +1 -1
- package/dist/src/physical-device-control.js +1 -1
- package/dist/src/platform-request-scope.js +1 -1
- package/dist/src/platform-runtime-android-adb-host.js +1 -1
- package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
- package/dist/src/platform-runtime-apple-resources.js +1 -0
- package/dist/src/platform-runtime-claim-recovery.js +1 -0
- package/dist/src/platform-runtime-daemon-services.js +1 -0
- package/dist/src/platform-runtime-host.js +1 -1
- 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-transport.js +1 -1
- package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-harmony-host.js +1 -1
- package/dist/src/platform-runtime-screen-recording-web-host.js +1 -1
- package/dist/src/platform-runtime-unavailable.js +1 -1
- package/dist/src/platform-runtime.js +1 -1
- package/dist/src/platform-runtime2.js +1 -1
- package/dist/src/plugin.js +1 -1
- package/dist/src/png-crop-bytes.js +1 -1
- package/dist/src/png-resize.js +1 -0
- package/dist/src/png-worker-client.js +1 -1
- package/dist/src/png-worker-contract.js +1 -1
- package/dist/src/process-entry.js +1 -1
- package/dist/src/process.js +1 -1
- package/dist/src/provider-credential-fingerprint.js +1 -1
- package/dist/src/provider-device-admission.js +1 -1
- package/dist/src/provider-policy.js +1 -1
- package/dist/src/provider-webdriver.js +1 -1
- package/dist/src/proxy.js +2 -2
- package/dist/src/quality-warnings.js +1 -1
- package/dist/src/react-native-overlay2.js +3 -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/recording.js +2 -2
- package/dist/src/register-builtins.js +1 -1
- package/dist/src/remote-config-core.js +1 -1
- package/dist/src/replay-backend-registry.js +1 -0
- package/dist/src/replay-divergence.js +1 -1
- package/dist/src/replay-maestro-backend.js +117 -0
- package/dist/src/replay-script-selection.js +1 -0
- package/dist/src/replay.js +1 -3
- package/dist/src/replay2.js +1 -0
- package/dist/src/reporting.js +3 -3
- package/dist/src/request-cancel.js +1 -1
- package/dist/src/request-providers.js +1 -1
- package/dist/src/request-runtime-binding.js +1 -1
- package/dist/src/result-serialization.js +1 -1
- package/dist/src/retry.js +1 -1
- package/dist/src/runner-cache-retention.js +1 -1
- package/dist/src/runner-cache-trim.js +1 -1
- package/dist/src/runner-client.js +1 -1
- package/dist/src/runner-dev-tools-security.js +1 -1
- package/dist/src/runner-device-readiness.js +1 -1
- package/dist/src/runner-device-set.js +1 -1
- package/dist/src/runner-error-classification.js +3 -3
- package/dist/src/runner-exchange.js +1 -1
- package/dist/src/runner-lease.js +1 -1
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner-retention.js +1 -0
- package/dist/src/runner-start-budget.js +1 -1
- package/dist/src/runner-startup-transport.js +1 -0
- package/dist/src/runner-toolchain-probe.js +1 -1
- package/dist/src/runner.js +2 -1
- package/dist/src/runtime-command-surface.js +1 -0
- package/dist/src/runtime-deployment.js +1 -1
- package/dist/src/runtime-factory.js +1 -0
- package/dist/src/runtime-session.js +1 -0
- package/dist/src/runtime-transport-hints.js +1 -1
- package/dist/src/runtime.js +2 -1
- package/dist/src/runtime10.js +2 -1
- package/dist/src/runtime2.js +5 -2
- package/dist/src/runtime3.js +1 -5
- package/dist/src/runtime4.js +5 -1
- package/dist/src/runtime5.js +1 -5
- 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/screenshot-image.js +1 -1
- package/dist/src/screenshot-runtime.js +1 -0
- package/dist/src/screenshot3.js +5 -5
- package/dist/src/sdk-batch-runner.js +2 -2
- package/dist/src/sdk-batch.js +1 -1
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-io.d.ts +4 -2
- package/dist/src/sdk-selectors.d.ts +4 -5
- package/dist/src/sdk-selectors.js +1 -1
- package/dist/src/selection.js +0 -0
- package/dist/src/selector-pipeline-policy.js +1 -1
- package/dist/src/selector-runtime.js +1 -1
- package/dist/src/selectors.js +1 -1
- package/dist/src/server.js +2 -2
- package/dist/src/session-allocation.js +1 -1
- package/dist/src/session-replay-runtime-failure-response.js +1 -0
- package/dist/src/session-runtime-admission.js +1 -0
- package/dist/src/session.js +1 -1
- package/dist/src/session2.js +5 -5
- package/dist/src/settings.js +1 -1
- package/dist/src/settings2.js +1 -1
- package/dist/src/simctl-settings.js +1 -1
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-chrome.js +1 -0
- package/dist/src/snapshot-desktop-projection.js +1 -1
- package/dist/src/snapshot-evidence.js +1 -0
- package/dist/src/snapshot-node-lookup.js +1 -0
- package/dist/src/snapshot-occlusion.js +1 -0
- package/dist/src/snapshot-quality-verdict.js +1 -0
- package/dist/src/snapshot-runtime-binding.js +1 -1
- package/dist/src/snapshot-runtime.js +1 -1
- package/dist/src/snapshot-state.js +1 -1
- package/dist/src/snapshot.js +1 -1
- package/dist/src/snapshot2.js +1 -1
- package/dist/src/snapshot3.js +1 -1
- package/dist/src/src.js +5 -1
- package/dist/src/src2.js +1 -1
- package/dist/src/src3.js +2 -1
- package/dist/src/store.js +1 -1
- package/dist/src/surface-snapshot2.js +1 -1
- package/dist/src/target-evidence-tree.js +1 -0
- package/dist/src/target-evidence.js +1 -1
- package/dist/src/text-entry-focus.js +1 -1
- package/dist/src/tool-provider2.js +1 -1
- package/dist/src/touch-runtime.js +1 -1
- package/dist/src/touch-runtime2.js +1 -1
- package/dist/src/tree.js +1 -1
- package/dist/src/tv-remote.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/undici.js +8 -8
- package/dist/src/update-check.js +1 -1
- package/dist/src/vars.js +2 -0
- package/dist/src/version.js +1 -1
- package/dist/src/video.js +2 -2
- package/dist/src/wait.js +1 -0
- package/dist/src/web.js +1 -1
- package/dist/src/web2.js +1 -1
- package/package.json +9 -11
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk +0 -0
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.24.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk +0 -0
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.24.manifest.json +0 -16
- package/dist/src/adb-transport.js +0 -1
- package/dist/src/alert-runtime.js +0 -1
- package/dist/src/app-deployment-resolution.js +0 -2
- package/dist/src/app-inventory-contract.js +0 -1
- package/dist/src/app-log-session-resource.js +0 -1
- package/dist/src/application-lifecycle-runtime.js +0 -1
- package/dist/src/auth-session.js +0 -1
- package/dist/src/browserstack-device-features.js +0 -1
- package/dist/src/browserstack.js +0 -1
- package/dist/src/cache.js +0 -1
- package/dist/src/capture.js +0 -1
- package/dist/src/catalog.js +0 -1
- package/dist/src/click-button.js +0 -1
- package/dist/src/client-metro-companion.js +0 -1
- package/dist/src/client-options.js +0 -3
- package/dist/src/daemon-client-transport.js +0 -1
- package/dist/src/daemon-http.js +0 -1
- package/dist/src/device-rotation.js +0 -1
- package/dist/src/device-session.js +0 -3
- package/dist/src/device2.js +0 -1
- package/dist/src/device3.js +0 -3
- package/dist/src/dispatch-resolve.js +0 -4
- package/dist/src/format.js +0 -2
- package/dist/src/gesture-plan-types.js +0 -1
- package/dist/src/host.js +0 -1
- package/dist/src/ime-settings-record.js +0 -1
- package/dist/src/interaction-ref-policy.js +0 -1
- package/dist/src/interactor-operation-binding.js +0 -1
- package/dist/src/keyboard-actions.js +0 -1
- package/dist/src/lease-context.js +0 -1
- package/dist/src/lease-registry-scope.js +0 -1
- package/dist/src/lease-scope.js +0 -1
- package/dist/src/managed-device-scope.js +0 -1
- package/dist/src/manifest.js +0 -1
- package/dist/src/observe-until.js +0 -1
- package/dist/src/output-common.js +0 -5
- package/dist/src/owner-identity.js +0 -3
- package/dist/src/path-resolution.js +0 -1
- package/dist/src/perf-runtime-plan.js +0 -1
- package/dist/src/platform-runtime-app-log-process.js +0 -1
- package/dist/src/platform-runtime-managed-owner.js +0 -1
- package/dist/src/platform-runtime-screen-recording-process-host.js +0 -1
- package/dist/src/png.js +0 -1
- package/dist/src/provider-session-ownership.js +0 -2
- package/dist/src/providers.js +0 -1
- package/dist/src/registry.js +0 -68
- package/dist/src/remote-connection-state.js +0 -1
- package/dist/src/request-admission.js +0 -1
- package/dist/src/request-cancellation.js +0 -1
- package/dist/src/request-progress-protocol.js +0 -1
- package/dist/src/runner-cache-metadata.js +0 -2
- package/dist/src/runner-disposal.js +0 -1
- package/dist/src/runner-session-types.js +0 -1
- package/dist/src/runtime-admission.js +0 -1
- package/dist/src/runtime11.js +0 -2
- package/dist/src/screen-recording-resource-recovery.js +0 -1
- package/dist/src/screenshot-result.js +0 -1
- package/dist/src/script.js +0 -1
- package/dist/src/scroll-command.js +0 -1
- package/dist/src/scroll-gesture.js +0 -1
- package/dist/src/scroll-indicator.js +0 -1
- package/dist/src/session-artifact-paths.js +0 -1
- package/dist/src/session-paths.js +0 -1
- package/dist/src/session-repair-tombstone.js +0 -1
- package/dist/src/session-snapshot.js +0 -1
- package/dist/src/snapshot-private-evidence.js +0 -1
- package/dist/src/snapshot4.js +0 -1
- package/dist/src/src4.js +0 -1
- package/dist/src/src5.js +0 -1
- package/dist/src/src6.js +0 -1
- package/dist/src/src7.js +0 -2
- package/dist/src/src8.js +0 -115
- package/dist/src/string-enum.js +0 -1
- package/dist/src/success-text.js +0 -1
- package/dist/src/transport.js +0 -3
- package/dist/src/ttl-memo.js +0 -1
- package/dist/src/verified-file.js +0 -1
- package/dist/src/window-state.js +0 -1
- /package/dist/src/{doctor-output.js → doctor-lines.js} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as e,K as t,P as n,V as r,z as i}from"./sdk-contracts.js";import{n as a}from"./entities.js";import{t as o}from"./parser.js";import{A as s,L as c,M as l,a as u,i as d,j as f,o as p,t as m}from"./host.js";import{d as h,i as g,m as _,r as v,s as ee,t as te,v as ne}from"./runner-error-classification.js";import{i as re,n as ie}from"./runner-device-set.js";import y from"node:fs";import ae from"node:os";import b from"node:path";import x from"node:net";import S from"node:http";async function oe(){return await new Promise((e,t)=>{let r=x.createServer();r.listen(0,`127.0.0.1`,()=>{let i=r.address();if(typeof i==`object`&&i?.port){let t=i.port;r.close(()=>e(t))}else r.close(()=>t(new n(`COMMAND_FAILED`,`Failed to allocate port`)))}),r.on(`error`,t)})}function se(e,t,n,r){t&&T(t,e),n&&T(n,e),r&&process.stderr.write(e)}const C=new Map,w=new Map;function T(e,t){let n=(C.get(e)??Promise.resolve()).then(()=>E(e,t),()=>E(e,t)).then(()=>{w.delete(e)},t=>{w.set(e,t)}).finally(()=>{C.get(e)===n&&C.delete(e)});C.set(e,n)}async function E(e,t){await y.promises.mkdir(b.dirname(e),{recursive:!0}),await y.promises.appendFile(e,t)}async function ce(e,t={}){let n=AbortSignal.any([t.signal??new AbortController().signal,AbortSignal.timeout(t.timeoutMs??2e3)]);if(n.aborted)throw n.reason;let r=C.get(e);if(r){let e=()=>{};try{await Promise.race([r,new Promise((t,r)=>{e=()=>r(n.reason),n.addEventListener(`abort`,e,{once:!0})})])}finally{n.removeEventListener(`abort`,e)}}let i=w.get(e);if(i!==void 0)throw i}function le(e){try{y.existsSync(e)&&y.unlinkSync(e)}catch{}}function D(e,t){if(e)return e;let n=t.replaceAll(/[^A-Za-z0-9._-]/g,`_`);return b.join(ae.tmpdir(),`agent-device`,`apple-runner`,`logs`,`${n}.log`)}function ue(e,t){let n=0;try{n=y.fstatSync(t).size}catch{}return{logPath:e,startOffset:n}}function de(e){let t=e.pollMs??50,n=Buffer.alloc(65536),r=e.file.startOffset,i=null,a=null,o=!1,s=()=>{if(!o)try{i??=y.openSync(e.file.logPath,`r`);let t=y.fstatSync(i).size;for(t<r&&(r=0);r<t;){let a=Math.min(n.length,t-r),o=y.readSync(i,n,0,a,r);if(o<=0)break;r+=o,e.onOutput(n.toString(`utf8`,0,o)),t=y.fstatSync(i).size}}catch{l()}},c=()=>{o||(a=setTimeout(()=>{s(),c()},t),a.unref?.())};function l(){if(!o&&(o=!0,a&&clearTimeout(a),a=null,i!==null)){try{y.closeSync(i)}catch{}i=null}}return c(),{drain:()=>{s(),l()},stop:l}}function fe(e,t){if(!e)return``;let n=null;try{n=y.openSync(e.logPath,`r`);let r=y.fstatSync(n).size,i=Math.max(e.startOffset,r-t),a=r-i;if(a<=0)return``;let o=Buffer.alloc(a),s=y.readSync(n,o,0,a,i);return o.toString(`utf8`,0,Math.max(s,0))}catch{return``}finally{if(n!==null)try{y.closeSync(n)}catch{}}}const O=new Map;function k(e,t){let n,r=!1;return{markUsbmuxUnattached:()=>{r=!0},resolveRoute:async(i,a=!1)=>{if(e.kind!==`device`)return j(e,t,null,!1);let o=f(e);if(o.backend===`xctest`||!r)return pe(e,t);if(!a){let r=me(e.id);if(r)return j(e,t,r,!0);if(n!==void 0)return j(e,t,n,!1)}let{tunnelIp:s}=await o.resolveTunnel(e,i);return n=s,s&&he(e.id,s),j(e,t,s,!1)}}}function A(e){O.delete(e)}function pe(e,t){return{kind:`usbmux`,endpoints:[`usbmux://${e.id}:${t}/command`],cachedTunnelIp:!1}}function j(e,t,n,r){let i=[`http://127.0.0.1:${t}/command`];return e.kind===`device`&&n&&i.unshift(`http://[${n}]:${t}/command`),{kind:`network`,endpoints:i,cachedTunnelIp:r}}function me(e){let t=O.get(e);return t?t.expiresAt<=Date.now()?(O.delete(e),null):t.ip:null}function he(e,t){O.set(e,{ip:t,expiresAt:Date.now()+3e4})}const M=`Connect the device by cable, trust this Mac, keep it unlocked, and retry.`;async function ge(e,t,n,r,i){let a=m.fromTimeoutMs(r);return await ve(e,t,await _e(e,t,a.remainingMs(),i),n,a.remainingMs(),i)}async function _e(e,t,r,i){let a=await N(e,r,i);try{await P(a,1,I(`ListDevices`));let e=ye((await F(a,r,i)).payload.toString(`utf8`),t);if(e!==void 0)return e;throw new n(`DEVICE_NOT_FOUND`,`iOS device is not available through usbmux`,{deviceId:t,backend:`xctest`,usbmuxDeviceAttached:!1,hint:M})}finally{a.destroy()}}async function ve(e,t,n,r,i,a){let o=await N(e,i,a);try{await P(o,2,I(`Connect`,{DeviceID:n,PortNumber:Ce(r)}));let e=xe((await F(o,i,a)).payload.toString(`utf8`),`Number`);if(e!==0)throw Se({result:e,udid:t,deviceId:n,port:r});return o}catch(e){throw o.destroy(),e}}async function N(t,r,i){if(z(r,`connect to usbmuxd`),i?.aborted)throw e();return await new Promise((a,o)=>{let s=x.createConnection(t),c=!1,l=setTimeout(()=>{p(new n(`COMMAND_FAILED`,`Timed out connecting to usbmuxd`,{backend:`xctest`,socketPath:t,timeoutMs:r}))},r),u=()=>p(),d=e=>p(e),f=()=>p(e()),p=e=>{c||(c=!0,clearTimeout(l),s.off(`connect`,u),s.off(`error`,d),i?.removeEventListener(`abort`,f),e?(s.destroy(),o(e)):a(s))};s.once(`connect`,u),s.once(`error`,d),i?.addEventListener(`abort`,f,{once:!0})})}async function P(e,t,n){let r=Buffer.from(n,`utf8`),i=Buffer.alloc(16+r.length);i.writeUInt32LE(i.length,0),i.writeUInt32LE(1,4),i.writeUInt32LE(8,8),i.writeUInt32LE(t,12),r.copy(i,16),!e.write(i)&&await new Promise((t,n)=>{e.once(`drain`,t),e.once(`error`,n)})}async function F(t,r,i){if(z(r,`read usbmuxd response`),i?.aborted)throw e();return await new Promise((a,o)=>{let s=Buffer.alloc(0),c=!1,l=setTimeout(()=>m(new n(`COMMAND_FAILED`,`Timed out reading usbmuxd response`,{backend:`xctest`,timeoutMs:r})),r),u=e=>{if(s=Buffer.concat([s,e]),s.length<16)return;let t=s.readUInt32LE(0);if(t<16||t>4194304){m(new n(`COMMAND_FAILED`,`Invalid usbmuxd response length`));return}s.length<t||m(void 0,{payload:s.subarray(16,t)})},d=e=>m(e),f=()=>m(new n(`COMMAND_FAILED`,`usbmuxd closed the connection unexpectedly`)),p=()=>m(e()),m=(e,n)=>{c||(c=!0,clearTimeout(l),t.off(`data`,u),t.off(`error`,d),t.off(`close`,f),i?.removeEventListener(`abort`,p),t.pause(),e?o(e):a(n))};t.on(`data`,u),t.once(`error`,d),t.once(`close`,f),i?.addEventListener(`abort`,p,{once:!0}),t.resume()})}function I(e,t={}){return`<?xml version="1.0" encoding="UTF-8"?><plist version="1.0"><dict>${[[`BundleID`,`com.callstack.agent-device`],[`ClientVersionString`,`agent-device`],[`MessageType`,e],[`ProgName`,`agent-device`],[`kLibUSBMuxVersion`,3],...Object.entries(t)].map(([e,t])=>typeof t==`number`?`<key>${a(e)}</key><integer>${t}</integer>`:`<key>${a(e)}</key><string>${a(t)}</string>`).join(``)}</dict></plist>`}function ye(e,t){let n;for(let r of R(o(e))){let e=be(r);if(e?.udid===t){if(L(L(r,`Properties`),`ConnectionType`)?.text===`USB`)return e.id;n??=e.id}}return n}function be(e){if(e.name!==`dict`)return;let t=L(e,`Properties`);if(t?.name!==`dict`)return;let n=L(t,`SerialNumber`)?.text,r=Number(L(e,`DeviceID`)?.text);if(!(!n||!Number.isSafeInteger(r)||r<=0))return{udid:n,id:r}}function xe(e,t){for(let n of R(o(e))){if(n.name!==`dict`)continue;let e=L(n,t);if(e?.name!==`integer`)continue;let r=Number(e.text);if(Number.isSafeInteger(r))return r}}function L(e,t){for(let n=0;n<e.children.length-1;n+=1){let r=e.children[n];if(r?.name===`key`&&r.text===t)return e.children[n+1]}}function*R(e){for(let t of e)yield t,yield*R(t.children)}function Se(e){let{result:t,udid:r,deviceId:i,port:a}=e;return t===2?new n(`DEVICE_NOT_FOUND`,`iOS device is no longer available through usbmux`,{deviceId:r,backend:`xctest`,usbmuxDeviceAttached:!1,usbmuxResult:t,hint:M}):t===3?new n(`COMMAND_FAILED`,`XCTest runner is not listening on the device port`,{backend:`xctest`,deviceId:i,port:a,usbmuxResult:t,hint:`The device is reachable but nothing is bound to the runner port yet; this resolves once the runner finishes starting.`}):new n(`COMMAND_FAILED`,`Failed to connect to XCTest runner through usbmux`,{backend:`xctest`,deviceId:i,port:a,usbmuxResult:t,hint:`Keep the device connected by cable and unlocked, then retry.`})}function Ce(e){return(e&255)<<8|e>>>8&255}function z(e,t){if(!(e>0))throw new n(`COMMAND_FAILED`,`No time remaining to ${t}`,{backend:`xctest`,timeoutMs:e})}function we(e){return{postCommand:async(t,r,a,o,s)=>{let c=m.fromTimeoutMs(o),l=await ge(e,t,r,c.remainingMs(),s).catch(e=>{throw e instanceof n?i(e,`no`):e});try{return await Te(l,a,c.remainingMs(),s)}catch(e){throw l.destroy(),e}}}}const B=we(`/var/run/usbmuxd`);async function Te(t,r,i,a){if(De(i),a?.aborted)throw e();let o=Buffer.from(JSON.stringify(r),`utf8`),s=AbortSignal.timeout(i),c=a?AbortSignal.any([a,s]):s,l=new S.Agent;l.createConnection=(e,n)=>(n?.(null,t),t);try{let e=await Ee(l,t,o,c);return new Response((await V(e)).toString(`utf8`),{status:e.statusCode??500})}catch(t){throw a?.aborted?e():s.aborted?new n(`COMMAND_FAILED`,`Timed out waiting for XCTest runner over usbmux`,{backend:`xctest`,timeoutMs:i}):t}finally{l.destroy(),t.destroy()}}async function Ee(e,t,n,r){return await new Promise((i,a)=>{let o=S.request({method:`POST`,host:`127.0.0.1`,path:`/command`,headers:{"Content-Type":`application/json`,"Content-Length":n.length,Connection:`close`},agent:e,signal:r},i);o.once(`error`,a),t.resume(),o.end(n)})}async function V(e){let t=[],r=0;for await(let i of e){let e=Buffer.isBuffer(i)?i:Buffer.from(i);if(r+=e.length,r>67108864)throw new n(`COMMAND_FAILED`,`XCTest runner response exceeded size limit`);t.push(e)}return Buffer.concat(t)}function De(e){if(!(e>0))throw new n(`COMMAND_FAILED`,`No time remaining to send XCTest runner command`,{backend:`xctest`,timeoutMs:e})}const H=45e3;async function Oe(t,r,i,a=H,o){if(o?.aborted)throw e();let s=m.fromTimeoutMs(a),c=k(t,r),l=await c.resolveRoute(s.remainingMs());if(l.kind===`usbmux`)try{return await ke(t,r,i,s,o)}catch(e){if(!U(t,e))throw e;c.markUsbmuxUnattached(),l=await c.resolveRoute(s.remainingMs())}let u=s.remainingMs();if(u<=0)throw new n(`COMMAND_FAILED`,`Runner command deadline exceeded`,{timeoutMs:a});let d=l.endpoints[0];if(!d)throw new n(`COMMAND_FAILED`,`Runner command endpoint not available`,{port:r,endpoints:l.endpoints});return await W(d,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)},u,o)}async function ke(e,t,r,i,a){let o=i.remainingMs();if(o<=0)throw new n(`COMMAND_FAILED`,`Runner command deadline exceeded`,{port:t,timeoutMs:o});return await B.postCommand(e.id,t,r,o,a)}function U(e,t){return h(t)?f(e).backend!==`xctest`:!1}async function W(e,t,r,i){let a=AbortSignal.timeout(r),o=i?AbortSignal.any([i,a]):a;try{return await fetch(e,{...t,signal:o})}catch(e){throw e===a.reason?new n(`COMMAND_FAILED`,`Runner command deadline exceeded`,{timeoutMs:r},e):e}}const G=45e3,K=2e4;async function Ae(n,r,i,a,o=G,s,c){let u=m.fromTimeoutMs(o),{resolveRoute:d,markUsbmuxUnattached:f}=k(n,r),p=await d(u.remainingMs()),g=null,_=!1,v=Math.max(1,Math.ceil(o/250));try{return await l(async({deadline:e})=>{let t=await je({device:n,port:r,command:i,timeoutMs:o,logPath:a,session:s,route:p,resolveRoute:d,markUsbmuxUnattached:f,signal:c,attemptDeadline:e,setRoute:e=>{p=e},setLastError:e=>{g=e,ee(e)||(_=!0)}});if(t)return t;throw Ie({port:r,endpoints:p.endpoints,lastError:g,signal:c})},{maxAttempts:v,baseDelayMs:300,maxDelayMs:2e3,jitter:.2,shouldRetry:ne},{deadline:u,phase:`ios_runner_connect`,signal:c,retryWakeSignal:n.kind===`simulator`?s?.startupRetryWake:void 0})}catch(n){if(c?.aborted||t(n))throw e();if(h(n))throw n;g||=n}if(c?.aborted)throw e();if(n.kind===`simulator`){let e=u.remainingMs();if(e<=0)throw q(X({port:r,endpoints:p.endpoints,logPath:a,lastError:g}),_);let t=await Y(n,r,i,e,c).catch(e=>{throw q(e,_)});return new Response(t.body,{status:t.status})}throw s?.child.exitCode!==null&&s?.child.exitCode!==void 0?q(await Z({session:s,port:r,logPath:a}),_):q(X({port:r,endpoints:p.endpoints,logPath:a,lastError:g,deviceStates:s?.startupDeviceStates}),_)}function q(e,t){return e instanceof n?t?i(e,`unknown`):r(e,`no`):e}async function je(e){await Me(e);let t=await Ne(e);return t.response?t.response:await Pe(e)||await Fe(e,t.usedCachedTunnelIp)}async function Me(e){if(e.attemptDeadline?.isExpired())throw new n(`COMMAND_FAILED`,`Runner connection deadline exceeded`,{port:e.port,timeoutMs:e.timeoutMs});if(e.session?.child.exitCode!==null&&e.session?.child.exitCode!==void 0)throw await Z({session:e.session,port:e.port,logPath:e.logPath})}async function Ne(e){let t=e.route,n=!1;e.device.kind===`device`&&(t=await e.resolveRoute(e.attemptDeadline?.remainingMs()),n=t.cachedTunnelIp,e.setRoute(t));let r=async t=>{let n=t.cachedTunnelIp?t.endpoints[0]:null;return await J(e.device,t,{command:e.command,port:e.port,timeoutMs:e.timeoutMs,signal:e.signal,attemptDeadline:e.attemptDeadline,onUsbmuxUnattached:e.markUsbmuxUnattached,onError:(t,r)=>{e.setLastError(r),e.device.kind===`device`&&t===n&&A(e.device.id)}})},i=await r(t);if(i||t.kind!==`usbmux`)return{response:i,usedCachedTunnelIp:n};let a=await e.resolveRoute(e.attemptDeadline?.remainingMs());return a.kind===`usbmux`?{response:null,usedCachedTunnelIp:n}:(e.setRoute(a),{response:await r(a),usedCachedTunnelIp:a.cachedTunnelIp})}async function Pe(e){return e.device.kind!==`simulator`||e.session?.state!==`ready`?null:await Re(e.device,e.port,e.command,{signal:e.signal,attemptDeadline:e.attemptDeadline,onError:e.setLastError})}async function Fe(e,t){if(e.device.kind!==`device`||!t)return null;A(e.device.id);let n=await e.resolveRoute(e.attemptDeadline?.remainingMs(),!0);return e.setRoute(n),await J(e.device,n,{command:e.command,port:e.port,timeoutMs:e.timeoutMs,signal:e.signal,attemptDeadline:e.attemptDeadline,onError:(t,n)=>{e.setLastError(n)}})}function Ie(t){if(t.signal?.aborted)throw e();return new n(`COMMAND_FAILED`,`Runner endpoint probe failed`,{port:t.port,endpoints:t.endpoints,lastError:t.lastError?String(t.lastError):void 0,..._(`runner_endpoint_probe_exhausted`)})}async function J(r,a,o){if(a.kind===`network`)return await Le(a.endpoints,o);let s=a.endpoints[0];try{let e=o.attemptDeadline?.remainingMs()??o.timeoutMs;if(e<=0)throw i(new n(`COMMAND_FAILED`,`Runner connection deadline exceeded`,{port:o.port,timeoutMs:o.timeoutMs}),`no`);return await B.postCommand(r.id,o.port,o.command,Math.min(K,e),o.signal)}catch(n){if(o.signal?.aborted||t(n))throw e();if(h(n)){if(!U(r,n))throw n;return o.onUsbmuxUnattached?.(),null}return o.onError(s,n),null}}async function Le(r,a){let{command:o,port:s,timeoutMs:c,signal:l,attemptDeadline:u,onError:d}=a;for(let a of r)try{let e=u?.remainingMs()??c;if(e<=0)throw i(new n(`COMMAND_FAILED`,`Runner connection deadline exceeded`,{port:s,timeoutMs:c}),`no`);return await W(a,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(o)},Math.min(K,e),l)}catch(n){if(l?.aborted||t(n))throw e();d(a,n)}return null}async function Re(n,r,i,a){let{signal:o,attemptDeadline:s,onError:c}=a,l=s?.remainingMs()??45e3;if(l<=0)return null;try{let e=await Y(n,r,i,l,o);return new Response(e.body,{status:e.status})}catch(n){if(o?.aborted||t(n))throw e();return c(n),null}}async function Y(e,t,n,r,i){let a=JSON.stringify(n),o=u(e,[`spawn`,e.id,`/usr/bin/curl`,`-s`,`-X`,`POST`,`-H`,`Content-Type: application/json`,`--data`,a,`http://127.0.0.1:${t}/command`]);return{status:200,body:s(await c(o,{allowFailure:!0,timeoutMs:r,signal:i}),`Runner did not accept connection (simctl spawn)`,e=>{let n=p({message:`Runner did not accept connection (simctl spawn)`,stdout:e.stdout,stderr:e.stderr,context:{platform:`ios`,phase:`connect`}});return{port:t,reason:n,hint:d(n),..._(`runner_connect_refused`),dispatched:e.exitCode===7?`no`:`unknown`}}).stdout}}function ze(e,t,n,r){let i=`${e}\n${t}\n${n}`.toLowerCase();if(i.includes(`device is busy`)&&i.includes(`connecting`))return`Target iOS device is still connecting. Keep it unlocked, wait for device trust/connection to settle, then retry.`;let a=r??`IOS_RUNNER_CONNECT_TIMEOUT`;return a===`IOS_RUNNER_DEVICE_NOT_PROVISIONED`?d(a):`${d(a)} ${te}`}function X(e){let{port:t,endpoints:r,logPath:i,lastError:a,deviceStates:o}=e,s=`Runner did not accept connection`,c=new n(`COMMAND_FAILED`,s,{port:t,endpoints:r,logPath:i,lastError:a?String(a):void 0,reason:p({error:a,message:s,context:{platform:`ios`,phase:`connect`}}),hint:d(`IOS_RUNNER_CONNECT_TIMEOUT`),..._(`runner_connect_refused`)});return g(c,o)}async function Z(e){let{session:t,port:r,logPath:i}=e,a=await t.testPromise,o=`Runner did not accept connection (xcodebuild exited early)`,s=t.readLogTail?.(65536)??``,c=p({message:o,stdout:s,stderr:s,context:{platform:`ios`,phase:`connect`}}),l=ie(t.device),u=v(new n(`COMMAND_FAILED`,o,{stderr:s,...l})),d=u.reason===`simulator_set_destination_not_found`,f=new n(`COMMAND_FAILED`,d?re(o,t.device,l):o,{port:r,logPath:t.runnerLogPath??i,xcodebuild:{exitCode:a.exitCode,stderr:s},reason:d?u.reason:c,hint:d?u.hint:ze(o,s,s,c),...l,..._(`xcodebuild_exited_early`)});return g(f,t.startupDeviceStates)}const Be={starting:[`ready`,`draining`,`stopped`],ready:[`draining`,`stopped`],draining:[`stopped`],stopped:[]};function Ve(e,t){Be[e.state].includes(t)&&(e.state=t)}function He(e){return e.state===`starting`||e.state===`ready`}function Q(e){return e?.runnerMainThreadBusy===!0}var Ue=class{charges=[];get hasOutstandingCharges(){return this.charges.length>0}get outstandingChargeCount(){return this.charges.length}get hasAbandonedCharges(){return this.charges.some(e=>e.abandoned)}charge(e){this.charges.push({commandId:$(e),abandoned:!1})}markAbandoned(e){let t=this.findChargeIndex(e);t!==-1&&(this.charges[t].abandoned=!0)}settleAnswered(e){let t=this.findChargeIndex(e);if(t===-1)return;let n=this.charges[t];if(this.charges.splice(t,1),n.abandoned)return;let r=this.charges.findIndex((e,n)=>n<t&&e.abandoned);r!==-1&&this.charges.splice(r,1)}settleTerminalEvidence(e){let t=$(e);if(t===``)return!1;let n=this.charges.filter(e=>e.commandId!==t||!e.abandoned);return n.length!==this.charges.length&&(this.charges=n,!0)}findChargeIndex(e){let t=$(e);if(t===``)return-1;for(let e=this.charges.length-1;e>=0;--e)if(this.charges[e].commandId===t)return e;return-1}};function $(e){return e?.trim()??``}function We(e){return e.state===`ready`?e.commandCharges.hasOutstandingCharges?{detach:!1,reason:`command_in_flight`}:Q(e)?{detach:!1,reason:`main_thread_occupied`}:{detach:!0}:{detach:!1,reason:`runner_never_served_a_command`}}function Ge(e){return e.processRunning?e.state:`gone`}function Ke(e,t){return`${e}:${t}:${Date.now()}`}function qe(e){return typeof e==`number`&&Number.isFinite(e)&&e>0?Math.floor(e):void 0}export{se as _,Q as a,de as b,Ge as c,H as d,Oe as f,oe as g,ce as h,He as i,G as l,ue as m,Ve as n,qe as o,le as p,Ke as r,We as s,Ue as t,Ae as u,fe as v,D as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as e,s as t}from"./sdk-contracts.js";import{n}from"./request-runtime-binding.js";function r(e,n){return t(`UNSUPPORTED_OPERATION`,`${e} is not supported on this device`,{reason:n.reason},n.hint?{hint:n.hint}:void 0)}async function i(e){let t=await s(e.inspectFacts)(e.device);for(let n of e.required){let i=t.operations[n];if(!i.available)return{type:`response`,response:e.unavailableResponse?e.unavailableResponse(i):r(e.command,i)}}return{type:`admitted`,bind:c(e.bindDevice)}}async function a(e){let t=await i({...e,required:e.use.required});if(t.type===`response`)return t;let r=await t.bind(e.device,e.use);return e.readiness&&await n(r),{type:`runtime`,runtime:r}}async function o(e,t){let n=await a(e);if(n.type===`response`)return{ok:!1,response:n.response};let r=n.runtime;return{ok:!0,execute:async({dispatchContext:e})=>await t(r,e)}}function s(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime facts inspection is unavailable.`,{reason:`runtime-gateway-missing`})}function c(t){if(t)return t;throw new e(`COMMAND_FAILED`,`Device runtime binding is unavailable.`,{reason:`runtime-gateway-missing`})}export{r as i,a as n,o as r,i as t};
|
package/dist/src/runtime11.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{H as e,I as t,K as n,P as r}from"./sdk-contracts.js";import{i}from"./recording-export-quality.js";import{C as a,E as o,O as s,T as c,a as l,b as u,i as d,o as f,r as p,t as ee,w as te,x as m,y as h}from"./runtime.js";import{r as g}from"./success-text.js";import{n as ne,t as re}from"./app-inventory.js";import"./app-inventory-contract.js";import{j as ie}from"./owner-identity.js";import{l as ae}from"./exec.js";import"./file.js";import{r as oe}from"./tv-remote.js";import"./command.js";import{r as se}from"./version.js";import{t as ce}from"./keyboard-actions.js";import{i as le}from"./quality-warnings.js";import{r as _}from"./png.js";import{i as ue}from"./png-worker-client.js";import{t as de}from"./png-size.js";import{i as v,n as fe,r as pe}from"./screenshot-overlay-draw.js";import{t as me}from"./png-encode.js";import{r as y}from"./artifact-paths.js";import{t as he}from"./mp4-duration.js";import{c as b,o as ge,r as _e,s as ve}from"./video.js";import x from"node:fs";import ye from"node:os";import S from"node:path";function C(e,t){if(e!==void 0)return w(e,t)}function w(e,t){let n=e?.trim();if(!n)throw new r(`INVALID_ARGS`,`${t} must be a non-empty string`);return n}const be=async(e,t={})=>{if(!e.backend.listDevices)throw new r(`UNSUPPORTED_OPERATION`,`admin.devices is not supported by this backend`);return{kind:`adminDevices`,devices:await e.backend.listDevices(m(e,t),t.filter)}},xe=async(e,t={})=>{if(!e.backend.bootDevice)throw new r(`UNSUPPORTED_OPERATION`,`admin.boot is not supported by this backend`);let n=ke(t.target),i=await e.backend.bootDevice(m(e,t),n),a=u(i);return{kind:`deviceBooted`,...n?{target:n}:{},...a?{backendResult:a}:{},...g(`Booted device`)}},Se=async(e,t={})=>{if(!e.backend.shutdownDevice)throw new r(`UNSUPPORTED_OPERATION`,`admin.shutdown is not supported by this backend`);let n=ke(t.target),i=await e.backend.shutdownDevice(m(e,t),n),a=u(i);return{kind:`deviceShutdown`,...n?{target:n}:{},...a?{backendResult:a}:{},...g(`Shutdown device`)}},Ce=async(e,t)=>await T(e,t,`install`),we=async(e,t)=>await T(e,t,`reinstall`),Te=async(e,t)=>await T(e,t,`installFromSource`);async function T(e,t,n){let i=n===`reinstall`?`reinstallApp`:`installApp`,a=e.backend[i];if(!a)throw new r(`UNSUPPORTED_OPERATION`,`admin.${n} is not supported by this backend`);let o=`app`in t&&t.app!==void 0?w(t.app,`app`):void 0;if(n!==`installFromSource`&&!o)throw new r(`INVALID_ARGS`,`admin.${n} requires app`);let s=m(e,t),c=await Ee(e,s,t.source);try{let t=await a.call(e.backend,s,{...o?{app:o}:{},source:c.source});return Ae(n,o,c.source,t)}finally{await c.cleanup?.()}}async function Ee(e,t,n){let r=await De(e,E(n));try{return{source:E(e.backend.resolveInstallSource?await e.backend.resolveInstallSource(t,r.source):r.source),...r.cleanup?{cleanup:r.cleanup}:{}}}catch(e){if(r.cleanup)try{await r.cleanup()}catch{}throw e}}async function De(e,t){if(t.kind===`url`)return{source:t};let n=await d(e,t,{usage:`admin.install`,field:`source`});return{source:{kind:`path`,path:n.path},...n.cleanup?{cleanup:n.cleanup}:{}}}function E(e){if(!e||typeof e!=`object`)throw new r(`INVALID_ARGS`,`install source is required`);if(e.kind===`path`)return{kind:`path`,path:w(e.path,`source.path`)};if(e.kind===`uploadedArtifact`)return{kind:`uploadedArtifact`,id:w(e.id,`source.id`)};if(e.kind===`url`){let t=w(e.url,`source.url`);return Oe(t),{kind:`url`,url:t}}throw new r(`INVALID_ARGS`,`install source kind must be path, uploadedArtifact, or url`)}function Oe(e){let t;try{t=new URL(e)}catch{throw new r(`INVALID_ARGS`,`Invalid install source URL: ${e}`)}if(t.protocol!==`http:`&&t.protocol!==`https:`)throw new r(`INVALID_ARGS`,`Install source URL must use http or https`)}function ke(e){if(!e)return;let t=C(e.id,`target.id`),n=C(e.name,`target.name`),r={...t?{id:t}:{},...n?{name:n}:{},...e.platform?{platform:e.platform}:{},...e.target?{target:e.target}:{},...e.headless===void 0?{}:{headless:e.headless}};return Object.keys(r).length>0?r:void 0}function Ae(e,t,n,r){let i=u(r),a=e===`reinstall`?`appReinstalled`:e===`installFromSource`?`appInstalledFromSource`:`appInstalled`,o=D(r,`appName`),s=D(r,`appId`),c=D(r,`bundleId`),l=D(r,`packageName`),d=D(r,`launchTarget`),f=D(r,`installablePath`),p=D(r,`archivePath`);return{kind:a,...t?{app:t}:{},source:n,...s?{appId:s}:{},...o?{appName:o}:{},...c?{bundleId:c}:{},...l?{packageName:l}:{},...d?{launchTarget:d}:{},...f?{installablePath:f}:{},...p?{archivePath:p}:{},...i?{backendResult:i}:{},...g(`${e===`reinstall`?`Reinstalled`:`Installed`}: ${o??d??t??je(n)}`)}}function D(e,t){let n=e[t];return typeof n==`string`&&n.length>0?n:void 0}function je(e){return e.kind===`path`?e.path:e.kind===`uploadedArtifact`?e.id:e.url}const Me=/^[A-Za-z0-9_.:-]{1,64}$/,Ne=async(e,t)=>{if(!e.backend.openApp)throw new r(`UNSUPPORTED_OPERATION`,`apps.open is not supported by this backend`);let n=ze(t),i=await e.backend.openApp(k(e,t),n,{launchArgs:t.launchArgs,relaunch:t.relaunch}),a=u(i);return{kind:`appOpened`,target:n,relaunch:t.relaunch===!0,...a?{backendResult:a}:{},...g(`Opened: ${Ve(n)}`)}},Pe=async(e,t={})=>{if(!e.backend.closeApp)throw new r(`UNSUPPORTED_OPERATION`,`apps.close is not supported by this backend`);let n=C(t.app,`app`),i=await e.backend.closeApp(k(e,t),n),a=u(i);return{kind:`appClosed`,...n?{app:n}:{},...a?{backendResult:a}:{},...g(n?`Closed: ${n}`:`Closed app`)}},Fe=async(e,t={})=>{if(!e.backend.listApps)throw new r(`UNSUPPORTED_OPERATION`,`apps.list is not supported by this backend`);return{kind:`appsList`,apps:await e.backend.listApps(k(e,t),re(t.filter))}},Ie=async(e,t)=>{if(!e.backend.getAppState)throw new r(`UNSUPPORTED_OPERATION`,`apps.state is not supported by this backend`);let n=w(t.app,`app`);return{kind:`appState`,app:n,state:await e.backend.getAppState(k(e,t),n)}},Le=async(e,t)=>{if(!e.backend.pushFile)throw new r(`UNSUPPORTED_OPERATION`,`apps.push is not supported by this backend`);let n=w(t.app,`app`),i=await He(e,t.input);try{let r=await e.backend.pushFile(k(e,t),i.backendInput,n),a=u(r);return{kind:`appPushed`,app:n,inputKind:i.inputKind,...a?{backendResult:a}:{},...g(`Pushed to ${n}`)}}finally{await i.cleanup?.()}},Re=async(e,t)=>{if(!e.backend.triggerAppEvent)throw new r(`UNSUPPORTED_OPERATION`,`apps.triggerEvent is not supported by this backend`);let n=Ue(t.name);We(t.payload,`apps.triggerEvent payload for "${n}"`);let i=await e.backend.triggerAppEvent(k(e,t),{name:n,...t.payload?{payload:t.payload}:{}}),a=u(i);return{kind:`appEventTriggered`,name:n,...t.payload?{payload:t.payload}:{},...a?{backendResult:a}:{},...g(`Triggered app event: ${n}`)}};function ze(e){let t=C(e.app,`app`),n=C(e.appId,`appId`),i=C(e.bundleId,`bundleId`),a=C(e.packageName,`packageName`),o=C(e.url,`url`),s=C(e.activity,`activity`),c={...t?{app:t}:{},...n?{appId:n}:{},...i?{bundleId:i}:{},...a?{packageName:a}:{},...o?{url:o}:{},...s?{activity:s}:{}};if(!Be(c))throw new r(`INVALID_ARGS`,`apps.open requires app, appId, bundleId, packageName, url, or activity`);return c}function Be(e){return!!(e.app??e.appId??e.bundleId??e.packageName??e.url??e.activity)}function Ve(e){return e.app??e.appId??e.bundleId??e.packageName??e.url??e.activity??`app`}async function He(e,t){if(!t||typeof t!=`object`)throw new r(`INVALID_ARGS`,`apps.push requires an input`);if(t.kind===`json`)return O(t.payload,`apps.push JSON payload`,8192),{backendInput:{kind:`json`,payload:t.payload},inputKind:`json`};let n=await d(e,t,{usage:`apps.push`,field:`input`});return{backendInput:{kind:`file`,path:n.path},inputKind:`file`,...n.cleanup?{cleanup:n.cleanup}:{}}}function Ue(e){let t=w(e,`name`);if(!Me.test(t))throw new r(`INVALID_ARGS`,`Invalid apps.triggerEvent name: ${t}`,{hint:`Use 1-64 chars: letters, numbers, underscore, dot, colon, or dash.`});return t}function We(e,t){e!==void 0&&O(e,t,8192)}function O(e,t,n){if(Ge(e,t),Buffer.byteLength(Ke(e,t),`utf8`)>n)throw new r(`INVALID_ARGS`,`${t} exceeds ${n} bytes`)}function Ge(e,t){if(!e||typeof e!=`object`||Array.isArray(e))throw new r(`INVALID_ARGS`,`${t} must be a JSON object`)}function Ke(e,t){try{let n=JSON.stringify(e);if(typeof n!=`string`)throw new r(`INVALID_ARGS`,`${t} must be JSON-serializable`);return n}catch{throw new r(`INVALID_ARGS`,`${t} must be JSON-serializable`)}}function k(e,t){return{session:t.session,requestId:t.requestId,signal:t.signal??e.signal,metadata:t.metadata}}const A={open:Ne,close:Pe,list:Fe,state:Ie,push:Le,triggerEvent:Re},qe={devices:be,boot:xe,shutdown:Se,install:Ce,reinstall:we,installFromSource:Te};function Je(e){return{...h(A,e),list:(t={})=>A.list(e,{...t,filter:ne(t.filter)})}}const Ye=/(?:authorization|cookie|token|secret|password|passwd|api[-_]?key)/i,Xe=/\b[A-Za-z0-9_-]{16,}\.[A-Za-z0-9_-]{16,}\.[A-Za-z0-9_-]{16,}\b/g;function j(e){let t=!1,n=e;return n=n.replaceAll(/(authorization|token|secret|password|passwd|api[-_]?key)=([^&\s]+)/gi,(e,n)=>(t=!0,`${String(n)}=[REDACTED]`)),n=n.replaceAll(/("(?:authorization|cookie|token|secret|password|passwd|api[-_]?key)"\s*:\s*")([^"]*)(")/gi,(e,n,r,i)=>(t=!0,`${String(n)}[REDACTED]${String(i)}`)),n=n.replaceAll(/\b(Bearer\s+)([^\s",;]+)/gi,(e,n)=>(t=!0,`${String(n)}[REDACTED]`)),n=n.replaceAll(/((?:authorization|cookie|token|secret|password|passwd|api[-_]?key)\s*[:=]\s*)([^\s,;&]+)/gi,(e,n)=>(t=!0,`${String(n)}[REDACTED]`)),n=n.replaceAll(Xe,()=>(t=!0,`[REDACTED]`)),n=Qe(n,()=>{t=!0}),{value:n,redacted:t}}function Ze(e){try{let t=new URL(e),n=$e(t);return(t.username||t.password)&&(t.username=`REDACTED`,t.password=`REDACTED`,n=!0),{value:t.toString(),redacted:n}}catch{return}}function Qe(e,t){return/(https?:\/\/|token|secret|password|authorization|cookie|api[-_]?key)/i.test(e)?e.replaceAll(/https?:\/\/[^\s"'<>)]+/gi,e=>{let n=Ze(e);return n?(n.redacted&&t(),n.value):e}):e}function $e(e){let t=!1;for(let n of Array.from(e.searchParams.keys()))Ye.test(n)&&(e.searchParams.set(n,`[REDACTED]`),t=!0);return t}const M=2048,N=4096,P=/(?:authorization|cookie|token|secret|password|passwd|api[-_]?key)/i;function et(e){let t=e.redacted===!0;return{kind:`diagnosticsLogs`,entries:e.entries.map(e=>{let n=z(e.message,N),r=L(e.metadata);return t||=n.redacted||r.redacted,{...e.timestamp?{timestamp:e.timestamp}:{},...e.level?{level:e.level}:{},message:n.value??``,...e.source?{source:e.source}:{},...r.value?{metadata:r.value}:{}}}),...e.nextCursor?{nextCursor:e.nextCursor}:{},...e.timeWindow?{timeWindow:e.timeWindow}:{},...e.backend?{backend:e.backend}:{},redacted:t,...e.notes?{notes:e.notes}:{}}}function tt(e,t){let n=e.redacted===!0;return{kind:`diagnosticsNetwork`,entries:e.entries.map(e=>{let r=e.url?rt(e.url):void 0,i=t===`headers`||t===`all`?F(e.requestHeaders):void 0,a=t===`headers`||t===`all`?F(e.responseHeaders):void 0,o=t===`body`||t===`all`?I(e.requestBody):void 0,s=t===`body`||t===`all`?I(e.responseBody):void 0,c=L(e.metadata);return n||=(r?.redacted??!1)||(i?.redacted??!1)||(a?.redacted??!1)||(o?.redacted??!1)||(s?.redacted??!1)||c.redacted,{...e.timestamp?{timestamp:e.timestamp}:{},...e.method?{method:e.method}:{},...r?{url:r.value}:{},...e.status===void 0?{}:{status:e.status},...e.durationMs===void 0?{}:{durationMs:e.durationMs},...i?.value?{requestHeaders:i.value}:{},...a?.value?{responseHeaders:a.value}:{},...o?.value===void 0?{}:{requestBody:o.value},...s?.value===void 0?{}:{responseBody:s.value},...c.value?{metadata:c.value}:{}}}),...e.nextCursor?{nextCursor:e.nextCursor}:{},...e.timeWindow?{timeWindow:e.timeWindow}:{},...e.backend?{backend:e.backend}:{},redacted:n,...e.notes?{notes:e.notes}:{}}}function nt(e){let t=e.redacted===!0;return{kind:`diagnosticsPerf`,metrics:e.metrics.map(e=>{let n=z(e.message,N),r=L(e.metadata);return t||=n.redacted||r.redacted,{name:e.name,...e.value===void 0?{}:{value:e.value},...e.unit?{unit:e.unit}:{},...e.status?{status:e.status}:{},...n.value===void 0?{}:{message:n.value},...r.value?{metadata:r.value}:{}}}),...e.startedAt?{startedAt:e.startedAt}:{},...e.endedAt?{endedAt:e.endedAt}:{},...e.backend?{backend:e.backend}:{},redacted:t,...e.notes?{notes:e.notes}:{}}}function F(e){if(!e)return{redacted:!1};let t=!1,n={};for(let[r,i]of Object.entries(e))if(P.test(r))n[r]=`[REDACTED]`,t=!0;else{let e=z(i,M);n[r]=e.value??``,t||=e.redacted}return{value:n,redacted:t}}function rt(e){return Ze(e)??z(e,M)}function I(e){return e===void 0?{redacted:!1}:it(e)??z(e,M)}function it(e){try{let t=R(JSON.parse(e),j);return B(JSON.stringify(t.value),M,t.redacted)}catch{return}}function L(e){return R(e,e=>z(e,M))}function R(e,t){if(e===void 0)return{redacted:!1};if(typeof e==`string`)return t(e);if(!e||typeof e!=`object`)return{value:e,redacted:!1};if(Array.isArray(e)){let n=!1;return{value:e.map(e=>{let r=R(e,t);return n||=r.redacted,r.value}),redacted:n}}let n=!1,r={};for(let[i,a]of Object.entries(e)){if(P.test(i)){r[i]=`[REDACTED]`,n=!0;continue}let e=R(a,t);r[i]=e.value,n||=e.redacted}return{value:r,redacted:n}}function z(e,t){if(e===void 0)return{redacted:!1};let n=j(e);return B(n.value,t,n.redacted)}function B(e,t,n){if(e===void 0)return{redacted:n};let r=e;return r.length>t&&(r=`${r.slice(0,t)}...[truncated]`,n=!0),{value:r,redacted:n}}const at=async(e,t={})=>{if(!e.backend.readLogs)throw new r(`UNSUPPORTED_OPERATION`,`diagnostics.logs is not supported by this backend`);return et(await e.backend.readLogs(await V(e,t),ct(t)))},ot=async(e,t={})=>{if(!e.backend.dumpNetwork)throw new r(`UNSUPPORTED_OPERATION`,`diagnostics.network is not supported by this backend`);let n=lt(t);return tt(await e.backend.dumpNetwork(await V(e,t),n),n.include??`summary`)},st=async(e,t={})=>{if(!e.backend.measurePerf)throw new r(`UNSUPPORTED_OPERATION`,`diagnostics.perf is not supported by this backend`);return nt(await e.backend.measurePerf(await V(e,t),ut(t)))};async function V(e,t){let n=m(e,t),r=t.session?await e.sessions.get(t.session):void 0;return{...n,...t.appId??r?.appId?{appId:t.appId??r?.appId}:{},...t.appBundleId??r?.appBundleId?{appBundleId:t.appBundleId??r?.appBundleId}:{}}}function ct(e){return{...H(e,100,500,`logs limit`),...e.levels===void 0?{}:{levels:W(e.levels,`levels`)},...e.search===void 0?{}:{search:w(e.search,`search`)},...e.source===void 0?{}:{source:w(e.source,`source`)}}}function lt(e){return{...H(e,25,200,`network limit`),include:dt(e.include)}}function ut(e){return{...U(e),...e.sampleMs===void 0?{}:{sampleMs:s(e.sampleMs,`sampleMs`,100,6e4)},...e.metrics===void 0?{}:{metrics:W(e.metrics,`metrics`,20)}}}function H(e,t,n,r){return{...U(e),...e.cursor===void 0?{}:{cursor:w(e.cursor,`cursor`)},limit:e.limit===void 0?t:s(e.limit,r,1,n)}}function U(e){return{...e.since===void 0?{}:{since:w(e.since,`since`)},...e.until===void 0?{}:{until:w(e.until,`until`)}}}function dt(e){if(e===void 0)return`summary`;if(e===`summary`||e===`headers`||e===`body`||e===`all`)return e;throw new r(`INVALID_ARGS`,`network include must be summary, headers, body, or all`)}function W(e,t,n=50){if(!Array.isArray(e))throw new r(`INVALID_ARGS`,`${t} must be an array of strings`);if(e.length>n)throw new r(`INVALID_ARGS`,`${t} must contain at most ${n} entries`);return e.map((e,n)=>w(e,`${t}[${n}]`))}const ft={logs:at,network:ot,perf:st},G=`contact_sheet_frame_extraction_failed`,K=`contact_sheet_no_frames`;function q(e=process.platform){if(e!==`darwin`)throw new r(`UNSUPPORTED_OPERATION`,`Contact sheets can only be built on macOS hosts, which is where the frame decoder runs`,{reason:`contact_sheet_unsupported_host`,hostPlatform:e,hint:`Run this command on the macOS host that recorded the clip, or read the video artifact itself.`})}async function pt(e){if(q(e.hostPlatform??process.platform),e.timesMs.length===0)throw new r(`COMMAND_FAILED`,`Contact sheet sampling requested no frames`,{reason:K,videoPath:e.videoPath});Q(e.signal);let t=await vt(e);Q(e.signal);let n;try{n=await ae(t,[`--input`,e.videoPath,`--output-dir`,e.scratchDir,`--times`,e.timesMs.join(`,`),`--max-width`,String(e.maxWidth)],{timeoutMs:9e4,env:ge(),allowFailure:!0,...e.signal===void 0?{}:{signal:e.signal}})}catch(t){X(t,e.videoPath,`Failed to run the frame decoder`)}if(n.exitCode!==0)throw new r(`COMMAND_FAILED`,`Failed to extract frames from the recording: ${_t(n.stderr)||`exit ${n.exitCode}`}`,{reason:G,videoPath:e.videoPath,exitCode:n.exitCode});let i=mt(n.stdout,e.videoPath,e.scratchDir,e.timesMs.length);if(i.frames.length===0)throw new r(`COMMAND_FAILED`,`The recording returned no decodable frames for a contact sheet`,{reason:K,videoPath:e.videoPath,skippedSampleCount:i.skippedSampleCount});return i}function mt(e,t,n,r){let i;try{i=JSON.parse(e)}catch(e){throw Y(t,`invalid manifest: ${String(e)}`)}let a=Z(i).frames;if(!Array.isArray(a))throw Y(t,`manifest has no frames array`);let o=Z(i).skipped;if(a.length>r)throw Y(t,`returned ${a.length} frames for ${r} requested samples`);let s=a.flatMap(e=>{let r=Z(e),i=ht(r.path),a=gt(r.actualTimeMs);if(i===void 0||a===void 0||a<0)throw Y(t,`frame entry is missing a path or presentation time`);let o=S.resolve(n,S.basename(i));return x.existsSync(o)?[{requestedTimeMs:gt(r.requestedTimeMs)??a,actualTimeMs:a,path:o}]:[]});return{frames:s.sort((e,t)=>e.actualTimeMs-t.actualTimeMs),skippedSampleCount:Math.max(Array.isArray(o)?o.length:0,r-s.length)}}function J(e,t,n){return new r(`COMMAND_FAILED`,e,{reason:G,videoPath:t},n)}function Y(e,t){return J(`Frame extraction returned an unreadable manifest: ${t}`,e)}function X(t,i,a){throw n(t)||t instanceof r&&t.code===`COMMAND_FAILED`&&t.details?.reason?t:J(`${a} for ${i}: ${e(t)}`,i,t)}function Z(e){return typeof e==`object`&&e?e:{}}function ht(e){return typeof e==`string`&&e!==``?e:void 0}function gt(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}function _t(e){return(e.trim().split(`
|
|
2
|
-
`).pop()??``).trim()}async function vt(e){try{return await ve({sourcePath:b(`recording-frames.swift`,se()),extraSourcePaths:[b(`RecordingExportSupport.swift`,se())],cacheName:`recording-frames`,timeoutMs:12e4})}catch(t){X(t,e.videoPath,`Could not build the frame decoder`)}}function Q(e){if(e?.aborted)throw t()}function yt(e,t){if(e===void 0||!Number.isFinite(e)||e<0)throw new r(`COMMAND_FAILED`,`Cannot plan a contact sheet: the video timeline of ${t} could not be read`,{reason:`contact_sheet_duration_unknown`,videoPath:t,hint:`Retry once the recording finished finalizing; a clip whose container is still being written has no readable duration.`});if(e<=250)return{durationMs:e,timesMs:e>0?[0,Math.round(e)]:[0]};let n=Math.min(48,Math.floor(e/250)+1),i=e/(n-1);return{durationMs:e,timesMs:Array.from({length:n},(e,t)=>Math.round(t*i))}}const bt=[360,320,280,240,200,160],xt=[255,255,255,255],St=[17,24,39,255],$=pe(2)+8;function Ct(e){let{cells:t}=e;if(t.length===0)throw new r(`COMMAND_FAILED`,`Contact sheet has no cells to render`);let n=Tt(t[0].image.height/Math.max(1,t[0].image.width),t.length,e),i=Ot(n.width,n.height,St);return t.forEach((e,t)=>{let r=t%n.columns,a=Math.floor(t/n.columns);wt(i,8+r*(n.cellWidth+8),8+a*($+n.cellHeight+8),e,n.cellWidth,n.cellHeight)}),{bytes:me(i.data,n.width,n.height,4),width:n.width,height:n.height,cellWidth:n.cellWidth}}function wt(e,t,n,r,i,a){fe(e,{x:t+4,y:n+4,text:jt(r.timeMs),color:xt,scale:2}),kt(e,le(At(r.image),i,a),t,n+$)}function Tt(e,t,n){let i=Et(e,t,n.maxPixels);if(i)return i;let a=Dt(e,t,160);throw new r(`COMMAND_FAILED`,`Contact sheet would be ${a.width*a.height} pixels, above the configured maxImagePixels limit of ${n.maxPixels}`,{reason:`contact_sheet_pixel_budget_exceeded`,cellCount:n.cells.length,maxPixels:n.maxPixels,hint:`Shorten the recording or raise the command policy maxImagePixels limit.`})}function Et(e,t,n){for(let r of bt){let i=Dt(e,t,r);if(i.width*i.height<=n)return i}}function Dt(e,t,n){let r=Math.min(4,t),i=Math.ceil(t/r),a=Math.max(1,Math.round(n*e));return{columns:r,cellWidth:n,cellHeight:a,width:16+r*n+(r-1)*8,height:16+i*($+a)+(i-1)*8}}function Ot(e,t,n){let r=new _.PNG({width:e,height:t});for(let i=0;i<t;i+=1)for(let t=0;t<e;t+=1)v(r,t,i,n);return r}function kt(e,t,n,r){for(let i=0;i<t.height;i+=1)for(let a=0;a<t.width;a+=1){let o=(i*t.width+a)*4;v(e,n+a,r+i,[t.data[o],t.data[o+1],t.data[o+2],t.data[o+3]])}}function At(e){let t=new _.PNG({width:e.width,height:e.height});return Buffer.from(e.data.buffer,e.data.byteOffset,e.data.byteLength).copy(t.data),t}function jt(e){let t=Math.floor(e/1e3),n=Math.floor(t/3600),r=Math.floor(t%3600/60),i=t%60,a=Math.floor(e%1e3);return`${[n,r,i].map(e=>String(e).padStart(2,`0`)).join(`:`)}.${String(a).padStart(3,`0`)}`}function Mt(e,t){if(e.width!==t.width||e.height!==t.height)return{status:`dimension_mismatch`};let n=e.width*e.height;if(n===0)return{status:`compared`,changedPixelRatio:0};if(e.data.length!==t.data.length)return{status:`dimension_mismatch`};let r=0;for(let n=0;n+3<e.data.length;n+=4)(e.data[n]!==t.data[n]||e.data[n+1]!==t.data[n+1]||e.data[n+2]!==t.data[n+2])&&(r+=1);return{status:`compared`,changedPixelRatio:r/n}}function Nt(e,t=.02,n=24){let r=[],i;for(let n of e){let e=i?Ft(i,n.image):1;e<t||(r.push({timeMs:n.timeMs,changedPixelRatio:e,image:n.image}),i=n.image)}Pt(r,e);let a=r.length>n?It(r,n):r;return{cells:a,keptCellCount:r.length,thinned:a.length<r.length}}function Pt(e,t){let n=t.at(-1);if(!n)return;let r=e.at(-1);!r||r.timeMs===n.timeMs||e.push({timeMs:n.timeMs,changedPixelRatio:Ft(r.image,n.image),image:n.image})}function Ft(e,t){let n=Mt(e,t);return n.status===`compared`?n.changedPixelRatio:1}function It(e,t){if(t<=1)return[e.at(-1)];let n=(e.length-1)/(t-1);return Array.from({length:t},(t,r)=>e[Math.round(r*n)])}async function Lt(e){q(e.hostPlatform??process.platform);let t=S.resolve(e.videoPath),n=S.resolve(e.outputPath??y(t));Bt(t,n);let i=await _e(t);if(i!==`mp4`)throw new r(`INVALID_ARGS`,i===`webm`?`Contact sheets need an MP4 recording; ${t} is WebM, whose frames this decoder does not read`:`Contact sheets need an MP4 recording; ${t} is not a readable MP4`,{reason:`contact_sheet_container_unsupported`,videoPath:t,container:i??`unknown`,hint:`Re-record on a backend that exports MP4, or pass the MP4 artifact the recording produced.`});let a=yt(he(t),t),o=x.mkdtempSync(S.join(ye.tmpdir(),`agent-device-contact-sheet-`));try{let r=await pt({videoPath:t,scratchDir:o,timesMs:a.timesMs,maxWidth:360,hostPlatform:e.hostPlatform??process.platform,...e.signal===void 0?{}:{signal:e.signal}}),i=await Rt(r.frames,e.maxPixels);zt(e.signal);let s=Nt(i,e.changedPixelThreshold??.02),c=Ct({cells:s.cells,maxPixels:e.maxPixels});return Gt(n,c.bytes),{path:n,videoPath:t,durationMs:a.durationMs,width:c.width,height:c.height,sampledFrameCount:a.timesMs.length,decodedFrameCount:r.frames.length,skippedSampleCount:r.skippedSampleCount,changedPixelThreshold:e.changedPixelThreshold??.02,cells:s.cells.map(Ut),...Wt(s,r)}}finally{x.rmSync(o,{recursive:!0,force:!0})}}async function Rt(e,t){let n=[];for(let i of e){let e=await de(i.path);if(e.width>360)throw new r(`COMMAND_FAILED`,`Frame extraction returned a ${e.width}px-wide frame when the sheet asked for 360px cells`,{reason:G,framePath:i.path,frameWidth:e.width,frameWidthLimit:360});if(e.width*e.height>t)throw new r(`COMMAND_FAILED`,`Frame extraction returned a ${e.width}x${e.height} frame, above the ${t}-pixel budget for the whole sheet`,{reason:G,framePath:i.path,framePixels:e.width*e.height,maxPixels:t});let a=await ue(x.readFileSync(i.path),`recording frame`);n.push({timeMs:i.actualTimeMs,image:a})}return n}function zt(e){if(e?.aborted)throw t()}function Bt(e,t){if(Vt(e,t)??t===e)throw new r(`INVALID_ARGS`,`A contact sheet cannot be written over the recording it describes: ${t}`,{reason:`contact_sheet_output_collides_with_input`,videoPath:e,outputPath:t,hint:`Choose a different --out path, or omit it to write beside the recording.`})}function Vt(e,t){let n=Ht(e),r=Ht(t);if(n!==void 0&&r!==void 0)return n.dev===r.dev&&n.ino===r.ino}function Ht(e){try{return x.statSync(e)}catch{return}}function Ut(e){return{timeMs:e.timeMs,changedPixelRatio:e.changedPixelRatio}}function Wt(e,t){let n=[];return t.skippedSampleCount>0&&n.push(`${t.skippedSampleCount} sample times returned no frame, so the sheet covers less of the recording than it asked for`),e.thinned&&n.push(`${e.keptCellCount} changes were found and 24 cells are printed, so the sheet thins evenly across the recording instead of showing every change`),n.length===0?{}:{warning:n.join(`; `)}}function Gt(e,t){try{x.mkdirSync(S.dirname(e),{recursive:!0}),ie({destination:e,contents:t})}catch(t){throw new r(`COMMAND_FAILED`,`Failed to write the contact sheet to ${e}: ${t instanceof Error?t.message:String(t)}`,{reason:`contact_sheet_output_write_failed`,outputPath:e})}}const Kt=async(e,t)=>{if(!t.video)throw new r(`INVALID_ARGS`,`record contact-sheet requires a recording to read`);Jt(t.changedPixelThreshold);let n=await d(e,t.video,{usage:`record contact-sheet`,field:`video`}),i;try{let r=qt(t,t.video,n.path);i=await p(e,r,{field:`path`,ext:`.png`,artifactType:`screen-recording-contact-sheet`});let a=await Lt({videoPath:n.path,outputPath:i.path,maxPixels:e.policy.maxImagePixels,...t.changedPixelThreshold===void 0?{}:{changedPixelThreshold:t.changedPixelThreshold},signal:t.signal??e.signal}),o=await i.publish();return{...a,path:Yt(a.path,o),...o?{artifact:o}:{}}}catch(e){throw await i?.cleanup?.(),e}finally{await n.cleanup?.()}};function qt(e,t,n){if(e.out)return e.out;if(t.kind===`path`)return{kind:`path`,path:S.resolve(y(t.path||n))};throw new r(`INVALID_ARGS`,`record contact-sheet needs an output path when the recording is an uploaded artifact`,{hint:"Pass --out <sheet.png> (CLI) or `out` (Node) to name where the sheet is written."})}function Jt(e){if(e!==void 0&&(!Number.isFinite(e)||e<0||e>1))throw new r(`INVALID_ARGS`,`record contact-sheet needs a changedPixelThreshold between 0 and 1, got ${e}`,{reason:`contact_sheet_threshold_invalid`,changedPixelThreshold:e,hint:`Omit it to use the calibrated default, or pass a share of the frame between 0 and 1.`})}function Yt(e,t){return t?t.kind===`localPath`?t.path:t.clientPath??e:e}const Xt=async(e,t)=>{let n=tn(t.action,`record`),i=n===`start`?e.backend.startRecording:e.backend.stopRecording;if(!i)throw new r(`UNSUPPORTED_OPERATION`,`record ${n} is not supported by this backend`);let a=t.out?await p(e,t.out,{field:`path`,ext:`.mp4`,artifactType:`screen-recording`}):void 0;try{let r=Qt(t,a?.path);return nn(n,await i.call(e.backend,m(e,t),r),await a?.publish())}catch(e){throw await a?.cleanup?.(),e}},Zt=async(e,t)=>{let n=tn(t.action,`trace`),i=n===`start`?e.backend.startTrace:e.backend.stopTrace;if(!i)throw new r(`UNSUPPORTED_OPERATION`,`trace ${n} is not supported by this backend`);let a=t.out?await p(e,t.out,{field:`outPath`,ext:`.trace`,artifactType:`trace-log`}):void 0;try{let r=a?.path?{outPath:a.path}:{};return rn(n,await i.call(e.backend,m(e,t),r),await a?.publish())}catch(e){throw await a?.cleanup?.(),e}};function Qt(e,t){let n={};t&&(n.outPath=t);let r=$t(e.fps);r!==void 0&&(n.fps=r);let i=en(e.quality);return i!==void 0&&(n.quality=i),e.hideTouches!==void 0&&(n.showTouches=e.hideTouches!==!0),n}function $t(e){return e===void 0?void 0:s(e,`fps`,1,60)}function en(e){if(e===void 0)return;let t=i(e);if(t===void 0)throw new r(`INVALID_ARGS`,`quality must be one of: medium, high (legacy numeric values 5-10 are accepted)`);return t}function tn(e,t){if(e===`start`||e===`stop`)return e;throw new r(`INVALID_ARGS`,`${t} action must be start or stop`)}function nn(e,t,n){return{...typeof t.path==`string`?{path:t.path}:{},...typeof t.telemetryPath==`string`?{telemetryPath:t.telemetryPath}:{},...typeof t.warning==`string`?{warning:t.warning}:{},...an(e,t,n,{startKind:`recordingStarted`,stopKind:`recordingStopped`,startMessage:`Recording started`,stopMessage:`Recording stopped`})}}function rn(e,t,n){return{...typeof t.outPath==`string`?{outPath:t.outPath}:{},...an(e,t,n,{startKind:`traceStarted`,stopKind:`traceStopped`,startMessage:`Trace started`,stopMessage:`Trace stopped`})}}function an(e,t,n,r){return{kind:e===`start`?r.startKind:r.stopKind,action:e,...n?{artifact:n}:{},backendResult:t,...g(e===`start`?r.startMessage:r.stopMessage)}}const on={record:Xt,trace:Zt,contactSheet:Kt},sn=async(e,t={})=>{if(!e.backend.pressBack)throw new r(`UNSUPPORTED_OPERATION`,`system.back is not supported by this backend`);let n=t.mode??`in-app`;if(n!==`in-app`&&n!==`system`)throw new r(`INVALID_ARGS`,`system.back mode must be in-app or system`);let i=await e.backend.pressBack(m(e,t),{mode:n}),a=u(i);return{kind:`systemBack`,mode:n,...a?{backendResult:a}:{},...g(`Back`)}},cn=async(e,t={})=>{if(!e.backend.pressHome)throw new r(`UNSUPPORTED_OPERATION`,`system.home is not supported by this backend`);let n=await e.backend.pressHome(m(e,t)),i=u(n);return{kind:`systemHome`,...i?{backendResult:i}:{},...g(`Home`)}},ln=async(e,t)=>{if(!e.backend.pressTvRemote)throw new r(`UNSUPPORTED_OPERATION`,`system.tvRemote is not supported by this backend`);let n=oe(t.button),i=t.durationMs===void 0?void 0:s(t.durationMs,`durationMs`,0,1e4),a=await e.backend.pressTvRemote(m(e,t),{button:n,...i===void 0?{}:{durationMs:i}}),o=u(a);return{kind:`tvRemotePressed`,button:n,...i===void 0?{}:{durationMs:i},...o?{backendResult:o}:{},...g(`Pressed TV remote ${n}`)}},un=async(e,t)=>{if(!e.backend.setOrientation)throw new r(`UNSUPPORTED_OPERATION`,`system.orientation is not supported by this backend`);let n=gn(t.orientation),i=await e.backend.setOrientation(m(e,t),n),a=u(i);return{kind:`systemOrientationSet`,orientation:n,...a?{backendResult:a}:{},...g(`Rotated to ${n}`)}},dn=async(e,t={})=>{if(!e.backend.setKeyboard)throw new r(`UNSUPPORTED_OPERATION`,`system.keyboard is not supported by this backend`);let n=t.action??`status`;if(!ce(n))throw new r(`INVALID_ARGS`,`system.keyboard action must be status, get, dismiss, enter, or return`);let i=await e.backend.setKeyboard(m(e,t),{action:n}),a=u(i),o=Tn(i)?i:{};return n===`enter`||n===`return`?vn(o,a):n===`dismiss`?yn(n,o,a):xn(n,o,a)},fn=async(e,t)=>{if(t.action===`read`){if(!e.backend.getClipboard)throw new r(`UNSUPPORTED_OPERATION`,`system.clipboard read is not supported by this backend`);let n=await e.backend.getClipboard(m(e,t));return{kind:`clipboardText`,action:`read`,text:typeof n==`string`?n:n.text}}if(t.action!==`write`)throw new r(`INVALID_ARGS`,`system.clipboard action must be read or write`);if(!e.backend.setClipboard)throw new r(`UNSUPPORTED_OPERATION`,`system.clipboard write is not supported by this backend`);if(typeof t.text!=`string`)throw new r(`INVALID_ARGS`,`system.clipboard write requires text`);let n=await e.backend.setClipboard(m(e,t),t.text),i=u(n);return{kind:`clipboardUpdated`,action:`write`,textLength:Array.from(t.text).length,...i?{backendResult:i}:{},...g(`Clipboard updated`)}},pn=async(e,t={})=>{if(!e.backend.openSettings)throw new r(`UNSUPPORTED_OPERATION`,`system.settings is not supported by this backend`);let n=C(t.target,`target`),i=await e.backend.openSettings(m(e,t),n),a=u(i);return{kind:`settingsOpened`,...n?{target:n}:{},...a?{backendResult:a}:{},...g(n?`Opened settings: ${n}`:`Opened settings`)}},mn=async(e,t={})=>{if(!e.backend.handleAlert)throw new r(`UNSUPPORTED_OPERATION`,`system.alert is not supported by this backend`);let n=t.action??`get`;if(n!==`get`&&n!==`accept`&&n!==`dismiss`&&n!==`wait`)throw new r(`INVALID_ARGS`,`system.alert action must be get, accept, dismiss, or wait`);let i=t.timeoutMs===void 0?void 0:s(t.timeoutMs,`timeoutMs`,0,12e4);return _n(n,await e.backend.handleAlert(m(e,t),n,{timeoutMs:i}))},hn=async(e,t={})=>{if(!e.backend.openAppSwitcher)throw new r(`UNSUPPORTED_OPERATION`,`system.appSwitcher is not supported by this backend`);let n=await e.backend.openAppSwitcher(m(e,t)),i=u(n);return{kind:`appSwitcherOpened`,...i?{backendResult:i}:{},...g(`Opened app switcher`)}};function gn(e){switch(e){case`portrait`:case`portrait-upside-down`:case`landscape-left`:case`landscape-right`:return e;default:throw new r(`INVALID_ARGS`,`system.orientation must be portrait, portrait-upside-down, landscape-left, or landscape-right`)}}function _n(e,t){return e===`get`?Sn(t):e===`wait`?Cn(t):wn(e,t)}function vn(e,t){return{kind:`keyboardEnterPressed`,action:`enter`,state:e,...t?{backendResult:t}:{},...g(`Keyboard enter pressed`)}}function yn(e,t,n){return{kind:`keyboardDismissed`,action:e,state:t,...n?{backendResult:n}:{},...g(bn(t))}}function bn(e){return e.dismissed===!1?`Keyboard already hidden`:e.mechanism===`dismissKey`?`Keyboard dismissed via its dismiss key`:`Keyboard dismissed`}function xn(e,t,n){return{kind:`keyboardState`,action:e,state:t,...n?{backendResult:n}:{}}}function Sn(e){if(e.kind!==`alertStatus`)throw new r(`COMMAND_FAILED`,`system.alert get returned an invalid backend result`);return{kind:`alertStatus`,action:`get`,alert:e.alert}}function Cn(e){if(e.kind!==`alertWait`)throw new r(`COMMAND_FAILED`,`system.alert wait returned an invalid backend result`);return{kind:`alertWait`,action:`wait`,alert:e.alert,...e.waitedMs===void 0?{}:{waitedMs:e.waitedMs},...e.timedOut===void 0?{}:{timedOut:e.timedOut},...g(e.alert?`Alert visible`:`Alert wait timed out`)}}function wn(e,t){if(t.kind!==`alertHandled`)throw new r(`COMMAND_FAILED`,`system.alert ${e} returned an invalid backend result`);return{kind:`alertHandled`,action:e,handled:t.handled,...t.alert?{alert:t.alert}:{},...t.button?{button:t.button}:{},...g(t.handled?`Alert ${e}ed`:`No alert handled`)}}function Tn(e){return!!(e&&typeof e==`object`)}const En={back:sn,home:cn,orientation:un,keyboard:dn,clipboard:fn,settings:pn,alert:mn,appSwitcher:hn,tvRemote:ln};function Dn(e){return{capture:ee(e),selectors:f(e),interactions:l(e),system:h(En,e),apps:Je(e),admin:h(qe,e),recording:h(on,e),observability:h(ft,e)}}function On(e){let t=a(e);return{...t,...Dn(t)}}export{On as createAgentDevice,te as createMemorySessionStore,c as localCommandPolicy,o as restrictedCommandPolicy};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Qt as e,k as t}from"./sdk-batch.js";import{n,t as r}from"./durable-capture-resource.js";import{n as i}from"./screen-recording-runtime.js";const a=n({resourceKind:i,fileName:`screen-recording.resource.json`,displayName:`screen recording`}),o=r({resourceKind:`screen-recording`,displayName:`screen recording`,store:a,completionMetadata:u,failedFinishPolicy:`preserve-retry-material`,messages:{noActive:`no active recording`,cleanupPendingHint:`Keep screen-recording.resource.json and retry stop through its exact runtime owner.`}});function s(e){return o.adoptStarted(e)}function c(e){return o.finishLive(e)}const l=`completion`;function u(e){return{[l]:{backend:e.backend,outPath:e.outPath,startedAt:e.startedAt,completedAt:e.completedAt,...e.capturedDurationMs===void 0?{}:{capturedDurationMs:e.capturedDurationMs},...e.stopObservation===void 0?{}:{stopObservation:f(e.stopObservation)},...e.nativePathDisposition===void 0?{}:{nativePathDisposition:e.nativePathDisposition},scope:e.scope,showTouches:e.showTouches,recordOnlySession:e.recordOnlySession,...e.clientOutPath===void 0?{}:{clientOutPath:e.clientOutPath},...e.telemetryPath===void 0?{}:{telemetryPath:e.telemetryPath},...e.warning===void 0?{}:{warning:e.warning},...e.overlayWarning===void 0?{}:{overlayWarning:e.overlayWarning},...e.activeSessionApp===void 0?{}:{activeSessionApp:d(e.activeSessionApp)},...e.chunks===void 0?{}:{chunks:e.chunks.map(p)}}}}function d(e){return{bundleId:e.bundleId,...e.name===void 0?{}:{name:e.name}}}function f(e){return e.recorder===`confirmed`?{recorder:e.recorder}:{recorder:e.recorder,why:e.why}}function p(e){return{index:e.index,path:e.path,...e.clientOutPath===void 0?{}:{clientOutPath:e.clientOutPath}}}function m(e){return o.finishRecovered(e)}async function h(e){let t;try{return t=await e.gateway.bind({device:g(e.envelope),intent:{kind:`exact-owner`,owner:e.envelope.owner,fence:e.envelope.fence},scope:e.scope}),e.scope.signal.throwIfAborted(),e.create(t)}catch(e){throw t&&await t[Symbol.asyncDispose](),e}}function g(e){return{platform:e.device.family,id:e.device.id,name:e.device.id,kind:e.device.kind,...e.device.target===void 0?{}:{target:e.device.target},...e.device.appleOs===void 0?{}:{appleOs:e.device.appleOs},...e.device.iosPhysicalDeviceBackend===void 0?{}:{iosPhysicalDeviceBackend:e.device.iosPhysicalDeviceBackend}}}function _(e){return o.recoverOne({sessionsDir:e.sessionsDir,scope:e.scope,perRecordDeadlineMs:e.perRecordDeadlineMs,onDiagnostic:e.onDiagnostic,acquireControl:async(t,n)=>await v(e.gateway,t,n)},e.resourcePath)}async function v(n,r,i){return await h({gateway:n,envelope:r,scope:i,create:n=>y({runtime:e(n,t),dispose:async()=>await n[Symbol.asyncDispose]()})})}function y(e){return Object.freeze({reattach:async t=>await e.runtime.operations.screenRecordingReattach({envelope:t}),cleanup:async t=>await e.runtime.operations.screenRecordingCleanup({envelope:t}),[Symbol.asyncDispose]:e.dispose})}export{s as a,o as c,l as i,_ as n,c as o,h as r,m as s,y as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{D as e,b as t,v as n,y as r}from"./sdk-batch-runner.js";import{n as i}from"./success-text.js";import"./device.js";import{d as a}from"./device-rotation.js";function o(e){return{...typeof e.path==`string`?{path:e.path}:{},...typeof e.width==`number`?{width:e.width}:{},...typeof e.height==`number`?{height:e.height}:{},...typeof e.logicalWidth==`number`?{logicalWidth:e.logicalWidth}:{},...typeof e.logicalHeight==`number`?{logicalHeight:e.logicalHeight}:{},...typeof e.pixelDensity==`number`?{pixelDensity:e.pixelDensity}:{},...a(e.displayRotation)?{displayRotation:e.displayRotation}:{},...e.overlayRefs?{overlayRefs:e.overlayRefs}:{},...e.warnings&&e.warnings.length>0?{warnings:e.warnings}:{}}}function s(t,n){let r=c(t);return{path:e(t,`path`),width:r?.width,height:r?.height,logicalWidth:r?.logicalWidth,logicalHeight:r?.logicalHeight,pixelDensity:r?.pixelDensity,...r?.displayRotation?{displayRotation:r.displayRotation}:{},overlayRefs:r?.overlayRefs,...r?.warnings?{warnings:r.warnings}:{},identifiers:{session:n}}}function c(e){if(!n(e))return;let t=f(e);return o({path:u(e,`path`),width:l(e,`width`),height:l(e,`height`),logicalWidth:l(e,`logicalWidth`),logicalHeight:l(e,`logicalHeight`),pixelDensity:l(e,`pixelDensity`),displayRotation:a(e.displayRotation)?e.displayRotation:void 0,overlayRefs:d(e.overlayRefs),...t===void 0?{}:{warnings:t}})}function l(e,t){let n=e[t];return typeof n==`number`?n:void 0}function u(e,t){let n=e[t];return typeof n==`string`?n:void 0}function d(e){if(Array.isArray(e))return e.filter(g).flatMap(e=>{let t=p(e);return t?[t]:[]})}function f(e){if(Array.isArray(e.warnings))return i(e).filter(e=>e.length>0)}function p(e){if(typeof e.ref!=`string`||e.ref.length===0)return;let t=m(e);if(t)return{ref:e.ref,...h(e),...t}}function m(e){let n=t(e.rect);if(!n)return;let i=t(e.overlayRect);if(!i)return;let a=r(e.center);return a?{rect:n,overlayRect:i,center:a}:void 0}function h(e){return typeof e.label==`string`&&e.label.length>0?{label:e.label}:{}}function g(e){return n(e)}export{o as n,s as t};
|
package/dist/src/script.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{M as e,P as t}from"./sdk-contracts.js";import{c as n,s as r,t as i}from"./capture.js";import{m as a}from"./sdk-batch-runner.js";import{i as o}from"./sdk-device.js";import{nr as s,rr as c}from"./sdk-batch.js";import{i as l}from"./recording-export-quality.js";import{n as u,s as d}from"./scroll-gesture.js";import{t as f}from"./gesture-plan-types.js";const p=[`pan`,`fling`,`swipe`,`pinch`,`rotate`,`transform`,`drag`];function m(e){let n=g(e),r=x(n,`kind`,p);if(r===`pan`)return{kind:r,origin:_(n,`origin`),delta:_(n,`delta`),pointerCount:a(n,`pointerCount`,{min:1,max:2}),durationMs:h(n)};if(r===`drag`)return ee(n);if(n.pointerCount!==void 0)throw new t(`INVALID_ARGS`,`pointerCount is supported only for gesture pan`);if(r===`fling`){if(n.durationMs!==void 0)throw new t(`INVALID_ARGS`,`gesture fling does not accept durationMs; use gesture pan for timed movement`);return{kind:r,direction:x(n,`direction`,u),origin:_(n,`origin`),distance:a(n,`distance`,{min:0})}}if(r===`swipe`){if(n.durationMs!==void 0)throw new t(`INVALID_ARGS`,`gesture swipe does not accept durationMs; use gesture pan for timed movement`);return{kind:r,preset:x(n,`preset`,d)}}if(r===`pinch`)return{kind:r,scale:y(n,`scale`),origin:v(n,`origin`)};if(r===`rotate`){if(n.velocity!==void 0)throw new t(`INVALID_ARGS`,`gesture rotate does not accept velocity; rotation pacing derives from degrees`);return{kind:r,degrees:y(n,`degrees`),origin:v(n,`origin`)}}return{kind:r,origin:_(n,`origin`),delta:_(n,`delta`),scale:y(n,`scale`),degrees:y(n,`degrees`),durationMs:h(n)}}function ee(e){let n=a(e,`sourceHoldMs`,{min:1,max:1e4}),r=a(e,`moveMs`,{min:16,max:1e4}),i=a(e,`destinationHoldMs`,{min:0,max:1e4});if((n??800)+(r??500)+(i??0)>1e4)throw new t(`INVALID_ARGS`,`gesture drag total duration must be at most ${f}`);return{kind:`drag`,source:b(e,`source`),destination:b(e,`destination`),sourceHoldMs:n,moveMs:r,destinationHoldMs:i}}function h(e){let n=a(e,`durationMs`);if(n!==void 0){if(n<16||n>1e4)throw new t(`INVALID_ARGS`,`Expected durationMs to be an integer between 16 and ${f}.`);return n}}function g(e){if(!e||typeof e!=`object`||Array.isArray(e))throw new t(`INVALID_ARGS`,`gesture requires structured object input`);return e}function _(e,t){let n=g(e[t]);return{x:y(n,`x`),y:y(n,`y`)}}function v(e,t){return e[t]===void 0?void 0:_(e,t)}function y(e,n){let r=e[n];if(typeof r!=`number`||!Number.isFinite(r))throw new t(`INVALID_ARGS`,`Expected ${n} to be a finite number.`);return r}function b(e,n){let r=e[n];if(typeof r!=`string`||r.trim().length===0)throw new t(`INVALID_ARGS`,`Expected ${n} to be a non-empty string.`);return r.trim()}function x(e,n,r){let i=e[n];if(typeof i!=`string`||!r.includes(i))throw new t(`INVALID_ARGS`,`Expected ${n} to be one of: ${r.join(`, `)}.`);return i}const S={swipe:{max:4,usage:`swipe accepts 4 arguments: x1 y1 x2 y2`,retired:{positional:`durationMs`,migrate:te}},"gesture pan":{max:5,usage:`gesture pan accepts at most 5 arguments: x y dx dy [durationMs]`},"gesture fling":{max:4,usage:`gesture fling accepts at most 4 arguments: direction x y [distance]`,retired:{positional:`durationMs`,migrate:(e,t)=>`use "${t}", or gesture pan for timed movement.`}},"gesture swipe":{max:1,usage:`gesture swipe accepts 1 argument: preset`,retired:{positional:`durationMs`,migrate:(e,t)=>`use "${t}", or gesture pan for timed movement.`}},"gesture pinch":{max:3,usage:`gesture pinch accepts at most 3 arguments: scale [x] [y]`},"gesture rotate":{max:3,usage:`gesture rotate accepts at most 3 arguments: degrees [x] [y]`,retired:{positional:`velocity`,migrate:(e,t)=>`use "${t}"; rotation pacing derives from degrees.`}},"gesture transform":{max:7,usage:`gesture transform accepts at most 7 arguments: x y dx dy scale degrees [durationMs]`},"gesture drag":{max:5,usage:`gesture drag accepts at most 5 arguments: source destination [sourceHoldMs] [moveMs] [destinationHoldMs]`}};function te(e,t){let[n,r,i,a,o]=e,s=C(n,i),c=C(r,a);return s===void 0||c===void 0?`use "gesture pan x1 y1 dx dy durationMs" for the same timed drag, or "${t}" for a default-duration swipe.`:`use "gesture pan ${n} ${r} ${s} ${c} ${o}" for the same timed drag, or "${t}" for a default-duration swipe.`}function C(e,t){let n=Number(t)-Number(e);return Number.isFinite(n)?n:void 0}function w(e,t){let n=S[e];if(t.length<=n.max)return;let r=n.retired;if(!r||t.length!==n.max+1||!ne(t[n.max]))return{usage:n.usage};let i=`${e} ${t.slice(0,n.max).join(` `)}`;return{usage:n.usage,migration:`The trailing ${r.positional} positional was removed: ${r.migrate(t,i)}`}}function ne(e){return e===void 0||e.trim().length===0?!1:e.startsWith("${")||Number.isFinite(Number(e))}function re(e){if(!(!e||typeof e!=`object`||Array.isArray(e))&&e.durationMs!==void 0)throw new t(`INVALID_ARGS`,`swipe does not accept durationMs; use gesture pan for timed movement`)}function T(e,t){let n=t?`${e.usage} (${t})`:e.usage;return e.migration?`${n}. ${e.migration}`:`${n}.`}function E(e,n){let r=w(e,n);if(r)throw new t(`INVALID_ARGS`,T(r))}function ie(e,t,n){let r=ae(e,t);return r?T(r,n):void 0}function ae(e,t){if(e===`swipe`)return w(`swipe`,t);if(e!==`gesture`)return;let n=`gesture ${t[0]}`;if(Object.hasOwn(S,n))return w(n,t.slice(1))}function D(e){return{origin:{x:Number(e[0]),y:Number(e[1])},delta:{x:Number(e[2]),y:Number(e[3])}}}function O(e,t){let n=e[0],r=e.slice(1);switch(n){case`pan`:{E(`gesture pan`,r);let{origin:e,delta:i}=D(r);return m({kind:n,origin:e,delta:i,pointerCount:t,durationMs:k(r[4])})}case`fling`:return E(`gesture fling`,r),m({kind:n,direction:r[0],origin:{x:Number(r[1]),y:Number(r[2])},distance:k(r[3])});case`swipe`:return E(`gesture swipe`,r),m({kind:n,preset:r[0]});case`pinch`:return E(`gesture pinch`,r),m({kind:n,scale:Number(r[0]),origin:A(r[1],r[2])});case`rotate`:return E(`gesture rotate`,r),m({kind:n,degrees:Number(r[0]),origin:A(r[1],r[2])});case`transform`:{E(`gesture transform`,r);let{origin:e,delta:t}=D(r);return m({kind:n,origin:e,delta:t,scale:Number(r[4]),degrees:Number(r[5]),durationMs:k(r[6])})}case`drag`:return E(`gesture drag`,r),m({kind:n,source:r[0],destination:r[1],sourceHoldMs:k(r[2]),moveMs:k(r[3]),destinationHoldMs:k(r[4])});default:return m({kind:n})}}function oe(e){if(e[0]!==`drag`)return;let t=O(e);return t.kind===`drag`?t:void 0}function se(e){switch(e.kind){case`pan`:return j([e.kind,e.origin.x,e.origin.y,e.delta.x,e.delta.y,e.durationMs]);case`fling`:return j([e.kind,e.direction,e.origin.x,e.origin.y,e.distance]);case`swipe`:return[e.kind,e.preset];case`pinch`:return j([e.kind,e.scale,e.origin?.x,e.origin?.y]);case`rotate`:return e.origin?j([e.kind,e.degrees,e.origin.x,e.origin.y]):[e.kind,String(e.degrees)];case`transform`:return j([e.kind,e.origin.x,e.origin.y,e.delta.x,e.delta.y,e.scale,e.degrees,e.durationMs]);case`drag`:return[e.kind,e.source,e.destination,String(e.sourceHoldMs??800),String(e.moveMs??500),String(e.destinationHoldMs??0)]}}function ce(e,t={}){return E(`swipe`,e),{from:{x:Number(e[0]),y:Number(e[1])},to:{x:Number(e[2]),y:Number(e[3])},...t.count===void 0?{}:{count:t.count},...t.pauseMs===void 0?{}:{pauseMs:t.pauseMs},...t.pattern===void 0?{}:{pattern:t.pattern}}}function le(e){switch(e.kind){case`pan`:return{gesture:{intent:`pan`,origin:e.origin,delta:e.delta,pointerCount:e.pointerCount,durationMs:e.durationMs}};case`fling`:return{gesture:{intent:`fling`,direction:e.direction,origin:e.origin,distance:e.distance}};case`swipe`:return{gesture:{intent:`fling`,preset:e.preset}};case`pinch`:return{gesture:{intent:`pinch`,origin:e.origin,scale:e.scale}};case`rotate`:return{gesture:{intent:`rotate`,origin:e.origin,degrees:e.degrees}};case`transform`:return{gesture:{intent:`transform`,origin:e.origin,delta:e.delta,scale:e.scale,degrees:e.degrees,durationMs:e.durationMs}};case`drag`:throw new t(`INVALID_ARGS`,`gesture drag targets must be resolved before coordinate normalization`)}}function ue(e){return e.kind===`drag`?{intent:`drag`,source:e.source,destination:e.destination,sourceHoldMs:e.sourceHoldMs,moveMs:e.moveMs,destinationHoldMs:e.destinationHoldMs}:le(e).gesture}function de(e){return{gesture:{intent:`fling`,from:e.from,to:e.to}}}function k(e){return e===void 0?void 0:Number(e)}function A(e,n){if(e===void 0!=(n===void 0))throw new t(`INVALID_ARGS`,`gesture origin requires both x and y coordinates`);return e===void 0?void 0:{x:Number(e),y:Number(n)}}function j(e){return e.filter(e=>e!==void 0).map(String)}const fe={ios:!0,android:!0,harmonyos:!0};function M(e){return typeof e==`string`&&Object.hasOwn(fe,e)}function N(t){return t.startsWith(`@`)?e(t)?.base??t:t}const P=/^-?\d+(\.\d+)?$/,pe=/^[^\s"'\\][^\s"\\]*$/,me=new Map([[`--count`,`count`],[`--interval-ms`,`intervalMs`],[`--hold-ms`,`holdMs`],[`--jitter-px`,`jitterPx`]]),he=new Map([[`--count`,`count`],[`--pause-ms`,`pauseMs`]]),ge=new Map([[`--pointer-count`,`pointerCount`]]),_e=new Map([[`--delay-ms`,`delayMs`]]),F={scroll:new Map([[`--until`,{key:`until`,kind:`string`}]]),wait:new Map([[`--raw`,{key:`snapshotRaw`,kind:`boolean`}],[`--depth`,{key:`snapshotDepth`,kind:`int`}],[`--scope`,{key:`snapshotScope`,kind:`string`}]])};Object.keys(F);function ve(e,t){let n=[],r={},i=F[e];for(let e=0;e<t.length;e+=1){let a=t[e],o=i.get(a),s=t[e+1];if(o===void 0||o.kind!==`boolean`&&s===void 0){n.push(a);continue}if(o.kind===`boolean`){Object.assign(r,{[o.key]:!0});continue}if(o.kind===`int`){let e=q(s);if(e===null){n.push(a);continue}Object.assign(r,{[o.key]:e})}else Object.assign(r,{[o.key]:s});e+=1}return{positionals:n,flags:r}}function I(e){return e===`click`||e===`press`}function ye(e){return I(e)||e===`longpress`||e===`hover`}function L(e){return e===`type`||e===`fill`}function R(e){return V(e,be)}function z(e){return JSON.stringify(e)}function B(e){return V(e,H)}function V(e,t){return t(e)?e:z(e)}function be(e){return H(e)&&e.startsWith(`@`)||P.test(e)}function H(e){return pe.test(e)}const xe=new Set([`fill`,`type`]);function Se(e){if(!xe.has(e.command)){let t=(e.positionals??[]).map(e=>R(e));return[e.command,...t].join(` `)}let t=Ce(e).map(e=>R(e)).join(` `);return[e.command,t,`<text>`].filter(e=>e.length>0).join(` `)}function Ce(e){if(e.command===`type`)return[];let t=e.positionals??[],n=t[0];return n===void 0?[]:n.startsWith(`@`)?[n]:t.length>=3&&P.test(n)&&P.test(t[1]??``)?[n,t[1]]:[n]}function U(e,t){let n=t.flags??{};if(I(t.command)){typeof n.count==`number`&&e.push(`--count`,String(n.count)),typeof n.intervalMs==`number`&&e.push(`--interval-ms`,String(n.intervalMs)),typeof n.holdMs==`number`&&e.push(`--hold-ms`,String(n.holdMs)),typeof n.jitterPx==`number`&&e.push(`--jitter-px`,String(n.jitterPx)),n.doubleTap===!0&&e.push(`--double-tap`);let t=n.clickButton;t&&t!==`primary`&&e.push(`--button`,t);return}if(t.command===`swipe`){typeof n.count==`number`&&e.push(`--count`,String(n.count)),typeof n.pauseMs==`number`&&e.push(`--pause-ms`,String(n.pauseMs)),(n.pattern===`one-way`||n.pattern===`ping-pong`)&&e.push(`--pattern`,n.pattern);return}if(t.command===`gesture`){typeof n.pointerCount==`number`&&e.push(`--pointer-count`,String(n.pointerCount));return}L(t.command)&&typeof n.delayMs==`number`&&e.push(`--delay-ms`,String(n.delayMs))}function W(e,t){t&&(M(t.platform)&&e.push(`--platform`,t.platform),typeof t.metroHost==`string`&&t.metroHost.length>0&&e.push(`--metro-host`,B(t.metroHost)),typeof t.metroPort==`number`&&e.push(`--metro-port`,String(t.metroPort)),typeof t.bundleUrl==`string`&&t.bundleUrl.length>0&&e.push(`--bundle-url`,B(t.bundleUrl)),typeof t.launchUrl==`string`&&t.launchUrl.length>0&&e.push(`--launch-url`,B(t.launchUrl)))}function we(e,t){let[n,...r]=t.positionals??[];n&&e.push(B(n));for(let t of r)e.push(R(t));typeof t.flags?.fps==`number`&&e.push(`--fps`,String(t.flags.fps)),(typeof t.flags?.quality==`number`||typeof t.flags?.quality==`string`)&&e.push(`--quality`,String(t.flags.quality)),t.flags?.hideTouches&&e.push(`--hide-touches`)}function Te(e,t){t.flags?.snapshotInteractiveOnly&&e.push(`-i`),typeof t.flags?.snapshotDepth==`number`&&e.push(`-d`,String(t.flags.snapshotDepth)),t.flags?.snapshotScope&&e.push(`-s`,R(t.flags.snapshotScope)),t.flags?.snapshotRaw&&e.push(`--raw`)}function Ee(e,t){for(let n of t.positionals??[])e.push(R(n));let n=t.flags?.screenshotCropOn;typeof n==`string`&&n.length>0&&e.push(`--crop-on`,B(n)),r(e,t.flags)}function De(e,t,n={}){let r=t.positionals??[],i=n.includeAllPositionals?r:r.slice(0,1);for(let t of i)e.push(B(t));W(e,t.flags)}function Oe(e,t){for(let n of t.positionals??[])e.push(R(t.command===`wait`?N(n):n));t.command===`fold`&&t.flags?.keyframes!==void 0&&e.push(`--keyframes`,R(t.flags.keyframes)),t.command===`scroll`&&typeof t.flags?.until==`string`&&e.push(`--until`,R(t.flags.until)),t.command===`wait`&&ke(e,t.flags),U(e,t)}function ke(e,t){t&&(t.snapshotRaw===!0&&e.push(`--raw`),typeof t.snapshotDepth==`number`&&e.push(`--depth`,String(t.snapshotDepth)),typeof t.snapshotScope==`string`&&e.push(`--scope`,R(t.snapshotScope)))}function G(e,t){let n=[],r={},i=I(e)?me:e===`swipe`?he:e===`gesture`?ge:L(e)?_e:void 0;for(let a=0;a<t.length;a+=1){let o=t[a];if(I(e)&&o===`--double-tap`){r.doubleTap=!0;continue}let s=t[a+1];if(e===`fold`&&o===`--keyframes`&&s!==void 0){r.keyframes=s,a+=1;continue}if(I(e)&&o===`--button`&&s!==void 0){let e=s;(e===`primary`||e===`secondary`||e===`middle`)&&(r.clickButton=e),a+=1;continue}let c=i?.get(o);if(c&&s!==void 0){let e=q(s);if(e!==null){r[c]=e,a+=1;continue}}if(e===`swipe`&&o===`--pattern`&&s!==void 0){let e=s;(e===`one-way`||e===`ping-pong`)&&(r.pattern=e),a+=1;continue}n.push(o)}return{positionals:n,flags:r}}function K(e){let t=[],n={};for(let r=0;r<e.length;r+=1){let i=e[r],a=e[r+1];if(i===`--platform`&&a!==void 0){let e=a;M(e)&&(n.platform=e),r+=1;continue}if(i===`--metro-host`&&a!==void 0){n.metroHost=a,r+=1;continue}if(i===`--metro-port`&&a!==void 0){let e=q(a);e!==null&&(n.metroPort=e),r+=1;continue}if(i===`--bundle-url`&&a!==void 0){n.bundleUrl=a,r+=1;continue}if(i===`--launch-url`&&a!==void 0){n.launchUrl=a,r+=1;continue}t.push(i)}return{positionals:t,flags:n}}function q(e){if(!e)return null;let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.floor(t)}function Ae(e){let t;for(let n of e){if(n.command===`runtime`&&typeof n.flags.platform==`string`){t=n.flags.platform;continue}if(n.command===`open`)return n.runtime?.platform??t}return t}function je(e,t){for(let n of t.positionals??[])e.push(R(n));t.flags?.relaunch&&e.push(`--relaunch`),t.flags?.surface!==void 0&&e.push(`--surface`,t.flags.surface),t.flags?.testIme===!0?e.push(`--test-ime`):t.flags?.testIme===!1&&e.push(`--no-test-ime`),W(e,t.runtime)}function Me(e){let t=[],n={};for(let r=0;r<e.length;r+=1){let i=e[r];if(i===`--surface`){n.surface=Pe(e[r+1]),r+=1;continue}if(i===`--relaunch`){n.relaunch=!0;continue}if(i===`--test-ime`){n.testIme=!0;continue}if(i===`--no-test-ime`){n.testIme=!1;continue}t.push(i)}let r=K(t);return{positionals:r.positionals,flags:n,runtime:Fe(r.flags)?r.flags:void 0}}const J={app:!0,"frontmost-app":!0,desktop:!0,menubar:!0};function Ne(e){return Object.hasOwn(J,e)}function Pe(e){let n=e?.trim().toLowerCase();if(n!==void 0&&Ne(n))return n;throw new t(`INVALID_ARGS`,`Invalid surface: ${e}. Use ${Object.keys(J).join(`|`)}.`)}function Fe(e){return!!(e.platform||e.metroHost||e.metroPort!==void 0||e.bundleUrl||e.launchUrl)}const Y=/^[A-Z_][A-Z0-9_]*$/,Ie=new Set(o.filter(e=>e!==`web`)),Le=new Set([`mobile`,`tv`,`desktop`]);function Re(e){let n=[],r=[],i=e.split(/\r?\n/),a=!1,o,l=(e,n,r)=>{let i=e.kind===`multiple`?`targets-v1`:`target-v1`;throw new t(`INVALID_ARGS`,`${i} annotation on line ${e.line} must be immediately followed by its action line (line ${n+1} ${r}).`)};for(let[e,u]of i.entries()){let i=u.trim();if(i.length===0){o&&l(o,e,`is blank`);continue}if(i.startsWith(`#`)){let t=s(i);if(t.kind===`v1`){o&&l(o,e,`is another target annotation`),o={kind:`multiple`,evidence:t.evidence,line:e+1};continue}let n=c(i);if(n.kind===`v1`){o&&l(o,e,`is another target annotation`),o={kind:`single`,evidence:n.evidence,line:e+1};continue}o&&l(o,e,`is a comment`);continue}if(X(i)){if(o&&l(o,e,`is an env directive`),a)throw new t(`INVALID_ARGS`,`env directives must precede all actions (line ${e+1}).`);continue}let d=Q(u);if(!d){o&&l(o,e,`did not parse as an action`);continue}let f=ie(d.command,d.positionals??[],`line ${e+1}`);if(f)throw new t(`INVALID_ARGS`,f);o&&=(o.kind===`single`?d.targetEvidence=o.evidence:d.targetEvidences=o.evidence,void 0),n.push(d),r.push(e+1),a=!0}if(o){let e=o.kind===`multiple`?`targets-v1`:`target-v1`;throw new t(`INVALID_ARGS`,`${e} annotation on line ${o.line} must be immediately followed by its action line (end of script reached).`)}return{actions:n,actionLines:r}}function ze(e){let t=e.split(/\r?\n/),n={};for(let[e,r]of t.entries()){let t=r.trim();if(t.length===0||t.startsWith(`#`))continue;if(X(t)){He(n,t,e+1);continue}if(!t.startsWith(`context `))break;let i=t.match(/(?:^|\s)platform=([^\s]+)/);if(i){let e=i[1];e&&Ie.has(e)&&Z(n,`platform`,e)}let a=t.match(/(?:^|\s)target=([^\s]+)/);if(a){let e=a[1];e&&Le.has(e)&&Z(n,`target`,e)}let o=t.match(/(?:^|\s)timeout=(\d+)/);if(o){let e=Number(o[1]);Number.isFinite(e)&&e>=1&&Z(n,`timeoutMs`,Math.floor(e))}let s=t.match(/(?:^|\s)retries=(\d+)/);if(s){let e=Number(s[1]);Number.isFinite(e)&&e>=0&&Z(n,`retries`,Math.floor(e))}}return n}function X(e){return e===`env`||e.startsWith(`env `)||e.startsWith(`env `)}function Be(e,n){let r=e.slice(3).replace(/^[\s]+/,``),i=r.indexOf(`=`);if(i<=0)throw new t(`INVALID_ARGS`,`Invalid env directive on line ${n}: expected "env KEY=VALUE".`);let a=r.slice(0,i);if(!Y.test(a))throw new t(`INVALID_ARGS`,`Invalid env key "${a}" on line ${n}: keys must be uppercase letters, digits, and underscores (e.g. APP_ID).`);if(a.startsWith(`AD_`))throw new t(`INVALID_ARGS`,`Invalid env key "${a}" on line ${n}: the AD_* namespace is reserved for built-in variables. Rename ${a} to avoid the AD_ prefix.`);return{key:a,value:Ve(r.slice(i+1),n)}}function Ve(e,n){if(e.length===0)return``;if(e.startsWith(`"`))try{let t=JSON.parse(e);if(typeof t!=`string`)throw Error(`not a string literal`);return t}catch{throw new t(`INVALID_ARGS`,`Invalid quoted env value on line ${n}.`)}return e}function He(e,n,r){let{key:i,value:a}=Be(n,r),o=e.env??{};if(Object.prototype.hasOwnProperty.call(o,i))throw new t(`INVALID_ARGS`,`Duplicate env directive "${i}" on line ${r}.`);o[i]=a,e.env=o}function Z(e,n,r){let i=e[n];if(i!==void 0){let e=i===r?`Duplicate replay test metadata "${n}" in context header.`:`Conflicting replay test metadata "${n}" in context header: ${String(i)} vs ${String(r)}.`;throw new t(`INVALID_ARGS`,e)}e[n]=r}function Q(e){let r=e.trim();if(r.length===0||r.startsWith(`#`))return null;let[a,...o]=We(r);if(a===void 0||a===`context`)return null;let s={ts:Date.now(),command:a,positionals:[],flags:{}};if(a===`snapshot`){s.positionals=[];for(let e=0;e<o.length;e+=1){let t=o[e];if(t===`-i`){s.flags.snapshotInteractiveOnly=!0;continue}if(t!==`-c`){if(t===`--raw`){s.flags.snapshotRaw=!0;continue}if(t===`--force-full`){s.flags.snapshotForceFull=!0;continue}if((t===`-d`||t===`--depth`)&&e+1<o.length){let t=Number(o[e+1]);Number.isFinite(t)&&t>=0&&(s.flags.snapshotDepth=Math.floor(t)),e+=1;continue}if((t===`-s`||t===`--scope`)&&e+1<o.length){s.flags.snapshotScope=o[e+1],e+=1;continue}if(t===`--backend`&&e+1<o.length){e+=1;continue}}}return s}if(a===`open`){let e=Me(o);return s.positionals=e.positionals,Object.assign(s.flags,e.flags),s.runtime=e.runtime,s}if(a===`runtime`){let e=K(o);return s.positionals=e.positionals,Object.assign(s.flags,e.flags),s}if(I(a)){let e=G(a,o);Object.assign(s.flags,e.flags);let t=e.positionals[0];if(t===void 0)return s;if(t.startsWith(`@`))return s.positionals=[N(t)],e.positionals[1]&&(s.result={refLabel:e.positionals[1]}),s;let n=e.positionals[0],r=e.positionals[1];return $(n)&&$(r)&&e.positionals.length>=2?(s.positionals=[n,r],s):(s.positionals=[e.positionals.join(` `)],s)}if(a===`fill`){let e=G(a,o);if(Object.assign(s.flags,e.flags),!Ue(e.positionals))return s.positionals=e.positionals,s;let[t,n,...r]=e.positionals;if($(t)&&$(n))return s.positionals=[t,n,r.join(` `)],s;let[i,c,...l]=e.positionals;if(i.startsWith(`@`)){let e=N(i);return l.length>0?(s.positionals=[e,l.join(` `)],s.result={refLabel:c},s):(s.positionals=[e,c],s)}return s.positionals=[i,[c,...l].join(` `)],s}if(a===`get`){let e=o[0],t=o[1];return e===void 0||t===void 0?(s.positionals=o,s):t.startsWith(`@`)?(s.positionals=[e,N(t)],o[2]&&(s.result={refLabel:o[2]}),s):(s.positionals=[e,o.slice(1).join(` `)],s)}if(a===`swipe`||a===`type`||a===`gesture`||a===`fold`){let e=G(a,o);return Object.assign(s.flags,e.flags),s.positionals=e.positionals,s}if(a===`record`){let e=[];for(let n=0;n<o.length;n+=1){let r=o[n];if(r===i.cliToken)throw new t(`INVALID_ARGS`,i.migration.record);if(r===`--hide-touches`){s.flags.hideTouches=!0;continue}if(r===`--fps`&&n+1<o.length){let e=Number(o[n+1]);Number.isFinite(e)&&(s.flags.fps=Math.floor(e)),n+=1;continue}if(r===`--quality`&&n+1<o.length){let e=o[n+1],t=l(e);t!==void 0&&(s.flags.quality=t),n+=1;continue}e.push(r)}return s.positionals=e,s}if(a===`screenshot`){let e=[];for(let t=0;t<o.length;t+=1){let r=o[t],i=n({args:o,index:t,flags:s.flags});if(i.handled){t=i.nextIndex;continue}e.push(r)}return s.positionals=e,s}if(a===`scroll`||a===`wait`){let e=ve(a,o);return Object.assign(s.flags,e.flags),s.positionals=e.positionals.map(e=>N(e)),s}return s.positionals=a===`longpress`||a===`hover`?o.map(e=>N(e)):o,s}function Ue(e){return e.length>=2}function $(e){return e?!Number.isNaN(Number(e)):!1}function We(e){let t=[],n=0;for(;n<e.length&&(n=Ge(e,n),!(n>=e.length));){let r=e[n]===`"`?Ke(e,n):qe(e,n)??Qe(e,n);t.push(r.value),n=r.nextCursor}return t}function Ge(e,t){let n=t;for(;n<e.length&&/\s/.test(e.charAt(n));)n+=1;return n}function Ke(e,n){let r=n+1,i=!1,a=r;for(;a<e.length;a+=1){let t=e.charAt(a);if(t===`"`&&!i)break;if(i){i=!1;continue}i=t===`\\`}if(a>=e.length)throw new t(`INVALID_ARGS`,`Invalid replay script line: ${e}`);let o=e.slice(n,a+1),s;try{s=JSON.parse(o)}catch{throw new t(`INVALID_ARGS`,`Invalid quoted value ${o} in replay script line: ${e}`,{hint:`Quoted replay values are JSON strings: escape backslashes, quotes, tabs, and newlines (\\\\, \\", \\t, \\n).`})}return{value:s,nextCursor:a+1}}function qe(e,t){if(e[t]!==`'`)return null;let n=Je(e,t+1);return n===-1||!Xe(e,n+1)?null:{value:Ze(e.slice(t+1,n)),nextCursor:n+1}}function Je(e,t){let n=t;for(;n<e.length;){let t=e.indexOf(`'`,n);if(t===-1)return-1;if(!Ye(e,t))return t;n=t+1}return-1}function Ye(e,t){let n=0;for(;t>0&&e.charAt(t-1)===`\\`;)n+=1,--t;return n%2==1}function Xe(e,t){return t>=e.length||/\s/.test(e.charAt(t))}function Ze(e){return e.replaceAll(String.raw`\'`,`'`)}function Qe(e,t){let n=t;for(;n<e.length&&!/\s/.test(e.charAt(n));)n+=1;return{value:e.slice(t,n),nextCursor:n}}export{de as C,m as E,ue as S,p as T,N as _,Ae as a,O as b,De as c,Te as d,Se as f,ye as g,I as h,je as i,Ee as l,z as m,Re as n,Oe as o,R as p,ze as r,we as s,Y as t,U as u,re as v,ce as w,se as x,oe as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";const t=1e4,n=.65;function r(e,t){return{...e,releaseBehavior:t===void 0?`controlled`:`inertial`}}function i(t,n=`scroll accepts either a relative amount or --pixels, not both`){if(t.amount!==void 0&&t.pixels!==void 0)throw new e(`INVALID_ARGS`,n)}function a(t){if(t.until!==void 0&&t.edge!==void 0)throw new e(`INVALID_ARGS`,`scroll ${t.edge} already scrolls to the ${t.edge} edge and cannot take --until`,{hint:`Use scroll ${t.edge===`bottom`?`down`:`up`} --until <selector> to stop at the target, or scroll ${t.edge} to reach the edge.`})}function o(t,n={}){if(t===void 0)return;let r=n.field??`scroll durationMs`,i=n.max??1e4,a=n.invalidMessage??`${r} must be a non-negative integer`;if(!Number.isFinite(t)||!Number.isInteger(t)||t<0)throw new e(`INVALID_ARGS`,a);if(t>i)throw new e(`INVALID_ARGS`,`${r} must be a non-negative integer at most ${i}`);return t}function s(e){return typeof e?.pixels==`number`?e.pixels:void 0}function c(e){return typeof e?.durationMs==`number`?e.durationMs:void 0}function l(e){let t=u(e?.x1),n=u(e?.y1),r=u(e?.x2),i=u(e?.y2);if(t!==void 0&&n!==void 0&&r!==void 0&&i!==void 0)return{x:(t+r)/2,y:(n+i)/2}}function u(e){return typeof e==`number`&&Number.isFinite(e)?e:void 0}export{c as a,o as c,a as i,r as l,t as n,s as o,i as r,l as s,n as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{Mr as t}from"./sdk-batch.js";import{t as n}from"./string-enum.js";const r=[`up`,`down`,`left`,`right`,`top`,`bottom`],i=[`up`,`down`,`left`,`right`],a=[`left`,`right`,`left-edge`,`right-edge`],o=[`one-way`,`ping-pong`],s=1e4,c=6e4,l=n(i,{message:e=>`Unknown direction: ${e}`}),u=.6;function d(e){let t=e.direction,n=t===`up`||t===`down`?e.referenceHeight:e.referenceWidth,r=S(e.amount),i=e.pixels===void 0?Math.round(n*r):C(e.pixels),a=Math.max(1,Math.round(n*.1)),o=Math.max(1,n-a*2),s=Math.max(1,Math.min(i,o)),c=Math.round(s/2),l=Math.round(e.referenceWidth/2),u=Math.round(e.referenceHeight/2),d=(n,r,i,a)=>({direction:t,x1:n,y1:r,x2:i,y2:a,referenceWidth:e.referenceWidth,referenceHeight:e.referenceHeight,amount:e.amount,pixels:s});switch(t){case`up`:return d(l,u-c,l,u+c);case`down`:return d(l,u+c,l,u-c);case`left`:return d(l-c,u,l+c,u);case`right`:return d(l+c,u,l-c,u)}}function f(e){S(e.amount),e.pixels!==void 0&&C(e.pixels)}function p(e,t){if(e===`left`||e===`right`){let n=h(e,t);return{preset:e,x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2,referenceWidth:n.referenceWidth,referenceHeight:n.referenceHeight}}let[n,r]=e===`left-edge`?[99,15]:[1,85],i=v(_(t,n,50),t,8),a=v(_(t,r,50),t,8);return{preset:e,x1:i.x,y1:i.y,x2:a.x,y2:a.y,referenceWidth:t.referenceWidth,referenceHeight:t.referenceHeight}}function m(e,t){switch(e){case`up`:return{x:0,y:-t};case`down`:return{x:0,y:t};case`left`:return{x:-t,y:0};case`right`:return{x:t,y:0}}}function h(e,t){let n=e===`left`||e===`up`,r=n?85:15,i=n?15:85,a=e===`up`||e===`down`,o=v(_(t,a?50:r,a?r:50),t,8),s=v(_(t,a?50:i,a?i:50),t,8);return{direction:e,x1:o.x,y1:o.y,x2:s.x,y2:s.y,referenceWidth:t.referenceWidth,referenceHeight:t.referenceHeight}}function g(e){let t=b(e);if(t)return{referenceWidth:t.width,referenceHeight:t.height}}function _(e,t,n){let r=Math.trunc(e.referenceWidth*t/100),i=Math.trunc(e.referenceHeight*n/100);return{x:Number.isFinite(r)?r:0,y:Number.isFinite(i)?i:0}}function v(e,t,n){return{x:w(e.x,n,t.referenceWidth),y:w(e.y,n,t.referenceHeight)}}function y(e){return l.parse(e)}function b(e){let n=e.filter(e=>t(e)&&x(e.rect)).map(e=>e.rect).sort((e,t)=>(t?.width??0)*(t?.height??0)-(e?.width??0)*(e?.height??0))[0];if(n)return n;let r=e.map(e=>e.rect).filter(x);if(r.length===0)return;let i=Math.max(...r.map(e=>e.x+e.width)),a=Math.max(...r.map(e=>e.y+e.height));if(!(i<=0||a<=0))return{x:0,y:0,width:i,height:a}}function x(e){return!!e&&e.width>0&&e.height>0}function S(t){if(t===void 0)return u;if(!Number.isFinite(t)||t<=0)throw new e(`INVALID_ARGS`,`scroll amount must be a positive number`);return t}function C(t){if(!Number.isFinite(t)||t<=0)throw new e(`INVALID_ARGS`,`scroll pixels must be a positive integer`);return Math.max(1,Math.round(t))}function w(e,t,n){let r=Math.round(t);if(!Number.isFinite(r))return 0;let i=Math.max(r,Math.round(n-t));return!Number.isFinite(i)||!Number.isFinite(e)?r:Math.min(i,Math.max(r,Math.round(e)))}const T=Object.freeze({reason:`scroll_keyboard_occludes_surface`,hint:"The on-screen keyboard covers the surface this scroll would swipe, so it cannot reach it. Run `keyboard dismiss` and retry, accepting that it drops focus (re-tap the field to keep typing), or scroll before focusing the field."});function E(e,t){if(!O(e)||!O(t))return{kind:`unobstructed`};let n=e.x+e.width/2;if(n<t.x||n>=t.x+t.width)return{kind:`unobstructed`};let r=t.y;if(r>=e.y+e.height||t.y+t.height<=e.y)return{kind:`unobstructed`};let i=Math.max(0,r-12-e.y);return i<.15*e.height?{kind:`occluded`,keyboardMinY:r,visibleHeight:i}:{kind:`avoided`,viewport:{...e,height:i},keyboardMinY:r}}function D(t,n){return new e(`COMMAND_FAILED`,`scroll ${t} refused: the keyboard leaves ${n.visibleHeight}px of ${n.viewportHeight}px visible, below the 15% needed for a swipe`,{keyboardMinY:n.keyboardMinY,visibleHeight:n.visibleHeight,viewportHeight:n.viewportHeight,minVisibleFraction:.15,...T})}function O(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}export{D as _,o as a,c,d,p as f,y as g,g as h,T as i,f as l,m,i as n,s as o,E as p,r,a as s,u as t,h as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
function e(e){let t=e.trim().toLowerCase();return t?/^(vertical|horizontal)\s+scroll\s+bar(?:,?\s*\d+\s+pages?)?$/.test(t):!1}function t(e,t){if(!(e?.trim().toLowerCase()??``).includes(`vertical scroll bar`))return null;let r=n(t);return r===null?null:r<=1?{above:!1,below:!0}:r>=99?{above:!0,below:!1}:{above:!0,below:!0}}function n(e){if(!e)return null;let t=/^(\d{1,3})%$/.exec(e.trim());if(!t)return null;let n=Number(t[1]);return Number.isFinite(n)?Math.max(0,Math.min(100,n)):null}export{e as n,t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{n as t,r as n}from"./session-paths.js";import r from"node:path";function i(e){return r.join(e,`runner.log`)}function a(e,t){let i=n(t&&t.length>0?t:`unknown`);return r.join(e,`requests`,`${i}.ndjson`)}function o(e){return{path:a(e.sessionDir,e.requestId),ref:{session:e.session,requestId:e.requestId&&e.requestId.length>0?e.requestId:`unknown`}}}function s(e,t){return a(r.join(e,`remote-diagnostics`,n(t.session)),t.requestId)}function c(i,a){if(!t(a))throw new e(`INVALID_ARGS`,`Invalid session name ${JSON.stringify(a)}: a session name cannot be empty, ".", or "..".`);return r.join(i,n(a))}function l(e,t){return r.join(c(e,t),`app.log`)}function u(e,t){return r.join(c(e,t),`app-log.pid`)}export{o as a,c as i,l as n,a as o,u as r,i as s,s as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./path-resolution.js";import"./file.js";function t(e){return e.replaceAll(/[^a-zA-Z0-9._-]/g,`_`)}function n(e){let n=t(e);return n.length>0&&n!==`.`&&n!==`..`}function r(t,n){return e(t,{cwd:n})}export{n,t as r,r as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import t from"node:fs";import n from"node:path";function r(e){return n.join(e,`repair-tombstone.json`)}function i(e,t){try{let n=o(e);return n?.owner===t&&n.expiresAt>Date.now()?n:void 0}catch{return}}function a(e,n){try{o(e)?.owner===n&&t.rmSync(e,{force:!0})}catch{}}function o(e){let n;try{n=t.readFileSync(e,`utf8`)}catch(e){if(e.code===`ENOENT`)return;throw e}return s(n,e)}function s(t,n){try{let e=JSON.parse(t);if(!c(e))throw Error(`Invalid repair tombstone fields`);return e}catch(t){throw new e(`COMMAND_FAILED`,`Repair evidence could not be inspected.`,{reason:`repair_evidence_invalid`,path:n},t instanceof Error?t:void 0)}}function c(e){let t=e;return Number.isFinite(t?.reapedAt)&&Number.isFinite(t?.expiresAt)&&typeof t?.owner==`string`&&(t.sourcePath===void 0||typeof t.sourcePath==`string`)&&l(t.commitFailure)}function l(e){let t=e;return e===void 0||typeof t?.code==`string`&&typeof t?.message==`string`}function u(e){let i;try{i=t.readdirSync(e,{withFileTypes:!0})}catch(e){if(e.code===`ENOENT`)return;throw e}for(let t of i){if(!t.isDirectory())continue;let i=o(r(n.join(e,t.name)));if(i?.commitFailure&&i.expiresAt>Date.now())return{sessionName:t.name,tombstone:{...i,commitFailure:i.commitFailure}}}}export{r as i,u as n,i as r,a as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{D as e,P as t,X as n,g as r,k as i,s as a,x as o}from"./sdk-contracts.js";import{u as s}from"./capture.js";import{i as c}from"./snapshot-capture-annotations.js";import{r as l}from"./snapshot-diagnostics.js";import{r as u}from"./snapshot-private-evidence.js";import{a as d,r as ee}from"./diagnostics.js";import"./diagnostics2.js";import{E as te,_ as f,f as ne}from"./sdk-device.js";import{Mr as re,wn as ie}from"./sdk-batch.js";import{A as ae,B as oe,C as se,F as ce,I as le,N as ue,R as de,a as fe,g as pe,j as me,o as he,t as ge,z as _e}from"./runtime.js";import{g as p,o as m}from"./overlay.js";import{i as ve}from"./click-button.js";import{t as ye}from"./snapshot-state.js";import{i as be}from"./lease-context.js";import{randomInt as xe}from"node:crypto";let h={resolve:async()=>{throw new t(`COMMAND_FAILED`,`Interactor resolution is not composed for this process.`,{reason:`interactor-resolution-missing`})}};function Se(e){h=e}function Ce(){return h}var g=class e{#e;constructor(e){this.#e=e}get state(){return this.#e.state}get scope(){return this.#e.scope}get tree(){return this.#e.tree}get generation(){return this.#e.generation}static expire(t){return t.#e.state===`expired`?t:new e({...t.#e,state:`expired`})}};const we=new g({state:`active`,scope:`all`,tree:void 0,generation:void 0});function Te(e){return new g({state:`active`,...e})}function Ee(e){return g.expire(e)}const _=new WeakMap,v=new WeakSet;function y(e){return e.refFrame??we}function b(e){return y(e).generation??e.snapshotGeneration}function De(e){return y(e).tree}function Oe(e){Ae(e),x(e),e.refFrame=Ee(y(e)),e.snapshotScopeSource=void 0}function x(e){e.snapshot&&v.add(e.snapshot)}function ke(e){return v.has(e)}function Ae(e){let t=S(e)+1;return _.set(e,t),t}function S(e){return _.get(e)??0}function C(e){w(e,`all`)}function je(e,t){w(e,t)}function w(e,t){e.refFrame=Te({scope:t,tree:e.snapshot,generation:e.snapshotGeneration})}function T(e){return y(e).state}function E(e){return y(e).scope}function Me(e){let t=e.ref.startsWith(`@`)?e.ref.slice(1):e.ref;return{admission:Ne({session:e.session,refBody:t,mintedGeneration:e.mintedGeneration}),scope:E(e.session),currentGeneration:b(e.session)}}function Ne(e){let{session:t,refBody:n,mintedGeneration:r}=e;if(T(t)===`expired`)return{admitted:!1,reason:`ref_frame_expired`};if(r!==void 0&&r!==b(t))return{admitted:!1,reason:`ref_generation_mismatch`};let i=E(t);if(i!==`all`){if(r===void 0)return{admitted:!1,reason:`plain_ref_requires_complete_frame`};if(!i.has(n))return{admitted:!1,reason:`ref_not_issued`}}return{admitted:!0}}function Pe(e,t,n=e.snapshot){if(e.device.platform!==`android`)return;let r=Fe(e,n),i=r?.comparisonSafe===!0;e.androidSnapshotFreshness={action:t,markedAt:Date.now(),baselineCount:(r??n)?.nodes.length??0,baselineSignatures:i?_e(r?.nodes??[]):void 0,routeComparable:i}}function Fe(e,t){if(t?.comparisonSafe===!0)return t;let n=e.lastComparisonSafeSnapshot;return!n||n.comparisonSafe!==!0?t:Date.now()-n.createdAt<=5e3?n:t}function D(e){if(!e||e.device.platform!==`android`)return;let t=e.androidSnapshotFreshness;if(t){if(Date.now()-t.markedAt>2500){delete e.androidSnapshotFreshness;return}return t}}function O(e){!e||e.device.platform!==`android`||delete e.androidSnapshotFreshness}async function k(e,t){return ue({capture:e.capture,classify:n=>de({snapshot:n.snapshot,rawNodeCount:n.annotations.analysis?.rawNodeCount},t,{interactiveOnly:e.interactiveOnly,mode:e.androidFreshnessMode}),window:t,retry:{retryBudgetMs:ce,delaysMs:le},onTrustworthyCapture:()=>O(e.session)})}function A(e){let t=new Map,n=[],r=me(e);for(let i of e){let e=Le(i,t,r);e&&n.push(e)}return n}function j(e){return e?.comparisonKey??e?.snapshotQuality?.backend}function M(e,t){return Math.abs(e.x-t.x)<=1&&Math.abs(e.y-t.y)<=1&&Math.abs(e.width-t.width)<=1&&Math.abs(e.height-t.height)<=1}function N(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1){let r=e[n],i=t[n];if(!r||!i||r.key!==i.key||!M(r,i))return!1}return!0}function P(e,t){let n=F(e),r=F(t);if(n.size===0||r.size===0)return`ambiguous`;let i=0,a=!1;for(let[e,t]of n){let n=r.get(e);if(!n){a=!0;continue}if(i+=1,!M(t,n))return`changed`}if(i===0)return`ambiguous`;let o=r.size>i;return a&&o?`changed`:`unchanged`}function F(e){let t=new Map;for(let n of e)!n.identity||!n.discriminating||t.has(n.identity)||t.set(n.identity,n);return t}function I(e,t){let n=e.filter(e=>e.discriminating),r=t.filter(e=>e.discriminating);if(n.length===0||n.length!==r.length)return!1;let i=new Map(r.map(e=>[e.key,e]));for(let e of n){let t=i.get(e.key);if(!t||!M(e,t))return!1}return!0}function L(e,t){let n=new Map(t.filter(e=>e.discriminating).map(e=>[e.key,e])),r=0,i=0,a=0;for(let t of e){if(!t.discriminating)continue;let e=n.get(t.key);if(!e){r+=1;continue}n.delete(t.key),a+=1,M(t,e)||(i+=1)}return{onlyInBaseline:r,onlyInCurrent:n.size,rectMismatched:i,shared:a}}function Ie(e,t,n){let r=R(z(e,n)),i=R(z(t,n));for(let[e,t]of r){let n=i.get(e);if(!n||!M(t,n))return!0;i.delete(e)}return i.size>0}function R(e){let t=new Map,n=new Map;for(let r of e){let e=t.get(r.content)??0;t.set(r.content,e+1),n.set(`${r.content}|#${e}`,r)}return n}function z(e,t){return e.filter(e=>e.discriminating&&e.x<t.x+t.width&&t.x<e.x+e.width&&e.y<t.y+t.height&&t.y<e.y+e.height)}function Le(e,t,n){if(!e.rect||!Ve(e.rect)||He(e))return;let r=Be(e);if(!r)return;let i=t.get(r)??0;t.set(r,i+1);let a=ze(e);return{key:`${r}|#${i}`,...a?{identity:a}:{},content:Re(e,a),x:Math.round(e.rect.x),y:Math.round(e.rect.y),width:Math.round(e.rect.width),height:Math.round(e.rect.height),discriminating:!B(e,n)}}function Re(e,t){return t??`${e.type??``}|${e.role??``}`}function ze(e){let t=[e.identifier,e.label,e.value].map(e=>typeof e==`string`?e.trim():``).join(`|`);if(t.replaceAll(`|`,``))return`${t}|${e.type??``}`}function B(e,t){return re(e)||e.ref!==void 0&&t.has(e.ref)}function Be(e){let t=[e.identifier,e.label,e.value,e.type,e.role,...p(e),e.hittable===!0?`hittable`:`not-hittable`].map(e=>typeof e==`string`?e.trim():``).join(`|`);return t.replaceAll(`|`,``)?t:void 0}function Ve(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}function He(e){return`${e.label??``} ${e.identifier??``}`.toLowerCase().includes(`scroll bar`)}function Ue(e){let{session:t,command:n,action:r=n,positionals:i,flags:a,androidFreshnessBaseline:o}=e;oe(r)&&Pe(t,r,o??t.snapshot),We(t,r,i,a)}function We(e,t,n=[],r){if(!H(e.device)||!Qe(t,n,r))return;let i=U(e.device)?A(e.snapshot?.nodes??[]):void 0;e.postGestureStabilization={action:t,positionals:n,markedAt:Date.now(),...i?.length?{baselineSignature:i,baselineBackend:j(e.snapshot)}:{}}}function Ge(e){e?.postGestureStabilization&&(e.postGestureStabilization=void 0)}function V(e){return!!e?.postGestureStabilization}async function Ke(e){if(f(e.device)&&e.session&&V(e.session))return await qe({...e,session:e.session});let t=D(e.session);if(t&&e.device.platform===`android`){let n=await k(e,t);return{snapshot:n.snapshot,...n.annotations}}}async function qe(e){return Xe(await Ye({session:e.session,capture:async()=>await Je(e),readSnapshot:e=>e.snapshot}))}async function Je(e){let t=D(e.session);return t&&e.device.platform===`android`?await k(e,t):await e.capture()}async function Ye(e){let{session:t,capture:n,readSnapshot:r}=e,i=t?.postGestureStabilization;if(!t||!H(t.device)||!i)return{value:e.initial??await n()};try{return await ae({pending:{action:i.action,positionals:i.positionals??[],baselineSignature:i.baselineSignature,baselineBackend:i.baselineBackend},needsBaselineDistrust:U(t.device),initial:e.initial,hooks:{capture:n,readSurface:e=>{let t=r(e);return{signature:A(t.nodes),backend:j(t)}},signaturesStable:N,classifyBaselineEvidence:P,surfacesIdentical:I,summarizeDivergence:L}})}finally{Ge(t)}}function Xe(e){let{snapshot:t,annotations:n}=e.value;return e.postGestureOutcome&&(t.postGestureOutcome=e.postGestureOutcome),{snapshot:t,...n}}function Ze(e){if(!e?.postGestureStabilization)return e;let{postGestureStabilization:t,...n}=e;return n}function Qe(e,t,n){return n?.postGestureStabilization===!1?!1:n?.postGestureStabilization===!0||e===`swipe`||e===`scroll`||e===`gesture`&&t[0]===`swipe`}function H(e){return f(e)}function U(e){return ne(e.platform)}const $e=`activity.launchConsole.launchArgs.clearAppState.verbose.iosXctestrunFile.iosXctestDerivedDataPath.iosXctestEnvDir.snapshotInteractiveOnly.snapshotPreferredBackend.snapshotDepth.snapshotScope.snapshotRaw.snapshotCustomActions.snapshotIncludeHiddenContentHints.count.intervalMs.delayMs.durationMs.holdMs.jitterPx.pixels.until.doubleTap.backMode.pauseMs.pattern`.split(`.`);function et(e){return Object.fromEntries($e.map(t=>[t,e?.[t]]))}function W(e,t,n,r,i,a){return{requestId:i??d().requestId,appBundleId:n,runnerLeaseContext:be({meta:a}),logPath:e,traceLogPath:r,...et(t),screenshotCaptureBackend:t?.maestro?.screenshotCaptureBackend,...s(t),clickButton:ve(t)}}let G;async function K(){if(G)return G;let{createAppleSessionObservation:e}=await import(`./session-observation.js`),{listLocalDeviceInventory:t,shouldPropagateDeviceInventoryProbeError:n}=await import(`./device-inventory-context.js`).then(e=>e.t);return G??=e({listLocalDevices:t,shouldPropagateProbeError:n}),G}const tt=Object.freeze({async observeRunnerSession(e){return(await K()).observeRunnerSession(e)},async resolveSoleForegroundApp(e){return(await K()).resolveSoleForegroundApp(e)}});async function nt(e,t,n,r){let{queryAppleRunnerSelector:i}=await import(`./runner-operations-facade.js`);return await i(e,t,n,r)}function rt(e){let{flags:t,logPath:n,meta:a,session:o,snapshotScope:s}=e,{appBundleId:c,trace:l,surface:u}=o??{},d=e.context??W(n??``,t,c,l?.outPath,a?.requestId,a);return{options:{appBundleId:c,...i(t,r),scope:s,includeRects:e.includeRects,surface:u},execution:q(d),...e.signal===void 0?{}:{signal:e.signal}}}function q(e){return{requestId:e.requestId,verbose:e.verbose,logPath:e.logPath,traceLogPath:e.traceLogPath,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext}}function it(e){let t=se(e);return{...t,capture:ge(t),selectors:he(t),interactions:fe(t)}}async function at(e){let t=await(await Ce().resolve(e.device,e.runnerContext)).snapshot(e.options);if(!(`stage`in t))return t;let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(t,e.options)}async function ot(e){let t=await Ke({session:e.session,device:e.device,interactiveOnly:e.flags?.snapshotInteractiveOnly===!0,androidFreshnessMode:e.androidFreshnessMode,capture:()=>Y(e)});if(t)return t;let n=await Y(e);return O(e.session),{snapshot:n.snapshot,...n.annotations}}async function J(e){if(e.captureData)return await e.captureData();let{device:t,session:n,logPath:a}=e,o=W(a,X(e),n?.appBundleId,n?.trace?.outPath);return await at({device:t,runnerContext:{requestId:o.requestId,signal:e.signal,appBundleId:o.appBundleId,verbose:o.verbose,logPath:o.logPath,traceLogPath:o.traceLogPath,iosXctestrunFile:o.iosXctestrunFile,iosXctestDerivedDataPath:o.iosXctestDerivedDataPath,iosXctestEnvDir:o.iosXctestEnvDir,runnerLeaseContext:o.runnerLeaseContext},options:{appBundleId:o.appBundleId,signal:e.signal,...i(o,r),includeRects:e.includeRects,surface:n?.surface}})}async function Y(e){let t=Date.now(),n=await J(e);l(e.session,{durationMs:Date.now()-t,backend:n.backend,platform:te(e.device)});let r=c(n),i=u(n,ye(n,X(e)));return r.androidSnapshot?.systemSurfaceOnly===!0&&(i.systemSurfaceOnly=!0),{data:n,snapshot:i,annotations:r}}function X(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function st(t,n){if(!t||!t.trim().startsWith(`@`))return{ok:!0,scope:t};if(!n?.snapshot)return a(`INVALID_ARGS`,`Ref scope requires an existing snapshot in session.`);let r=e(t.trim());if(!r)return a(`INVALID_ARGS`,`Invalid ref scope: ${t}`);let i=[n.snapshot,...n.snapshotScopeSource?[n.snapshotScopeSource]:[]],s=!1,c;for(let e of i){let t=o(e.nodes,r);if(t&&(s=!0,c=pe(t,e.nodes),c))break}return s?c?{ok:!0,scope:c}:a(`COMMAND_FAILED`,`Ref ${t} has no label to scope by`,{reason:m.refUnlabeled,ref:r}):a(`COMMAND_FAILED`,`Ref ${t} not found`,{reason:m.refNotFound,ref:r},{hint:ie})}function Z(e,t,n={}){if(!e)return;let r=De(e);return{name:t,appBundleId:e.appBundleId,appName:e.appName,...n.includeSnapshot===!0?{snapshot:e.snapshot,...r&&n.omitRefFrameSnapshot!==!0?{refFrameSnapshot:r}:{}}:{},metadata:{surface:e.surface,...n.metadata??{}}}}function ct(e,t){return{get:n=>n===e?Z(t,e):void 0,set:()=>{}}}function lt(e){let t=e.ref;return{getRef:()=>t?e.sessionStore.refresh(t):void 0,get:n=>n===e.sessionName?Z(t?e.sessionStore.resolveCurrent(t):void 0,e.sessionName,e.recordOptions):void 0,set:n=>{if(n.name!==e.sessionName){ee({level:`warn`,phase:`runtime_session_write_skipped`,data:{expected:e.sessionName,received:n.name}});return}let r=t?e.sessionStore.requireCurrent(t):void 0,i=e.setRecord(n,r,t);i&&(t=i)}}}function ut(e,t){e.snapshot!==t&&(e.snapshotGeneration=Q(e.snapshotGeneration)),e.snapshot=t,e.snapshotScopeSource=void 0,t.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t)}function dt(e){e.snapshot=void 0}function ft(e,t){e.snapshot=t.snapshot,t.snapshot.comparisonSafe===!0&&(e.lastComparisonSafeSnapshot=t.snapshot),e.snapshotScopeSource=t.scopeSource,e.snapshotGeneration=t.keptCurrentSnapshot?t.previousGeneration:Q(t.previousGeneration)}function Q(e){return e===void 0?xe(1e5,1e6):e+1}function pt(e){let t=e.startsWith(`@`)?e.slice(1):e,n=t.indexOf(`~`);return n===-1?t:t.slice(0,n)}function $(e,t){let n=new Set;for(let e of t){let t=pt(e);t.length>0&&n.add(t)}n.size!==0&&je(e,n)}function mt(e,t,n){if(!e||!n?.diff)return;let r=t.resolveCurrent(e);if(r)return $(r,_t(n)),r.snapshotGeneration}function ht(e,r,i,a){if(i.code!==`AMBIGUOUS_MATCH`)return i;let o=n(i.details);if(o.length===0)return i;let s=e?r.resolveCurrent(e):void 0;return s?.snapshot&&s.snapshotGeneration!==void 0&&a!==void 0&&a.nodes===s.snapshot.nodes?($(s,o),new t(i.code,i.message,{...i.details,refsGeneration:s.snapshotGeneration},i.cause)):gt(i)}function gt(e){let{candidates:n,refsGeneration:r,...i}=e.details??{};return new t(e.code,e.message,{...i,hint:`Narrow the selector with role/id/longer text and retry.`},e.cause)}function _t(e){let t=[];for(let n of e.diff?.lines??[])n.ref&&t.push(n.ref);for(let n of e.refs??[])t.push(n.ref);for(let n of e.tail??[])t.push(n.ref);return t}function vt(e){return`Ref @${e.ref.startsWith(`@`)?e.ref.slice(1):e.ref} was minted from snapshot s${e.mintedGeneration} but the session's ref frame is now s${e.currentFrameEpoch} — re-run snapshot -i.`}function yt(e){let{session:t,ref:n,mintedGeneration:r}=e;if(t&&T(t)===`expired`)return`The UI may have changed since these refs were issued, so they no longer represent current device state. Take a new snapshot before relying on or interacting with them.`;if(r!==void 0){let e=t?b(t)??0:0;if(r!==e)return vt({ref:n,mintedGeneration:r,currentFrameEpoch:e})}}export{C as A,A as C,j as D,I as E,S as F,y as I,T as L,ke as M,x as N,L as O,Me as P,Se as R,N as S,Ie as T,nt as _,yt as a,Ue as b,lt as c,J as d,st as f,tt as g,q as h,ht as i,Oe as j,D as k,ct as l,rt as m,mt as n,ft as o,it as p,$ as r,ut as s,dt as t,ot as u,W as v,P as w,Ze as x,V as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const e=new WeakMap;function t(t,n){return e.set(t,{...e.get(t),...n}),t}function n(e,n){return t(e,{clickability:n})}function r(t){return t?e.get(t)?.clickability:void 0}function i(e,t){let i=r(e);return i?n(t,i):t}function a(e,n){return t(e,{occlusionContext:n})}function o(t){return t?e.get(t)?.occlusionContext:void 0}export{o as a,r as i,a as n,i as r,n as t};
|
package/dist/src/snapshot4.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$ as e,P as t,s as n}from"./sdk-contracts.js";import{r}from"./diagnostics.js";import"./diagnostics2.js";import{A as i,f as a,g as o,m as s}from"./sdk-device.js";import{Ht as c,Rr as l,Ut as u,cn as d,et as f,hr as p,ln as m,nt as h,rt as g,tt as _,zt as v}from"./sdk-batch.js";import{f as y}from"./dispatch-resolve.js";import{c as b,s as ee}from"./target-evidence.js";import{l as x}from"./runtime.js";import{i as te,r as S}from"./success-text.js";import"./alert-contract.js";import{C as ne,S as re,c as ie,f as C,g as w,h as T,m as E,p as ae,r as D,w as O}from"./settings.js";import{t as k}from"./location-coordinates.js";import{r as oe,s as se}from"./overlay.js";import{a as ce,h as A,j,m as le,u as M,v as N}from"./session-snapshot.js";import{n as P}from"./runtime-admission.js";import{lt as F}from"./internal/daemon.js";import{n as I,t as L}from"./snapshot-runtime.js";import{a as R,i as z}from"./snapshot-runtime-binding.js";import{a as B,c as V,f as H,g as U,h as W,m as ue,o as de,p as fe,s as pe,t as me}from"./selector-runtime.js";async function he(e){let{device:t,action:n,inspectFacts:r,bindDevice:i}=e,a={command:`alert`,device:t,inspectFacts:r,bindDevice:i,readiness:!e.session};if(n===`wait`){let e=await P({...a,use:g});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>_e(t,e)}}if(n===`accept`){let e=await P({...a,use:f});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>ve(t,e)}}if(n===`dismiss`){let e=await P({...a,use:_});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>ye(t,e)}}let o=await P({...a,use:h});if(o.type===`response`)return{ok:!1,response:o.response};let s=o.runtime;return{ok:!0,execute:e=>ge(s,e)}}async function ge(e,t){return await e.operations.readAlert(t)}async function _e(e,t){return await e.operations.awaitAlert(t)}async function ve(e,t){return await e.operations.acceptAlert(t)}async function ye(e,t){return await e.operations.dismissAlert(t)}async function be(e){let{req:t,logPath:n,sessionStore:r,ref:i,device:a,inspectFacts:o,bindDevice:s}=e,c=i?r.requireCurrent(i):void 0,l=await he({device:a,action:Se(t.positionals?.[0]),session:c,inspectFacts:o,bindDevice:s});if(!l.ok)return l.response;c=i?r.requireCurrent(i):void 0,c&&F(t)===`may-invalidate`&&j(c);let u=N(n,t.flags,c?.appBundleId,c?.trace?.outPath),d=await l.execute({timeoutMs:m(t.positionals?.[1])??1e4,...xe(c),execution:A(u)});return y(r,i,t,t.command,d),{ok:!0,data:d}}function xe(e){return{...e?.appBundleId===void 0?{}:{appBundleId:e.appBundleId},...e?.surface===void 0?{}:{surface:e.surface}}}function Se(e){return e===`accept`||e===`dismiss`||e===`wait`?e:`get`}function Ce(e){let t=e.positionals?.[0]?.toLowerCase(),r=e.positionals?.[1]?.toLowerCase(),i=e.positionals?.[2]?.toLowerCase();if(t===`clear-app-state`)return{ok:!0,parsed:{leg:`write`,args:{setting:t,state:`clear`,appBundleId:r===`clear`?e.positionals?.[2]:e.positionals?.[1]}}};let a=v(e.positionals);if(a.kind===`read`)return{ok:!0,parsed:{leg:`read`,setting:a.setting}};if(!t||!r||t===`permission`&&!i||t===`location`&&r===`set`&&(!e.positionals?.[2]||!e.positionals?.[3])||t===`reset-keychain`&&e.positionals?.[2]!==void 0)return n(`INVALID_ARGS`,ie);let o=r;if(t===`text-size`){let e=re(r);if(e===void 0)return n(`INVALID_ARGS`,T(r));o=e}return{ok:!0,parsed:{leg:`write`,args:{setting:t,state:o,permissionTarget:i,permissionMode:e.positionals?.[3],latitude:e.positionals?.[2],longitude:e.positionals?.[3]}}}}function we(e){if(e.setting===`permission`)return{permissionTarget:e.permissionTarget,permissionMode:e.permissionMode};if(e.setting===`location`&&e.state===`set`)return{latitude:k(e.latitude,`latitude`),longitude:k(e.longitude,`longitude`)}}function Te(e,t,n){let{setting:r,state:i}=e;return r===`clear-app-state`?{setting:`clear-app-state`,state:`clear`,appBundleId:t,platform:n}:r===`location`&&i===`set`?{setting:r,state:i,latitude:e.latitude,longitude:e.longitude,platform:n}:r===`permission`?{setting:r,state:i,permissionTarget:e.permissionTarget,permissionMode:e.permissionMode,platform:n}:{setting:r,state:i,appBundleId:t,platform:n}}function Ee(e){return typeof e.message==`string`&&e.message.length>0?e.message:void 0}async function De(e,t,n){let{setting:r,state:i}=t,a=await e.operations.setSetting(t);return a&&typeof a==`object`?te({setting:r,state:i,...a},Ee(a)??n):{setting:r,state:i,...S(n)}}async function Oe(e){return e.parsed.leg===`read`?await ke(e,e.parsed.setting):await Ae(e,e.parsed.args)}async function ke(e,t){let{req:n,logPath:i,sessionStore:a,ref:o,device:s,inspectFacts:l,bindDevice:u}=e,d=o?a.requireCurrent(o):void 0,f=G(s,t);if(f!==void 0)return f;let p=await P({command:`settings ${t}`,device:s,use:c,inspectFacts:l,bindDevice:u,readiness:!d});if(p.type===`response`)return p.response;d=o?a.requireCurrent(o):void 0,r({level:`debug`,phase:`settings_read`,data:{setting:t,platform:s.platform}});let m=N(i,n.flags,d?.appBundleId,d?.trace?.outPath),h=await p.runtime.operations.readSetting({setting:t,execution:A(m)}),g={...h,...S(C(h))};return y(a,o,n,n.command,g),{ok:!0,data:g}}async function Ae(e,t){let{req:n,logPath:i,sessionStore:a,ref:o,device:s,inspectFacts:c,bindDevice:l}=e,d=o?a.requireCurrent(o):void 0,{setting:f,state:p}=t,m=G(s,f);if(m!==void 0)return m;let h=je(s,n,f,p);if(h!==void 0)return h;let g=await P({command:`settings`,device:s,use:u,inspectFacts:c,bindDevice:l,readiness:!d});if(g.type===`response`)return g.response;d=o?a.requireCurrent(o):void 0;let _=Me(n,t,d,s),v=Ne(t,_);if(v!==void 0)return v;d&&j(d),r({level:`debug`,phase:`settings_apply`,data:Te(t,_,s.platform)});let b=await De(g.runtime,Pe(t,_,N(i,n.flags,_,d?.trace?.outPath)),ae(f,p,_));return y(a,o,n,n.command,b),{ok:!0,data:b}}function G(e,t){if(o(e)&&!w(t))return n(`INVALID_ARGS`,E(t));if(t===`text-size`&&a(e.platform)&&!s(e))return n(`UNSUPPORTED_OPERATION`,D.message,{deviceKind:e.kind,appleOs:i(e),reason:D.reason},{hint:D.hint})}function K(e){let t=e.input?.app;if(typeof t!=`string`)return;let n=t.trim();return n.length>0?n:void 0}function q(e){return o(e)?`macos-host`:a(e.platform)?`apple`:`mobile`}function je(e,t,r,i){let a=K(t);if(a===void 0||O(q(e),r,i)!==`device-level`)return;let o=ne(r,i,a);return n(o.code,o.message,o.details,{hint:o.hint})}function Me(e,t,n,r){let i=O(q(r),t.setting,t.state)===`app-scoped`?K(e):void 0;return t.appBundleId??i??e.internal?.settingsAppBundleId??n?.appBundleId}function Ne(t,r){if(t.setting===`clear-app-state`&&!r)return n(`INVALID_ARGS`,`settings clear-app-state requires an app id when no app is bound to the session`,e())}function Pe(e,t,n){let r=we(e);return{setting:e.setting,state:e.state,...t===void 0?{}:{appBundleId:t},...r===void 0?{}:{options:r},execution:A(n)}}async function Fe(e){return await I({...e,command:`diff`,execute:async({runtime:e,sessionName:t,req:n,snapshotScope:r})=>{let i=await e.capture.diffSnapshot({session:t,interactiveOnly:n.flags?.snapshotInteractiveOnly,depth:n.flags?.snapshotDepth,scope:r,raw:n.flags?.snapshotRaw});return{data:i,record:{kind:`diff`,mode:`snapshot`,baselineInitialized:i.baselineInitialized,summary:i.summary}}}})}function Ie(e){return e!==`sleep`}const Le=[`application`,`window`,`tabbar`,`scrollbar`,`image`],Re=new Set([`tab bar`]);async function ze(e,t){if(t.ok||!Be(t.error.details?.reason)||t.error.details?.captureStalled===!0||t.error.details?.captureTruncated===!0)return t;let r=await Ve(e).catch(()=>null);return r?n(t.error.code,`${t.error.message}. Current surface: ${r.summary}.`,{...t.error.details??{},currentSurface:r.details}):t}function Be(e){return e===x.targetAbsent||e===x.stableTimeout}async function Ve(e){let t={...e.req.flags,snapshotInteractiveOnly:!0},n=await M({device:e.device,session:e.session,flags:t,logPath:e.logPath??``,captureData:async()=>await e.capture(le({flags:t,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:void 0}))});ee(e.captureProof,n.snapshot);let r=[...n.snapshot.nodes].sort(He),i=J(r,6,{includeIdentifiers:!0});if(i.length===0)return null;let a=J(r.filter(e=>!Z(e)),4,{includeIdentifiers:!1}),o=J(r.filter(We),4,{includeIdentifiers:!0});return{summary:(a.length>0?a:i.slice(0,4)).join(`, `),details:{labels:i,...o.length>0?{buttons:o}:{}}}}function J(e,t,n){let r=new Set,i=[];for(let a of e){let e=X(a,n);if(!(!e||r.has(e))&&(r.add(e),i.push(e),i.length>=t))break}return i}function He(e,t){return Y(e)-Y(t)||Ue(e,t)}function Y(e){let t=!!X(e,{includeIdentifiers:!1});return(Z(e)?2:0)+ +!t}function Ue(e,t){return e.rect&&t.rect?e.rect.y-t.rect.y||e.rect.x-t.rect.x:e.rect?-1:t.rect?1:(e.depth??0)-(t.depth??0)||e.index-t.index}function X(e,t){let n=(t.includeIdentifiers?[e.label,e.value,e.identifier]:[e.label,e.value]).map(e=>typeof e==`string`?e.trim():``).find(e=>e.length>0);return n?n.replaceAll(/\s+/g,` `).slice(0,80):``}function Z(e){let t=l(`${e.type??``} ${e.role??``} ${e.subrole??``}`),n=`${e.label??``} ${e.value??``}`.trim().toLowerCase();return Le.some(e=>t.includes(e))||Re.has(n)||n.endsWith(`.fill`)}function We(e){let t=`${e.type??``} ${e.role??``} ${e.subrole??``}`;return l(t).includes(`button`)}async function Ge(e){let{req:t,sessionName:n,sessionStore:r}=e,i=Q(t);if(`ok`in i)return i;let a=i,{ref:o,session:s,device:c}=await z(r,n,t.flags),l=await Ke(e,a,s,c);if(l&&`ok`in l)return l;let u=l,d=t.internal?.replayLandmarkGuard,f=qe(a,s);if(`ok`in f)return f;let{waitParsed:p,staleRefsWarning:m}=f;return e.consumedSnapshot??={},e.captureProof??={},a.kind===`sleep`?await $({...e,ref:o},p,s,c,u,m,d):b({response:await R(s,c,()=>$({...e,ref:o},p,s,c,u,m,d),e.platformResourceCleanup),consumedTree:me(e),captureProof:e.captureProof})}function Q(e){let t=d(e.positionals??[]);if(!t)return n(`INVALID_ARGS`,`wait requires a duration or text`);if(t.kind===`invalid`)return n(`INVALID_ARGS`,t.message);if(t.kind!==`absent`)return t;let r=se({depth:e.flags?.snapshotDepth,scope:e.flags?.snapshotScope});if(!r)return t;let i=oe(r,`wait`);return n(i.code,i.message,i.details)}async function Ke(e,t,n,r){if(!Ie(t.kind))return;let i=await H({command:`wait`,device:r,session:n,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?i.operations:i.response}function qe(e,t){if(e.kind!==`ref`)return{waitParsed:e};let n=U(e.rawRef);return n.ok?{waitParsed:{...e,rawRef:n.ref},staleRefsWarning:ce({session:t,ref:n.ref,mintedGeneration:n.generation})}:n.response}async function $(e,t,n,r,i,a,o){let{req:s,sessionName:c,sessionStore:l}=e,u=V({...e,ref:e.ref,session:n,device:r,bound:i}),d=await pe(async()=>{let r=await u.selectors.wait({session:c,requestId:s.meta?.requestId,target:Je(t,n,o)}),i=de(r);fe(l,e.ref,s,ue(r),i,`landmark`);let d=W(r);return a?{...d,warning:a}:d}),f=i?await ze({req:s,logPath:e.logPath,session:n,device:r,capture:i.capture,captureProof:e.captureProof},d):d;return await B(e,f,`wait`)}function Je(e,t,n){switch(e.kind){case`sleep`:return{kind:`sleep`,durationMs:e.durationMs};case`selector`:return{kind:`selector`,selector:e.selectorExpression,timeoutMs:e.timeoutMs,...n?{recordedLandmark:n}:{}};case`absent`:return{kind:`absent`,selector:e.selectorExpression,timeoutMs:e.timeoutMs};case`ref`:return Xe(e,t);case`stable`:return{kind:`stable`,quietMs:e.quietMs,timeoutMs:e.timeoutMs};case`text`:return Ze(e);default:return Ye(e)}}function Ye(e){throw Error(`Unsupported wait positional target: ${String(e)}`)}function Xe(e,n){if(!n?.snapshot)throw new t(`INVALID_ARGS`,`Ref wait requires an existing snapshot in session.`);return{kind:`ref`,ref:e.rawRef,timeoutMs:e.timeoutMs}}function Ze(e){let n=p(e.text);if(!n.ok)throw new t(n.code,n.message);return{kind:`text`,text:n.text,timeoutMs:e.timeoutMs}}const Qe={snapshot:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await L({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),diff:async({req:e,sessionName:t,logPath:r,sessionStore:i,inspectFacts:a,bindDevice:o,platformResourceCleanup:s})=>e.positionals?.[0]===`snapshot`?await Fe({req:e,sessionName:t,logPath:r,sessionStore:i,inspectFacts:a,bindDevice:o,platformResourceCleanup:s}):n(`INVALID_ARGS`,`diff currently supports only: diff snapshot`),wait:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await Ge({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),alert:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let{ref:s,session:c,device:l}=await z(r,t,e.flags);return await R(c,l,async()=>await be({req:e,logPath:n,sessionStore:r,ref:s,device:l,inspectFacts:i,bindDevice:a}),o)},settings:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let s=Ce(e);if(!s.ok)return s;let{ref:c,session:l,device:u}=await z(r,t,e.flags);return await R(l,u,async()=>await Oe({req:e,logPath:n,sessionStore:r,ref:c,device:u,parsed:s.parsed,inspectFacts:i,bindDevice:a}),o)}};async function $e(e){let t=e.req.command,n=Qe[t];return n?await n(e):null}export{$e as handleSnapshotCommands};
|
package/dist/src/src4.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";var t=e({appSwitcherHarmony:()=>y,backHarmony:()=>_,closeHarmonyApp:()=>o,createHarmonyInventoryModule:()=>O,doubleClickHarmony:()=>d,ensureHarmonyToolchainPathConfigured:()=>l,fillHarmony:()=>m,harmonyToolchainCheck:()=>D,homeHarmony:()=>v,longPressHarmony:()=>f,openHarmonyApp:()=>a,performHarmonyGesture:()=>g,pressHarmony:()=>u,pressHarmonyKeyboardKey:()=>b,readHarmonyGestureViewport:()=>T,runHarmonyHdc:()=>s,runHarmonyShell:()=>c,runtimeModule:()=>i,sampleHarmonyMemoryPerf:()=>E,screenshotHarmony:()=>S,scrollHarmony:()=>h,setHarmonyOrientation:()=>x,setHarmonySetting:()=>C,snapshotHarmony:()=>w,typeHarmony:()=>p});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`harmonyos`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createHarmonyPlatformRuntime:t}=await import(`./runtime7.js`);return t(e)}}),a=n(async()=>(await import(`./app-lifecycle2.js`)).openHarmonyApp),o=n(async()=>(await import(`./app-lifecycle2.js`)).closeHarmonyApp),s=n(async()=>(await import(`./hdc.js`)).runHarmonyHdc),c=n(async()=>(await import(`./hdc.js`)).runHarmonyShell),l=n(async()=>(await import(`./hdc.js`)).ensureHarmonyToolchainPathConfigured),u=n(async()=>(await import(`./input-actions.js`)).pressHarmony),d=n(async()=>(await import(`./input-actions.js`)).doubleClickHarmony),f=n(async()=>(await import(`./input-actions.js`)).longPressHarmony),p=n(async()=>(await import(`./input-actions.js`)).typeHarmony),m=n(async()=>(await import(`./input-actions.js`)).fillHarmony),h=n(async()=>(await import(`./input-actions.js`)).scrollHarmony),g=n(async()=>(await import(`./input-actions.js`)).performHarmonyGesture),_=n(async()=>(await import(`./input-actions.js`)).backHarmony),v=n(async()=>(await import(`./input-actions.js`)).homeHarmony),y=n(async()=>(await import(`./input-actions.js`)).appSwitcherHarmony),b=n(async()=>(await import(`./input-actions.js`)).pressHarmonyKeyboardKey),x=n(async()=>(await import(`./input-actions.js`)).setHarmonyOrientation),S=n(async()=>(await import(`./screenshot.js`)).screenshotHarmony),C=n(async()=>(await import(`./settings2.js`)).setHarmonySetting),w=n(async()=>(await import(`./snapshot2.js`)).snapshotHarmony),T=n(async()=>(await import(`./snapshot2.js`)).readHarmonyGestureViewport),E=n(async()=>(await import(`./perf.js`)).sampleHarmonyMemoryPerf),D=n(async()=>(await import(`./doctor.js`)).harmonyToolchainCheck);function O(e){let t=Object.freeze({hdcSdkPath:k(e.hdcSdkPath),devecoSdkHome:k(e.devecoSdkHome),commandLineToolsHome:k(e.commandLineToolsHome)});return Object.freeze({...r,loadInventory:async e=>{let{createHarmonyInventory:n}=await import(`./inventory3.js`);return n(e,t)}})}function k(e){return e?.trim()||void 0}export{x as _,d as a,t as b,f as c,u as d,b as f,h as g,S as h,O as i,a as l,i as m,_ as n,m as o,T as p,o as r,v as s,y as t,g as u,C as v,p as x,w as y};
|
package/dist/src/src5.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";var t=e({backLinux:()=>c,captureLinuxSurfaceSnapshot:()=>C,closeLinuxApp:()=>s,doubleClickLinux:()=>f,fillLinux:()=>p,focusLinux:()=>m,homeLinux:()=>l,inventoryModule:()=>a,longPressLinux:()=>h,middleClickLinux:()=>v,openLinuxApp:()=>o,pressLinux:()=>g,readLinuxClipboard:()=>u,readLinuxTextAtPoint:()=>w,rightClickLinux:()=>_,runtimeModule:()=>i,screenshotLinux:()=>S,scrollLinux:()=>y,swipeLinux:()=>b,typeLinux:()=>x,withLinuxToolProvider:()=>T,writeLinuxClipboard:()=>d});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`linux`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createLinuxPlatformRuntime:t}=await import(`./runtime8.js`);return t(e)}}),a=Object.freeze({...r,loadInventory:async e=>{let{createLinuxInventory:t}=await import(`./inventory4.js`);return t(e)}}),o=n(async()=>(await import(`./app-lifecycle3.js`)).openLinuxApp),s=n(async()=>(await import(`./app-lifecycle3.js`)).closeLinuxApp),c=n(async()=>(await import(`./app-lifecycle3.js`)).backLinux),l=n(async()=>(await import(`./app-lifecycle3.js`)).homeLinux),u=n(async()=>(await import(`./clipboard.js`)).readLinuxClipboard),d=n(async()=>(await import(`./clipboard.js`)).writeLinuxClipboard),f=n(async()=>(await import(`./input-actions2.js`)).doubleClickLinux),p=n(async()=>(await import(`./input-actions2.js`)).fillLinux),m=n(async()=>(await import(`./input-actions2.js`)).focusLinux),h=n(async()=>(await import(`./input-actions2.js`)).longPressLinux),g=n(async()=>(await import(`./input-actions2.js`)).pressLinux),_=n(async()=>(await import(`./input-actions2.js`)).rightClickLinux),v=n(async()=>(await import(`./input-actions2.js`)).middleClickLinux),y=n(async()=>(await import(`./input-actions2.js`)).scrollLinux),b=n(async()=>(await import(`./input-actions2.js`)).swipeLinux),x=n(async()=>(await import(`./input-actions2.js`)).typeLinux),S=n(async()=>(await import(`./screenshot2.js`)).screenshotLinux),C=n(async()=>(await import(`./surface-snapshot2.js`)).captureLinuxSurfaceSnapshot),w=n(async()=>(await import(`./snapshot3.js`)).readLinuxTextAtPoint);async function T(e,t){let{withLinuxToolProvider:n}=await import(`./tool-provider2.js`).then(e=>e.r);return await n(e,t)}export{d as S,S as _,p as a,b,a as c,o as d,g as f,i as g,_ as h,f as i,h as l,w as m,C as n,m as o,u as p,s as r,l as s,c as t,v as u,y as v,x,t as y};
|
package/dist/src/src6.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";var t=e({AGENT_BROWSER_TIMEOUT_MS:()=>AGENT_BROWSER_TIMEOUT_MS,cleanupManagedAgentBrowserOrphans:()=>u,createAgentBrowserWebProvider:()=>o,doctorManagedAgentBrowser:()=>l,getManagedAgentBrowserStatus:()=>s,hasScopedWebProvider:()=>p,inventoryModule:()=>a,resolveWebProvider:()=>f,runtimeModule:()=>i,setupManagedAgentBrowser:()=>c,webBrowserLifecycleCheck:()=>d,withWebProvider:()=>m});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`web`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createWebPlatformRuntime:t}=await import(`./runtime10.js`);return t(e)}}),a=Object.freeze({...r,loadInventory:async()=>{let{createWebInventory:e}=await import(`./inventory6.js`);return e()}}),o=n(async()=>(await import(`./agent-browser-provider.js`)).createAgentBrowserWebProvider),s=n(async()=>(await import(`./agent-browser-tool.js`).then(e=>e.t)).getManagedAgentBrowserStatus),c=n(async()=>(await import(`./agent-browser-tool.js`).then(e=>e.t)).setupManagedAgentBrowser),l=n(async()=>(await import(`./agent-browser-tool.js`).then(e=>e.t)).doctorManagedAgentBrowser),u=n(async()=>(await import(`./agent-browser-lifecycle.js`).then(e=>e.t)).cleanupManagedAgentBrowserOrphans),d=n(async()=>(await import(`./doctor3.js`)).webBrowserLifecycleCheck),f=n(async()=>(await import(`./provider.js`)).resolveWebProvider),p=n(async()=>(await import(`./provider.js`)).hasScopedWebProvider);async function m(e,t){let{withWebProvider:n}=await import(`./provider.js`);return await n(e,t)}export{t as i,f as n,i as r,a as t};
|
package/dist/src/src7.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{N as t}from"./sdk-device.js";import{Xt as n,tn as r}from"./sdk-batch.js";import{t as i}from"./audio-probe-runtime.js";import{a,n as o,t as s}from"./durable-resource.js";import{n as c}from"./async-lifecycle.js";import{n as l,t as u}from"./audio-probe-result.js";import d from"node:fs/promises";function f(e,t){if(e.resourceKind!==t.resourceKind)return{status:`unreattachable`,reason:`descriptor-invalid`,message:`Durable resource kind ${e.resourceKind} does not match ${t.resourceKind}`};if(e.descriptor.version!==t.version)return{status:`unreattachable`,reason:`descriptor-version-unsupported`,message:`Unsupported ${t.resourceKind} descriptor version: ${e.descriptor.version}`,version:e.descriptor.version};try{let n=t.decode(e.descriptor.body);return n.status===`decoded`?n:{status:`unreattachable`,reason:`descriptor-invalid`,message:n.message}}catch(e){return{status:`unreattachable`,reason:`descriptor-invalid`,message:e instanceof Error?e.message:`Descriptor codec rejected the body`}}}function p(e,t){return Object.freeze({pendingHandle:new c(e),envelope:t})}function m(e){return Object.freeze({appLogReattach:async({envelope:t})=>{let n=f(t,e.codec);return n.status===`unreattachable`?n:await e.reattach(n.descriptor,h(t))},appLogCleanup:async({envelope:t})=>{let n=f(t,e.codec);return n.status===`decoded`?await e.cleanup(n.descriptor,h(t)):{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message}}})}function h(e){return Object.freeze({sessionId:e.sessionId,fence:e.fence})}function g(e){if(typeof e!=`object`||!e||Array.isArray(e))return{status:`invalid`,message:`App-log process marker must be an object`};let t=e;return!Number.isInteger(t.pid)||Number(t.pid)<=0?{status:`invalid`,message:`App-log process marker pid must be a positive integer`}:typeof t.startTime!=`string`||t.startTime.trim().length===0?{status:`invalid`,message:`App-log process marker startTime must be a non-empty string`}:typeof t.command!=`string`||t.command.trim().length===0?{status:`invalid`,message:`App-log process marker command must be a non-empty string`}:{status:`decoded`,marker:Object.freeze({pid:Number(t.pid),startTime:t.startTime,command:t.command})}}function _(e){let t,n,r,i=()=>n??=e.forceCleanup();return Object.freeze({inspect:()=>e.inspect(),finish:()=>t??=e.finish(),forceCleanup:i,[Symbol.asyncDispose]:async()=>{r??=i().then(ee),await r}})}function v(e){return _({inspect:e.inspect,finish:e.finish,forceCleanup:async()=>{let t=await e.finish();return t.status===`completed`?{status:`cleaned`}:{status:`cleanup-pending`,reason:t.reason,message:t.message}}})}function ee(t){if(!s(t))throw new e(`COMMAND_FAILED`,t.message??`Durable resource cleanup could not be confirmed`,{reason:t.reason,retriable:t.reason!==`ownership-fence-lost`,hint:t.reason===`ownership-fence-lost`?`Use the current resource owner or recovery record before retrying cleanup.`:`Keep the recovery record and retry cleanup through the exact runtime owner.`})}const te=e=>b(e.backend)&&(e.source===`system-audio`||e.source===`media-elements`)&&x(e.sourceCount,0)&&re(e.notes)&&b(e.statusPath)&&x(e.startedAt,1)&&x(e.durationMs,1)&&x(e.bucketMs,1),y=Object.freeze({resourceKind:i,version:1,encode:e=>({...e,notes:[...e.notes],marker:{...e.marker}}),decode:e=>{let t=te(e)?ne(e.marker):`invalid`;if(t===`invalid`)return{status:`invalid`,message:`Audio probe descriptor body is invalid`};let n=e;return{status:`decoded`,descriptor:Object.freeze({backend:n.backend,source:n.source,sourceCount:n.sourceCount,notes:Object.freeze([...n.notes]),statusPath:n.statusPath,startedAt:n.startedAt,durationMs:n.durationMs,bucketMs:n.bucketMs,marker:t})}}});function ne(e){if(typeof e!=`object`||!e)return`invalid`;let t=e;return!x(t.pid,1)||!b(t.startTime)||!b(t.command)?`invalid`:Object.freeze({pid:t.pid,startTime:t.startTime,command:t.command})}function b(e){return typeof e==`string`&&e.length>0}function x(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=t}function re(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}async function S(e){try{let t=await d.readFile(e.statusPath,`utf8`);return l(JSON.parse(t),{source:e.source,backend:e.backend,durationMs:e.durationMs,elapsedMs:Date.now()-e.startedAt,bucketMs:e.bucketMs,activeFallback:!0,sourceCount:e.sourceCount,notes:[...e.notes]})}catch(e){if(e.code===`ENOENT`)return;throw e}}function C(e,t,n){let r=Math.min(e.durationMs,Math.max(0,Date.now()-e.startedAt));return{...t??u({source:e.source,backend:e.backend,durationMs:e.durationMs,bucketMs:e.bucketMs,sourceCount:e.sourceCount,notes:[...e.notes]}),state:`stopped`,active:!1,elapsedMs:r,stoppedAt:new Date().toISOString(),reason:n}}function ie(e){let{host:t}=e;return Object.freeze({audioProbeReattach:async e=>{let n=f(e.envelope,y);if(n.status!==`decoded`)return n;let r=n.descriptor,i=await t.inspectProcess(r.marker);if(i===`owned-alive`)return{status:`unreattachable`,reason:`transport-not-reattachable`};if(i===`ownership-lost`)return{status:`unreattachable`,reason:`ownership-fence-lost`};let a=await S(r);return a===void 0||a.state!==`stopped`?{status:`missing`}:{status:`completed`,result:C(r,a,`daemon-recovery`)}},audioProbeCleanup:async e=>{let n=f(e.envelope,y);if(n.status!==`decoded`)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message};let r=n.descriptor,i=await t.inspectProcess(r.marker);if(i===`ownership-lost`)return{status:`cleanup-pending`,reason:`ownership-fence-lost`};if(i===`missing`)return{status:`already-missing`};let a=await t.terminateProcess(r.marker);return a===`ownership-lost`?{status:`cleanup-pending`,reason:`ownership-fence-lost`}:{status:a===`terminated`?`cleaned`:`already-missing`}}})}async function ae(n){let{host:r,device:s,owner:l,input:u}=n,f=Date.now(),p=r.info,m=Object.freeze([...p.notes(s)]),h=Object.freeze({source:p.source,backend:p.backend,sourceCount:p.sourceCount,notes:m,statusPath:u.statusPath,startedAt:f,durationMs:u.durationMs,bucketMs:u.bucketMs});await d.rm(u.statusPath,{force:!0});let g=await r.start({durationMs:u.durationMs,bucketMs:u.bucketMs,statusPath:u.statusPath});g.wait.catch(()=>{});let _=g.marker;try{if(_===void 0)throw new e(`COMMAND_FAILED`,`failed to start host audio probe: the helper process exposed no exact identity, so the capture could not be recovered after daemon loss and was terminated`);await ue(h,g)}catch(e){throw await g.terminate().catch(()=>{}),e}return Object.freeze({pendingHandle:new c(oe(h,g)),envelope:o({resourceKind:i,sessionId:u.sessionId,device:t(s),owner:l,fence:u.fence,lifecycle:`open`,descriptor:a(y,{backend:p.backend,source:p.source,sourceCount:p.sourceCount,notes:m,statusPath:u.statusPath,startedAt:f,durationMs:u.durationMs,bucketMs:u.bucketMs,marker:_})})})}function oe(e,t){let n,r,i,a;t.wait.then(e=>{a={message:se(e)}},e=>{a={message:e instanceof Error?e.message:`audio probe helper wait failed`}});let o=()=>n??=(async()=>{let n=await S(e);if(n?.state!==`stopped`&&a)throw w(a);return await t.terminate().catch(()=>{}),await t.wait.catch(()=>{}),{status:`completed`,result:C(e,n,`stopped`)}})(),s=()=>r??=n?n.then(async()=>({status:`cleaned`}),async()=>await T(t)):T(t);return Object.freeze({inspect:()=>e,status:async()=>{let t=await S(e);if(t?.state===`stopped`)return t;if(a)throw w(a);return t??C(e,void 0,`not-started`)},finish:o,forceCleanup:s,[Symbol.asyncDispose]:async()=>{i??=s().then(ce),await i}})}function se(e){return e.stderr?.trim()||e.stdout?.trim()||`audio probe helper exited with code ${e.exitCode??1}`}function w(t){return new e(`COMMAND_FAILED`,`host audio probe helper exited before completing the capture: ${t.message}`,{hint:`Keep audio-probe.resource.json; stop resolves the record through descriptor cleanup.`})}async function T(e){try{return await e.terminate(),await e.wait.catch(()=>{}),{status:`cleaned`}}catch(e){return{status:`cleanup-pending`,reason:`cleanup-unconfirmed`,message:e instanceof Error?e.message:`Audio probe termination failed`}}}function ce(t){if(!s(t))throw new e(`COMMAND_FAILED`,t.message??`Audio probe cleanup could not be confirmed`,{reason:t.reason,retriable:t.reason!==`ownership-fence-lost`,hint:`Keep audio-probe.resource.json and retry stop through its exact runtime owner.`})}function le(e){let{host:t,device:n,owner:r}=e,i=ie({host:t});return Object.freeze({audioProbeStart:async e=>await ae({host:t,device:n,owner:r,input:e}),audioProbeReattach:i.audioProbeReattach,audioProbeCleanup:i.audioProbeCleanup})}async function ue(t,n){let r=Date.now()+5e3;for(;Date.now()<r;){if(await S(t))return;let r=await Promise.race([n.wait.then(e=>e,e=>e),de(100).then(()=>void 0)]);if(r instanceof Error)throw r;if(r){let t=r,n=t.stderr?.trim()||t.stdout?.trim()||`host audio probe helper exited with code ${t.exitCode??1}`;throw new e(`COMMAND_FAILED`,`failed to start host audio probe: ${n}`)}}throw new e(`COMMAND_FAILED`,`failed to start host audio probe`)}function de(e){return new Promise(t=>setTimeout(t,e))}async function E(e,t){let n=await O(e,t);if(n.status===`missing`)return{status:`missing`};if(n.status===`invalid`)return{status:`unreattachable`,reason:`ownership-fence-lost`,message:n.message};let r=await e.processes.inspect(n.marker);return r===`missing`?(t&&await e.processes.clearMarker(t),{status:`missing`}):r===`ownership-lost`?{status:`unreattachable`,reason:`ownership-fence-lost`}:{status:`unreattachable`,reason:`transport-not-reattachable`}}async function D(e,t){if(!t)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:`App-log process marker path is missing`};let n=await O(e,t);if(n.status===`missing`)return{status:`already-missing`};if(n.status===`invalid`)return{status:`cleanup-pending`,reason:`manual-recovery-required`,message:n.message};let r=await e.processes.inspect(n.marker);if(r===`ownership-lost`)return k();if(r===`missing`)return await e.processes.clearMarker(t),{status:`already-missing`};let i=await e.processes.terminate(n.marker);return i===`ownership-lost`?k():(await e.processes.clearMarker(t),{status:i===`terminated`?`cleaned`:`already-missing`})}async function O(e,t){return t?await e.processes.readMarker(t):{status:`invalid`,message:`App-log process marker path is missing`}}function k(){return{status:`cleanup-pending`,reason:`ownership-fence-lost`}}async function fe(e){let t=e.initialProcess;for(;!e.stopped();){if(t){await pe(e,t),t=void 0,await be(e);continue}let n=await xe(e);if(n.status===`stopped`)return;n.status!==`waiting`&&(t=n.process)}}async function pe(e,t){let{process:n}=t;e.setActive(n);try{e.setState(`active`),await me(e,t)}finally{await A(e,n)}}async function me(e,t){let n=he(t.process);try{await ge(e,t,n),await ve(e,t.process,n),await ye(n.outcome)}finally{n.controller.abort()}}function he(e){let t=new AbortController,n=!1,r=()=>{n=!0,t.abort()};return{controller:t,outcome:e.wait.then(()=>(r(),{status:`exited`}),e=>(r(),{status:`failed`,error:e})),settled:()=>n}}async function ge(e,t,n){for(;!e.stopped()&&!n.settled();){if(!await _e(e,n))return;let r=await e.resolvePid();if(e.stopped())return;if(r!==t.pid){await t.process.terminate();return}}}async function _e(e,t){try{await e.sleep(500,t.controller.signal)}catch(e){if(!t.settled())throw e}return!t.settled()}async function ve(e,t,n){e.stopped()&&!n.settled()&&await t.terminate()}async function ye(e){let t=await e;if(t.status===`failed`)throw t.error}async function be(e){e.stopped()||(e.setState(`recovering`),await e.sleep(500))}async function xe(e){let t=await e.resolvePid();if(e.stopped())return{status:`stopped`};if(!t)return e.setState(`recovering`),await e.sleep(1e3),{status:`waiting`};let n=await e.startProcess(t);return e.setActive(n),e.stopped()?(await Se(e,n),{status:`stopped`}):{status:`started`,process:{pid:t,process:n}}}async function Se(e,t){try{await t.terminate(),await t.wait}finally{await A(e,t)}}async function A(e,t){try{await t[Symbol.asyncDispose]()}finally{e.setActive(void 0)}}async function Ce(e){let t=await e.resolvePid(e.setupSignal);e.setupSignal.throwIfAborted();let n=await e.host.outputs.openAppend(e.outputPath),r=`recovering`,i=!1,a;try{if(e.setupSignal.throwIfAborted(),t){e.setupSignal.throwIfAborted();let i=new AbortController,o=()=>i.abort(e.setupSignal.reason);e.setupSignal.addEventListener(`abort`,o,{once:!0});try{a=await e.processStart({command:e.command(t),output:n,markerPath:e.pidPath},i.signal)}finally{e.setupSignal.removeEventListener(`abort`,o)}e.setupSignal.throwIfAborted(),r=`active`}}catch(e){throw await j([async()=>await a?.terminate(),async()=>{await a?.wait},async()=>await a?.[Symbol.asyncDispose](),async()=>await n[Symbol.asyncDispose]()]),e}let o=fe({initialProcess:a&&t?{pid:t,process:a}:void 0,stopped:()=>i,setActive:e=>{a=e},setState:e=>{r=e},resolvePid:async()=>await e.resolvePid(),startProcess:async t=>await e.processStart({command:e.command(t),output:n,markerPath:e.pidPath}),sleep:async(t,n)=>await e.host.clock.sleep(t,n)}).catch(()=>{r=`failed`}),s,c=async()=>s??=we({options:e,monitor:o,active:()=>a,stop:()=>{i=!0},setState:e=>{r=e},output:n}),l=e.host.clock.now();return v({inspect:()=>({backend:e.backend,state:r,startedAt:l}),finish:c})}async function we(e){return e.stop(),(await j([async()=>await e.active()?.terminate(),async()=>await e.monitor,async()=>await e.output[Symbol.asyncDispose]()])).length>0?(e.setState(`failed`),{status:`cleanup-pending`,reason:`transport-failed`,message:e.options.cleanupFailureMessage}):(e.setState(`ended`),{status:`completed`,result:{backend:e.options.backend,outputPath:e.options.outputPath,completedAt:e.options.host.clock.now()}})}async function j(e){let t=[];for(let n of e)try{await n()}catch(e){t.push(e)}return t}function M(e,t,n){let r=e.artifacts.resolveSession(t);return n.outputPath===r.outputPath&&(n.pidPath===void 0||n.pidPath===r.pidPath)}function N(t,n){if(!M(t,n.sessionId,n))throw new e(`INVALID_ARGS`,`App-log paths do not match the owning session`)}const P=Object.freeze({available:!0});async function Te(e,t,n){let r=(await e.commands.run(t,n)).stdout.trim().split(/\s+/)[0]??``;return/^\d+$/.test(r)?r:``}function Ee(t,i){let a=n(i.family);return Object.freeze({owner:a,ownsDevice:e=>e.platform===i.family,inspectFacts:async e=>F(e,await t.processTransports.resolve(e),i),bind:async n=>{if(n.intent.kind===`exact-owner`&&!r(n.intent.owner,a))throw new e(`UNSUPPORTED_OPERATION`,`${i.label} app-log owner identity does not match`);if(n.device.platform!==i.family)throw new e(`UNSUPPORTED_PLATFORM`,`${i.label} app-log owner cannot bind ${n.device.platform}`);let o=await t.processTransports.resolve(n.device);return De(t,n.device,n.scope.signal,o,a,i)},shutdown:async()=>void 0})}function De(e,t,n,r,i,a){let o=m({codec:a.codec,reattach:async(t,n)=>M(e,n.sessionId,t)?await E(e,t.pidPath):{status:`unreattachable`,reason:`descriptor-invalid`,message:`${a.label} app-log descriptor paths do not match the owning session`},cleanup:async(t,n)=>M(e,n.sessionId,t)?await D(e,t.pidPath):{status:`cleanup-pending`,reason:`ownership-fence-lost`,message:`${a.label} app-log descriptor paths do not match the owning session`}}),s=Object.freeze({appLogInspect:async()=>({backend:a.backend}),appLogDoctor:async({appBundleId:r})=>await a.doctor({host:e,device:t,signal:n},r),...r.start?{appLogStart:async o=>await Oe(e,t,n,r,i,o,a)}:{},...o});return Object.freeze({device:t,owner:i,facts:F(t,r,a),operations:s,[Symbol.asyncDispose]:async()=>void 0})}function F(e,t,n){let r=t.start?P:{available:!1,reason:`owner-capability-missing`,hint:n.startUnavailableHint};return Object.freeze({device:{family:n.family,kind:e.kind,...e.target===void 0?{}:{target:e.target},providerMode:t.mode},operations:{appLogInspect:P,appLogDoctor:P,appLogStart:r,appLogReattach:P,appLogCleanup:P}})}async function Oe(t,n,r,i,a,o,s){if(!i.start)throw new e(`UNSUPPORTED_OPERATION`,s.startUnavailableHint);N(t,o);let c=t.artifacts.resolveSession(o.sessionId),l={host:t,device:n,signal:r,input:o,artifacts:c,transport:i};s.validateStart?.(l),r.throwIfAborted();let u=await s.process(l);r.throwIfAborted();let d=await Ce({host:t,backend:s.backend,outputPath:c.outputPath,pidPath:c.pidPath,processStart:i.start,setupSignal:r,resolvePid:u.resolvePid,command:u.command,cleanupFailureMessage:s.cleanupFailureMessage}),f=s.descriptor({artifacts:c,transport:i});return p(d,s.envelope({input:o,device:n,owner:a,descriptor:f}))}function I(e){for(let t of[/\bstatus(?:Code)?["'=: ]+([1-5]\d{2})\b/i,/\bresponse(?:\s+code)?["'=: ]+([1-5]\d{2})\b/i,/\bHTTP\/[0-9.]+\s+([1-5]\d{2})\b/i]){let n=t.exec(e);if(!n)continue;let r=Number.parseInt(n[1]??``,10);if(Number.isInteger(r))return r}return null}function L(e){return/\b\d{4}-\d{2}-\d{2}[ T]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z)?\b/.exec(e)?.[0]??/\b\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+\b/.exec(e)?.[0]}function ke(e){let t=e.indexOf(`{`),n=e.lastIndexOf(`}`);if(t<0||n<=t)return null;try{let r=JSON.parse(e.slice(t,n+1));return r&&typeof r==`object`&&!Array.isArray(r)?r:null}catch{return null}}function R(e,t){for(let n of t){let t=e?.[n];if(typeof t==`string`&&t.trim())return t.trim()}}function Ae(e,t){for(let n of t){let t=e?.[n];if(typeof t==`number`&&Number.isInteger(t))return t;if(typeof t==`string`&&/^\d{3}$/.test(t.trim()))return Number.parseInt(t,10)}return null}function je(e,t){let n=t?.headers??t?.requestHeaders??t?.responseHeaders;return n===void 0?/\bheaders?["'=: ]+(\{.*\})/i.exec(e)?.[1]?.trim():B(n)}function z(e,t,n){for(let r of n){if(t?.[r]!==void 0)return B(t[r]);let n=r.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`),i=RegExp(`\\b${n}["'=: ]+(.+)$`,`i`).exec(e);if(i?.[1])return i[1].trim()}}function B(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function Me(e,t,n){let r=U(t,n,5),i=e.packetId??r.map(V).find(e=>typeof e==`string`&&e.length>0);i&&(e.packetId=i);let a=i?U(t,n,12).filter(e=>V(e)===i):r;e.timestamp??=a.map(L).find(e=>typeof e==`string`&&e.length>0),e.status??=a.map(I).find(e=>typeof e==`number`)??void 0,e.durationMs??=a.map(H).find(e=>typeof e==`number`)??void 0}function V(e){return/\bpacket id (\d+)\b/i.exec(e)?.[1]??null}function H(e){let t=/\b(?:duration|elapsed request\/response time, ms)[:= ]+(\d+)\b/i.exec(e);return t?Number.parseInt(t[1]??``,10):null}function U(e,t,n){return e.slice(Math.max(0,t-n),Math.min(e.length,t+n+1)).map(e=>e.trim()).filter(Boolean)}const Ne=RegExp(`\\b(${[`GET`,`POST`,`PUT`,`PATCH`,`DELETE`,`HEAD`,`OPTIONS`].join(`|`)})\\b\\s+https?:\\/\\/`,`i`),Pe=/https?:\/\/[^\s"'<>\])]+/i,Fe=/\[C(\d+)\b[^\]]*?\burl:\s*([^\s,\]]+)/,W=/\bsummary for task (?:success|failure)\s*\{([^}]*)\}/,Ie=/\bTask\s+<([0-9A-Fa-f-]+)>\.<(\d+)>/,G=/(?:^|\s)(\S+)\[(\d+):[0-9a-f]+\]/,Le=/\burl:\s*(https?:\/\/[^\s,\]]+)/i;function Re(e,t,n=e.dump.limits.maxEntries){let r=[...e.dump.entries],i=new Set(r.map(K));for(let e of t.dump.entries){let t=K(e);if(!i.has(t)&&(i.add(t),r.push(e),r.length>=n))break}let a=new Set([...e.dump.entries,...t.dump.entries].map(e=>e.packetId).filter(e=>e!==void 0)),o=[...new Set([...e.unnamedRequestIds,...t.unnamedRequestIds])].filter(e=>!a.has(e));return Object.freeze({dump:Object.freeze({...e.dump,matchedLines:r.length,entries:Object.freeze(r),unnamedRequests:o.length}),unnamedRequestIds:Object.freeze(o)})}function ze(e,t){let n=J(t.maxEntries,25,1,200),r=t.include??`summary`,i=J(t.maxPayloadChars,2048,64,16384),a=J(t.maxScanLines,4e3,100,2e4),o=Ve(t.lineNumberOffset);if(!t.exists)return Object.freeze({dump:Object.freeze({path:t.path,exists:!1,scannedLines:0,matchedLines:0,entries:Object.freeze([]),unnamedRequests:0,include:r,limits:Object.freeze({maxEntries:n,maxPayloadChars:i,maxScanLines:a})}),unnamedRequestIds:Object.freeze([])});let s=e.split(`
|
|
2
|
-
`),c=Math.max(0,s.length-a),l=s.slice(c),u=[],d=Be(t.backend)?Qe(l):void 0,f=d?et(l,d):[];for(let e=l.length-1;e>=0&&u.length<n;--e){if(!l[e]?.trim())continue;let n=He(l,e,o+c+e+1,t.backend,r,i,d);n&&u.push(n)}return Object.freeze({dump:Object.freeze({path:t.path,exists:!0,scannedLines:l.length,matchedLines:u.length,entries:Object.freeze(u),unnamedRequests:f.length,include:r,limits:Object.freeze({maxEntries:n,maxPayloadChars:i,maxScanLines:a})}),unnamedRequestIds:Object.freeze(f)})}function Be(e){return e===`ios-simulator`||e===`ios-device`||e===`macos`}function Ve(e){if(e===void 0)return 0;if(!Number.isInteger(e)||e<0)throw TypeError(`Network line number offset must be a non-negative integer`);return e}function He(e,t,n,r,i,a,o){let s=e[t]?.trim();if(!s)return null;let c=ke(s),l=Ue(s,c)??(o?$e(s,o,t):null);if(!l)return null;let u=Je(s,n,l,a);return r===`android`&&Me(u,e,t),Ye(u,s,c,i,a),u}function Ue(e,t){let n=We(e,t),r=Ge(e,t);if(!r)return null;let i=Ke(e,t);return qe(e,n.explicit,i)?{method:n.value,url:r,status:i}:null}function We(e,t){let n=R(t,[`method`,`httpMethod`]),r=/\bmethod["'=: ]+([A-Z]+)\b/i.exec(e)?.[1],i=Ne.exec(e)?.[1],a=n??r??i;return{value:a?.toUpperCase(),explicit:!!a}}function Ge(e,t){return R(t,[`url`,`requestUrl`])||(Le.exec(e)?.[1]??Pe.exec(e)?.[0])}function Ke(e,t){return Ae(t,[`status`,`statusCode`,`responseCode`])??I(e)??void 0}function qe(e,t,n){return t||n!==void 0||/\bURL["'=: ]+https?:\/\//i.test(e)||/\bheaders?["'=: ]+/i.test(e)||/\b(?:requestBody|responseBody|payload|request|response)["'=: ]+/i.test(e)}function Je(e,t,n,r){return{...n,timestamp:L(e),packetId:n.packetId??V(e)??void 0,durationMs:n.durationMs??H(e)??void 0,raw:q(e,r),line:t}}function Ye(e,t,n,r,i){if(Xe(r)){let r=je(t,n);r&&(e.headers=q(r,i))}if(Ze(r)){let r=z(t,n,[`requestBody`,`body`,`payload`,`request`]),a=z(t,n,[`responseBody`,`response`]);r&&(e.requestBody=q(r,i)),a&&(e.responseBody=q(a,i))}}function Xe(e){return e===`headers`||e===`all`}function Ze(e){return e===`body`||e===`all`}function K(e){return`${e.timestamp??``}|${e.method??``}|${e.url}|${e.status??``}|${e.raw}`}function q(e,t){return e.length<=t?e:`${e.slice(0,t)}...<truncated>`}function J(e,t,n,r){return e===void 0||!Number.isInteger(e)?t:Math.max(n,Math.min(r,e))}function Qe(e){let t=new Map;for(let[n,r]of e.entries()){let e=Fe.exec(r);if(!e)continue;let i=Y(r,e[1]),a=i===void 0?void 0:nt(e[2]);if(!a||i===void 0)continue;let o=t.get(i);o?o.push({lineIndex:n,origin:a}):t.set(i,[{lineIndex:n,origin:a}])}return t}function Y(e,t){let n=G.exec(e);if(n)return`${n[1]}[${n[2]}]#${t}`}function $e(e,t,n){let r=W.exec(e);if(!r)return null;let i=Q(r[1]);if(i.get(`reused`)!==`1`)return null;let a=i.get(`connection`),o=a===void 0?void 0:Y(e,a),s=o===void 0?void 0:Z(t,o,n);return s?{url:s,status:rt(i.get(`response_status`)),durationMs:$(i.get(`transaction_duration_ms`)),pathUnavailable:!0,packetId:X(e)}:null}function et(e,t){let n=new Set;for(let[r,i]of e.entries()){let e=tt(i,t,r);e!==void 0&&n.add(e)}return[...n]}function tt(e,t,n){if(!e.includes(`summary for task`))return;let r=W.exec(e);if(!r)return;let i=Q(r[1]);if(i.get(`reused`)!==`1`)return;let a=i.get(`connection`),o=a===void 0?void 0:Y(e,a);if(!(o!==void 0&&Z(t,o,n)))return X(e)}function X(e){let t=Ie.exec(e);if(!t)return;let n=G.exec(e);return`${n?`${n[1]}[${n[2]}]`:``}#${t[1]}.${t[2]}`}function Z(e,t,n){let r=e.get(t);if(!r)return;let i;for(let e of r){if(e.lineIndex>n)break;i=e.origin}return i}function Q(e){let t=new Map;for(let n of e.split(`,`)){let e=n.indexOf(`=`);e!==-1&&t.set(n.slice(0,e).trim(),n.slice(e+1).trim())}return t}function nt(e){try{return new URL(e).origin}catch{return}}function rt(e){let t=$(e);return t!==void 0&&t>0?t:void 0}function $(e){if(e===void 0)return;let t=Number(e);return Number.isFinite(t)?t:void 0}export{M as a,E as c,m as d,p as f,Te as i,le as l,f as m,ze as n,N as o,g as p,Ee as r,D as s,Re as t,v as u};
|