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
package/dist/src/src3.js
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";var t=e({inventoryModule:()=>a,runtimeModule:()=>i,vegaPlugin:()=>o,vegaToolchainCheck:()=>s,withVegaToolProvider:()=>c});function n(e){return(async(...t)=>await(await e())(...t))}const r=Object.freeze({family:`vega`}),i=Object.freeze({...r,loadRuntime:async e=>{let{createVegaPlatformRuntime:t}=await import(`./runtime9.js`);return t(e)}}),a=Object.freeze({...r,loadInventory:async e=>{let{createVegaInventory:t}=await import(`./inventory5.js`);return t(e)}}),o={id:`vega`,platforms:[`vega`],providers:{platformGatedResolvers:[`vegaToolProvider`]},createInteractor:async(e,t)=>{let{createVegaInteractor:n}=await import(`./interactor2.js`);return n(e,t)}},s=n(async()=>(await import(`./doctor2.js`)).vegaToolchainCheck);async function c(e,t){let{withVegaToolProvider:n}=await import(`./tool-provider3.js`).then(e=>e.n);return await n(e,t)}export{o as i,i as n,t as r,a as t};
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{N as t}from"./sdk-device.js";import{$t as n,Yt 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=r(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 r=>{if(r.intent.kind===`exact-owner`&&!n(r.intent.owner,a))throw new e(`UNSUPPORTED_OPERATION`,`${i.label} app-log owner identity does not match`);if(r.device.platform!==i.family)throw new e(`UNSUPPORTED_PLATFORM`,`${i.label} app-log owner cannot bind ${r.device.platform}`);let o=await t.processTransports.resolve(r.device);return De(t,r.device,r.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};
|
package/dist/src/store.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t,Y as n}from"./sdk-contracts.js";import{v as r}from"./sdk-batch-runner.js";import{I as i,d as a,t as o,z as s}from"./file.js";import{l as c}from"./exec.js";import"./command.js";import"./process.js";import l from"node:crypto";import u from"node:fs";import d from"node:path";const f={browserStack:`browserstack`,awsDeviceFarm:`aws-device-farm`},p={username:`BROWSERSTACK_USERNAME`,accessKey:`BROWSERSTACK_ACCESS_KEY`},m={leaseKind:`direct-device-provider`,requiresAppAttachment:!1,requiresRemoteDaemon:!1,supportsArtifacts:!0,supportsDeferredAppSelection:!1,supportsDirectPortReverse:!1,usesCloudWebDriverLease:!0},h=Object.freeze([{provider:f.browserStack,connection:m,credentialVariables:Object.values(p)},{provider:f.awsDeviceFarm,connection:{...m,requiresAppAttachment:!0}}]);function g(e){return h.find(t=>t.provider===e)}function _(e,t){if(e.slice(0,t.length).toLowerCase()===t)return`${t}${e.slice(t.length)}`}function v(e){return _(e,`bs://`)}function y(e){return/^bs:\/\/[\w.-]+$/.test(e)}var b=e({RESERVED_PLUGIN_PROVIDERS:()=>x,assertUniquePluginProviders:()=>S,readPluginManifest:()=>C,resolvePluginEntry:()=>E});const x=[`cloud`,`proxy`,...Object.values(f),`limrun`];function S(e,n){let r=new Set(n);for(let n of e){let e=n.agentDevicePlugin.provider;if(r.has(e))throw new t(`INVALID_ARGS`,`Duplicate provider plugin: ${e}`);r.add(e)}}function C(e){let n;try{let t=d.join(e,`package.json`);n=JSON.parse(u.readFileSync(t,`utf8`))}catch(n){throw new t(`INVALID_ARGS`,`Cannot read plugin manifest: ${e}`,{},n)}let r=n?.agentDevicePlugin;if(typeof n?.name!=`string`||typeof n?.version!=`string`||!r||r.apiVersion!==1||typeof r.provider!=`string`||!/^[a-z][a-z0-9-]*$/.test(r.provider)||typeof r.entry!=`string`||!r.entry.startsWith(`./`))throw new t(`INVALID_ARGS`,`Package does not declare a compatible provider plugin`,{reason:`incompatible_plugin`,apiVersion:1,hint:`Install a plugin release supporting agentDevicePlugin.apiVersion 1.`});return E(e,r.entry),w(r.connection),T(r.credentialVariables),n}function w(e){if(e!==void 0&&(!e||typeof e!=`object`||e.leaseKind!==`direct-device-provider`||[`requiresAppAttachment`,`requiresRemoteDaemon`,`supportsArtifacts`,`supportsDeferredAppSelection`,`supportsDirectPortReverse`,`usesCloudWebDriverLease`].some(t=>typeof e[t]!=`boolean`)||e.requiresRemoteDaemon))throw new t(`INVALID_ARGS`,`Plugin connection must declare local provider capabilities`)}function T(e){if(e!==void 0&&(!Array.isArray(e)||!e.every(e=>typeof e==`string`&&/^[A-Z_][A-Z0-9_]*$/.test(e))))throw new t(`INVALID_ARGS`,`Plugin credentialVariables must list environment variable names`)}function E(e,n){try{let t=u.realpathSync(e),r=u.realpathSync(d.resolve(e,n));if(r.startsWith(`${t}${d.sep}`)&&u.statSync(r).isFile())return r}catch{}throw new t(`INVALID_ARGS`,`Plugin entry must be a readable file inside its package`,{directory:e,entry:n})}function D(e){let n=i(e);try{let e=JSON.parse(u.readFileSync(n,`utf8`));if(!r(e)||e.plugins!==void 0&&!r(e.plugins))throw new t(`INVALID_ARGS`,`Plugin config must contain an object`);return e}catch(e){if(e.code===`ENOENT`)return{};throw e instanceof SyntaxError?new t(`INVALID_ARGS`,`Invalid plugin JSON: ${n}`,{},e):e}}function O(e,n){if(!F(e)||!r(n)||typeof n.installation!=`string`||!/^[a-f0-9-]{36}$/.test(n.installation)||n.version!==void 0&&!I(n.version)||n.options!==void 0&&!r(n.options))throw new t(`INVALID_ARGS`,`Invalid plugin selection: ${e}`)}function k(e){let t=d.dirname(i(e));return Object.entries(D(e).plugins??{}).map(([e,n])=>A(t,e,n))}function A(e,n,r){O(n,r);let i=d.join(e,`plugins`,r.installation,`node_modules`,n),a=C(i);if(a.name!==n)throw new t(`INVALID_ARGS`,`Plugin package identity mismatch: ${n}`);return{...a,directory:i,selection:r}}function j(e){let t=d.dirname(i(e));return Object.entries(D(e).plugins??{}).map(([e,r])=>{try{let n=A(t,e,r);return{name:e,version:n.version,provider:n.agentDevicePlugin.provider,compatible:!0}}catch(t){return{name:e,compatible:!1,error:n(t)}}})}function M(e,n){if(e===`remove`)return{name:n,version:void 0};let r=/^(@[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._-]*|[a-z0-9][a-z0-9._-]*)(?:@(.+))?$/.exec(n);if(!r||!r[1]||r[2]!==void 0&&!I(r[2]))throw new t(`INVALID_ARGS`,`Expected an npm package name, optionally followed by @version or @tag`);if(e===`update`&&r[2]!==void 0)throw new t(`INVALID_ARGS`,`update accepts a package name without a version`);return{name:r[1],version:r[2]}}async function N(e,n,r,i){let a=l.randomUUID(),o=d.join(e,`plugins`,a);u.mkdirSync(o,{recursive:!0,mode:448});try{u.writeFileSync(d.join(o,`package.json`),JSON.stringify({private:!0,dependencies:{[n]:r??`latest`}})),await c(`npm`,[`install`,`--ignore-scripts`,`--no-audit`,`--no-fund`,`--global=false`,`--prefix`,o,`--workspaces=false`,`--package-lock=true`],{cwd:o,env:i,timeoutMs:12e4});let e=C(d.join(o,`node_modules`,n));if(e.name!==n)throw new t(`INVALID_ARGS`,`Plugin package identity mismatch: ${n}`);return{installation:a,project:o,manifest:e}}catch(e){throw u.rmSync(o,{recursive:!0,force:!0}),e}}async function P(e,n,c=process.env,l=x){let{name:f,version:p}=M(e,n),m=i(c),h=d.dirname(m);u.mkdirSync(h,{recursive:!0,mode:448});let g=await o({lockDirPath:d.join(h,`plugins.lock`),owner:{...a(),acquiredAtMs:Date.now()},description:`plugin installation`}),_;try{let n=D(c),i={...n.plugins},a=Object.hasOwn(i,f)?i[f]:void 0;if(e!==`add`&&!Object.hasOwn(i,f))throw new t(`INVALID_ARGS`,`Plugin is not installed: ${f}`);if(e===`remove`)delete i[f];else{let t=e===`update`&&I(a?.version)?a.version:p;_=await N(h,f,t,c),S([...Object.entries(i).filter(([e])=>e!==f).flatMap(([e,t])=>{try{return[A(h,e,t)]}catch{return[]}}),_.manifest],l),i[f]={installation:_.installation,version:t,...r(a?.options)?{options:a.options}:{}}}s({destination:m,contents:`${JSON.stringify({...n,plugins:i},null,2)}\n`,mode:384})}catch(e){throw _&&u.rmSync(_.project,{recursive:!0,force:!0}),e}finally{await g()}}function F(e){return/^(@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(e)}function I(e){return typeof e==`string`&&/^[a-zA-Z0-9*^~<>=| .+-]+$/.test(e)&&e.trim().length>0}export{S as a,p as c,g as d,y as f,x as i,f as l,k as n,b as o,j as r,E as s,P as t,v as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./snapshot-desktop-projection.js";async function t(t,n){let{snapshotLinux:r}=await import(`./
|
|
1
|
+
import{n as e}from"./snapshot-desktop-projection.js";async function t(t,n){let{snapshotLinux:r}=await import(`./snapshot2.js`),i=await r(t?.surface,n);return e({nodes:i.nodes,truncated:i.truncated,backend:`linux-atspi`,producer:`linux-atspi`},t??{})}export{t as captureLinuxSurfaceSnapshot};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Gn as e,Kn as t,qn as n}from"./sdk-batch.js";function r(e){let t=new Map;for(let n of e)t.set(n.index,n);return t}function i(e,t,r){let i=[],a=new Set([e.index]),o=e;for(;i.length<r;){if(typeof o.parentIndex!=`number`)return{chain:i,broken:!1};let e=t.get(o.parentIndex);if(!e||a.has(e.index))return{chain:i,broken:!0};a.add(e.index);let r=n(e);i.push({role:r.role,...r.label===void 0?{}:{label:r.label}}),o=e}return{chain:i,broken:!1}}function a(r,a,o,s){return r.filter(r=>{if(!t(n(r),o))return!1;let c=i(r,a,Math.max(s.length,1));return!c.broken&&e(c.chain,s)})}export{r as n,a as r,i as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Kn as e,Vn as t,Yn as n,Zn as r,ir as i,nr as a,qn as o}from"./sdk-batch.js";import{n as s,r as c,t as l}from"./target-evidence-tree.js";import{i as u}from"./rect-center.js";import{s as d}from"./tree.js";function f(e){return e.matchedRefs.length===0?{path:2,outcome:`unverifiable`,reason:`selector-miss`}:e.identitySetRefs.length===0?{path:3,outcome:`unverifiable`,reason:`identity-set-empty`}:e.identitySetRefs.length===1?e.identitySetRefs[0]===e.winnerRef?{path:4,outcome:`verified`}:{path:5,outcome:`unverifiable`,reason:`unique-but-wrong`}:e.siblingMatchRefs.length===1?e.siblingMatchRefs[0]===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:e.regionMemberRefs!==void 0&&e.regionMemberRefs.length>0&&e.viewportCandidateRef!==void 0?e.viewportCandidateRef===e.winnerRef?{path:6,outcome:`verified`}:{path:6,outcome:`unverifiable`,reason:`signal-isolated-wrong`}:{path:6,outcome:`unverifiable`,reason:`no-signal-isolation`}}function p(e,n={}){let r=n.mode??`action`,{node:i,preActionNodes:a}=e;if(typeof i.index!=`number`)return;let o=s(a),c=t(_(i),a);if(r===`landmark`&&c.id===void 0&&c.label===void 0)return;let u=l(i,o,8),d=u.chain,f=v(a,i),p=y(i,o),b=x(i),C=+(d.length>0),w=e=>{let t=d.slice(0,e),n=S({nodes:a,byIndex:o,node:i,identity:c,ancestry:t,sibling:f,scrollRegion:p});return{candidate:{...c,ancestry:t,sibling:f,viewportOrder:n.viewportOrder,...p?{scrollRegion:p}:{},...b?{rect:b}:{},verification:`verified`},domain:n}};for(let e=d.length;e>=C;--e){let{candidate:t,domain:n}=w(e);if(h(t))return t.verification=m({node:i,domain:n,mode:r,brokenWalk:u.broken}),t;if(e===C)return g(t)}}function m(e){return e.brokenWalk?`unverifiable`:e.mode===`landmark`?`verified`:w({node:e.node,domain:e.domain})}function h(e){return i(a({...e,verification:`unverifiable`}))<=r}function g(e){return e.verification=`unverifiable`,i(a(e))>4096&&delete e.rect,e}const _=o;function v(e,t){return n(e,t)}function y(e,t){let n=d(e,t);if(!n)return;let r=_(n);return{role:r.role,...r.id===void 0?r.label===void 0?{}:{label:r.label}:{id:r.id}}}function b(t,n){return!t&&!n?!0:!t||!n?!1:e(t,n)}function x(e){let t=e.rect;if(t)return{x:t.x,y:t.y,width:t.width,height:t.height}}function S(e){let{nodes:t,byIndex:n,node:r,identity:i,ancestry:a,sibling:o,scrollRegion:s}=e,l=c(t,n,i,a),u=l.filter(e=>v(t,e)===o),d=l.length>0?l.filter(e=>b(y(e,n),s)):void 0,f=d?C(d):[];return{identitySet:l,siblingMatches:u,regionMembers:d,orderedRegion:f,viewportOrder:Math.max(f.findIndex(e=>e.index===r.index),0)}}function C(e){return e.map((e,t)=>({node:e,documentOrder:t,center:u(e.rect)})).sort((e,t)=>!e.center&&!t.center?e.documentOrder-t.documentOrder:e.center?t.center?e.center.y===t.center.y?e.center.x===t.center.x?e.documentOrder-t.documentOrder:e.center.x-t.center.x:e.center.y-t.center.y:-1:1).map(e=>e.node)}function w(e){let{node:t,domain:n}=e,r=t.ref,i=n.identitySet.map(e=>e.ref);return f({winnerRef:r,matchedRefs:i,identitySetRefs:i,siblingMatchRefs:n.siblingMatches.map(e=>e.ref),regionMemberRefs:n.regionMembers?.map(e=>e.ref),viewportCandidateRef:n.orderedRegion[n.viewportOrder]?.ref}).outcome}export{C as a,p as i,y as n,b as o,v as r,f as s,_ as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{Jr as t,
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{Jr as t,Kr as n,Qr as r}from"./sdk-batch.js";import{c as i,l as a}from"./src.js";function o(t,n,r,i){return new e(`COMMAND_FAILED`,`fill tapped (${t}, ${n}) but ${r}`,{reason:`text_entry_focus_not_observed`,x:t,y:n,...i,hint:`The tap most likely missed the field. Re-check the target with snapshot -i and fill the element it reports, rather than retrying the same coordinates.`})}function s(e){let n=[];for(let r of p(e)){let e=a(r);t(e)&&n.push({node:r,identity:m(r),rect:e})}return n}function c(e){let t=new Map;for(let n of e)t.set(n.identity,(t.get(n.identity)??0)+1);return t}function l(e){let t=s(e),n=c(t),i=null,a=1/0;for(let e of t){if(!e.node.traits?.includes(`IsEditing`))continue;let t=r(e.rect);t>=a||(i=n.get(e.identity)===1?{identity:e.identity,rect:e.rect}:{rect:e.rect},a=t)}return i}function u(e,t,r){let i=s(e),a=c(i),o=new Set;for(let e of i)a.get(e.identity)===1&&n(e.rect,t,r)&&o.add(e.identity);return o}async function d(e){let t=Date.now()+(e.timeoutMs??3e3),n=0,r=!1;for(;;){let i=await e.readFocus();if(n+=1,i&&(r=!0,f(i,e.targetsAtPoint,e.x,e.y)))return`focused-element`;if(Date.now()>=t)break;await e.sleep(150)}throw o(e.x,e.y,`nothing there took text-entry focus, so the text was not sent`,{samples:n,editingElementObserved:r})}function f(e,t,r,i){return n(e.rect,r,i)?!0:e.identity!==void 0&&t.has(e.identity)}function p(e){let t=[],n=e=>{t.push(e);for(let t of i(e))n(t)};for(let t of Array.isArray(e)?e:[e])n(t);return t}function m(e){return[e.pid??``,e.type??e.elementType??``,e.AXUniqueId??e.identifier??``,e.AXLabel??e.label??``].join(`\0`)}export{d as awaitLimrunTextEntryFocus,l as readLimrunTextEntryFocus,u as readLimrunUnambiguousTapTargets};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{r as n}from"./diagnostics.js";import"./diagnostics2.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{r as n}from"./diagnostics.js";import"./diagnostics2.js";import{m as r}from"./file.js";import{g as i,l as a}from"./exec.js";import{i as o}from"./retry.js";import"./command.js";import"./process.js";import"./retry2.js";import{t as s}from"./scoped-provider.js";var c=e({createLocalLinuxToolProvider:()=>d,resolveLinuxToolProvider:()=>f,runLinuxToolCommand:()=>m,withLinuxToolProvider:()=>p});const l={runCommand:a,whichCommand:i,desktop:h(a,i),clipboard:g(a,i),screenshot:_(a,i)},u=s(l,d);function d(e={}){let t={...l,...e};return{...t,desktop:e.desktop??h(t.runCommand,t.whichCommand),clipboard:e.clipboard??g(t.runCommand,t.whichCommand),screenshot:e.screenshot??_(t.runCommand,t.whichCommand)}}function f(e){return u.resolve(e)}async function p(e,t){return await u.run(e,t)}async function m(e,t,n){return await f().runCommand(e,t,n)}function h(e,t){return{async openTarget(r){if(r.includes(`://`)||r.startsWith(`/`)){await e(`xdg-open`,[r]);return}if(await t(r)){e(r,[],{allowFailure:!0}).catch(e=>{n({level:`warn`,phase:`linux_app_launch`,data:{app:r,error:String(e)}})}),await o(500);return}await e(`xdg-open`,[r],{allowFailure:!0})},async closeApp(n){if(await t(`wmctrl`)){await e(`wmctrl`,[`-c`,n],{allowFailure:!0});return}await e(`pkill`,[`-x`,n],{allowFailure:!0})}}}function g(e,t){return{async readText(){let n=await w(t,y),r=x[n];return(await e(r.cmd,r.args,r.options)).stdout},async writeText(n){let r=await w(t,y),i=S[r](n);await e(i.cmd,i.args,i.options)}}}function _(e,t){return{async capture(n){let r=await w(t,b),i=C[r](n);await e(i.cmd,i.args,i.options)}}}const v=5e3,y={wayland:[{tool:`wl-clipboard`,command:`wl-paste`}],x11:[{tool:`xclip`,command:`xclip`},{tool:`xsel`,command:`xsel`}],waylandError:`wl-paste (wl-clipboard) is required for clipboard access on Wayland. Install via your package manager.`,x11Error:`xclip or xsel is required for clipboard access on X11. Install via your package manager.`},b={wayland:[{tool:`grim`,command:`grim`},{tool:`gnome-screenshot`,command:`gnome-screenshot`}],x11:[{tool:`scrot`,command:`scrot`},{tool:`import`,command:`import`},{tool:`gnome-screenshot`,command:`gnome-screenshot`}],waylandError:`grim or gnome-screenshot is required for screenshots on Wayland. Install via your package manager.`,x11Error:`scrot, import (ImageMagick), or gnome-screenshot is required for screenshots on X11. Install via your package manager.`},x={"wl-clipboard":{cmd:`wl-paste`,args:[`--no-newline`],options:{allowFailure:!0,timeoutMs:v}},xclip:{cmd:`xclip`,args:[`-selection`,`clipboard`,`-o`],options:{allowFailure:!0,timeoutMs:v}},xsel:{cmd:`xsel`,args:[`--clipboard`,`--output`],options:{allowFailure:!0,timeoutMs:v}}},S={"wl-clipboard":e=>({cmd:`wl-copy`,args:[`--`,e],options:{allowFailure:!1,timeoutMs:v}}),xclip:e=>({cmd:`xclip`,args:[`-selection`,`clipboard`],options:{allowFailure:!1,timeoutMs:v,stdin:e}}),xsel:e=>({cmd:`xsel`,args:[`--clipboard`,`--input`],options:{allowFailure:!1,timeoutMs:v,stdin:e}})},C={grim:e=>({cmd:`grim`,args:[e]}),scrot:e=>({cmd:`scrot`,args:[e]}),import:e=>({cmd:`import`,args:[`-window`,`root`,e]}),"gnome-screenshot":e=>({cmd:`gnome-screenshot`,args:[`-f`,e]})};async function w(e,n){let r=T()?`wayland`:`x11`;for(let t of n[r])if(await e(t.command))return t.tool;throw new t(`TOOL_MISSING`,r===`wayland`?n.waylandError:n.x11Error)}function T(){let e=r();return!!e.WAYLAND_DISPLAY||e.XDG_SESSION_TYPE===`wayland`}export{m as n,c as r,f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t,V as n}from"./sdk-contracts.js";var r=e({localInteractorSource:()=>a,providerInteractorSource:()=>o,requireInteractorMethod:()=>i});function i(e,n){if(e)return e;throw new t(`COMMAND_FAILED`,`${n} was admitted but its bound interactor has no implementation.`,{reason:`interactor-method-missing`})}function a(e){return async t=>await e.resolveInteractor(e.device,t)}function o(e){return async n=>{let r=e.resolveInteractor(n);if(r)return r;throw new t(`UNSUPPORTED_OPERATION`,`Provider-owned ${e.operation} operation has no bound provider interactor.`,{reason:`provider-runtime-interactor-missing`,deviceId:e.device.id})}}function s(e){let t=t=>t??e.unsupported;return Object.freeze({tapPoint:e.tap,tapRef:t(e.tapRef),longPressPoint:e.longPress,hoverPoint:c(t(e.hover)),hoverRef:c(t(e.hoverRef)),fillPoint:e.fill,fillRef:t(e.fillRef),tapElementSelector:t(e.tapElementSelector)})}function c(e){return e.available?e:Object.freeze({...e,hint:e.hint??`hover raises pointer hover state and is available on web targets only. On touch platforms use longpress for hold gestures.`})}function l(e,t){return{...e.execution,appBundleId:e.appBundleId,signal:t}}function u(e,n,r,i){let a=async t=>(e.throwIfAborted(),await n(l(t,e))),o=async t=>{e.throwIfAborted(),f(t.options,r.longPressPoint);let n=await a(t);return t.options.button!==`primary`&&n.alternateClick?await n.alternateClick(t.point,t.options.button):n.pressPoint?await n.pressPoint(t.point,t.options):await m(n,t.point,t.options,i)},s=async e=>{let n=await a(e);if(!n.hover)throw new t(`UNSUPPORTED_OPERATION`,`Bound runtime advertised hover without an interactor.`);return await n.hover(e.point.x,e.point.y)},c=async e=>await(await a(e)).fill(e.point.x,e.point.y,e.text,e.delayMs,{allowNonHittableCoordinateFallback:e.allowNonHittableCoordinateFallback});return Object.freeze({...r.tapPoint.available?{tapPoint:o}:{},...r.tapRef.available?{tapRef:async e=>{let t=await a(e);return t.tapRef?await t.tapRef(e.ref):d(`tapRef`)}}:{},...r.longPressPoint.available?{longPressPoint:async e=>await(await a(e)).longPress(e.point.x,e.point.y,e.durationMs)}:{},...r.hoverPoint.available?{hoverPoint:s}:{},...r.hoverRef.available?{hoverRef:async e=>{let t=await a(e);return t.hoverRef?await t.hoverRef(e.ref):d(`hoverRef`)}}:{},...r.fillPoint.available?{fillPoint:c}:{},...r.fillRef.available?{fillRef:async e=>{let t=await a(e);return t.fillRef?await t.fillRef(e.ref,e.text,e.delayMs):d(`fillRef`)}}:{},...r.tapElementSelector.available?{tapElementSelector:async e=>{let t=await a(e);return t.tapElementSelector?await t.tapElementSelector(e.selector):d(`tapElementSelector`)}}:{}})}function d(e){throw new t(`UNSUPPORTED_OPERATION`,`Bound runtime advertised ${e} without an interactor.`)}function f(e,n){if(!(e.holdMs<=0||n.available))throw new t(`UNSUPPORTED_OPERATION`,`press-and-hold is not supported by this runtime.`,{reason:n.reason,...n.hint===void 0?{}:{hint:n.hint}})}function p(e){if(e.doubleTap)return e.doubleTap;throw new t(`UNSUPPORTED_OPERATION`,`double-tap is not supported by this runtime.`,{reason:`owner-capability-missing`,hint:`This runtime drives single presses; use --count to repeat them.`})}async function m(e,r,i,a){if(i.button!==`primary`)throw new t(`UNSUPPORTED_OPERATION`,`Bound runtime does not implement ${i.button} click.`);let o=i.doubleTap?p(e):void 0,s,c=0;try{for(let t=0;t<i.count;t+=1){let[n,l]=_(t,i.jitterPx),u=await h(e,o,r.x+n,r.y+l,i);c+=1,s??=u,t<i.count-1&&i.intervalMs>0&&await a(i.intervalMs)}}catch(e){throw n(e,c)}return s}async function h(e,t,n,r,i){return t?await t.call(e,n,r):i.holdMs>0?await e.longPress(n,r,i.holdMs):await e.tap(n,r)}const g=[[0,0],[1,0],[0,1],[-1,0],[0,-1],[1,1],[-1,1],[1,-1],[-1,-1]];function _(e,t){if(t<=0)return[0,0];let[n,r]=g[e%g.length];return[n*t,r*t]}function v(e){return u(e.signal,a(e),e.facts,e.pause)}function y(e){return u(e.signal,o({...e,operation:`touch`}),e.facts,e.pause)}export{r as a,i as c,s as i,y as n,a as o,_ as r,o as s,v as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{H as t}from"./tv-remote.js";import{a as n}from"./back-mode.js";import{Et as r,Gt as i,St as a,Vt as o,dt as s,ft as c,gt as l,lt as u,ut as d}from"./sdk-batch.js";import{g as f}from"./selector-pipeline-policy.js";import{a as p,o as m}from"./internal/daemon.js";import{t as h}from"./interactor-types.js";function g(e){let t=e?e.textEntryReadiness:void 0,n=x(t)?{textEntryReadiness:t}:{},r=_(e);return r?{...n,...r}:n}function _(e){if(!v(e))return null;let t=y(e.target);return t?{verification:`unconfirmed`,requested:e.requested,before:e.before,after:e.after,target:t}:null}function v(e){return!!(e&&e.verification===`unconfirmed`&&typeof e.requested==`string`&&S(e.before)&&S(e.after))}function y(e){if(!w(e)||!b(e))return null;let t=C(e.rect);return t?{resourceId:e.resourceId,className:e.className,packageName:e.packageName,rect:t}:null}function b(e){return S(e.resourceId)&&S(e.className)&&S(e.packageName)}function x(e){return typeof e==`string`&&h.includes(e)}function S(e){return e===null||typeof e==`string`}function C(e){return!w(e)||![e.x,e.y,e.width,e.height].every(e=>typeof e==`number`)?null:e}function w(e){return!!e&&typeof e==`object`}async function T(e){let t={device:e.device,inspectFacts:e.inspectFacts,platformServices:e.platformServices,bindDevice:e.bindDevice},n=o(e.command,e.requiresCapture),f=await m({command:e.command,required:n.use.required,...e.unavailableResponse?{unavailableResponse:e.unavailableResponse}:{},...t});if(f.type===`response`)return{ok:!1,response:f.response};let p=f.bind;switch(n.kind){case`tap-point`:return{ok:!0,runtime:{kind:`tap`,captured:!1,runtime:await p(e.device,i)}};case`captured-tap`:return{ok:!0,runtime:{kind:`tap`,captured:!0,runtime:await p(e.device,c)}};case`long-press-point`:return{ok:!0,runtime:{kind:`long-press`,captured:!1,runtime:await p(e.device,r)}};case`captured-long-press`:return{ok:!0,runtime:{kind:`long-press`,captured:!0,runtime:await p(e.device,s)}};case`hover-point`:return{ok:!0,runtime:{kind:`hover`,captured:!1,runtime:await p(e.device,a)}};case`captured-hover`:return{ok:!0,runtime:{kind:`hover`,captured:!0,runtime:await p(e.device,d)}};case`fill-point`:return{ok:!0,runtime:{kind:`fill`,captured:!1,runtime:await p(e.device,l)}};case`captured-fill`:return{ok:!0,runtime:{kind:`fill`,captured:!0,runtime:await p(e.device,u)}}}}function E(e,t){let n={execution:p(t),appBundleId:t.appBundleId},r=e.captured?M(e.runtime):void 0;switch(e.kind){case`tap`:return D(e,t,n,r);case`long-press`:return O(e,n,r);case`hover`:return k(e,n,r);case`fill`:return A(e,t,n,r)}}function D(e,n,r,i){let a=e.captured?e.runtime.operations.tapRef:void 0,o=e.captured?e.runtime.operations.tapElementSelector:void 0;return Object.freeze({captureSnapshot:i,tapPoint:async(i,a={})=>{let o=N(a,n),s=await e.runtime.operations.tapPoint({point:i,options:o,...r});return{x:i.x,y:i.y,count:o.count,intervalMs:o.intervalMs,holdMs:o.holdMs,jitterPx:o.jitterPx,doubleTap:o.doubleTap,...o.button===`primary`?{}:{button:o.button},...s??{},...t(L(i,o.button))}},tapRef:a?async e=>await a({ref:e,...r}):void 0,tapElementSelector:e.captured&&o?async n=>{let i=await e.runtime.operations.tapElementSelector?.({selector:n,...r}),a=i?.maestroNonHittableCoordinateFallbackUsed===!0;return{selector:n.raw,...i??{},...t(a?`tapped via non-hittable coordinate fallback`:`Tapped ${n.raw}`)}}:void 0})}function O(e,n,r){return Object.freeze({captureSnapshot:r,longPressPoint:async(r,i)=>{let a=await e.runtime.operations.longPressPoint({point:r,durationMs:i,...n});return{x:r.x,y:r.y,durationMs:i,...a??{},...t(`Long pressed (${r.x}, ${r.y})`)}}})}function k(e,n,r){let i=e.captured?e.runtime.operations.hoverRef:void 0;return Object.freeze({captureSnapshot:r,hoverPoint:async r=>{let i=await e.runtime.operations.hoverPoint({point:r,...n});return{x:r.x,y:r.y,...i??{},...t(`Hovered (${r.x}, ${r.y})`)}},hoverRef:i?async e=>await i({ref:e,...n}):void 0})}function A(e,n,r,i){let a=e.captured?e.runtime.operations.fillRef:void 0,o=e=>f(e??n.delayMs??0,`delay-ms`,0,1e4);return Object.freeze({captureSnapshot:i,fillPoint:async(n,i,a={})=>{let s=o(a.delayMs),c=await e.runtime.operations.fillPoint({point:n,text:i,delayMs:s,allowNonHittableCoordinateFallback:a.allowNonHittableCoordinateFallback===!0,...r});return{x:n.x,y:n.y,text:i,delayMs:s,...j(c)?{maestroNonHittableCoordinateFallbackUsed:!0}:{},...g(c),...t(`Filled ${Array.from(i).length} chars`)}},fillRef:a?async(e,t,n={})=>await a({ref:e,text:t,delayMs:o(n.delayMs),...r}):void 0})}function j(e){return typeof e==`object`&&!!e&&`maestroNonHittableCoordinateFallbackUsed`in e&&e.maestroNonHittableCoordinateFallbackUsed===!0}function M(e){return async t=>await e.operations.captureSnapshot(t)}function N(e,t){let r=P(e,t);return I(r),{button:e.button??n(t),...r,surface:e.surface??t.surface}}function P(e,t){return{count:F(e.count,t.count,1,`count`,1,200),intervalMs:F(e.intervalMs,t.intervalMs,0,`interval-ms`,0,1e4),holdMs:F(e.holdMs,t.holdMs,0,`hold-ms`,0,1e4),jitterPx:F(e.jitterPx,t.jitterPx,0,`jitter-px`,0,100),doubleTap:e.doubleTap??t.doubleTap??!1}}function F(e,t,n,r,i,a){return f(e??t??n,r,i,a)}function I(t){if(t.doubleTap&&t.holdMs>0)throw new e(`INVALID_ARGS`,`double-tap cannot be combined with hold-ms`);if(t.doubleTap&&t.jitterPx>0)throw new e(`INVALID_ARGS`,`double-tap cannot be combined with jitter-px`)}function L(e,t){return t===`primary`?`Pressed (${e.x}, ${e.y})`:`${t===`secondary`?`Right`:`Middle`} clicked (${e.x}, ${e.y})`}export{T as n,E as t};
|
package/dist/src/tree.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ir as e}from"./sdk-batch.js";import"./rect-center.js";function t(e){let t=new Map;for(let n of e){if(typeof n.parentIndex!=`number`)continue;let e=t.get(n.parentIndex)??[];e.push(n),t.set(n.parentIndex,e)}return t}function n(e,t){let n=[],r=new Set([e.index]),i=[...t.get(e.index)??[]];for(;i.length>0;){let e=i.pop();if(!e||r.has(e.index))continue;r.add(e.index),n.push(e);let a=t.get(e.index);a&&i.push(...a)}return n}const r=new WeakMap;function i(e,t){if(!e[t])return[];let n=s(e)[t]??t+1;return e.slice(t+1,n)}function a(e,t,n){let r=s(e)[t]??t+1;for(let i=t+1;i<r;i+=1){let t=e[i];if(t&&n(t))return t}}function o(e,t,n){let r=s(e)[t]??t+1;for(let i=t+1;i<r;i+=1){let t=e[i];t&&n(t)}}function s(e){let t=r.get(e);if(t)return t;let n=Array(e.length),i=[];for(let[t,r]of e.entries()){let e=r?.depth??0;for(;i.length>0&&e<=i.at(-1).depth;){let e=i.pop();n[e.position]=t}i.push({depth:e,position:t})}for(let t of i)n[t.position]=e.length;return r.set(e,n),n}function c(e,t){let n=[],r=typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0,i=new Set;for(;r&&!i.has(r.index);)i.add(r.index),n.push(r),r=typeof r.parentIndex==`number`?t.get(r.parentIndex):void 0;return n}function l(e,t,n){for(let r of c(e,t))if(n(r))return r;return null}function u(e,t,n={}){return(n.includeSelf===!0&&m(e.type)?e:null)??l(e,t,e=>m(e.type))}function d(t,n){let r=e(t.type??``),i=t.label?.trim();return!!(p(t)||r===`other`&&!i&&!t.value||(r===`other`||r===`statictext`)&&i&&n.includes(i)||r===`image`)}function f(t){let n=e(t.type??``);return n===`button`||n===`link`||n===`switch`||n===`searchfield`||n===`textfield`}function p(t){return e(t.type??``)===`button`&&t.label?.trim()===`chevron`&&t.enabled===!1}function m(t){let n=e(t??``);return n===`collectionview`||n===`table`||n===`scrollview`||n===`scrollarea`}function h(t,n){let r=t.label?.trim();if(!r||r!==n)return!1;let i=e(t.type??``);return i===`other`||i===`statictext`||i===`link`}function g(e,t,n){e.set(t.index,v(y(e,t),n))}function _(e,t,n){let r=y(e,t);e.set(t.index,v(r,n(r)))}function v(e,t){let n={...e,...t};for(let[e,r]of Object.entries(t))r===void 0&&delete n[e];return n}function y(e,t){return e.get(t.index)??t}function b(t){let n;for(let r of t){let t=e(r.type??``);(t===`application`||t===`window`)&&S(r.rect,n)&&(n=r.rect)}return n}function x(e,t,n=.8){let r=C(e),i=C(t);return r>0&&i>0&&r/i>=n}function S(e,t){return!!(e&&(!t||C(e)>C(t)))}function C(e){return e?e.width*e.height:0}function w(e,t,n){let r=new Map(n.map(e=>[e.index,e])),i=new Map;for(let[t,n]of e.entries())i.set(n.index,t);return e.map((e,n)=>{let a=typeof e.parentIndex==`number`?i.get(e.parentIndex):void 0;return a===void 0&&typeof e.parentIndex==`number`&&(a=T(e.parentIndex,t,r,i)),{...e,index:n,parentIndex:a}})}function T(e,t,n,r){let i=e,a=new Set;for(;typeof i==`number`&&!a.has(i);){if(a.add(i),!t.has(i))return r.get(i);i=n.get(i)?.parentIndex}}export{_,b as a,o as c,h as d,m as f,d as g,w as h,a as i,p as l,g as m,i as n,l as o,f as p,n as r,u as s,t,x as u};
|
package/dist/src/tv-remote.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";const t={android:`longpress`,apple:`exact`,vega:`exact`},n={up:{aliases:[],androidKeyevent:`KEYCODE_DPAD_UP`,appleRemoteButton:`up`,vegaKey:`KEY_UP`},down:{aliases:[],androidKeyevent:`KEYCODE_DPAD_DOWN`,appleRemoteButton:`down`,vegaKey:`KEY_DOWN`},left:{aliases:[],androidKeyevent:`KEYCODE_DPAD_LEFT`,appleRemoteButton:`left`,vegaKey:`KEY_LEFT`},right:{aliases:[],androidKeyevent:`KEYCODE_DPAD_RIGHT`,appleRemoteButton:`right`,vegaKey:`KEY_RIGHT`},select:{aliases:[`ok`,`center`,`enter`],androidKeyevent:`KEYCODE_DPAD_CENTER`,appleRemoteButton:`select`,vegaKey:`KEY_ENTER`},menu:{aliases:[],androidKeyevent:`KEYCODE_MENU`,appleRemoteButton:`menu`,vegaKey:`KEY_MENU`},home:{aliases:[],androidKeyevent:`KEYCODE_HOME`,appleRemoteButton:`home`,vegaKey:`KEY_HOMEPAGE`},back:{aliases:[],androidKeyevent:`KEYCODE_BACK`,appleRemoteButton:`menu`,vegaKey:`KEY_BACK`}},r=Object.keys(n),i=`<${r.join(`|`)}>`;function a(t){let n=t?.toLowerCase();if(o(n))return n;let i=n?d.get(n):void 0;if(i)return i;throw new e(`INVALID_ARGS`,`tv-remote button must be one of: ${r.join(`, `)}.`)}function o(e){return typeof e==`string`&&r.includes(e)}function s(e){return n[e].appleRemoteButton}function c(e){return n[e].androidKeyevent}function l(e){return n[e].vegaKey}function u(e){return t[e]}const d=new Map(r.flatMap(e=>n[e].aliases.map(t=>[t,e])));export{s as a,c as i,i as n,l as o,a as r,u as s,r as t};
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{g as t,h as n,w as r}from"./sdk-device.js";import{Ar as i}from"./sdk-batch.js";const a={min:.01,max:1},o={flagKey:`screenshotMaxSize`,cliToken:`--max-size`,envVar:`AGENT_DEVICE_SCREENSHOT_MAX_SIZE`,publicOptionKey:`maxSize`,migration:{screenshot:`screenshot --max-size was removed; use --scale <0.01-1> (or AGENT_DEVICE_SCREENSHOT_SCALE) to downscale proportionally`,record:`record --max-size was removed; recordings capture at native resolution`}};function s(e,t){return t&&Object.hasOwn(t,o.flagKey)?o.migration[e]:void 0}function c(t,n){if(Object.hasOwn(n,o.publicOptionKey)||Object.hasOwn(n,o.flagKey))throw new e(`INVALID_ARGS`,o.migration[t])}const l={selectorInvalid:`CROP_SELECTOR_INVALID`,targetNotFound:`CROP_TARGET_NOT_FOUND`,targetAmbiguous:`CROP_TARGET_AMBIGUOUS`,captureUnreadable:`CROP_CAPTURE_UNREADABLE`,captureIncomplete:`CROP_CAPTURE_INCOMPLETE`,emptyIntersection:`CROP_EMPTY_INTERSECTION`,partialIntersection:`CROP_PARTIAL_INTERSECTION`,targetNotAccepted:`CROP_TARGET_NOT_ACCEPTED`,frameMismatch:`CROP_FRAME_MISMATCH`,pendingPixelIdentityEvidence:`PENDING_PIXEL_IDENTITY_EVIDENCE`},u={macOsHelperSurfaceFixedFrame:`SCREENSHOT_FULLSCREEN_MACOS_HELPER_SURFACE_FIXED_FRAME`},d=[`out`,`overlayRefs`,`screenshotCropOn`,`screenshotPixelDensity`,`screenshotFullscreen`,`screenshotScale`,`screenshotNoStabilize`,`screenshotNormalizeStatusBar`],f=[{key:`screenshotCropOn`,names:[`--crop-on`],type:`string`,usageLabel:`--crop-on <selector-expression>`,usageDescription:`Screenshot: crop the capture to the frame of the selector resolved on the same screen`,projectConfig:!1,recorded:!0},{key:`screenshotPixelDensity`,names:[`--pixel-density`],type:`int`,min:1,usageLabel:`--pixel-density <n>`,usageDescription:`Screenshot: output PNG pixel density in pixels per logical point (currently supported on iOS simulators)`,projectConfig:!0,recorded:!0},{key:`screenshotFullscreen`,names:[`--fullscreen`,`--full`,`-f`],type:`boolean`,usageLabel:`--fullscreen, --full, -f`,usageDescription:`Screenshot: on web capture the full page; on macOS app sessions capture the full desktop instead of the app window`,projectConfig:!0,recorded:!0},{key:`screenshotScale`,names:[`--scale`],type:`number`,min:a.min,max:a.max,usageLabel:`--scale <0.01-1>`,usageDescription:`Screenshot: resize both dimensions by this factor (or use AGENT_DEVICE_SCREENSHOT_SCALE)`,projectConfig:!0,recorded:!0},{key:`screenshotNoStabilize`,names:[`--no-stabilize`],type:`boolean`,usageLabel:`--no-stabilize`,usageDescription:`Screenshot: skip Android demo-mode/status-bar stabilization and settle delay for low-latency capture loops`,projectConfig:!0,recorded:!0},{key:`screenshotNormalizeStatusBar`,names:[`--normalize-status-bar`],type:`boolean`,usageLabel:`--normalize-status-bar`,usageDescription:`Screenshot: on iOS simulators temporarily normalize status-bar chrome for deterministic screenshot diffs`,projectConfig:!0,recorded:!0}],p=[{tokens:[`--fullscreen`,`--full`,`-f`],key:`screenshotFullscreen`},{tokens:[`--no-stabilize`],key:`screenshotNoStabilize`},{tokens:[`--normalize-status-bar`],key:`screenshotNormalizeStatusBar`}],ee=[{token:`--pixel-density`,key:`screenshotPixelDensity`,label:`screenshot --pixel-density`}],te=[{token:`--scale`,key:`screenshotScale`,label:`screenshot --scale`,min:a.min,max:a.max}],ne=[{token:`--crop-on`,key:`screenshotCropOn`,label:`screenshot --crop-on`}];function m(e){return b({overlayRefs:e?.overlayRefs,cropOn:e?.screenshotCropOn,pixelDensity:e?.screenshotPixelDensity,fullscreen:e?.screenshotFullscreen,scale:e?.screenshotScale,stabilize:!e?.screenshotNoStabilize&&void 0,normalizeStatusBar:e?.screenshotNormalizeStatusBar})}function h(e={}){return b({overlayRefs:e.overlayRefs,screenshotCropOn:e.screenshotCropOn??e.cropOn,screenshotPixelDensity:e.screenshotPixelDensity??e.pixelDensity,screenshotFullscreen:e.screenshotFullscreen??e.fullscreen,screenshotScale:e.screenshotScale,screenshotNoStabilize:e.screenshotNoStabilize??(e.stabilize===!1||void 0),screenshotNormalizeStatusBar:e.screenshotNormalizeStatusBar??e.normalizeStatusBar})}function g(e={}){return h({...e,screenshotScale:e.screenshotScale??e.scale})}function _(t){let{min:n,max:r}=a;if(t.scale!==void 0&&(!Number.isFinite(t.scale)||t.scale<n||t.scale>r))throw new e(`INVALID_ARGS`,`screenshot scale must be between ${n} and ${r}`)}function v(e,t){typeof t?.screenshotPixelDensity==`number`&&e.push(`--pixel-density`,String(t.screenshotPixelDensity)),t?.screenshotFullscreen&&e.push(`--fullscreen`),typeof t?.screenshotScale==`number`&&e.push(`--scale`,String(t.screenshotScale)),t?.screenshotNoStabilize&&e.push(`--no-stabilize`),t?.screenshotNormalizeStatusBar&&e.push(`--normalize-status-bar`)}function y(t){let{args:n,flags:r,index:i}=t,a=n[i];if(a===o.cliToken)throw new e(`INVALID_ARGS`,o.migration.screenshot);return x(a,r,i)??S({args:n,index:i,flags:r,token:a})??re({args:n,index:i,flags:r,token:a})??ie({args:n,index:i,flags:r,token:a})??{handled:!1}}function b(e){return Object.fromEntries(Object.entries(e).filter(e=>e[1]!==void 0))}function x(e,t,n){let r=p.find(t=>t.tokens.some(t=>t===e));if(r)return t[r.key]=!0,{handled:!0,nextIndex:n}}function S(t){let n=ee.find(e=>e.token===t.token);if(!n)return;let r=Number(t.args[t.index+1]);if(!Number.isInteger(r)||r<1)throw new e(`INVALID_ARGS`,`${n.label} requires a positive integer`);return t.flags[n.key]=r,{handled:!0,nextIndex:t.index+1}}function re(t){let n=te.find(e=>e.token===t.token);if(!n)return;let r=Number(t.args[t.index+1]);if(!Number.isFinite(r)||r<n.min||r>n.max)throw new e(`INVALID_ARGS`,`${n.label} requires a number from ${n.min} to ${n.max}`);return t.flags[n.key]=r,{handled:!0,nextIndex:t.index+1}}function ie(t){let n=ne.find(e=>e.token===t.token);if(!n)return;let r=t.args[t.index+1];if(typeof r!=`string`||r.length===0)throw new e(`INVALID_ARGS`,`${n.label} requires a selector expression`);return t.flags[n.key]=r,{handled:!0,nextIndex:t.index+1}}function C(t,n={message:e=>`Invalid value: ${e}`}){let r=new Set(t),i=n.normalize??(e=>e);return{is:e=>typeof e==`string`&&r.has(e),parse:t=>{let a=i(t??``);if(r.has(a))return a;throw new e(`INVALID_ARGS`,n.message(t??``))}}}const ae=[`up`,`down`,`left`,`right`,`top`,`bottom`],w=[`up`,`down`,`left`,`right`],oe=[`left`,`right`,`left-edge`,`right-edge`],se=[`one-way`,`ping-pong`],ce=1e4,le=6e4,ue=C(w,{message:e=>`Unknown direction: ${e}`}),T=.6;function de(e){let t=e.direction,n=t===`up`||t===`down`?e.referenceHeight:e.referenceWidth,r=I(e.amount),i=e.pixels===void 0?Math.round(n*r):L(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 E(e){I(e.amount),e.pixels!==void 0&&L(e.pixels)}function D(e,t){if(e===`left`||e===`right`){let n=k(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=M(j(t,n,50),t,8),a=M(j(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 O(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 k(e,t){let n=e===`left`||e===`up`,r=n?85:15,i=n?15:85,a=e===`up`||e===`down`,o=M(j(t,a?50:r,a?r:50),t,8),s=M(j(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 A(e){let t=P(e);if(t)return{referenceWidth:t.width,referenceHeight:t.height}}function j(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 M(e,t,n){return{x:R(e.x,n,t.referenceWidth),y:R(e.y,n,t.referenceHeight)}}function N(e){return ue.parse(e)}function P(e){let t=e.filter(e=>i(e)&&F(e.rect)).map(e=>e.rect).sort((e,t)=>(t?.width??0)*(t?.height??0)-(e?.width??0)*(e?.height??0))[0];if(t)return t;let n=e.map(e=>e.rect).filter(F);if(n.length===0)return;let r=Math.max(...n.map(e=>e.x+e.width)),a=Math.max(...n.map(e=>e.y+e.height));if(!(r<=0||a<=0))return{x:0,y:0,width:r,height:a}}function F(e){return!!e&&e.width>0&&e.height>0}function I(t){if(t===void 0)return T;if(!Number.isFinite(t)||t<=0)throw new e(`INVALID_ARGS`,`scroll amount must be a positive number`);return t}function L(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 R(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 z=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 B(e,t){if(!H(e)||!H(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 V(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,...z})}function H(e){return[e.x,e.y,e.width,e.height].every(e=>Number.isFinite(e))&&e.width>0&&e.height>0}const fe=1e4;function pe(e){return e?{message:e}:{}}function me(e,t){return t?{...e,message:t}:e}function he(e){return typeof e?.message==`string`&&e.message.length>0?e.message:null}function ge(e){let t=e?.warnings;return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}function _e(e){let t=e.trim().toLowerCase();return t?/^(vertical|horizontal)\s+scroll\s+bar(?:,?\s*\d+\s+pages?)?$/.test(t):!1}function ve(e,t){if(!(e?.trim().toLowerCase()??``).includes(`vertical scroll bar`))return null;let n=ye(t);return n===null?null:n<=1?{above:!1,below:!0}:n>=99?{above:!0,below:!1}:{above:!0,below:!0}}function ye(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}const be=1e4,xe=.65;function Se(e,t){return{...e,releaseBehavior:t===void 0?`controlled`:`inertial`}}function Ce(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 we(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 Te(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 Ee(e){return typeof e?.pixels==`number`?e.pixels:void 0}function De(e){return typeof e?.durationMs==`number`?e.durationMs:void 0}function Oe(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}const ke=[`android`,`harmonyos`,`apple`,`vega`,`linux`];function Ae(e){let{booted:t,kind:n,...r}=e;return r}const je={platform:`web`,id:`agent-browser-chrome`,name:`Agent Browser Chrome`,kind:`device`,target:`desktop`,booted:!0};function Me(e){let t=Pe();for(let n of e){let e=Fe(n);t[e].available+=1,n.booted===!0&&(t[e].booted+=1)}return t}function Ne(e,t){return e.filter(e=>r(e,t.platform)&&(t.target===void 0||(e.target??`mobile`)===t.target)&&(t.kind===void 0||e.kind===t.kind)&&(t.booted===void 0||e.booted===t.booted))}function Pe(){return{android:{available:0,booted:0},harmonyos:{available:0,booted:0},apple:{available:0,booted:0},vega:{available:0,booted:0},linux:{available:0,booted:0},web:{available:0,booted:0}}}function Fe(e){return n(e)||t(e)?`apple`:e.platform}const Ie=new Set([`DEVICE_CLAIM_LIVE_OWNER`,`DEVICE_CLAIM_RECOVERY_PENDING`,`DEVICE_CLAIM_OWNER_UNCERTAIN`]);function Le(e){return Ie.has(e)}const Re=`native-panel`,W=[`portrait`,`portrait-upside-down`,`landscape-left`,`landscape-right`],G={portrait:0,"landscape-left":1,"portrait-upside-down":2,"landscape-right":3};function ze(e){return W.find(t=>G[t]===e)}function Be(e){return typeof e==`string`&&W.includes(e)}function Ve(e){return G[e]*90}function He(e){return G[e]%2==0?`PORTRAIT`:`LANDSCAPE`}function Ue(t){if(t===void 0)throw new e(`INVALID_ARGS`,`orientation requires an orientation argument. Use portrait|portrait-upside-down|landscape-left|landscape-right.`);switch(t?.trim().toLowerCase()){case`portrait`:return`portrait`;case`portrait-upside-down`:case`upside-down`:return`portrait-upside-down`;case`landscape-left`:case`left`:return`landscape-left`;case`landscape-right`:case`right`:return`landscape-right`;default:throw new e(`INVALID_ARGS`,`Invalid rotation: ${t}. Use portrait|portrait-upside-down|landscape-left|landscape-right.`)}}const We=[`closed`,`half-open`,`open`],K=`closed|half-open|open`;function Ge(e){if(Number.isFinite(e))return e<=Ke?`closed`:e>=qe?`open`:`half-open`}const Ke=1,qe=179;function q(t){if(t===void 0)throw new e(`INVALID_ARGS`,`fold requires a pose argument. Use ${K}.`);switch(t.trim().toLowerCase()){case`closed`:case`close`:case`fold`:case`folded`:return`closed`;case`half-open`:case`half`:case`half-unfolded`:case`partially-open`:case`book`:return`half-open`;case`open`:case`unfold`:case`unfolded`:case`fully-open`:case`flat`:return`open`;default:throw new e(`INVALID_ARGS`,`Invalid fold pose: ${t}. Use ${K}.`)}}const J=6e4;function Je(t){if(t.keyframes===void 0){if(t.pose===void 0)throw new e(`INVALID_ARGS`,`fold requires a pose or keyframes`);if(typeof t.pose!=`string`)throw new e(`INVALID_ARGS`,`fold pose must be a string`);return{pose:q(t.pose)}}if(t.pose!==void 0)throw new e(`INVALID_ARGS`,`fold accepts either pose or keyframes`);return{keyframes:Y(t.keyframes)}}function Y(t){if(!Array.isArray(t)||t.length<2||t.length>64)throw new e(`INVALID_ARGS`,`fold requires 2–64 keyframes`);let n=t.map(Ye);if(n[0].atMs!==0||n.some((e,t)=>t>0&&e.atMs<=n[t-1].atMs))throw new e(`INVALID_ARGS`,`Fold keyframes must start at 0ms and increase strictly`);return n}function X(e,t){return typeof e==`number`&&Number.isFinite(e)&&e>=0&&e<=t}function Ye(t){if(!t||typeof t!=`object`||Array.isArray(t))throw new e(`INVALID_ARGS`,`Each fold keyframe requires atMs and angle`);let{atMs:n,angle:r}=t;if(Object.keys(t).some(e=>e!==`atMs`&&e!==`angle`))throw new e(`INVALID_ARGS`,`Fold keyframes only accept atMs and angle`);if(!X(n,6e4)||!Number.isSafeInteger(n))throw new e(`INVALID_ARGS`,`Fold keyframe times must be integers from 0 to ${J}ms`);if(!X(r,180))throw new e(`INVALID_ARGS`,`Fold keyframe angles must be finite numbers from 0 to 180`);return{atMs:n,angle:r}}function Xe(t){let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`--keyframes requires a JSON array of {atMs, angle} objects`)}return Y(n)}const Ze={android:`longpress`,apple:`exact`,vega:`exact`},Z={up:{aliases:[],androidKeyevent:`KEYCODE_DPAD_UP`,appleRemoteButton:`up`,vegaKey:`KEY_UP`},down:{aliases:[],androidKeyevent:`KEYCODE_DPAD_DOWN`,appleRemoteButton:`down`,vegaKey:`KEY_DOWN`},left:{aliases:[],androidKeyevent:`KEYCODE_DPAD_LEFT`,appleRemoteButton:`left`,vegaKey:`KEY_LEFT`},right:{aliases:[],androidKeyevent:`KEYCODE_DPAD_RIGHT`,appleRemoteButton:`right`,vegaKey:`KEY_RIGHT`},select:{aliases:[`ok`,`center`,`enter`],androidKeyevent:`KEYCODE_DPAD_CENTER`,appleRemoteButton:`select`,vegaKey:`KEY_ENTER`},menu:{aliases:[],androidKeyevent:`KEYCODE_MENU`,appleRemoteButton:`menu`,vegaKey:`KEY_MENU`},home:{aliases:[],androidKeyevent:`KEYCODE_HOME`,appleRemoteButton:`home`,vegaKey:`KEY_HOMEPAGE`},back:{aliases:[],androidKeyevent:`KEYCODE_BACK`,appleRemoteButton:`menu`,vegaKey:`KEY_BACK`}},Q=Object.keys(Z),$=`<${Q.join(`|`)}>`;function Qe(t){let n=t?.toLowerCase();if($e(n))return n;let r=n?it.get(n):void 0;if(r)return r;throw new e(`INVALID_ARGS`,`tv-remote button must be one of: ${Q.join(`, `)}.`)}function $e(e){return typeof e==`string`&&Q.includes(e)}function et(e){return Z[e].appleRemoteButton}function tt(e){return Z[e].androidKeyevent}function nt(e){return Z[e].vegaKey}function rt(e){return Ze[e]}const it=new Map(Q.flatMap(e=>Z[e].aliases.map(t=>[t,e])));export{E as $,be as A,he as B,ke as C,Le as D,Ne as E,Oe as F,T as G,pe as H,Te as I,z as J,w as K,Se as L,we as M,De as N,Ae as O,Ee as P,le as Q,ve as R,q as S,_ as St,Me as T,me as U,ge as V,fe as W,ce as X,se as Y,oe as Z,Ge as _,s as _t,et as a,A as at,Je as b,m as bt,W as c,C as ct,K as d,l as dt,k as et,Re as f,u as ft,Ve as g,y as gt,He as h,v as ht,tt as i,O as it,Ce as j,xe as k,G as l,o as lt,ze as m,f as mt,$ as n,D as nt,nt as o,N as ot,J as p,a as pt,ae as q,Qe as r,B as rt,rt as s,V as st,Q as t,de as tt,We as u,d as ut,Be as v,h as vt,je as w,Xe as x,c as xt,Ue as y,g as yt,_e as z};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{H as t}from"./tv-remote.js";import{qt as n}from"./sdk-batch.js";import{g as r}from"./selector-pipeline-policy.js";import{a as i,s as a}from"./internal/daemon.js";function o(e){let t=e?.trim().split(/\s+/,1)[0];if(!t||!t.startsWith(`@`)||t.length<3)return null;let n=t.slice(1);return/^[A-Za-z_-]*\d[\w-]*$/i.test(n)||/^(?:ref|node|element|el)[\w-]*$/i.test(n)?t:null}async function s(e){let t=await a({command:`type`,device:e.device,use:n,inspectFacts:e.inspectFacts,platformServices:e.platformServices,bindDevice:e.bindDevice});if(t.type===`response`)return{ok:!1,response:t.response};let r=t.runtime;return{ok:!0,typeText:async(e,t)=>await c(r,e,t)}}async function c(n,i,a){let s=o(i[0]);if(s)throw new e(`INVALID_ARGS`,`type does not accept a target ref like "${s}"`,{hint:`Use fill ${s} "text" to target that field, or press ${s} then type "text" to append.`});let c=i.join(` `);if(!c)throw new e(`INVALID_ARGS`,`type requires text`);let u=r(a.delayMs??0,`delay-ms`,0,1e4),d=(await n.operations.typeText(l(c,u,a)))?.textEntryRoute;return{...d===void 0?{}:{textEntryRoute:d},text:c,delayMs:u,...t(`Typed ${Array.from(c).length} chars`)}}function l(e,t,n){return{text:e,delayMs:t,...n.appBundleId===void 0?{}:{options:{appBundleId:n.appBundleId}},execution:i(n)}}export{s as n,c as t};
|