agent-device 0.21.23 → 0.21.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -6
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.23.apk → 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 +1 -0
- package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.23.manifest.json → agent-device-android-ime-helper-0.21.24.manifest.json} +4 -4
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.23.apk → 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 +1 -0
- package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.23.manifest.json → agent-device-android-snapshot-helper-0.21.24.manifest.json} +6 -6
- package/apple/macos-helper/Sources/AgentDeviceMacOSHelper/SnapshotTraversal.swift +12 -6
- package/apple/macos-helper/Tests/AgentDeviceMacOSHelperTests/RectResponseTests.swift +21 -0
- package/apple/snapshot-bridge/README.md +9 -7
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandDispatch.swift +56 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +14 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +8 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +12 -0
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCaptureTarget.swift +1 -1
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotExecution.swift +29 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntry.swift +34 -10
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextEntryFocus.swift +19 -5
- package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+TextTyping.swift +3 -3
- package/dist/src/adapter.js +1 -1
- package/dist/src/adb.js +1 -1
- 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-device-client.js +2 -2
- package/dist/src/alert-runtime.js +1 -1
- package/dist/src/alert.js +1 -1
- package/dist/src/android-adb.d.ts +3 -2
- package/dist/src/android-input-ownership.js +1 -1
- package/dist/src/app-backend.js +1 -1
- package/dist/src/app-inventory.d.ts +4 -0
- package/dist/src/app-launch.js +1 -1
- package/dist/src/app-lifecycle.js +1 -1
- package/dist/src/app-log-runtime2.js +3 -3
- package/dist/src/app-resolution.js +2 -2
- package/dist/src/app-state-runtime.d.ts +15 -0
- package/dist/src/apple-runner-platform.js +1 -1
- package/dist/src/application-lifecycle-interaction.js +1 -1
- package/dist/src/aws-device-farm-connection.js +1 -0
- package/dist/src/back-mode.js +1 -1
- package/dist/src/backend-snapshot-options.js +1 -1
- package/dist/src/browserstack-connection.js +1 -0
- package/dist/src/browserstack-device-features.js +1 -0
- package/dist/src/browserstack.js +1 -0
- package/dist/src/cache.js +1 -1
- package/dist/src/cli-config.js +1 -1
- package/dist/src/cli-help.js +35 -19
- package/dist/src/cli-runner.js +1 -1
- package/dist/src/cli.js +3 -4
- package/dist/src/client-companion-tunnel.js +1 -0
- package/dist/src/client-metro-companion.js +1 -1
- package/dist/src/client-metro.js +1 -1
- package/dist/src/client-types.d.ts +7 -5
- package/dist/src/cloud-artifacts.d.ts +3 -2
- package/dist/src/command-metadata.js +1 -1
- package/dist/src/command-schema.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 -0
- package/dist/src/connection.js +5 -5
- package/dist/src/contracts.d.ts +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-transport.js +1 -1
- package/dist/src/daemon-http.js +1 -1
- package/dist/src/daemon-policy-file.js +1 -1
- package/dist/src/daemon-registration-owner.js +1 -1
- package/dist/src/device-claim-inspection.js +1 -1
- package/dist/src/device-input-state.d.ts +2 -15
- package/dist/src/device-readiness-runtime.js +1 -1
- package/dist/src/device-selection-resolver.js +1 -1
- package/dist/src/device.js +1 -1
- package/dist/src/device2.js +1 -1
- package/dist/src/device3.js +1 -1
- package/dist/src/dispatch-resolve.js +3 -3
- 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/exec.js +1 -1
- package/dist/src/file.js +1 -1
- package/dist/src/find.js +1 -1
- package/dist/src/finders.js +1 -1
- package/dist/src/format.js +2 -1
- package/dist/src/gesture-admission.js +1 -1
- package/dist/src/gesture-plan-types.d.ts +2 -5
- package/dist/src/gesture-runtime.js +1 -1
- package/dist/src/human-control.js +1 -1
- package/dist/src/ime-rebind.js +1 -1
- package/dist/src/ime-settings-record.js +1 -0
- package/dist/src/ime-state.js +1 -1
- package/dist/src/index.d.ts +3 -3
- package/dist/src/input-actions.js +1 -1
- package/dist/src/input-actions2.js +1 -1
- package/dist/src/install-source2.js +1 -1
- package/dist/src/interaction-positionals.js +1 -1
- package/dist/src/interaction-ref-policy.js +1 -1
- package/dist/src/interaction.js +1 -1
- package/dist/src/interaction2.js +1 -1
- package/dist/src/interactor.js +5 -5
- package/dist/src/interactors.js +1 -1
- package/dist/src/internal/bin.js +1 -1
- package/dist/src/internal/daemon.js +1 -1
- package/dist/src/inventory2.js +1 -1
- package/dist/src/ios-snapshot-acquisition.js +1 -1
- package/dist/src/ios-snapshot-engine.js +1 -1
- package/dist/src/ios-snapshot-runtime.js +1 -1
- package/dist/src/launch-confirmation.js +1 -1
- package/dist/src/lease-scope.js +1 -1
- package/dist/src/lease.js +1 -1
- package/dist/src/limrun.d.ts +4 -555
- package/dist/src/load.js +1 -1
- package/dist/src/local-interactor-operation-set.js +1 -1
- package/dist/src/managed-device-scope.js +1 -1
- package/dist/src/manifest.js +1 -0
- package/dist/src/mechanics.js +16 -16
- package/dist/src/mobile-snapshot-semantics.js +1 -1
- package/dist/src/observation.js +1 -2
- package/dist/src/overlay.js +3 -3
- package/dist/src/owner-identity.js +3 -3
- package/dist/src/perf-facade.js +1 -1
- package/dist/src/perf-runtime-plan.js +1 -1
- package/dist/src/perf-target.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-open-target.js +1 -1
- package/dist/src/platform-runtime-operation-host.js +4 -4
- package/dist/src/platform-runtime-runtime-hints.js +1 -1
- package/dist/src/platform-runtime-screen-recording-finalizer-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 -0
- package/dist/src/plugins/webdriver.d.ts +111 -0
- package/dist/src/plugins/webdriver.js +1 -0
- package/dist/src/plugins.d.ts +2 -1
- package/dist/src/plugins2.js +1 -1
- package/dist/src/process-exit.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-device-runtime.d.ts +556 -0
- package/dist/src/provider-policy.js +1 -0
- package/dist/src/provider-profile-fields.js +1 -1
- package/dist/src/provider-webdriver.js +1 -2
- package/dist/src/providers.js +1 -1
- package/dist/src/react-devtools.js +2 -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 +1 -1
- package/dist/src/registry.js +24 -24
- package/dist/src/remote-bridge.js +1 -0
- package/dist/src/remote-config-core.js +1 -0
- package/dist/src/remote-config.js +1 -1
- package/dist/src/remote-config2.js +1 -1
- package/dist/src/remote-connection-state.js +1 -0
- package/dist/src/replay.js +2 -2
- package/dist/src/request-admission.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/retry2.js +1 -0
- package/dist/src/runner-artifact-manifest.js +1 -1
- package/dist/src/runner-cache-metadata.js +2 -3
- package/dist/src/runner-cache-retention.js +1 -0
- package/dist/src/runner-cache-trim.js +1 -0
- 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 -0
- package/dist/src/runner-disposal.js +1 -1
- package/dist/src/runner-error-classification.js +1 -1
- package/dist/src/runner-exchange.js +1 -1
- package/dist/src/runner-lease.js +1 -0
- package/dist/src/runner-operations-facade.js +1 -1
- package/dist/src/runner-session-types.js +1 -1
- package/dist/src/runner-start-budget.js +1 -1
- package/dist/src/runner-toolchain-probe.js +2 -0
- package/dist/src/runner.js +1 -1
- package/dist/src/runtime-deployment.js +1 -0
- package/dist/src/runtime.js +1 -1
- package/dist/src/runtime10.js +1 -2
- package/dist/src/runtime11.js +2 -0
- package/dist/src/runtime2.js +2 -5
- package/dist/src/runtime3.js +5 -1
- package/dist/src/runtime4.js +1 -5
- package/dist/src/runtime5.js +5 -1
- package/dist/src/runtime6.js +1 -1
- package/dist/src/runtime7.js +1 -1
- package/dist/src/runtime8.js +1 -1
- package/dist/src/runtime9.js +1 -1
- package/dist/src/screen-recording-transport.js +1 -1
- package/dist/src/screenshot-density.js +1 -1
- package/dist/src/screenshot3.js +2 -2
- package/dist/src/script.js +1 -1
- package/dist/src/scroll-gesture.js +1 -1
- package/dist/src/sdk-batch.js +2 -2
- package/dist/src/sdk-contracts.d.ts +20 -29
- package/dist/src/sdk-contracts.js +2 -2
- package/dist/src/sdk-device.js +1 -1
- package/dist/src/sdk-finders.d.ts +1 -1
- package/dist/src/sdk-finders.js +1 -1
- package/dist/src/sdk-remote-config.d.ts +4 -0
- package/dist/src/sdk-remote-config.js +1 -1
- package/dist/src/sdk-selectors.d.ts +1 -1
- 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-snapshot.js +1 -1
- package/dist/src/session2.js +5 -5
- package/dist/src/simctl.js +1 -1
- package/dist/src/simulator-boot.js +1 -1
- package/dist/src/simulator-state.js +1 -1
- package/dist/src/simulator.js +1 -1
- package/dist/src/snapshot-capture-annotations.js +1 -1
- package/dist/src/snapshot-desktop-projection.js +1 -1
- package/dist/src/snapshot-private-evidence.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/snapshot4.js +1 -1
- package/dist/src/src2.js +1 -1
- package/dist/src/src3.js +1 -1
- package/dist/src/src4.js +1 -1
- package/dist/src/src5.js +1 -1
- package/dist/src/src6.js +1 -1
- package/dist/src/src7.js +1 -1
- package/dist/src/src8.js +20 -20
- package/dist/src/store.js +1 -1
- 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-runtime2.js +1 -1
- package/dist/src/tree.js +1 -1
- package/dist/src/type-text-runtime.js +1 -1
- package/dist/src/video.js +1 -1
- package/package.json +15 -10
- package/server.json +2 -2
- package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.23.apk.sha256 +0 -1
- package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.23.apk.sha256 +0 -1
- package/dist/src/capabilities.js +0 -1
- package/dist/src/compatibility-policy.js +0 -1
- package/dist/src/daemon-artifacts.js +0 -1
- package/dist/src/device-claim-rule.js +0 -1
- package/dist/src/human-control-contract.js +0 -1
- package/dist/src/prepare-kind.js +0 -1
- package/dist/src/provider-device-runtimes.js +0 -1
- package/dist/src/screen-recording-admission-ledger.js +0 -1
- package/dist/src/screenshot-runtime.js +0 -1
- package/dist/src/session-routing.js +0 -1
- package/dist/src/session-runtime-admission.js +0 -1
- package/dist/src/timeouts.js +0 -1
- package/dist/src/touch-reference-frame.js +0 -1
- package/dist/src/vars.js +0 -2
- package/dist/src/viewport.js +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{
|
|
2
|
-
`);o=t.pop()??``;for(let e of t)await
|
|
3
|
-
`);return d<0?``:u.slice(d+1)}function
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{v as t}from"./sdk-batch-runner.js";import{r as n}from"./diagnostics.js";import"./diagnostics2.js";import{N as r,g as i,h as a,y as o}from"./sdk-device.js";import{n as s}from"./session.js";import{E as c}from"./owner-identity.js";import{i as l,r as u}from"./verified-file.js";import{d,g as ee,l as te}from"./exec.js";import"./file.js";import"./command.js";import"./process.js";import{t as f}from"./platform-runtime-android-mechanics.js";import{t as p}from"./perf-runtime.js";import{a as ne,n as re}from"./durable-resource.js";import{n as ie}from"./async-lifecycle.js";import{m}from"./src7.js";import{r as ae}from"./device-inventory-context.js";import{t as oe}from"./app-log-files.js";import{n as h,r as g,t as _}from"./platform-runtime-app-log-process.js";import{createTemporaryTextFile as se,n as ce,r as le,t as ue}from"./platform-runtime-host.js";import{i as v,n as y,t as b}from"./platform-runtime-screen-recording-process-host.js";import x from"node:fs";import{setTimeout as de}from"node:timers/promises";async function fe(e,t){t=S(e,t),oe(t);let n=u(t),r;try{r=x.createWriteStream(t,{fd:n,autoClose:!0})}catch(e){throw x.closeSync(n),e}let i;r.on(`error`,e=>{i??=e});let a=me(),o=``,s=Promise.resolve(),c,l=e=>{let t=s.then(e);return s=t.catch(()=>void 0),t},d=async e=>{let t=`${o}${e}`.split(`
|
|
2
|
+
`);o=t.pop()??``;for(let e of t)await w(r,C(`${e}\n`,a))};return{write:async e=>await l(async()=>await d(he(e))),[Symbol.asyncDispose]:async()=>{c??=l(async()=>{if(o&&=(await w(r,C(o,a)),``),await ge(r),i)throw i}),await c}}}async function pe(e,t,n){if(t=S(e,t),!Number.isInteger(n)||n<1||n>1048576)throw TypeError(`App-log tail size must be between 1 byte and 1 MiB`);let r=l(t);if(r===void 0)return``;let i=x.fstatSync(r).size,a=Math.min(i,n),o=i-a,s=+(o>0),c=Buffer.alloc(a+s);try{x.readSync(r,c,0,c.length,o-s)}finally{x.closeSync(r)}let u=c.subarray(s).toString(`utf8`);if(s===0||c[0]===10)return u;let d=u.indexOf(`
|
|
3
|
+
`);return d<0?``:u.slice(d+1)}function S(e,t){return g({sessionsDir:e,pathname:t,basename:`app.log`,label:`App-log output`})}function me(){return(process.env.AGENT_DEVICE_APP_LOG_REDACT_PATTERNS??``).split(`,`).map(e=>e.trim()).filter(Boolean).flatMap(e=>{try{return[new RegExp(e,`gi`)]}catch{return[]}})}function C(e,t){return t.reduce((e,t)=>e.replace(t,`[REDACTED]`),e)}function he(e){return typeof e==`string`?e:Buffer.from(e).toString(`utf8`)}async function w(e,t){t&&await new Promise((n,r)=>{e.write(t,e=>e?r(e):n())})}async function ge(e){e.closed||await new Promise((t,n)=>{e.once(`error`,n),e.end(()=>{e.off(`error`,n),t()})})}function T(e){return Object.freeze({appLogs:Object.freeze({resolveSession:e.resolveSessionArtifacts,readRecent:async(t,n)=>{let{outputPath:r}=e.resolveSessionArtifacts(t);return E(r,n)},readProcessMarker:async t=>{let{pidPath:n}=e.resolveSessionArtifacts(t);return await e.processes.readMarker(n)}}),networkTransports:Object.freeze({resolve:e.resolveTransport})})}function E(e,t){if(!Number.isInteger(t)||t<1||t>2e4)throw TypeError(`Network app-log scan lines must be between 1 and 20000`);let n=l(e);if(n===void 0)return Object.freeze({path:e,exists:!1,text:``,skippedLines:0});try{let r=D(x.readFileSync(n,`utf8`),t);return Object.freeze({path:e,exists:!0,...r})}finally{x.closeSync(n)}}function D(e,t){let n=e.split(`
|
|
4
4
|
`),r=Math.max(0,n.length-t);return Object.freeze({text:n.slice(r).join(`
|
|
5
|
-
`),skippedLines:r})}function D(e={}){let t=Object.freeze({resolve:async e=>{let{createAndroidScreenRecordingTransport:t}=await import(`./platform-runtime-screen-recording-android-host.js`);return await t(e)}}),n=Object.freeze({resolve:async e=>{let{resolveWebScreenRecordingTransport:t}=await import(`./platform-runtime-screen-recording-web-host.js`);return await t(e)}}),r=Object.freeze({prepare:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);await t().prepare(e)},copy:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);await t().copy(e)},remove:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);return await t().remove(e)}}),i=Object.freeze({sniff:async e=>{let{createScreenRecordingFinalizer:t}=await import(`./platform-runtime-screen-recording-finalizer-host.js`);await t().sniff(e)},complete:async(e,t)=>{let{createScreenRecordingFinalizer:n}=await import(`./platform-runtime-screen-recording-finalizer-host.js`);return await n().complete(e,t)}}),a=e.ownedProcesses??Object.freeze({replace:()=>{},clear:()=>{}});return Object.freeze({apple:O(),android:t,harmony:k(),web:n,outputs:r,finalize:i,ownedProcesses:a})}function O(){let e=async()=>{let{createAppleScreenRecordingHost:e}=await import(`./platform-runtime-screen-recording-apple-host.js`);return e()};return Object.freeze({availability:async t=>(await e()).availability(t),runRunner:async(t,n,r)=>await(await e()).runRunner(t,n,r),startSimulator:async(t,n,r)=>await(await e()).startSimulator(t,n,r),inspectProcess:async t=>await(await e()).inspectProcess(t),terminateProcess:async t=>await(await e()).terminateProcess(t),inspectRunner:async(t,n,r)=>await(await e()).inspectRunner(t,n,r),retrieveRunnerRecording:async(t,n,r,i)=>await(await e()).retrieveRunnerRecording(t,n,r,i),captureClockAnchor:async(t,n,r)=>await(await e()).captureClockAnchor(t,n,r),isRunnerBundleId:async t=>await(await e()).isRunnerBundleId(t)})}function k(){let e=async()=>{let{createHarmonyScreenRecordingHost:e}=await import(`./platform-runtime-screen-recording-harmony-host.js`);return e()};return Object.freeze({start:async(t,n,r)=>await(await e()).start(t,n,r),stop:async(t,n)=>await(await e()).stop(t,n),findMedia:async(t,n,r)=>await(await e()).findMedia(t,n,r),stageMedia:async(t,n,r)=>await(await e()).stageMedia(t,n,r),stagedFileSize:async(t,n,r)=>await(await e()).stagedFileSize(t,n,r),pull:async(t,n,r)=>await(await e()).pull(t,n,r),remove:async(t,n,r)=>await(await e()).remove(t,n,r),removeMedia:async(t,n,r)=>await(await e()).removeMedia(t,n,r)})}function A(e={}){let t=e.ownedProcesses??Object.freeze({replace:()=>{},clear:()=>{}});return Object.freeze({hostCapture:Object.freeze({info:Object.freeze({source:`system-audio`,backend:`macos-screencapturekit`,sourceCount:1,notes:j}),start:async e=>{let{startMacOsAudioProbeProcess:t}=await import(`./macos-facade.js`),n=await t(e),r=await b(n.child.pid??void 0);return Object.freeze({...r===void 0?{}:{marker:r},wait:n.wait,terminate:async()=>{n.child.kill(`SIGTERM`),await n.wait.catch(()=>{})}})},inspectProcess:async e=>x(e),terminateProcess:async e=>await y([e])}),web:Object.freeze({resolve:async e=>{if(e.platform!==`web`)return;let{resolveWebProvider:t}=await import(`./src6.js`).then(e=>e.i),n=await t(),r=n.probeAudio?.bind(n);if(r)return Object.freeze({probe:async e=>await r({action:e.action,durationMs:e.durationMs,bucketMs:e.bucketMs})})}}),ownedProcesses:t})}function j(e){return[`Audio probe samples host system audio through ScreenCaptureKit for this ${a(e)?`iOS simulator`:e.platform===`android`?`Android emulator`:`macOS session`}; it is not app-instrumented audio.`,`Screen Recording permission is required for host system audio capture.`,`Other audible host apps can contribute to the measured buckets.`]}const M=f,N=async()=>await import(`./perf-facade.js`),P=Object.freeze({resourceKind:p,version:1,encode:e=>e,decode:Te});async function F(t,n,r){if(r.kind!==`xctrace`)throw H(`Apple`,`xctrace`,r.kind);let i=r.template??(r.mode===`cpu-profile`?`Time Profiler`:`Animation Hitches`),a=await N(),o=await a.startAppleXctracePerfCapture({device:t,appBundleId:r.appId,mode:r.mode,template:i,outPath:r.outPath}),s=await b(o.child.pid??void 0);if(!s)throw await a.cleanupAppleXctracePerfCapture(o).catch(()=>{}),new e(`COMMAND_FAILED`,`Apple xctrace exposed no exact process identity`);return L(t,n,r,{family:`apple`,marker:s,capture:Ce(o)},_e(o),z(`started`,o))}async function I(e,t,n){let r=await M(),i;if(n.mode===`cpu-profile`){if(n.kind!==`simpleperf`)throw H(`Android`,`simpleperf`,n.kind);i=await r.startAndroidSimpleperfProfile(e,n.appId,n.outPath)}else{if(n.kind!==`perfetto`)throw H(`Android`,`perfetto`,n.kind);i=await r.startAndroidPerfettoTrace(e,n.appId,n.outPath)}return L(e,t,n,{family:`android`,capture:i},ve(e,i),B(i))}function L(e,t,n,i,a,o){return Object.freeze({pendingHandle:new te(a),envelope:h({resourceKind:p,sessionId:n.sessionId,device:r(e),owner:t,fence:n.fence,lifecycle:`open`,descriptor:m(P,i)}),response:o})}function _e(e){return R({initialOutPath:e.outPath,inspect:()=>z(`started`,e),finish:async t=>await N().then(async n=>z(`stopped`,await n.stopAppleXctracePerfCapture(e,t))),cleanup:async()=>await N().then(async t=>{await t.cleanupAppleXctracePerfCapture(e)})})}function ve(e,t){return R({initialOutPath:t.outPath,inspect:()=>B(t),finish:async n=>{let r=await M();return B(t.kind===`simpleperf`?await r.stopAndroidSimpleperfProfile(e,t,n):await r.stopAndroidPerfettoTrace(e,t,n))},cleanup:async()=>{await(await M()).cleanupAndroidNativePerfSession(e,t)}})}function R(e){let t=e.initialOutPath,n,r,i=async()=>await e.cleanup().then(()=>({status:`cleaned`}),V);return Object.freeze({inspect:e.inspect,setOutputPath:e=>{t=e},finish:async()=>n??=e.finish(t).then(e=>({status:`completed`,result:e}),e=>{throw n=void 0,e}),forceCleanup:async()=>r??=i(),[Symbol.asyncDispose]:async()=>{we(await(r??=i()))}})}async function ye(e){let t=g(e,P);if(t.status!==`decoded`||t.descriptor.family!==`apple`)return{status:`cleanup-pending`,reason:`manual-recovery-required`};let n=await x(t.descriptor.marker);if(n===`ownership-lost`)return{status:`cleanup-pending`,reason:`ownership-fence-lost`};if(n===`missing`)return{status:`already-missing`};let r=await y([t.descriptor.marker]);return r===`terminated`?{status:`cleaned`}:r===`already-missing`?{status:`already-missing`}:{status:`cleanup-pending`,reason:`ownership-fence-lost`}}async function be(e){let t=g(e,P);if(t.status!==`decoded`)return t;if(t.descriptor.family!==`apple`)return{status:`unreattachable`,reason:`descriptor-invalid`};let n=await x(t.descriptor.marker);return n===`owned-alive`?{status:`unreattachable`,reason:`transport-not-reattachable`}:n===`ownership-lost`?{status:`unreattachable`,reason:`ownership-fence-lost`}:{status:`missing`}}async function xe(e){let t=g(e,P);return t.status===`decoded`?t.descriptor.family===`android`?{status:`unreattachable`,reason:`transport-not-reattachable`}:{status:`unreattachable`,reason:`descriptor-invalid`}:t}async function Se(e,t){let n=g(t,P);if(n.status!==`decoded`||n.descriptor.family!==`android`)return{status:`cleanup-pending`,reason:`manual-recovery-required`};try{return await(await M()).cleanupAndroidNativePerfSession(e,n.descriptor.capture),{status:`cleaned`}}catch(e){return V(e)}}function Ce(e){let{child:t,wait:n,...r}=e;return r}function z(e,t){return{perf:e,kind:t.kind,mode:t.mode,template:t.template,outPath:t.outPath,appBundleId:t.appBundleId,deviceId:t.deviceId,platform:t.platform,targetPids:t.targetPids,targetProcesses:t.targetProcesses,startedAt:t.startedAt,endedAt:t.endedAt}}function B(e){let t={action:e.action,platform:`android`,type:e.type,packageName:e.packageName,appPid:e.appPid,profilerPid:e.profilerPid,state:e.state,startedAt:new Date(e.startedAt).toISOString(),stoppedAt:typeof e.stoppedAt==`number`?new Date(e.stoppedAt).toISOString():void 0,outPath:e.outPath,sizeBytes:e.sizeBytes,remotePath:e.remotePath,method:e.method,message:e.message,...e.action===`stop`?{durationMs:e.durationMs,summary:e.summary}:{}};return e.kind===`simpleperf`?{...t,kind:`simpleperf`,mode:`cpu-profile`}:{...t,kind:`perfetto`,mode:`trace`}}function V(e){return{status:`cleanup-pending`,reason:`cleanup-unconfirmed`,message:e instanceof Error?e.message:String(e)}}function we(t){if(t.status===`cleanup-pending`)throw new e(`COMMAND_FAILED`,t.message??`Perf capture cleanup could not be confirmed`,{reason:t.reason})}function H(t,n,r){return new e(`INVALID_ARGS`,`${t} native perf requires --kind ${n}, not ${r}`)}function Te(e){return e.family===`android`&&Ee(e.capture)?{status:`decoded`,descriptor:{family:`android`,capture:e.capture}}:e.family===`apple`&&ke(e.capture)&&Me(e.marker)?{status:`decoded`,descriptor:{family:`apple`,capture:e.capture,marker:e.marker}}:{status:`invalid`,message:`Perf capture descriptor body is invalid`}}function Ee(e){return G(e)?De(e.kind,e.type)&&U(e,[`packageName`,`appPid`,`profilerPid`,`remotePath`,`outPath`])&&typeof e.startedAt==`number`&&Oe(e.state)&&Ae(e,[`stoppedAt`,`sizeBytes`]):!1}function De(e,t){return e===`simpleperf`&&t===`cpu-profile`||e===`perfetto`&&t===`trace`}function Oe(e){return e===`running`||e===`stopped`}function ke(e){return G(e)&&e.kind===`xctrace`&&(e.mode===`cpu-profile`||e.mode===`trace`)&&U(e,[`template`,`outPath`,`appBundleId`,`deviceId`,`startedAt`])&&n(e.platform)&&je(e.targetProcesses)&&W(e.targetPids)}function U(e,t){return t.every(t=>typeof e[t]==`string`)}function Ae(e,t){return t.every(t=>e[t]===void 0||typeof e[t]==`number`)}function je(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function W(e){return Array.isArray(e)&&e.every(e=>typeof e==`number`)}function G(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Me(e){return G(e)&&typeof e.pid==`number`&&typeof e.startTime==`string`&&typeof e.command==`string`}const K=f,Ne=f,Pe=f,q=async()=>await import(`./perf-facade.js`),J=async()=>await import(`./perf-facade.js`),Fe=async()=>await import(`./perf-facade.js`),Ie=async()=>await import(`./src4.js`).then(e=>e.b);function Le(){let e=Object.freeze({sampleFrames:async(e,t)=>await(await q()).sampleAppleFramePerf(e,t),frameSampling:async e=>(await J()).buildAppleFrameSamplingMetadata(e),sampleMemory:async(e,t)=>await(await q()).sampleAppleMemoryPerf(e,t),memorySampling:async e=>(await J()).buildAppleMemorySamplingMetadata(e),memorySnapshotSupport:async e=>(await J()).buildAppleMemorySnapshotSupport(e),captureMemorySnapshot:async(e,t,n)=>await(await q()).captureAppleMemorySnapshot(e,t,n),start:async(e,t,n)=>await F(e,t,n),reattach:async(e,{envelope:t})=>await be(t),cleanup:async(e,{envelope:t})=>await ye(t),writeProfileReport:async e=>await(await Fe()).writeAppleXctracePerfReport({tracePath:e.tracePath,outPath:e.outPath,template:e.template,appBundleId:e.appId})}),t=Object.freeze({sampleFrames:async(e,t)=>await(await Ne()).sampleAndroidFramePerf(e,t),sampleMemory:async(e,t)=>await(await K()).sampleAndroidMemoryPerf(e,t),captureMemorySnapshot:async(e,t,n)=>await(await K()).captureAndroidHeapSnapshot(e,t,n),start:async(e,t,n)=>await I(e,t,n),reattach:async(e,{envelope:t})=>await xe(t),cleanup:async(e,{envelope:t})=>await Se(e,t),writeProfileReport:async(e,t)=>await(await Pe()).writeAndroidSimpleperfReport(e,Re(t.profile,t.tracePath),t.outPath)}),n=Object.freeze({sampleMemory:async(e,t)=>await(await Ie()).sampleHarmonyMemoryPerf(e,t)});return Object.freeze({apple:e,android:t,harmony:n})}function Re(t,n){if(t?.kind!==`simpleperf`||t.type!==`cpu-profile`||t.mode!==`cpu-profile`)throw new e(`INVALID_ARGS`,`Stopped Simpleperf profile metadata is malformed.`);return{type:`cpu-profile`,kind:`simpleperf`,packageName:t.packageName,appPid:t.appPid,profilerPid:t.profilerPid,remotePath:t.remotePath,outPath:n,startedAt:t.startedAt?Date.parse(t.startedAt):Date.now(),state:`stopped`,...t.stoppedAt?{stoppedAt:Date.parse(t.stoppedAt)}:{},...t.sizeBytes===void 0?{}:{sizeBytes:t.sizeBytes}}}function ze(){return Object.freeze({ensureConnected:async(e,t)=>{t.throwIfAborted();try{let{resolveIosPhysicalDeviceControl:n}=await import(`./physical-device-facade.js`);await n(e).ensureReady(e,t),t.throwIfAborted()}catch(e){throw t.throwIfAborted(),e}}})}function Be(){return Object.freeze({keepHot:e=>{import(`./runner-operations-facade.js`).then(({prewarmAppleRunnerCache:t})=>t(e,{})).catch(()=>{})},wasRecentlyObservedBooted:async e=>{let{wasSimulatorRecentlyObservedBooted:t}=await import(`./simulator-facade.js`);return t(e)},markBooted:e=>{import(`./simulator-facade.js`).then(({markSimulatorBooted:t})=>t(e)).catch(()=>{})}})}function Ve(){return Object.freeze({discover:async(e,t)=>{t.throwIfAborted();let n=await ne(e);return t.throwIfAborted(),n},launch:(e,t)=>{let n=[`-avd`,e];return t&&n.push(`-no-window`,`-no-audio`),u(`emulator`,n)},terminate:async e=>{await s({pids:[e],termTimeoutMs:1500,killTimeoutMs:1500})}})}function He(e,t,n=()=>{}){let r,i,a=async()=>(r??=t.apple({appleTools:e.appleTools}),await r),o=async()=>(i??=t.android({commands:e.commands}),await i),s=Object.freeze({shutdownTarget:async(e,t)=>(n(),await(await a()).shutdownTarget(e,t))}),c=Object.freeze({shutdownTarget:async(e,t)=>(n(),await(await o()).shutdownTarget(e,t))}),l=Object.freeze({canShutdownTarget:async e=>await Ue(e,a,o),shutdownTarget:async e=>(n(),await We(e,a,o))});return Object.freeze({apple:s,android:c,close:l})}async function Ue(e,t,n){return e.platform===`apple`?(await t()).canShutdownTarget(e):e.platform===`android`&&(await n()).canShutdownTarget(e)}async function We(e,t,n){let r=new AbortController().signal;return e.platform===`apple`?await(await t()).shutdownTarget(e,r):e.platform===`android`?await(await n()).shutdownTarget(e,r):{success:!1,exitCode:-1,stdout:``,stderr:`Cannot shut down unsupported device ${e.platform}/${e.kind}`}}function Ge(){return Object.freeze({withInvalidatedAppResolutionCache:async(e,t)=>{let{invalidateIosAppResolutionCache:n}=await import(`./app-resolution-facade.js`);return await n(e,t)},prepareArtifact:async(e,t)=>{let{prepareIosInstallArtifact:n}=await import(`./install-artifact-facade.js`);return await n(e.source,t)},resolveAppBundleId:async(e,t)=>{let{resolveIosApp:n}=await import(`./app-resolution-facade.js`);return await n(e,t)}})}function Ke(){return Object.freeze({bundletoolJar:process.env.AGENT_DEVICE_BUNDLETOOL_JAR?.trim()||void 0,withInvalidatedAppResolutionCache:async(e,t)=>{let{withAndroidAppResolutionCacheInvalidated:n}=await f();return await n(e,t)},prepareArtifact:async(e,t)=>{let{prepareAndroidInstallArtifact:n}=await f();return await n(e.source,t)},resolveAppPackage:async(e,t)=>{let{resolveAndroidApp:n}=await f(),r=await n(e,t);if(r.type===`intent`){let{AppError:e}=await import(`./sdk-contracts.js`).then(e=>e.U);throw new e(`INVALID_ARGS`,`App uninstall requires a package name, not an intent`)}return r.value}})}function qe(){return Object.freeze({probeClipboardShellSupport:async(e,t)=>{try{let{runAndroidShell:n,androidClipboardShellSupportForResult:r}=await f();return await r(await n(e,[`cmd`,`clipboard`,`get`,`text`],{allowFailure:!0,signal:t}))}catch{return`probe-failed`}},runAdb:async(e,t,n,r)=>{let{runAndroidAdb:i}=await f(),a=await i(e,t,{allowFailure:n.allowFailure,timeoutMs:n.timeoutMs,signal:r});return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}},installPackage:async(e,t,n,r)=>{let{resolveAndroidAdbProvider:i}=await f(),a=i(e),o=a.install?await a.install(t,{replace:n.replace,signal:r}):await a.exec([`install`,...n.replace?[`-r`]:[],t],{signal:r});return{stdout:o.stdout,stderr:o.stderr,exitCode:o.exitCode}},installBundle:async(e,t,n,r)=>{let{resolveAndroidAdbProvider:i}=await f(),a=i(e).installBundle;return a?(await a(t,{mode:n,signal:r}),!0):!1}})}let Je;const Y=()=>Je??=import(`./runner-operations-facade.js`);let Ye;const X=()=>Ye??=import(`./platform-runtime-runtime-hints.js`);let Xe;const Ze=()=>Xe??=import(`./platform-runtime-open-target.js`).then(e=>e.t);let Qe;const $e=()=>Qe??=import(`./app-resolution-facade.js`);let et;const Z=()=>et??=import(`./macos-facade.js`);let tt;const nt=()=>tt??=import(`./retry.js`).then(e=>e.t);function rt(){return Object.freeze({resolveOpenTarget:async(e,t)=>await it(e,t),prewarmRunnerCache:async(e,t,n)=>{let{prewarmAppleRunnerCache:r}=await Y();await r(e,Q(t,n))},prewarmRunnerSession:async(e,t,n,r,i)=>{let{prewarmIosRunnerSession:a}=await Y();await a(e,{...Q(t,n),propagateError:r,...i})},notifyRunnerAppRelaunched:async(e,t,n)=>{let{notifyIosRunnerAppRelaunched:r}=await Y();await r(e,Q(t,n))},stopRunnerSession:async e=>{let{stopIosRunnerSession:t}=await Y();await t(e)},hasLiveRunnerSession:async(e,t)=>{let{hasLiveIosRunnerSession:n}=await Y();return n(e,{requestId:t.requestId})},releaseSpeculativeRunner:async(e,t)=>{let{releaseSpeculativeIosRunnerSessionFor:n}=await Y();return await n(e,{requestId:t.requestId})},releaseRunnerOnClose:async(e,t)=>{let{releaseIosRunnerOnClose:n}=await Y();await n(e,t)},prepareRunner:async(e,t,n)=>{let{Deadline:r}=await nt(),{prepareIosRunner:i}=await Y(),a=Date.now();return await i(e,{...Q(t.execution,n),cleanStaleBundles:!0,buildTimeoutMs:t.timeoutMs,healthTimeoutMs:t.timeoutMs,prepareDeadline:r.fromTimeoutMs(t.timeoutMs,a),startupTimeoutMs:t.timeoutMs})},applyRuntimeHints:async(e,t)=>{let{applyRuntimeHintValues:n}=await X();await n({device:e,...t})},clearRuntimeHints:async(e,t)=>{let{clearRuntimeHintValues:n}=await X();await n({device:e,...t})},dismissCloseAlerts:async(e,t)=>await st(e,t),detachRunnerSessionsForShutdown:async()=>{let{detachIosRunnerSessionsForShutdown:e}=await Y();await e()},finalizeRunnerSessionsForShutdown:async()=>{let{stopAllIosRunnerSessions:e}=await Y();await e()}})}async function it(t,n){if(n.foreground){let n=await at(t);if(n)return n;throw new e(`AMBIGUOUS_MATCH`,`open --foreground requires exactly one running app on the selected iOS simulator.`,{reason:`foreground_app_ambiguous`,hint:`Pass an explicit app instead: agent-device open <app> --platform ios.`})}let r=await ot(t,n.surface),{resolveSessionAppBundleIdForTarget:i}=await Ze();return{appBundleId:r.appBundleId??await i(t,n.target,n.currentAppBundleId),appName:r.appName??n.target}}async function at(e){if(!a(e)||e.kind!==`simulator`)return;let{detectSoleRunningIosSimulatorApp:t}=await $e(),n=await t(e);return n?{appBundleId:n.bundleId,appName:n.name}:void 0}async function ot(e,t){if(!i(e)||t===`app`||t===`desktop`||t===`menubar`)return{};let{resolveFrontmostMacOsApp:n}=await Z(),r=await n();return{appBundleId:r.bundleId,appName:r.appName}}function Q(e,t){return{requestId:e.requestId,logPath:e.logPath,traceLogPath:e.traceLogPath,verbose:e.verbose,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext,signal:t}}async function st(e,t){if(!i(e))return;let{runMacOsAlertAction:n}=await Z();await n(`dismiss`,t.surface===`frontmost-app`?{surface:`frontmost-app`}:t.appBundleId?{bundleId:t.appBundleId}:{})}let ct;const lt=()=>ct??=import(`./platform-runtime-open-target.js`).then(e=>e.t);let ut;const $=()=>ut??=import(`./platform-runtime-runtime-hints.js`);function dt(){return Object.freeze({resolveOpenTarget:async(e,t)=>await ft(e,t),inferOpenedAppBundleId:async(e,t,n)=>{if(n)return n;try{let{inferAndroidPackageAfterOpen:r}=await f();return await r(e,t,n)}catch{return n}},resetFramePerfStats:async(e,t)=>{let{resetAndroidFramePerfStats:n}=await f();await n(e,t)},applyRuntimeHints:async(e,t)=>{let{applyRuntimeHintValues:n}=await $();await n({device:e,...t})},clearRuntimeHints:async(e,t)=>{let{clearRuntimeHintValues:n}=await $();await n({device:e,...t})},activateTestIme:async(n,r)=>{let{activateAndroidTestIme:i}=await f(),a=await i(n,r);if(a.outcome===`helper-unavailable`){t({level:`warn`,phase:`android_test_ime_activate_failed`,data:{device:n.id,error:a.reason,...a.hint===void 0?{}:{hint:a.hint}}});return}if(a.persistFailed&&!(!a.alreadyActive&&!a.activated))throw new e(`COMMAND_FAILED`,`Android test IME recovery records could not be persisted for ${n.name??n.id}.`,{reason:`android_test_ime_recovery_fence_failed`,deviceId:n.id})},restoreTestIme:async(t,n)=>{let{restoreAndroidTestIme:r}=await f(),i=await r(t,{stateDir:n.stateDir});if(i.reason===`set-failed`||i.reason===`record-unreadable`)throw new e(`COMMAND_FAILED`,`Android test IME could not be restored on ${t.name??t.id}.`,{reason:`android_test_ime_restore_incomplete`,deviceId:t.id})},recoverTestImeStartup:async e=>{let{listAndroidAdbSerialsQuick:t,restoreOrphanedAndroidTestImeOnDaemonStartup:n}=await f();await n({stateDir:e.stateDir,listSerials:t})},hasTestImeRecoveryEvidence:async e=>{let{readAndroidTestImeRecoveryMarkers:t}=await f();return(await t(e)).length>0}})}async function ft(e,t){let{resolveSessionAppBundleIdForTarget:n}=await lt();return{appBundleId:await n(e,t.target,t.currentAppBundleId),appName:t.target}}function pt(){return Object.freeze({resolve:async(e,t)=>{let{getLocalInteractor:n}=await import(`./interactors.js`).then(e=>e.n);return await n(e,t)}})}function mt(e){return Object.freeze({recoverStartupResources:async t=>{await e.android.hasTestImeRecoveryEvidence(t.stateDir)&&await e.android.recoverTestImeStartup(t)},detachForDaemonShutdown:async()=>await e.apple.detachRunnerSessionsForShutdown(),finalizeDaemonShutdown:async()=>await e.apple.finalizeRunnerSessionsForShutdown()})}function ht(e){return Object.freeze({captureSurface:async(t,n,r)=>t.platform===`linux`?await e.linux(n,r):(gt(t),await e.macos(n,r)),presentIosAcquisition:async(e,t)=>{let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(e,t)}})}function gt(e){if(e.platform!==`apple`||e.appleOs!==`macos`)throw TypeError(`Apple surface capture requires a non-app macOS surface`)}async function _t(e,t){let n=e?.surface===void 0?void 0:o(e.surface,`native`);if(!n)throw TypeError(`Apple surface capture requires a helper-routed macOS surface`);let{captureMacOsSurfaceSnapshot:r}=await import(`./macos-facade.js`);return await r({...e,surface:n},t)}function vt(e){let t=_(e.sessionsDir),n=Object.freeze({mode:`local`,start:t.start}),r=se(),i=Object.freeze({which:async e=>await d(e)?e:void 0,run:async(e,t)=>{let n=await ee(e.executable,ce(e),{allowFailure:e.allowFailure,cwd:e.cwd,env:e.env?{...process.env,...e.env}:void 0,signal:t,timeoutMs:e.timeoutMs});return{stdout:n.stdout,stderr:n.stderr,exitCode:n.exitCode}}}),a=he({resolveSessionArtifacts:e.resolveSessionArtifacts,processes:t,resolveTransport:async e=>{if(e.platform!==`web`)return Object.freeze({mode:`local`});let{resolveWebNetworkTransport:t}=await import(`./platform-runtime-network-web-transport.js`);return await t(e)}}),o=rt(),s=dt();return Object.freeze({commands:i,appleTools:r,toolchains:oe(),artifacts:Object.freeze({resolveSession:e.resolveSessionArtifacts}),outputs:Object.freeze({openAppend:async t=>await ue(e.sessionsDir,t),readTail:async(t,n)=>await de(e.sessionsDir,t,n)}),processes:t,processTransports:Object.freeze({resolve:async t=>{if(t.platform!==`android`)return n;let{resolveAndroidAppLogProcessTransport:r}=await import(`./platform-runtime-app-log-android-transport.js`);return r(e.sessionsDir,t,n)}}),...a,appleDeployment:Ge(),androidDeployment:Ke(),androidTools:qe(),temporaryFiles:Object.freeze({create:async e=>await v(e)}),deviceReadiness:Object.freeze({applePhysical:ze(),appleAutomation:Be(),androidEmulator:Ve()}),deviceShutdown:He({appleTools:r,commands:i},e.shutdownLoaders,e.assertShutdownAllowed),screenRecording:D({ownedProcesses:e.ownedProcesses}),audioProbe:A({ownedProcesses:e.ownedProcesses}),perf:Le(),snapshot:e.snapshot,localInteractors:pt(),appleApplications:o,androidApplications:s,applicationResources:mt({android:s,apple:o}),clock:Object.freeze({now:()=>Date.now(),sleep:async(e,t)=>{await le(e,void 0,t?{signal:t}:void 0)}})})}export{vt as createPlatformRuntimeHost,ht as createSnapshotRuntimeHost,_t as loadMacOsSurfaceSnapshot,ie as recoverLegacyAppLogMarkersAfterDaemonLock};
|
|
5
|
+
`),skippedLines:r})}function O(e={}){let t=Object.freeze({resolve:async e=>{let{createAndroidScreenRecordingTransport:t}=await import(`./platform-runtime-screen-recording-android-host.js`);return await t(e)}}),n=Object.freeze({resolve:async e=>{let{resolveWebScreenRecordingTransport:t}=await import(`./platform-runtime-screen-recording-web-host.js`);return await t(e)}}),r=Object.freeze({prepare:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);await t().prepare(e)},copy:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);await t().copy(e)},remove:async e=>{let{createScreenRecordingOutputHost:t}=await import(`./platform-runtime-screen-recording-output-host.js`);return await t().remove(e)}}),i=Object.freeze({sniff:async e=>{let{createScreenRecordingFinalizer:t}=await import(`./platform-runtime-screen-recording-finalizer-host.js`);await t().sniff(e)},complete:async(e,t)=>{let{createScreenRecordingFinalizer:n}=await import(`./platform-runtime-screen-recording-finalizer-host.js`);return await n().complete(e,t)}}),a=e.ownedProcesses??Object.freeze({replace:()=>{},clear:()=>{}});return Object.freeze({apple:k(),android:t,harmony:A(),web:n,outputs:r,finalize:i,ownedProcesses:a})}function k(){let e=async()=>{let{createAppleScreenRecordingHost:e}=await import(`./platform-runtime-screen-recording-apple-host.js`);return e()};return Object.freeze({availability:async t=>(await e()).availability(t),runRunner:async(t,n,r)=>await(await e()).runRunner(t,n,r),startSimulator:async(t,n,r)=>await(await e()).startSimulator(t,n,r),inspectProcess:async t=>await(await e()).inspectProcess(t),terminateProcess:async t=>await(await e()).terminateProcess(t),inspectRunner:async(t,n,r)=>await(await e()).inspectRunner(t,n,r),retrieveRunnerRecording:async(t,n,r,i)=>await(await e()).retrieveRunnerRecording(t,n,r,i),captureClockAnchor:async(t,n,r)=>await(await e()).captureClockAnchor(t,n,r),isRunnerBundleId:async t=>await(await e()).isRunnerBundleId(t)})}function A(){let e=async()=>{let{createHarmonyScreenRecordingHost:e}=await import(`./platform-runtime-screen-recording-harmony-host.js`);return e()};return Object.freeze({start:async(t,n,r)=>await(await e()).start(t,n,r),stop:async(t,n)=>await(await e()).stop(t,n),findMedia:async(t,n,r)=>await(await e()).findMedia(t,n,r),stageMedia:async(t,n,r)=>await(await e()).stageMedia(t,n,r),stagedFileSize:async(t,n,r)=>await(await e()).stagedFileSize(t,n,r),pull:async(t,n,r)=>await(await e()).pull(t,n,r),remove:async(t,n,r)=>await(await e()).remove(t,n,r),removeMedia:async(t,n,r)=>await(await e()).removeMedia(t,n,r)})}function j(e={}){let t=e.ownedProcesses??Object.freeze({replace:()=>{},clear:()=>{}});return Object.freeze({hostCapture:Object.freeze({info:Object.freeze({source:`system-audio`,backend:`macos-screencapturekit`,sourceCount:1,notes:M}),start:async e=>{let{startMacOsAudioProbeProcess:t}=await import(`./macos-facade.js`),n=await t(e),r=await y(n.child.pid??void 0);return Object.freeze({...r===void 0?{}:{marker:r},wait:n.wait,terminate:async()=>{n.child.kill(`SIGTERM`),await n.wait.catch(()=>{})}})},inspectProcess:async e=>b(e),terminateProcess:async e=>await v([e])}),web:Object.freeze({resolve:async e=>{if(e.platform!==`web`)return;let{resolveWebProvider:t}=await import(`./src6.js`).then(e=>e.i),n=await t(),r=n.probeAudio?.bind(n);if(r)return Object.freeze({probe:async e=>await r({action:e.action,durationMs:e.durationMs,bucketMs:e.bucketMs})})}}),ownedProcesses:t})}function M(e){return[`Audio probe samples host system audio through ScreenCaptureKit for this ${a(e)?`iOS simulator`:e.platform===`android`?`Android emulator`:`macOS session`}; it is not app-instrumented audio.`,`Screen Recording permission is required for host system audio capture.`,`Other audible host apps can contribute to the measured buckets.`]}const N=f,P=async()=>await import(`./perf-facade.js`),F=Object.freeze({resourceKind:p,version:1,encode:e=>e,decode:Te});async function I(t,n,r){if(r.kind!==`xctrace`)throw U(`Apple`,`xctrace`,r.kind);let i=r.template??(r.mode===`cpu-profile`?`Time Profiler`:`Animation Hitches`),a=await P(),o=await a.startAppleXctracePerfCapture({device:t,appBundleId:r.appId,mode:r.mode,template:i,outPath:r.outPath}),s=await y(o.child.pid??void 0);if(!s)throw await a.cleanupAppleXctracePerfCapture(o).catch(()=>{}),new e(`COMMAND_FAILED`,`Apple xctrace exposed no exact process identity`);return R(t,n,r,{family:`apple`,marker:s,capture:Ce(o)},_e(o),B(`started`,o))}async function L(e,t,n){let r=await N(),i;if(n.mode===`cpu-profile`){if(n.kind!==`simpleperf`)throw U(`Android`,`simpleperf`,n.kind);i=await r.startAndroidSimpleperfProfile(e,n.appId,n.outPath)}else{if(n.kind!==`perfetto`)throw U(`Android`,`perfetto`,n.kind);i=await r.startAndroidPerfettoTrace(e,n.appId,n.outPath)}return R(e,t,n,{family:`android`,capture:i},ve(e,i),V(i))}function R(e,t,n,i,a,o){return Object.freeze({pendingHandle:new ie(a),envelope:re({resourceKind:p,sessionId:n.sessionId,device:r(e),owner:t,fence:n.fence,lifecycle:`open`,descriptor:ne(F,i)}),response:o})}function _e(e){return z({initialOutPath:e.outPath,inspect:()=>B(`started`,e),finish:async t=>await P().then(async n=>B(`stopped`,await n.stopAppleXctracePerfCapture(e,t))),cleanup:async()=>await P().then(async t=>{await t.cleanupAppleXctracePerfCapture(e)})})}function ve(e,t){return z({initialOutPath:t.outPath,inspect:()=>V(t),finish:async n=>{let r=await N();return V(t.kind===`simpleperf`?await r.stopAndroidSimpleperfProfile(e,t,n):await r.stopAndroidPerfettoTrace(e,t,n))},cleanup:async()=>{await(await N()).cleanupAndroidNativePerfSession(e,t)}})}function z(e){let t=e.initialOutPath,n,r,i=async()=>await e.cleanup().then(()=>({status:`cleaned`}),H);return Object.freeze({inspect:e.inspect,setOutputPath:e=>{t=e},finish:async()=>n??=e.finish(t).then(e=>({status:`completed`,result:e}),e=>{throw n=void 0,e}),forceCleanup:async()=>r??=i(),[Symbol.asyncDispose]:async()=>{we(await(r??=i()))}})}async function ye(e){let t=m(e,F);if(t.status!==`decoded`||t.descriptor.family!==`apple`)return{status:`cleanup-pending`,reason:`manual-recovery-required`};let n=await b(t.descriptor.marker);if(n===`ownership-lost`)return{status:`cleanup-pending`,reason:`ownership-fence-lost`};if(n===`missing`)return{status:`already-missing`};let r=await v([t.descriptor.marker]);return r===`terminated`?{status:`cleaned`}:r===`already-missing`?{status:`already-missing`}:{status:`cleanup-pending`,reason:`ownership-fence-lost`}}async function be(e){let t=m(e,F);if(t.status!==`decoded`)return t;if(t.descriptor.family!==`apple`)return{status:`unreattachable`,reason:`descriptor-invalid`};let n=await b(t.descriptor.marker);return n===`owned-alive`?{status:`unreattachable`,reason:`transport-not-reattachable`}:n===`ownership-lost`?{status:`unreattachable`,reason:`ownership-fence-lost`}:{status:`missing`}}async function xe(e){let t=m(e,F);return t.status===`decoded`?t.descriptor.family===`android`?{status:`unreattachable`,reason:`transport-not-reattachable`}:{status:`unreattachable`,reason:`descriptor-invalid`}:t}async function Se(e,t){let n=m(t,F);if(n.status!==`decoded`||n.descriptor.family!==`android`)return{status:`cleanup-pending`,reason:`manual-recovery-required`};try{return await(await N()).cleanupAndroidNativePerfSession(e,n.descriptor.capture),{status:`cleaned`}}catch(e){return H(e)}}function Ce(e){let{child:t,wait:n,...r}=e;return r}function B(e,t){return{perf:e,kind:t.kind,mode:t.mode,template:t.template,outPath:t.outPath,appBundleId:t.appBundleId,deviceId:t.deviceId,platform:t.platform,targetPids:t.targetPids,targetProcesses:t.targetProcesses,startedAt:t.startedAt,endedAt:t.endedAt}}function V(e){let t={action:e.action,platform:`android`,type:e.type,packageName:e.packageName,appPid:e.appPid,profilerPid:e.profilerPid,state:e.state,startedAt:new Date(e.startedAt).toISOString(),stoppedAt:typeof e.stoppedAt==`number`?new Date(e.stoppedAt).toISOString():void 0,outPath:e.outPath,sizeBytes:e.sizeBytes,remotePath:e.remotePath,method:e.method,message:e.message,...e.action===`stop`?{durationMs:e.durationMs,summary:e.summary}:{}};return e.kind===`simpleperf`?{...t,kind:`simpleperf`,mode:`cpu-profile`}:{...t,kind:`perfetto`,mode:`trace`}}function H(e){return{status:`cleanup-pending`,reason:`cleanup-unconfirmed`,message:e instanceof Error?e.message:String(e)}}function we(t){if(t.status===`cleanup-pending`)throw new e(`COMMAND_FAILED`,t.message??`Perf capture cleanup could not be confirmed`,{reason:t.reason})}function U(t,n,r){return new e(`INVALID_ARGS`,`${t} native perf requires --kind ${n}, not ${r}`)}function Te(e){return e.family===`android`&&Ee(e.capture)?{status:`decoded`,descriptor:{family:`android`,capture:e.capture}}:e.family===`apple`&&ke(e.capture)&&Ne(e.marker)?{status:`decoded`,descriptor:{family:`apple`,capture:e.capture,marker:e.marker}}:{status:`invalid`,message:`Perf capture descriptor body is invalid`}}function Ee(e){return t(e)?De(e.kind,e.type)&&W(e,[`packageName`,`appPid`,`profilerPid`,`remotePath`,`outPath`])&&typeof e.startedAt==`number`&&Oe(e.state)&&Ae(e,[`stoppedAt`,`sizeBytes`]):!1}function De(e,t){return e===`simpleperf`&&t===`cpu-profile`||e===`perfetto`&&t===`trace`}function Oe(e){return e===`running`||e===`stopped`}function ke(e){return t(e)&&e.kind===`xctrace`&&(e.mode===`cpu-profile`||e.mode===`trace`)&&W(e,[`template`,`outPath`,`appBundleId`,`deviceId`,`startedAt`])&&o(e.platform)&&je(e.targetProcesses)&&Me(e.targetPids)}function W(e,t){return t.every(t=>typeof e[t]==`string`)}function Ae(e,t){return t.every(t=>e[t]===void 0||typeof e[t]==`number`)}function je(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function Me(e){return Array.isArray(e)&&e.every(e=>typeof e==`number`)}function Ne(e){return t(e)&&typeof e.pid==`number`&&typeof e.startTime==`string`&&typeof e.command==`string`}const G=f,Pe=f,Fe=f,K=async()=>await import(`./perf-facade.js`),q=async()=>await import(`./perf-facade.js`),Ie=async()=>await import(`./perf-facade.js`),Le=async()=>await import(`./src4.js`).then(e=>e.b);function Re(){let e=Object.freeze({sampleFrames:async(e,t)=>await(await K()).sampleAppleFramePerf(e,t),frameSampling:async e=>(await q()).buildAppleFrameSamplingMetadata(e),sampleMemory:async(e,t)=>await(await K()).sampleAppleMemoryPerf(e,t),memorySampling:async e=>(await q()).buildAppleMemorySamplingMetadata(e),memorySnapshotSupport:async e=>(await q()).buildAppleMemorySnapshotSupport(e),captureMemorySnapshot:async(e,t,n)=>await(await K()).captureAppleMemorySnapshot(e,t,n),start:async(e,t,n)=>await I(e,t,n),reattach:async(e,{envelope:t})=>await be(t),cleanup:async(e,{envelope:t})=>await ye(t),writeProfileReport:async e=>await(await Ie()).writeAppleXctracePerfReport({tracePath:e.tracePath,outPath:e.outPath,template:e.template,appBundleId:e.appId})}),t=Object.freeze({sampleFrames:async(e,t)=>await(await Pe()).sampleAndroidFramePerf(e,t),sampleMemory:async(e,t)=>await(await G()).sampleAndroidMemoryPerf(e,t),captureMemorySnapshot:async(e,t,n)=>await(await G()).captureAndroidHeapSnapshot(e,t,n),start:async(e,t,n)=>await L(e,t,n),reattach:async(e,{envelope:t})=>await xe(t),cleanup:async(e,{envelope:t})=>await Se(e,t),writeProfileReport:async(e,t)=>await(await Fe()).writeAndroidSimpleperfReport(e,ze(t.profile,t.tracePath),t.outPath)}),n=Object.freeze({sampleMemory:async(e,t)=>await(await Le()).sampleHarmonyMemoryPerf(e,t)});return Object.freeze({apple:e,android:t,harmony:n})}function ze(t,n){if(t?.kind!==`simpleperf`||t.type!==`cpu-profile`||t.mode!==`cpu-profile`)throw new e(`INVALID_ARGS`,`Stopped Simpleperf profile metadata is malformed.`);return{type:`cpu-profile`,kind:`simpleperf`,packageName:t.packageName,appPid:t.appPid,profilerPid:t.profilerPid,remotePath:t.remotePath,outPath:n,startedAt:t.startedAt?Date.parse(t.startedAt):Date.now(),state:`stopped`,...t.stoppedAt?{stoppedAt:Date.parse(t.stoppedAt)}:{},...t.sizeBytes===void 0?{}:{sizeBytes:t.sizeBytes}}}function Be(){return Object.freeze({ensureConnected:async(e,t)=>{t.throwIfAborted();try{let{resolveIosPhysicalDeviceControl:n}=await import(`./physical-device-facade.js`);await n(e).ensureReady(e,t),t.throwIfAborted()}catch(e){throw t.throwIfAborted(),e}}})}function Ve(){return Object.freeze({keepHot:e=>{import(`./runner-operations-facade.js`).then(({prewarmAppleRunnerCache:t})=>t(e,{})).catch(()=>{})},wasRecentlyObservedBooted:async e=>{let{wasSimulatorRecentlyObservedBooted:t}=await import(`./simulator-facade.js`);return t(e)},markBooted:e=>{import(`./simulator-facade.js`).then(({markSimulatorBooted:t})=>t(e)).catch(()=>{})}})}function He(){return Object.freeze({discover:async(e,t)=>{t.throwIfAborted();let n=await ae(e);return t.throwIfAborted(),n},launch:(e,t)=>{let n=[`-avd`,e];return t&&n.push(`-no-window`,`-no-audio`),d(`emulator`,n)},terminate:async e=>{await c({pids:[e],termTimeoutMs:1500,killTimeoutMs:1500})}})}function Ue(e,t,n=()=>{}){let r,i,a=async()=>(r??=t.apple({appleTools:e.appleTools}),await r),o=async()=>(i??=t.android({commands:e.commands}),await i),s=Object.freeze({shutdownTarget:async(e,t)=>(n(),await(await a()).shutdownTarget(e,t))}),c=Object.freeze({shutdownTarget:async(e,t)=>(n(),await(await o()).shutdownTarget(e,t))}),l=Object.freeze({canShutdownTarget:async e=>await We(e,a,o),shutdownTarget:async e=>(n(),await Ge(e,a,o))});return Object.freeze({apple:s,android:c,close:l})}async function We(e,t,n){return e.platform===`apple`?(await t()).canShutdownTarget(e):e.platform===`android`&&(await n()).canShutdownTarget(e)}async function Ge(e,t,n){let r=new AbortController().signal;return e.platform===`apple`?await(await t()).shutdownTarget(e,r):e.platform===`android`?await(await n()).shutdownTarget(e,r):{success:!1,exitCode:-1,stdout:``,stderr:`Cannot shut down unsupported device ${e.platform}/${e.kind}`}}function Ke(){return Object.freeze({withInvalidatedAppResolutionCache:async(e,t)=>{let{invalidateIosAppResolutionCache:n}=await import(`./app-resolution-facade.js`);return await n(e,t)},prepareArtifact:async(e,t)=>{let{prepareIosInstallArtifact:n}=await import(`./install-artifact-facade.js`);return await n(e.source,t)},resolveAppBundleId:async(e,t)=>{let{resolveIosApp:n}=await import(`./app-resolution-facade.js`);return await n(e,t)}})}function qe(){return Object.freeze({bundletoolJar:process.env.AGENT_DEVICE_BUNDLETOOL_JAR?.trim()||void 0,withInvalidatedAppResolutionCache:async(e,t)=>{let{withAndroidAppResolutionCacheInvalidated:n}=await f();return await n(e,t)},prepareArtifact:async(e,t)=>{let{prepareAndroidInstallArtifact:n}=await f();return await n(e.source,t)},resolveAppPackage:async(e,t)=>{let{resolveAndroidApp:n}=await f(),r=await n(e,t);if(r.type===`intent`){let{AppError:e}=await import(`./sdk-contracts.js`).then(e=>e.U);throw new e(`INVALID_ARGS`,`App uninstall requires a package name, not an intent`)}return r.value}})}function Je(){return Object.freeze({probeClipboardShellSupport:async(e,t)=>{try{let{runAndroidShell:n,androidClipboardShellSupportForResult:r}=await f();return await r(await n(e,[`cmd`,`clipboard`,`get`,`text`],{allowFailure:!0,signal:t}))}catch{return`probe-failed`}},runAdb:async(e,t,n,r)=>{let{runAndroidAdb:i}=await f(),a=await i(e,t,{allowFailure:n.allowFailure,timeoutMs:n.timeoutMs,signal:r});return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}},installPackage:async(e,t,n,r)=>{let{resolveAndroidAdbProvider:i}=await f(),a=i(e),o=a.install?await a.install(t,{replace:n.replace,signal:r}):await a.exec([`install`,...n.replace?[`-r`]:[],t],{signal:r});return{stdout:o.stdout,stderr:o.stderr,exitCode:o.exitCode}},installBundle:async(e,t,n,r)=>{let{resolveAndroidAdbProvider:i}=await f(),a=i(e).installBundle;return a?(await a(t,{mode:n,signal:r}),!0):!1}})}let Ye;const J=()=>Ye??=import(`./runner-operations-facade.js`);let Xe;const Y=()=>Xe??=import(`./platform-runtime-runtime-hints.js`);let Ze;const Qe=()=>Ze??=import(`./platform-runtime-open-target.js`).then(e=>e.t);let $e;const et=()=>$e??=import(`./app-resolution-facade.js`);let tt;const X=()=>tt??=import(`./macos-facade.js`);let nt;const rt=()=>nt??=import(`./retry2.js`).then(e=>e.t);function Z(){return Object.freeze({resolveOpenTarget:async(e,t)=>await it(e,t),prewarmRunnerCache:async(e,t,n)=>{let{prewarmAppleRunnerCache:r}=await J();await r(e,Q(t,n))},prewarmRunnerSession:async(e,t,n,r,i)=>{let{prewarmIosRunnerSession:a}=await J();await a(e,{...Q(t,n),propagateError:r,...i})},notifyRunnerAppRelaunched:async(e,t,n)=>{let{notifyIosRunnerAppRelaunched:r}=await J();await r(e,Q(t,n))},stopRunnerSession:async e=>{let{stopIosRunnerSession:t}=await J();await t(e)},hasLiveRunnerSession:async(e,t)=>{let{hasLiveIosRunnerSession:n}=await J();return n(e,{requestId:t.requestId})},releaseSpeculativeRunner:async(e,t)=>{let{releaseSpeculativeIosRunnerSessionFor:n}=await J();return await n(e,{requestId:t.requestId})},releaseRunnerOnClose:async(e,t)=>{let{releaseIosRunnerOnClose:n}=await J();await n(e,t)},prepareRunner:async(e,t,n)=>{let{Deadline:r}=await rt(),{prepareIosRunner:i}=await J(),a=Date.now();return await i(e,{...Q(t.execution,n),cleanStaleBundles:!0,buildTimeoutMs:t.timeoutMs,healthTimeoutMs:t.timeoutMs,prepareDeadline:r.fromTimeoutMs(t.timeoutMs,a),startupTimeoutMs:t.timeoutMs})},applyRuntimeHints:async(e,t)=>{let{applyRuntimeHintValues:n}=await Y();await n({device:e,...t})},clearRuntimeHints:async(e,t)=>{let{clearRuntimeHintValues:n}=await Y();await n({device:e,...t})},dismissCloseAlerts:async(e,t)=>await st(e,t),detachRunnerSessionsForShutdown:async()=>{let{detachIosRunnerSessionsForShutdown:e}=await J();await e()},finalizeRunnerSessionsForShutdown:async()=>{let{stopAllIosRunnerSessions:e}=await J();await e()}})}async function it(t,n){if(n.foreground){let n=await at(t);if(n)return n;throw new e(`AMBIGUOUS_MATCH`,`open --foreground requires exactly one running app on the selected iOS simulator.`,{reason:`foreground_app_ambiguous`,hint:`Pass an explicit app instead: agent-device open <app> --platform ios.`})}let r=await ot(t,n.surface),{resolveSessionAppBundleIdForTarget:i}=await Qe();return{appBundleId:r.appBundleId??await i(t,n.target,n.currentAppBundleId),appName:r.appName??n.target}}async function at(e){if(!a(e)||e.kind!==`simulator`)return;let{detectSoleRunningIosSimulatorApp:t}=await et(),n=await t(e);return n?{appBundleId:n.bundleId,appName:n.name}:void 0}async function ot(e,t){if(!i(e)||t===`app`||t===`desktop`||t===`menubar`)return{};let{resolveFrontmostMacOsApp:n}=await X(),r=await n();return{appBundleId:r.bundleId,appName:r.appName}}function Q(e,t){return{requestId:e.requestId,logPath:e.logPath,traceLogPath:e.traceLogPath,verbose:e.verbose,iosXctestrunFile:e.iosXctestrunFile,iosXctestDerivedDataPath:e.iosXctestDerivedDataPath,iosXctestEnvDir:e.iosXctestEnvDir,runnerLeaseContext:e.runnerLeaseContext,signal:t}}async function st(e,t){if(!i(e))return;let{runMacOsAlertAction:n}=await X();await n(`dismiss`,t.surface===`frontmost-app`?{surface:`frontmost-app`}:t.appBundleId?{bundleId:t.appBundleId}:{})}let ct;const lt=()=>ct??=import(`./platform-runtime-open-target.js`).then(e=>e.t);let ut;const $=()=>ut??=import(`./platform-runtime-runtime-hints.js`);function dt(){return Object.freeze({resolveOpenTarget:async(e,t)=>await ft(e,t),inferOpenedAppBundleId:async(e,t,n)=>{if(n)return n;try{let{inferAndroidPackageAfterOpen:r}=await f();return await r(e,t,n)}catch{return n}},resetFramePerfStats:async(e,t)=>{let{resetAndroidFramePerfStats:n}=await f();await n(e,t)},applyRuntimeHints:async(e,t)=>{let{applyRuntimeHintValues:n}=await $();await n({device:e,...t})},clearRuntimeHints:async(e,t)=>{let{clearRuntimeHintValues:n}=await $();await n({device:e,...t})},activateTestIme:async(t,r)=>{let{activateAndroidTestIme:i}=await f(),a=await i(t,r);if(a.outcome===`helper-unavailable`){n({level:`warn`,phase:`android_test_ime_activate_failed`,data:{device:t.id,error:a.reason,...a.hint===void 0?{}:{hint:a.hint}}});return}if(a.persistFailed&&!(!a.alreadyActive&&!a.activated))throw new e(`COMMAND_FAILED`,`Android test IME recovery records could not be persisted for ${t.name??t.id}.`,{reason:`android_test_ime_recovery_fence_failed`,deviceId:t.id})},restoreTestIme:async(t,n)=>{let{restoreAndroidTestIme:r}=await f(),i=await r(t,{stateDir:n.stateDir,shutdownTarget:n.shutdownTarget,signal:n.signal});if(i.reason===`set-failed`||i.reason===`record-unreadable`)throw new e(`COMMAND_FAILED`,`Android test IME could not be restored on ${t.name??t.id}.`,{reason:`android_test_ime_restore_incomplete`,deviceId:t.id})},recoverTestImeStartup:async e=>{let{listAndroidAdbSerialsQuick:t,restoreOrphanedAndroidTestImeOnDaemonStartup:n}=await f();await n({stateDir:e.stateDir,listSerials:t})},hasTestImeRecoveryEvidence:async e=>{let{readAndroidTestImeRecoveryMarkers:t}=await f();return(await t(e)).length>0}})}async function ft(e,t){let{resolveSessionAppBundleIdForTarget:n}=await lt();return{appBundleId:await n(e,t.target,t.currentAppBundleId),appName:t.target}}function pt(){return Object.freeze({resolve:async(e,t)=>{let{getLocalInteractor:n}=await import(`./interactors.js`).then(e=>e.n);return await n(e,t)}})}function mt(e){return Object.freeze({recoverStartupResources:async t=>{await e.android.hasTestImeRecoveryEvidence(t.stateDir)&&await e.android.recoverTestImeStartup(t)},detachForDaemonShutdown:async()=>await e.apple.detachRunnerSessionsForShutdown(),finalizeDaemonShutdown:async()=>await e.apple.finalizeRunnerSessionsForShutdown()})}function ht(e){return Object.freeze({captureSurface:async(t,n,r)=>t.platform===`linux`?await e.linux(n,r):(gt(t),await e.macos(n,r)),presentIosAcquisition:async(e,t)=>{let{presentIosSnapshotAcquisition:n}=await import(`./ios-snapshot-runtime.js`);return await n(e,t)}})}function gt(e){if(e.platform!==`apple`||e.appleOs!==`macos`)throw TypeError(`Apple surface capture requires a non-app macOS surface`)}async function _t(e,t){let n=e?.surface===void 0?void 0:s(e.surface,`native`);if(!n)throw TypeError(`Apple surface capture requires a helper-routed macOS surface`);let{captureMacOsSurfaceSnapshot:r}=await import(`./macos-facade.js`);return await r({...e,surface:n},t)}function vt(e){let t=_(e.sessionsDir),n=Object.freeze({mode:`local`,start:t.start}),r=le(),i=Object.freeze({which:async e=>await ee(e)?e:void 0,run:async(e,t)=>{let n=await te(e.executable,ue(e),{allowFailure:e.allowFailure,cwd:e.cwd,env:e.env?{...process.env,...e.env}:void 0,signal:t,timeoutMs:e.timeoutMs});return{stdout:n.stdout,stderr:n.stderr,exitCode:n.exitCode}}}),a=T({resolveSessionArtifacts:e.resolveSessionArtifacts,processes:t,resolveTransport:async e=>{if(e.platform!==`web`)return Object.freeze({mode:`local`});let{resolveWebNetworkTransport:t}=await import(`./platform-runtime-network-web-transport.js`);return await t(e)}}),o=Z(),s=dt();return Object.freeze({commands:i,appleTools:r,toolchains:ce(),artifacts:Object.freeze({resolveSession:e.resolveSessionArtifacts}),outputs:Object.freeze({openAppend:async t=>await fe(e.sessionsDir,t),readTail:async(t,n)=>await pe(e.sessionsDir,t,n)}),processes:t,processTransports:Object.freeze({resolve:async t=>{if(t.platform!==`android`)return n;let{resolveAndroidAppLogProcessTransport:r}=await import(`./platform-runtime-app-log-android-transport.js`);return r(e.sessionsDir,t,n)}}),...a,appleDeployment:Ke(),androidDeployment:qe(),androidTools:Je(),temporaryFiles:Object.freeze({create:async e=>await se(e)}),deviceReadiness:Object.freeze({applePhysical:Be(),appleAutomation:Ve(),androidEmulator:He()}),deviceShutdown:Ue({appleTools:r,commands:i},e.shutdownLoaders,e.assertShutdownAllowed),screenRecording:O({ownedProcesses:e.ownedProcesses}),audioProbe:j({ownedProcesses:e.ownedProcesses}),perf:Re(),snapshot:e.snapshot,localInteractors:pt(),appleApplications:o,androidApplications:s,applicationResources:mt({android:s,apple:o}),clock:Object.freeze({now:()=>Date.now(),sleep:async(e,t)=>{await de(e,void 0,t?{signal:t}:void 0)}})})}export{vt as createPlatformRuntimeHost,ht as createSnapshotRuntimeHost,_t as loadMacOsSurfaceSnapshot,h as recoverLegacyAppLogMarkersAfterDaemonLock};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{F as e,P as t}from"./sdk-contracts.js";import{
|
|
1
|
+
import{F as e,P as t}from"./sdk-contracts.js";import{h as n}from"./sdk-device.js";import{r}from"./exec.js";import"./command.js";import{t as i}from"./platform-runtime-android-mechanics.js";import{n as a}from"./device-shell.js";import{n as o}from"./entities.js";const s=`debug_http_host`,c=`dev_server_https`,l=`RCT_jsLocation`,u=`RCT_packager_scheme`,d=`React Native runtime hints require adb run-as access to the app sandbox. Verify the app is debuggable and the selected package/device are correct.`,f=[`<?xml version="1.0" encoding="utf-8" standalone="yes" ?>`,`<map>`,`</map>`,``].join(`
|
|
2
2
|
`);async function p(e){let{device:t,appId:r,values:i}=e;if(!r)return;let a=h(i);if(a){if(t.platform===`android`){await S(t,r,a);return}n(t)&&t.kind===`simulator`&&await j(t,r,a)}}async function m(e){let{device:t,appId:r}=e;if(r){if(t.platform===`android`){await C(t,r);return}n(t)&&t.kind===`simulator`&&await M(t,r)}}function h(e){let t=g(_(e,`bundleUrl`)),n=_(e,`metroHost`)??t?.host,r=v(e,`metroPort`)??t?.port,i=t?.scheme??`http`;return n&&r?{host:n,port:r,scheme:i}:void 0}function g(e){if(!e)return;let n;try{n=new URL(e)}catch(n){throw new t(`INVALID_ARGS`,`Invalid runtime bundle URL: ${e}`,{},n)}if(n.protocol===`http:`||n.protocol===`https:`)return{host:y(n.hostname),port:b(n.port.length>0?Number(n.port):n.protocol===`https:`?443:80),scheme:n.protocol===`https:`?`https`:`http`}}function _(e,t){return y(e[t])}function v(e,t){let n=_(e,t);return n===void 0?void 0:b(Number(n))}function y(e){let t=e?.trim();return t&&t.length>0?t:void 0}function b(e){return Number.isInteger(e)&&e>0&&e<=65535?e:void 0}function x(e){return[`shared_prefs/${e}_preferences.xml`,`shared_prefs/ReactNativeDevPrefs.xml`]}async function S(e,t,n){await z(t);let r=[];for(let i of x(t)){let a=F(await T(e,t,i),s,`${n.host}:${n.port}`);a=I(a,c,n.scheme===`https`),r.push({path:i,xml:a})}await E(e,t,r)}async function C(e,t){await z(t);let n=[];for(let r of x(t)){let i=await T(e,t,r),a=R(R(i,s),c);a!==i&&n.push({path:r,xml:a})}n.length!==0&&await E(e,t,n)}async function w(e,t,n){let{runAndroidAdb:r}=await i();return await r(e,t,n)}async function T(e,t,n){let r=await w(e,a(`adb`,`shell`,[`run-as`,t,`cat`,n]),{allowFailure:!0});return r.exitCode===0?P(r.stdout):f}async function E(e,t,n){await D(e,t);try{await k(e,t,n)}catch(e){throw A(e,t)}}async function D(e,t){let n=a(`adb`,`shell`,[`run-as`,t,`id`]),r=await w(e,n,{allowFailure:!0});if(r.exitCode!==0)throw O(r,t,n)}function O(e,n,i){let a=V(e.stdout,e.stderr);return new t(`COMMAND_FAILED`,a?`Failed to access Android app sandbox for ${n}`:`Failed to probe Android app sandbox for ${n}`,r(e,{package:n,cmd:`adb`,args:i,hint:a?d:`adb shell run-as probe failed. Check adb connectivity and that the device is reachable. Inspect stderr/details for more information.`}))}async function k(e,t,n){await w(e,a(`adb`,`shell`,[`run-as`,t,`mkdir`,`-p`,`shared_prefs`]));for(let r of n)await w(e,a(`adb`,`shell`,[`run-as`,t,`tee`,r.path]),{stdin:r.xml.trimEnd()})}function A(n,r){let i=e(n);if(i.code===`TOOL_MISSING`)return i;let a=V(typeof i.details?.stdout==`string`?i.details.stdout:``,typeof i.details?.stderr==`string`?i.details.stderr:``);return new t(`COMMAND_FAILED`,a?`Failed to access Android app sandbox for ${r}`:`Failed to write Android runtime hints for ${r}`,{...i.details??{},package:r,cmd:`adb`,phase:`write-runtime-hints`,hint:a?d:`adb run-as succeeded, but writing React Native dev-server preferences failed. Inspect stderr/details for the failing shell command.`},i)}async function j(e,t,n){await N(e,[`spawn`,e.id,`defaults`,`write`,t,l,`-string`,`${n.host}:${n.port}`]),await N(e,[`spawn`,e.id,`defaults`,`write`,t,u,`-string`,n.scheme])}async function M(e,t){await N(e,[`spawn`,e.id,`defaults`,`delete`,t,l],{allowFailure:!0}),await N(e,[`spawn`,e.id,`defaults`,`delete`,t,u],{allowFailure:!0})}async function N(e,t,n){let[{buildSimctlArgsForDevice:r},{runXcrun:i}]=await Promise.all([import(`./simctl-facade.js`),import(`./tool-provider-facade.js`)]);await i(r(e,t),n)}function P(e){let t=e.trim();return!t.includes(`<map`)||!t.includes(`</map>`)?f:`${t}\n`}function F(e,t,n){let r=` <string name="${o(t)}">${o(n)}</string>`;return L(R(e,t),r)}function I(e,t,n){let r=` <boolean name="${o(t)}" value="${n?`true`:`false`}" />`;return L(R(e,t),r)}function L(e,t){return P(e).replace(`</map>`,`${t}\n</map>`)}function R(e,t){let n=B(t);return P(e).replace(RegExp(`^\\s*<string name="${n}">[\\s\\S]*?<\\/string>\\n?`,`m`),``).replace(RegExp(`^\\s*<boolean name="${n}" value="(?:true|false)"\\s*\\/?>\\n?`,`m`),``)}async function z(e){let{classifyAndroidAppTarget:n,formatAndroidInstalledPackageRequiredMessage:r}=await i();if(n(e)!==`binary`)return;let a=r(e);throw new t(`INVALID_ARGS`,a,{package:e,hint:a})}function B(e){return e.replaceAll(/[.*+?^${}()|[\]\\]/g,String.raw`\$&`)}function V(e,t){let n=`${e}\n${t}`.toLowerCase();return[`run-as: package not debuggable`,`run-as: permission denied`,`run-as: package is unknown`,`run-as: unknown package`,`is unknown`,`is not an application`,`could not set capabilities`].some(e=>n.includes(e))}export{p as applyRuntimeHintValues,m as clearRuntimeHintValues};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{t}from"./recording-export-quality.js";import{l as n}from"./exec.js";import"./
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{t}from"./recording-export-quality.js";import{l as n}from"./exec.js";import{t as r}from"./retry.js";import"./command.js";import{r as i}from"./version.js";import"./retry2.js";import{t as a}from"./screen-recording-runtime.js";import{n as o}from"./telemetry.js";import{a as s,c,i as l,n as u,o as d,s as f,t as p}from"./video.js";import m from"node:fs";import h from"node:path";function g(e=process.platform){if(e!==`darwin`)return`touch overlay burn-in is only available on macOS hosts; returning raw video plus gesture telemetry`}const _=5e3;let v,y;function b(){return v??=c(`recording-overlay.swift`,i()),v}function x(){return y??=c(`RecordingExportSupport.swift`,i()),y}async function S(t){let{videoPath:i,scriptPath:a,scriptArgs:o,commandDescription:c}=t,u=r.fromTimeoutMs(t.budgetMs);await s(i),await l(i);let p=C(i),h=!1;try{let r=await f({sourcePath:a,extraSourcePaths:[x()],timeoutMs:Math.max(1,u.remainingMs())}),s=u.remainingMs(),c=s-_;if(c<=0)throw new e(`COMMAND_FAILED`,`No time was left for the export within the ${t.budgetMs}ms budget`);try{await n(r,[`--input`,i,`--output`,p,...o,`--timeout-ms`,String(Math.round(c))],{timeoutMs:s,env:d()})}catch(e){throw h=u.remainingMs()<=_,e}await l(p),m.renameSync(p,i)}catch(n){let r=h?`${c}: the export did not finish within its ${t.budgetMs}ms budget; a lower --fps renders faster`:c,o=n instanceof e?n:new e(`COMMAND_FAILED`,String(n),void 0,n instanceof Error?n:void 0);throw new e(`COMMAND_FAILED`,r,{...o.details,videoPath:i,script:a},o)}finally{m.rmSync(p,{force:!0})}}function C(e){let t=h.parse(e),n=`${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`;return h.join(t.dir,`.${t.name}.agent-device-${n}${t.ext||`.mp4`}`)}async function w(e){let{videoPath:n,telemetryPath:r,exportQuality:i=t,targetLabel:a=`recording`}=e;await S({videoPath:n,scriptPath:b(),scriptArgs:[`--events`,r,`--quality`,i,...e.fps===void 0?[]:[`--max-fps`,String(e.fps)]],commandDescription:`Failed to add touch overlays to the ${a}`,budgetMs:7e4})}function T(){return Object.freeze({sniff:E,complete:D})}async function E(e){if(!await p(e.outputPath))throw k(e.outputPath)}async function D(e){if(await s(e.outputPath),await l(e.outputPath),!await u(e.outputPath))throw k(e.outputPath);let t=o({recording:{outPath:e.outputPath,gestureEvents:[...e.gestureEvents]}});return!e.showTouches||e.gestureEvents.length===0?{telemetryPath:t}:await O(e,t)}async function O(e,t){let n=g();if(n)return{telemetryPath:t,overlayWarning:n};try{if(await w({videoPath:e.outputPath,telemetryPath:t,exportQuality:e.exportQuality,...e.fps===void 0?{}:{fps:e.fps},targetLabel:e.targetLabel}),!await u(e.outputPath))throw Error(`recording post-processing produced an unplayable video`);return{telemetryPath:t}}catch(e){return{telemetryPath:t,overlayWarning:`failed to overlay recording touches: ${e instanceof Error?e.message:String(e)}`}}}function k(t){return new e(`COMMAND_FAILED`,`recording was not finalized into a playable video: ${t}`,{reason:a,retriable:!0,hint:`Run record stop again: a recorder that is still finalizing its file is playable on the next stop, and the recording keeps its evidence either way. If the recorder died before writing a video, close this session to release the device and record again.`})}export{T as createScreenRecordingFinalizer};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{F as e}from"./sdk-device.js";import{t}from"./application-lifecycle-runtime.js";import{A as n,B as r,C as i,D as a,G as o,I as s,J as c,N as l,V as u,d,h as f,n as p,o as m,s as h,v as g,w as _,x as v,z as y}from"./alert-runtime.js";import{n as b}from"./audio-probe-runtime.js";import{n as x}from"./perf-runtime.js";import{i as S}from"./touch-runtime.js";const C={appLog:!0,apps:!0,appDeployment:!0,appState:!0,network:!0,screenRecording:!0,screenshot:!0,snapshot:!0,viewport:!0,focus:!0,gesture:!0,scroll:!0,typeText:!0,touch:!0,elementText:!0,back:!0,orientation:!0,fold:!0,tvRemote:!0,keyboard:!0,clipboard:!0,systemButton:!0,triggerAppEvent:!0,settings:!0,readAlert:!0,awaitAlert:!0,acceptAlert:!0,dismissAlert:!0,audioProbeCapture:!0,audioProbeQuery:!0,perf:!0,readiness:!0,shutdown:!0};function w(e){let t={};for(let n of Object.keys(C))t[n]=e(n);return t}function T(e){return Object.freeze({...w(()=>e),lifecycle:t({resolveOpenTarget:e,prepareApplicationOpen:e,openApplication:e,applyRuntimeHints:e,clearRuntimeHints:e,closeApplication:e,finalizeApplicationClose:e,prepareAppleRunner:e,configureProviderPortReverse:e})})}function E(e,t,n){return Object.freeze({device:e,owner:t,facts:D(e,t,n),operations:Object.freeze({}),[Symbol.asyncDispose]:async()=>void 0})}function D(t,C,w){let T=k(w);return Object.freeze({device:{...e(t),providerMode:O(C)},operations:{appLogInspect:T.appLog,appLogDoctor:T.appLog,appLogStart:T.appLog,appLogReattach:T.appLog,appLogCleanup:T.appLog,listApps:T.apps,deployApp:T.appDeployment,materializeAppSource:T.appDeployment,deployMaterializedApp:T.appDeployment,sendPushNotification:T.appDeployment,appState:T.appState,networkDump:T.network,screenRecordingStart:T.screenRecording,screenRecordingReattach:T.screenRecording,screenRecordingCleanup:T.screenRecording,...c({capture:T.screenshot}),...o({capture:T.snapshot,customActions:T.snapshot,withoutActiveApp:T.snapshot}),...u({findText:T.snapshot}),...r({setViewport:T.viewport}),...y({focus:T.focus}),...s({unsupported:T.gesture}),...l({scroll:T.scroll}),...n({type:T.typeText}),...S({unsupported:T.touch,tap:T.touch,longPress:T.touch,fill:T.touch}),...a({readTextAtPoint:T.elementText}),..._({back:T.back}),...i({orientation:T.orientation}),setFoldPose:T.fold,...v({tvRemote:T.tvRemote}),...g({unsupported:T.keyboard}),...f({unsupported:T.clipboard}),...d({unsupported:T.systemButton}),...h({triggerAppEvent:T.triggerAppEvent}),...m({setSetting:T.settings,readSetting:T.settings}),...p({read:T.readAlert,wait:T.awaitAlert,accept:T.acceptAlert,dismiss:T.dismissAlert}),...b({capture:T.audioProbeCapture,query:T.audioProbeQuery}),...x({frames:T.perf,memorySample:T.perf,memorySnapshot:T.perf,nativeCapture:T.perf,profileReport:T.perf}),ensureReady:T.readiness,bootTarget:T.readiness,bootTargetHeadless:T.readiness,shutdownTarget:T.shutdown,...T.lifecycle}})}function O(e){switch(e.kind){case`local-family`:case`managed-local`:return`local`;case`provider-runtime`:return`provider-runtime`}}function k(e){return Object.freeze({...w(t=>Object.freeze({...e[t]??e.network})),lifecycle:t(e.lifecycle)})}export{E as n,D as r,T as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{F as n,N as r,P as i,d as a,j as o}from"./sdk-device.js";import{$t as s,A as c,en as l,tn as u}from"./sdk-batch.js";import{i as d,o as f,t as p}from"./device.js";import{t as ee}from"./startup-recovery-fence.js";import{i as m,n as h,r as g}from"./src2.js";import{n as _,t as v}from"./src3.js";import{i as te,m as ne}from"./src4.js";import{c as re,g as y,n as b}from"./src5.js";import{r as x,t as S}from"./src6.js";import{n as C,r as ie,t as w}from"./platform-runtime-unavailable.js";const T=Object.freeze({family:`android`});function ae(e){let t,n=()=>(t??=import(`./observation.js`).then(({createAndroidObservationAdapter:t})=>t(e)),t);return Object.freeze({readAppState:async(...e)=>await(await n()).readAppState(...e),readBlockingDialog:async(...e)=>await(await n()).readBlockingDialog(...e),readAppFocus:async(...e)=>await(await n()).readAppFocus(...e),readSnapshotNodes:async(...e)=>await(await n()).readSnapshotNodes(...e),tap:async(...e)=>await(await n()).tap(...e),openApp:async(...e)=>await(await n()).openApp(...e),readScreenSize:async(...e)=>await(await n()).readScreenSize(...e),isPermissionPackage:async(...e)=>await(await n()).isPermissionPackage(...e)})}async function oe(e,t){let{readAndroidAppStateWithExecutor:n}=await import(`./app-state.js`);return await n(e,t)}function se(e){return Object.freeze({...T,loadRuntime:async t=>{await e.bindAdbHost();let{createAndroidPlatformRuntime:n}=await import(`./runtime2.js`);return n(t)}})}function ce(e){let t=Object.freeze({sdkRoots:Object.freeze([...new Set(e.sdkRoots.map(e=>e.trim()).filter(Boolean))])});return Object.freeze({...T,loadInventory:async e=>{let{createAndroidInventory:n}=await import(`./inventory.js`);return n(e,t)}})}async function le(e){let{createAndroidShutdownRuntime:t}=await import(`./runtime3.js`);return t(e)}function ue(e){let t=new Map,n=new Map;for(let r of e.providerModules??[]){let{runtime:e,module:i}=r,a=l(i.owner);if(i.owner.provider!==e.provider)throw z(`Provider platform runtime metadata is invalid: ${a}`);if(t.has(a))throw z(`Duplicate platform runtime owner: ${a}`);if(n.has(e))throw z(`Duplicate platform module registration for ${e.provider}`);t.set(a,r),n.set(e,i)}let r=new Map;for(let t of e.managedOwners??[]){let e=l(t);if(r.has(e))throw z(`Duplicate platform runtime owner: ${e}`);r.set(e,t)}let i=new Map,a=new Map,o=new Map,s=new Map,c,d=async()=>{c??=e.loadHost();try{return await c}catch(e){throw c=void 0,e}},f,p,m=Object.freeze({recoverStartupResources:async e=>{await ee(e.stateDir,async()=>{await(await d()).applicationResources.recoverStartupResources(e)})},detachForDaemonShutdown:async()=>{f??=d().then(async e=>await e.applicationResources.detachForDaemonShutdown()),await f},finalizeDaemonShutdown:async()=>{p??=d().then(async e=>await e.applicationResources.finalizeDaemonShutdown()),await p}}),h=e=>{let t=l(e.owner),n=s.get(t);if(n&&n!==e)throw z(`Duplicate platform runtime owner: ${t}`);return s.set(t,e),e},g=async t=>{let n=i.get(t);if(n)return await n;let r=e.modules.get(t);if(!r)throw z(`Missing platform runtime module for ${t}`);if(r.family!==t)throw z(`Platform runtime module registered for ${t} declares ${r.family}`);let a=d().then(async e=>{let n=await r.loadRuntime(e);if(n.owner.kind!==`local-family`||n.owner.family!==t)throw z(`Platform runtime module for ${t} returned a different local owner`);return h(n)});i.set(t,a);try{return await a}catch(e){throw i.get(t)===a&&i.delete(t),e}},_=async e=>{let t=a.get(e);if(t)return await t;let n=d().then(async t=>{let n=await e.loadRuntime(t);if(!u(n.owner,e.owner))throw z(`Provider platform runtime returned a different advertised owner`);return h(n)});a.set(e,n);try{return await n}catch(t){throw a.get(e)===n&&a.delete(e),t}},v=async e=>{let t=l(e),n=r.get(t);if(!n)throw R(e);let i=o.get(t);if(i)return i;let{createManagedLocalRuntimeOwner:a}=await import(`./platform-runtime-managed-owner.js`),s=h(a({owner:n,loadLocal:g}));return o.set(t,s),s};return Object.freeze({applicationLifecycle:m,inspectFacts:async t=>{let r=E(e.providerRuntimes,t);if(r){let e=n.get(r);return e?await D(await _(e),t):L(r,t)}return await D(await g(t.platform),t)},bind:async r=>{if(r.intent.kind===`exact-owner`)return await O(await P(r.intent.owner,t,_,g,v),r);let i=E(e.providerRuntimes,r.device);if(i){let e=n.get(i);return e?await O(await _(e),r):I(i,r.device)}return await O(await g(r.device.platform),r)},shutdown:async()=>{await Promise.allSettled([...s.values()].map(async e=>await e.shutdown())),s.clear(),i.clear(),a.clear(),o.clear()}})}function E(e,t){let n=(e??[]).filter(e=>e.ownsDevice(t));if(n.length>1)throw z(`Multiple provider runtimes claim the selected device`);return n[0]}async function D(e,t){let n=await e.inspectFacts(t);if(!M(t,e.owner,n))throw z(`Platform runtime facts do not match the selected device and owner`);return n}async function O(e,t){let n=await e.bind(t),r=k(e,n,t);if(!r)return n;let i;try{await n[Symbol.asyncDispose]()}catch(e){i=e instanceof Error?e.message:String(e)}throw z(r,i)}function k(e,t,n){if(!u(t.owner,e.owner))return`Platform binding returned a different owner than the selected runtime`;if(!A(t.owner,n))return`Exact platform binding returned a different persisted owner`;if(!i(o(t.device),o(n.device)))return`Platform binding returned a different device identity`;if(!j(t))return`Platform binding facts do not match its device and owner`}function A(e,t){return t.intent.kind!==`exact-owner`||u(e,t.intent.owner)}function j(e){return M(e.device,e.owner,e.facts)}function M(e,t,i){return n(i.device,r(e))&&N(i.device.providerMode,t)}function N(e,t){switch(t.kind){case`local-family`:return e===`local`||e===`transport-composed`;case`managed-local`:return e===`local`||e===`transport-composed`;case`provider-runtime`:return e===`provider-runtime`}}async function P(e,t,n,r,i){switch(e.kind){case`local-family`:{let t=await r(e.family);if(u(t.owner,e))return t;throw R(e)}case`managed-local`:return await i(e);case`provider-runtime`:{let r=t.get(l(e));if(r)return await n(r.module);throw R(e)}}}const F=Object.freeze({available:!1,reason:`unsupported-provider-mode`});function I(e,t){let n=s(e.provider,`default`);return C(t,n,w(F))}function L(e,t){return ie(t,s(e.provider,`default`),w(F))}function R(e){return new t(`UNSUPPORTED_OPERATION`,`The exact platform runtime owner is unavailable.`,{reason:`owner-unavailable`,owner:l(e)})}function z(e,n){return new t(`COMMAND_FAILED`,e,{reason:`runtime-contract-invalid`,...n?{cleanupError:n}:{}})}function B(e){let t=V(e.registry,e.loadHost),n=e.provider,r=n?async(e,r)=>{r.signal.throwIfAborted();let i=await n.discover(f(e),r.signal);return r.signal.throwIfAborted(),ge(i),i.kind===`inventory`?{devices:d(i.devices.map(e=>({...e})),e),source:`provider`}:{devices:await t.discover(e,r),source:`local`}}:async(e,n)=>({devices:await t.discover(e,n),source:`local`}),i=Object.freeze({discover:async(e,t)=>(await r(e,t)).devices,discoverWithSource:r});return Object.freeze({providerFirst:i,localOnly:t,findInstalledApp:async(e,t)=>{let{findIosSimulatorInstalledApp:n}=await import(`./app-resolution-facade.js`);return await n(e,t)}})}function V(e,t){let n,r=async()=>{n??=t();try{return await n}catch(e){throw n=void 0,e}},i=new Map,a=async t=>{let n=i.get(t);if(n)return await n;let a=H(e.get(t),r);i.set(t,a);try{return await a}catch(e){throw i.get(t)===a&&i.delete(t),e}};return Object.freeze({discover:async(e,t)=>{if(t.signal.throwIfAborted(),e.platform)return await W(a,G(e.platform),e,t);let n=await Promise.all(p.map(async n=>{try{let r=await W(a,G(n),{...e,platform:n},t);return Array.isArray(r)?r:[]}catch{return[]}}));return t.signal.throwIfAborted(),n.flat()}})}async function H(e,t){switch(e.family){case`apple`:return await e.loadInventory(U(await t()));case`android`:return await e.loadInventory(de(await t()));case`harmonyos`:return await e.loadInventory(fe(await t()));case`vega`:return await e.loadInventory(pe(await t()));case`linux`:return await e.loadInventory(me(await t()));case`web`:return await e.loadInventory()}}function U(e){return Object.freeze({appleTools:e.appleTools,files:e.files,hostName:e.hostName,hostOs:e.hostOs,observations:e.observations})}function de(e){return Object.freeze({commands:e.commands,files:e.files,homeDirectory:e.homeDirectory,toolchains:e.toolchains})}function fe(e){return Object.freeze({commands:e.commands,files:e.files,toolchains:e.toolchains})}function pe(e){return Object.freeze({commands:e.commands,files:e.files,homeDirectory:e.homeDirectory})}function me(e){return Object.freeze({hostName:e.hostName,hostOs:e.hostOs})}async function W(e,t,n,r){let i=await e(t);r.signal.throwIfAborted();let a=await i.discover(n,r);return r.signal.throwIfAborted(),he(t,a),d(a,n)}function G(e){return a(e)?`apple`:e}function he(e,n){let r=n.find(t=>t.platform!==e);if(r)throw new t(`COMMAND_FAILED`,`Platform inventory source ${e} returned a ${r.platform} device.`,{expectedFamily:e,actualFamily:r.platform,deviceId:r.id})}function ge(e){if(typeof e==`object`&&e){let t=e;if(t.kind===`declined`&&!(`devices`in t)||t.kind===`inventory`&&Array.isArray(t.devices))return}throw new t(`COMMAND_FAILED`,`Provider device inventory returned an invalid outcome.`,{reason:`provider_inventory_contract_violation`})}function _e(){return Object.freeze({async runAdb(e,t,n){let{runAndroidAdb:r}=await K(),i=await r(e,t,n);return{exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr}},async readSnapshotNodes(e){let{snapshotAndroid:t,androidSnapshotPublicationInput:n}=await K(),{buildSnapshotState:r}=await import(`./snapshot-state.js`).then(e=>e.n);return r(n(await t(e,{interactiveOnly:!1})),void 0).nodes},async openApp(e,t){let{openAndroidApp:n}=await K();await n(e,t)}})}async function K(){let{loadAndroidMechanics:e}=await import(`./platform-runtime-android-mechanics.js`).then(e=>e.n);return await e()}var ve=e({androidObservation:()=>J,createPlatformDeviceInventoryGateways:()=>X,createPlatformRuntimeGateway:()=>Q,createRequestPlatformProviders:()=>$,getAndroidAppStateWithAdb:()=>ye,platformModuleRegistry:()=>Y,platformRuntimeModules:()=>Z});async function ye(e,t){return await oe(e,t)}const q=ce({sdkRoots:Ce(process.env.ANDROID_SDK_ROOT,process.env.ANDROID_HOME)}),J=ae(_e()),be=Object.freeze({apple:async e=>await g(e),android:async e=>await le(e)}),xe=te({hdcSdkPath:process.env.HDC_SDK_PATH,devecoSdkHome:process.env.DEVECO_SDK_HOME,commandLineToolsHome:process.env.HARMONYOS_COMMAND_LINE_TOOLS}),Y=c([h,q,xe,v,re,S]);function X(e){return B({registry:Y,loadHost:async()=>{let{createDeviceInventoryHost:e}=await import(`./platform-runtime-host.js`);return e()},provider:e})}const Se=se({bindAdbHost:async()=>{await import(`./platform-runtime-android-adb-host.js`).then(e=>e.t)}}),Z=new Map([[`apple`,m],[`android`,Se],[`harmonyos`,ne],[`vega`,_],[`linux`,y],[`web`,x]]);function Q(e){return ue({modules:Z,loadHost:async()=>{let{createPlatformRuntimeHost:t,createSnapshotRuntimeHost:n,loadMacOsSurfaceSnapshot:r}=await import(`./platform-runtime-operation-host.js`);return t({sessionsDir:e.sessionsDir,resolveSessionArtifacts:e.resolveSessionArtifacts,shutdownLoaders:be,assertShutdownAllowed:e.assertShutdownAllowed,snapshot:n({linux:b,macos:r}),ownedProcesses:e.ownedProcesses})},providerRuntimes:e.providerRuntimes,providerModules:e.providerModules})}function $(e={}){let t,n=()=>(t??=import(`./request-providers.js`).then(({createComposedRequestPlatformProviders:t})=>t(e)),t);return Object.freeze({hasConfiguredResolvers:Object.values(e.providers??{}).some(Boolean),run:async(e,t)=>await(await n()).run(e,t)})}function Ce(...e){return e.flatMap(e=>{let t=e?.trim();return t?[t]:[]})}export{ve as a,$ as i,X as n,Q as r,J as t};
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{P as t}from"./sdk-contracts.js";import{F as n,I as r,L as i,N as a,f as o}from"./sdk-device.js";import{$t as s,A as c,en as l,tn as u}from"./sdk-batch.js";import{i as d,o as f,t as p}from"./device.js";import{t as ee}from"./startup-recovery-fence.js";import{i as m,n as h,r as g}from"./src2.js";import{n as _,t as v}from"./src3.js";import{i as te,m as ne}from"./src4.js";import{c as re,g as y,n as b}from"./src5.js";import{r as x,t as S}from"./src6.js";import{n as C,r as ie,t as w}from"./platform-runtime-unavailable.js";const T=Object.freeze({family:`android`});function ae(e){let t,n=()=>(t??=import(`./observation.js`).then(({createAndroidObservationAdapter:t})=>t(e)),t);return Object.freeze({readAppState:async(...e)=>await(await n()).readAppState(...e),readBlockingDialog:async(...e)=>await(await n()).readBlockingDialog(...e),readAppFocus:async(...e)=>await(await n()).readAppFocus(...e),readSnapshotNodes:async(...e)=>await(await n()).readSnapshotNodes(...e),tap:async(...e)=>await(await n()).tap(...e),openApp:async(...e)=>await(await n()).openApp(...e),readScreenSize:async(...e)=>await(await n()).readScreenSize(...e),isPermissionPackage:async(...e)=>await(await n()).isPermissionPackage(...e)})}async function oe(e,t){let{readAndroidAppStateWithExecutor:n}=await import(`./app-state.js`);return await n(e,t)}function se(e){return Object.freeze({...T,loadRuntime:async t=>{await e.bindAdbHost();let{createAndroidPlatformRuntime:n}=await import(`./runtime3.js`);return n(t)}})}function ce(e){let t=Object.freeze({sdkRoots:Object.freeze([...new Set(e.sdkRoots.map(e=>e.trim()).filter(Boolean))])});return Object.freeze({...T,loadInventory:async e=>{let{createAndroidInventory:n}=await import(`./inventory.js`);return n(e,t)}})}async function le(e){let{createAndroidShutdownRuntime:t}=await import(`./runtime4.js`);return t(e)}function ue(e){let t=new Map,n=new Map;for(let r of e.providerModules??[]){let{runtime:e,module:i}=r,a=l(i.owner);if(i.owner.provider!==e.provider)throw z(`Provider platform runtime metadata is invalid: ${a}`);if(t.has(a))throw z(`Duplicate platform runtime owner: ${a}`);if(n.has(e))throw z(`Duplicate platform module registration for ${e.provider}`);t.set(a,r),n.set(e,i)}let r=new Map;for(let t of e.managedOwners??[]){let e=l(t);if(r.has(e))throw z(`Duplicate platform runtime owner: ${e}`);r.set(e,t)}let i=new Map,a=new Map,o=new Map,s=new Map,c,d=async()=>{c??=e.loadHost();try{return await c}catch(e){throw c=void 0,e}},f,p,m=Object.freeze({recoverStartupResources:async e=>{await ee(e.stateDir,async()=>{await(await d()).applicationResources.recoverStartupResources(e)})},detachForDaemonShutdown:async()=>{f??=d().then(async e=>await e.applicationResources.detachForDaemonShutdown()),await f},finalizeDaemonShutdown:async()=>{p??=d().then(async e=>await e.applicationResources.finalizeDaemonShutdown()),await p}}),h=e=>{let t=l(e.owner),n=s.get(t);if(n&&n!==e)throw z(`Duplicate platform runtime owner: ${t}`);return s.set(t,e),e},g=async t=>{let n=i.get(t);if(n)return await n;let r=e.modules.get(t);if(!r)throw z(`Missing platform runtime module for ${t}`);if(r.family!==t)throw z(`Platform runtime module registered for ${t} declares ${r.family}`);let a=d().then(async e=>{let n=await r.loadRuntime(e);if(n.owner.kind!==`local-family`||n.owner.family!==t)throw z(`Platform runtime module for ${t} returned a different local owner`);return h(n)});i.set(t,a);try{return await a}catch(e){throw i.get(t)===a&&i.delete(t),e}},_=async e=>{let t=a.get(e);if(t)return await t;let n=d().then(async t=>{let n=await e.loadRuntime(t);if(!u(n.owner,e.owner))throw z(`Provider platform runtime returned a different advertised owner`);return h(n)});a.set(e,n);try{return await n}catch(t){throw a.get(e)===n&&a.delete(e),t}},v=async e=>{let t=l(e),n=r.get(t);if(!n)throw R(e);let i=o.get(t);if(i)return i;let{createManagedLocalRuntimeOwner:a}=await import(`./platform-runtime-managed-owner.js`),s=h(a({owner:n,loadLocal:g}));return o.set(t,s),s};return Object.freeze({applicationLifecycle:m,inspectFacts:async t=>{let r=E(e.providerRuntimes,t);if(r){let e=n.get(r);return e?await D(await _(e),t):L(r,t)}return await D(await g(t.platform),t)},bind:async r=>{if(r.intent.kind===`exact-owner`)return await O(await P(r.intent.owner,t,_,g,v),r);let i=E(e.providerRuntimes,r.device);if(i){let e=n.get(i);return e?await O(await _(e),r):I(i,r.device)}return await O(await g(r.device.platform),r)},shutdown:async()=>{await Promise.allSettled([...s.values()].map(async e=>await e.shutdown())),s.clear(),i.clear(),a.clear(),o.clear()}})}function E(e,t){let n=(e??[]).filter(e=>e.ownsDevice(t));if(n.length>1)throw z(`Multiple provider runtimes claim the selected device`);return n[0]}async function D(e,t){let n=await e.inspectFacts(t);if(!M(t,e.owner,n))throw z(`Platform runtime facts do not match the selected device and owner`);return n}async function O(e,t){let n=await e.bind(t),r=k(e,n,t);if(!r)return n;let i;try{await n[Symbol.asyncDispose]()}catch(e){i=e instanceof Error?e.message:String(e)}throw z(r,i)}function k(e,t,n){if(!u(t.owner,e.owner))return`Platform binding returned a different owner than the selected runtime`;if(!A(t.owner,n))return`Exact platform binding returned a different persisted owner`;if(!r(a(t.device),a(n.device)))return`Platform binding returned a different device identity`;if(!j(t))return`Platform binding facts do not match its device and owner`}function A(e,t){return t.intent.kind!==`exact-owner`||u(e,t.intent.owner)}function j(e){return M(e.device,e.owner,e.facts)}function M(e,t,r){return i(r.device,n(e))&&N(r.device.providerMode,t)}function N(e,t){switch(t.kind){case`local-family`:return e===`local`||e===`transport-composed`;case`managed-local`:return e===`local`||e===`transport-composed`;case`provider-runtime`:return e===`provider-runtime`}}async function P(e,t,n,r,i){switch(e.kind){case`local-family`:{let t=await r(e.family);if(u(t.owner,e))return t;throw R(e)}case`managed-local`:return await i(e);case`provider-runtime`:{let r=t.get(l(e));if(r)return await n(r.module);throw R(e)}}}const F=Object.freeze({available:!1,reason:`unsupported-provider-mode`});function I(e,t){let n=s(e.provider,`default`);return C(t,n,w(F))}function L(e,t){return ie(t,s(e.provider,`default`),w(F))}function R(e){return new t(`UNSUPPORTED_OPERATION`,`The exact platform runtime owner is unavailable.`,{reason:`owner-unavailable`,owner:l(e)})}function z(e,n){return new t(`COMMAND_FAILED`,e,{reason:`runtime-contract-invalid`,...n?{cleanupError:n}:{}})}function B(e){let t=V(e.registry,e.loadHost),n=e.provider,r=n?async(e,r)=>{r.signal.throwIfAborted();let i=await n.discover(f(e),r.signal);return r.signal.throwIfAborted(),ge(i),i.kind===`inventory`?{devices:d(i.devices.map(e=>({...e})),e),source:`provider`}:{devices:await t.discover(e,r),source:`local`}}:async(e,n)=>({devices:await t.discover(e,n),source:`local`}),i=Object.freeze({discover:async(e,t)=>(await r(e,t)).devices,discoverWithSource:r});return Object.freeze({providerFirst:i,localOnly:t,findInstalledApp:async(e,t)=>{let{findIosSimulatorInstalledApp:n}=await import(`./app-resolution-facade.js`);return await n(e,t)}})}function V(e,t){let n,r=async()=>{n??=t();try{return await n}catch(e){throw n=void 0,e}},i=new Map,a=async t=>{let n=i.get(t);if(n)return await n;let a=H(e.get(t),r);i.set(t,a);try{return await a}catch(e){throw i.get(t)===a&&i.delete(t),e}};return Object.freeze({discover:async(e,t)=>{if(t.signal.throwIfAborted(),e.platform)return await W(a,G(e.platform),e,t);let n=await Promise.all(p.map(async n=>{try{let r=await W(a,G(n),{...e,platform:n},t);return Array.isArray(r)?r:[]}catch{return[]}}));return t.signal.throwIfAborted(),n.flat()}})}async function H(e,t){switch(e.family){case`apple`:return await e.loadInventory(U(await t()));case`android`:return await e.loadInventory(de(await t()));case`harmonyos`:return await e.loadInventory(fe(await t()));case`vega`:return await e.loadInventory(pe(await t()));case`linux`:return await e.loadInventory(me(await t()));case`web`:return await e.loadInventory()}}function U(e){return Object.freeze({appleTools:e.appleTools,files:e.files,hostName:e.hostName,hostOs:e.hostOs,observations:e.observations})}function de(e){return Object.freeze({commands:e.commands,files:e.files,homeDirectory:e.homeDirectory,toolchains:e.toolchains})}function fe(e){return Object.freeze({commands:e.commands,files:e.files,toolchains:e.toolchains})}function pe(e){return Object.freeze({commands:e.commands,files:e.files,homeDirectory:e.homeDirectory})}function me(e){return Object.freeze({hostName:e.hostName,hostOs:e.hostOs})}async function W(e,t,n,r){let i=await e(t);r.signal.throwIfAborted();let a=await i.discover(n,r);return r.signal.throwIfAborted(),he(t,a),d(a,n)}function G(e){return o(e)?`apple`:e}function he(e,n){let r=n.find(t=>t.platform!==e);if(r)throw new t(`COMMAND_FAILED`,`Platform inventory source ${e} returned a ${r.platform} device.`,{expectedFamily:e,actualFamily:r.platform,deviceId:r.id})}function ge(e){if(typeof e==`object`&&e){let t=e;if(t.kind===`declined`&&!(`devices`in t)||t.kind===`inventory`&&Array.isArray(t.devices))return}throw new t(`COMMAND_FAILED`,`Provider device inventory returned an invalid outcome.`,{reason:`provider_inventory_contract_violation`})}function _e(){return Object.freeze({async runAdb(e,t,n){let{runAndroidAdb:r}=await K(),i=await r(e,t,n);return{exitCode:i.exitCode,stdout:i.stdout,stderr:i.stderr}},async readSnapshotNodes(e){let{snapshotAndroid:t,androidSnapshotPublicationInput:n}=await K(),{buildSnapshotState:r}=await import(`./snapshot-state.js`).then(e=>e.n);return r(n(await t(e,{interactiveOnly:!1})),void 0).nodes},async openApp(e,t){let{openAndroidApp:n}=await K();await n(e,t)}})}async function K(){let{loadAndroidMechanics:e}=await import(`./platform-runtime-android-mechanics.js`).then(e=>e.n);return await e()}var ve=e({androidObservation:()=>J,createPlatformDeviceInventoryGateways:()=>X,createPlatformRuntimeGateway:()=>Q,createRequestPlatformProviders:()=>$,getAndroidAppStateWithAdb:()=>ye,platformModuleRegistry:()=>Y,platformRuntimeModules:()=>Z});async function ye(e,t){return await oe(e,t)}const q=ce({sdkRoots:Ce(process.env.ANDROID_SDK_ROOT,process.env.ANDROID_HOME)}),J=ae(_e()),be=Object.freeze({apple:async e=>await g(e),android:async e=>await le(e)}),xe=te({hdcSdkPath:process.env.HDC_SDK_PATH,devecoSdkHome:process.env.DEVECO_SDK_HOME,commandLineToolsHome:process.env.HARMONYOS_COMMAND_LINE_TOOLS}),Y=c([h,q,xe,v,re,S]);function X(e){return B({registry:Y,loadHost:async()=>{let{createDeviceInventoryHost:e}=await import(`./platform-runtime-host.js`);return e()},provider:e})}const Se=se({bindAdbHost:async()=>{await import(`./platform-runtime-android-adb-host.js`).then(e=>e.t)}}),Z=new Map([[`apple`,m],[`android`,Se],[`harmonyos`,ne],[`vega`,_],[`linux`,y],[`web`,x]]);function Q(e){return ue({modules:Z,loadHost:async()=>{let{createPlatformRuntimeHost:t,createSnapshotRuntimeHost:n,loadMacOsSurfaceSnapshot:r}=await import(`./platform-runtime-operation-host.js`);return t({sessionsDir:e.sessionsDir,resolveSessionArtifacts:e.resolveSessionArtifacts,shutdownLoaders:be,assertShutdownAllowed:e.assertShutdownAllowed,snapshot:n({linux:b,macos:r}),ownedProcesses:e.ownedProcesses})},providerRuntimes:e.providerRuntimes,providerModules:e.providerModules})}function $(e={}){let t,n=()=>(t??=import(`./request-providers.js`).then(({createComposedRequestPlatformProviders:t})=>t(e)),t);return Object.freeze({hasConfiguredResolvers:Object.values(e.providers??{}).some(Boolean),run:async(e,t)=>await(await n()).run(e,t)})}function Ce(...e){return e.flatMap(e=>{let t=e?.trim();return t?[t]:[]})}export{ve as a,$ as i,X as n,Q as r,J as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{nn as t,tn as n}from"./sdk-batch.js";import{n as r,t as i}from"./application-lifecycle-runtime.js";import{A as a,B as o,C as s,F as c,G as ee,I as te,J as l,M as u,N as ne,R as d,U as f,d as p,h as m,k as h,n as g,o as _,q as v,s as y,v as re,w as ie,x as ae,z as oe}from"./alert-runtime.js";import{i as se,n as ce}from"./touch-runtime.js";import{r as b}from"./platform-runtime-unavailable.js";import{r as le,t as ue}from"./capabilities.js";import{n as de}from"./src7.js";import{r as fe}from"./gesture-admission.js";import{n as pe}from"./interactor-operation-catalog.js";import{r as me,t as he}from"./application-lifecycle-interaction.js";function ge(e){return he({owner:`WebDriver`,openTargetIdentity:`bundle-id`,closeBeforeRelaunch:!0,binding:me({device:e.device,signal:e.signal,resolveInteractor:t=>e.getInteractor(e.device,t)})})}const x=Object.freeze({available:!0}),S=Object.freeze({available:!1,reason:`unsupported-provider-mode`}),C=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver provider runtimes do not expose screen recording.`}),w=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`Headless boot is unavailable for provider-owned devices.`}),T=Object.freeze({available:!1,reason:`owner-capability-missing`,hint:`WebDriver provider runtimes do not expose app inventory.`}),E=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose app deployment.`}),D=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`Push notifications are unavailable for WebDriver provider-owned devices.`}),O=Object.freeze({available:!1,reason:`owner-capability-missing`,hint:`The WebDriver provider session is no longer active for this device.`}),k=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose snapshot capture for this device.`}),A=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose screenshot capture for this device.`}),j=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver provider runtimes do not expose iOS simulator custom snapshot actions.`}),M=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver provider runtimes do not expose viewport resizing.`}),N=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose focus for this device.`}),P=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose text entry for this device.`}),F=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose gestures for this device.`}),I=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose scrolling for this device.`}),L=Object.freeze({available:!1,reason:`unsupported-device-kind`,hint:fe}),_e=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver provider runtimes read element text from the captured tree only.`}),R=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose back for this device.`}),ve=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose home for this device.`}),z=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose orientation for this device.`}),B=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver provider runtimes do not expose tv-remote.`}),V=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose this keyboard action for this device.`}),H=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose clipboard access for this device.`}),ye=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose the app switcher for this device.`}),U=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`No WebDriver backend presses this system button.`}),W=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`fold runs a HID helper through simctl spawn inside a foldable iPhone simulator on the daemon host; a WebDriver backend has no such simulator.`}),G=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver provider runtimes do not expose native alert handling.`}),K=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver provider runtimes do not expose device settings.`}),q=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose app-event delivery for this device.`}),be=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver provider runtimes do not expose a foreground app-state operation.`}),J=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`This WebDriver provider runtime does not expose the audio probe.`}),xe=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`Apple runner preparation is unavailable for WebDriver-owned devices.`}),Se=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver open is supported only for its owned iOS or Android mobile-device sessions.`}),Ce=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver close is supported only for its owned iOS or Android mobile-device sessions.`}),Y=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`Runtime hints are not applied to provider-owned devices.`}),X=Object.freeze({available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver provider runtimes do not expose port reverse.`});function we(e){let t=e.platform===`android`&&e.kind===`device`&&e.target===`mobile`||e.platform===`apple`&&e.kind===`device`&&e.target===`mobile`&&e.appleOs===`ios`,n=t?x:Se,r=t?x:Ce;return i({resolveOpenTarget:n,prepareApplicationOpen:n,openApplication:n,applyRuntimeHints:Y,clearRuntimeHints:Y,closeApplication:r,finalizeApplicationClose:r,prepareAppleRunner:xe,configureProviderPortReverse:X})}function Te(t){return Object.freeze({owner:t.owner,ownsDevice:t.ownsDevice,inspectFacts:async e=>Q(t,e),bind:async r=>{if(r.intent.kind===`exact-owner`&&!n(r.intent.owner,t.owner))throw new e(`UNSUPPORTED_OPERATION`,`WebDriver runtime owner identity does not match`);if(!t.ownsDevice(r.device))throw new e(`UNSUPPORTED_PLATFORM`,`WebDriver runtime does not own this device`);if(!$(t,r.device))throw new e(`UNSUPPORTED_OPERATION`,`The WebDriver provider session is no longer active for this device.`);return De(t,r.device,r.scope.signal)},shutdown:async()=>void 0})}function Ee(e,n,r,i){let a={device:n,signal:r,resolveInteractor:t=>e.getInteractor?.(n,t),presentIosAcquisition:e.host.snapshot.presentIosAcquisition};return{...i.operations.captureSnapshot.available?f(a):{},...i.operations.captureScreenshot.available?v(a):{},...i.operations.focusPoint.available?d(a):{},...i.operations.typeText.available?h(a):{},...c({...a,facts:i.operations}),...i.operations.scrollDirection.available?u(a):{},...pe({...a,facts:i.operations}),...t(i.operations.tapPoint,()=>ce({...a,facts:i.operations,pause:async t=>await e.host.clock.sleep(t,r)}))}}function De(e,t,n){let i=t.platform===`apple`?`ios-device`:`android`,a=Q(e,t),o=a.operations.deployApp,s=Object.freeze({ensureReady:async()=>({...t,booted:!0}),bootTarget:async()=>({...t,booted:!0}),...r(ge({device:t,signal:n,getInteractor:(t,n)=>e.getInteractor?.(t,n)}),a.operations),...Ee(e,t,n,a),networkDump:async t=>{let n=await e.host.appLogs.readRecent(t.sessionId,t.maxScanLines),{dump:r}=de(n.text,{...t,path:n.path,exists:n.exists,lineNumberOffset:n.skippedLines,backend:i});return Object.freeze({source:`app-log`,backend:i,dump:r,notes:Object.freeze(r.entries.length===0?[`No HTTP(s) entries were found in recent session app logs.`]:[])})},...o.available&&e.deployment?{deployApp:async r=>await e.deployment.deployApp(t,r,n),materializeAppSource:async r=>await je(e.host,t,r,n),deployMaterializedApp:async r=>await e.deployment.deployMaterializedApp(t,r,n)}:{}});return Object.freeze({device:t,owner:e.owner,facts:a,operations:s,[Symbol.asyncDispose]:async()=>void 0})}function Z(e,t){return e?x:t}function Oe(e){return e.reachable?ue(e.capabilities,e.operation)?x:Object.freeze({available:!1,reason:`owner-capability-missing`,hint:le(e.capabilities,e.operation)}):e.whenUnreachable}function Q(e,t){if(!$(e,t))return b(t,e.owner,{appLog:O,appDeployment:O,network:O,screenRecording:O,screenshot:O,viewport:O,focus:O,gesture:O,scroll:O,typeText:O,touch:O,elementText:O,back:O,orientation:O,tvRemote:O,keyboard:O,clipboard:O,systemButton:O,fold:W,triggerAppEvent:O,settings:O,readAlert:O,awaitAlert:O,acceptAlert:O,dismissAlert:O,audioProbeCapture:O,audioProbeQuery:O,perf:O,lifecycle:i({resolveOpenTarget:O,prepareApplicationOpen:O,openApplication:O,applyRuntimeHints:O,clearRuntimeHints:O,closeApplication:O,finalizeApplicationClose:O,prepareAppleRunner:O,configureProviderPortReverse:O})});let n=e.deployment?.fact(t)??E,r=b(t,e.owner,{appLog:S,appDeployment:E,network:S,screenRecording:C,screenshot:A,viewport:M,focus:N,gesture:F,scroll:I,typeText:P,touch:P,elementText:_e,back:R,orientation:z,tvRemote:B,keyboard:V,clipboard:H,systemButton:U,fold:W,triggerAppEvent:q,settings:K,readAlert:G,awaitAlert:G,acceptAlert:G,dismissAlert:G,audioProbeCapture:J,audioProbeQuery:J,perf:J,lifecycle:we(t)}),c=e.getInteractor!==void 0&&Ae(t),u=c&&e.snapshotAvailable!==!1?x:k,d=c&&e.screenshotAvailable!==!1?x:A,f=(t,n)=>Oe({reachable:c,capabilities:e.capabilities,operation:t,whenUnreachable:n});return Object.freeze({device:r.device,operations:{...r.operations,deployApp:n,materializeAppSource:n,deployMaterializedApp:n,sendPushNotification:D,appState:be,networkDump:x,...ee({capture:u,customActions:j,withoutActiveApp:u}),...l({capture:d}),...oe({focus:Z(c,N)}),...a({type:f(`type`,P)}),...se({unsupported:N,tap:f(`tap`,N),longPress:f(`longPress`,N),fill:f(`fill`,P),fillRef:P}),...te({unsupported:F,plan:Z(c,F),directionalFling:Z(c,F),multiTouch:ke(t,c),targetAuthoredDrag:Z(c,F),viewport:Z(c,F)}),...ne({scroll:f(`scroll`,I)}),...ie({back:f(`back`,R)}),...s({orientation:f(`orientation`,z)}),...ae({tvRemote:B}),...re({unsupported:V,dismiss:f(`keyboard`,V),...t.platform===`android`?{enter:f(`keyboard`,V),status:f(`keyboard`,V)}:{}}),...m({unsupported:H,read:f(`clipboard.read`,H),write:f(`clipboard.write`,H)}),...p({unsupported:U,home:f(`home`,ve),appSwitcher:f(`appSwitcher`,ye)}),setFoldPose:W,...y({triggerAppEvent:Z(c,q)}),..._({setSetting:K,readSetting:K}),...g({read:G,wait:G,accept:G,dismiss:G}),...o({setViewport:M}),ensureReady:x,bootTarget:x,bootTargetHeadless:w,listApps:T,shutdownTarget:{available:!1,reason:`unsupported-provider-mode`,hint:`WebDriver owns the target lifecycle for provider-owned devices.`}}})}function ke(e,t){return t?e.platform===`apple`?L:x:F}function Ae(e){return e.kind===`device`&&e.target===`mobile`&&(e.platform===`android`||e.platform===`apple`&&e.appleOs===`ios`)}function $(e,t){return e.isSessionActive?.(t)??e.ownsDevice(t)}async function je(e,t,n,r){return t.platform===`apple`?await e.appleDeployment.prepareArtifact(n,{signal:r}):await e.androidDeployment.prepareArtifact(n,{signal:r})}export{Te as createWebDriverPlatformRuntimeOwner};
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{nn as t,rn as n,tn as r}from"./sdk-batch.js";import{n as i,t as a}from"./application-lifecycle-runtime.js";import{A as o,B as s,C as c,F as l,G as u,I as ee,J as d,M as f,N as p,R as m,U as h,d as g,h as _,k as te,n as ne,o as re,q as ie,s as ae,v as oe,w as se,x as ce,z as le}from"./alert-runtime.js";import{i as ue,n as de}from"./touch-runtime.js";import{r as v,t as fe}from"./platform-runtime-unavailable.js";import{a as pe,n as me,s as he}from"./runtime-deployment.js";import{n as ge}from"./src7.js";import{r as _e}from"./gesture-admission.js";import{n as ve}from"./interactor-operation-catalog.js";import{i as y,t as b}from"./application-lifecycle-interaction.js";function x(e){return b({owner:`WebDriver`,openTargetIdentity:`bundle-id`,closeBeforeRelaunch:!0,binding:y({device:e.device,signal:e.signal,resolveInteractor:t=>e.getInteractor(e.device,t)})})}const S=Object.freeze({available:!0}),C=t(`unsupported-provider-mode`),w=t(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose screen recording.`),T=t(`unsupported-provider-mode`,`Headless boot is unavailable for provider-owned devices.`),E=t(`owner-capability-missing`,`WebDriver provider runtimes do not expose app inventory.`),D=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose app deployment.`),O=t(`unsupported-provider-mode`,`Push notifications are unavailable for WebDriver provider-owned devices.`),k=me,A=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose snapshot capture for this device.`),j=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose screenshot capture for this device.`),M=t(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose iOS simulator custom snapshot actions.`),N=t(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose viewport resizing.`),P=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose focus for this device.`),F=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose text entry for this device.`),I=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose gestures for this device.`),L=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose scrolling for this device.`),ye=t(`unsupported-device-kind`,_e),be=t(`unsupported-provider-mode`,`WebDriver provider runtimes read element text from the captured tree only.`),R=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose back for this device.`),xe=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose home for this device.`),z=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose orientation for this device.`),B=t(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose tv-remote.`),V=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose this keyboard action for this device.`),H=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose clipboard access for this device.`),Se=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose the app switcher for this device.`),U=t(`unsupported-provider-mode`,`No WebDriver backend presses this system button.`),W=t(`unsupported-provider-mode`,`fold runs a HID helper through simctl spawn inside a foldable iPhone simulator on the daemon host; a WebDriver backend has no such simulator.`),G=t(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose native alert handling.`),K=t(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose device settings.`),q=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose app-event delivery for this device.`),Ce=t(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose a foreground app-state operation.`),J=t(`unsupported-provider-mode`,`This WebDriver provider runtime does not expose the audio probe.`),we=t(`unsupported-provider-mode`,`Apple runner preparation is unavailable for WebDriver-owned devices.`),Te=t(`unsupported-provider-mode`,`WebDriver open is supported only for its owned iOS or Android mobile-device sessions.`),Ee=t(`unsupported-provider-mode`,`WebDriver close is supported only for its owned iOS or Android mobile-device sessions.`),Y=t(`unsupported-provider-mode`,`Runtime hints are not applied to provider-owned devices.`),De=t(`unsupported-provider-mode`,`WebDriver provider runtimes do not expose port reverse.`);function Oe(e){let t=e.platform===`android`&&e.kind===`device`&&e.target===`mobile`||e.platform===`apple`&&e.kind===`device`&&e.target===`mobile`&&e.appleOs===`ios`,n=t?S:Te,r=t?S:Ee;return a({resolveOpenTarget:n,prepareApplicationOpen:n,openApplication:n,applyRuntimeHints:Y,clearRuntimeHints:Y,closeApplication:r,finalizeApplicationClose:r,prepareAppleRunner:we,configureProviderPortReverse:De})}function ke(t){return Object.freeze({owner:t.owner,ownsDevice:t.ownsDevice,inspectFacts:async e=>Q(t,e),bind:async n=>{if(n.intent.kind===`exact-owner`&&!r(n.intent.owner,t.owner))throw new e(`UNSUPPORTED_OPERATION`,`WebDriver runtime owner identity does not match`);if(!t.ownsDevice(n.device))throw new e(`UNSUPPORTED_PLATFORM`,`WebDriver runtime does not own this device`);if(!$(t,n.device))throw new e(`UNSUPPORTED_OPERATION`,`The WebDriver provider session is no longer active for this device.`);return X(t,n.device,n.scope.signal)},shutdown:async()=>void 0})}function Ae(e,t,r,i){let a={device:t,signal:r,resolveInteractor:n=>e.getInteractor?.(t,n),presentIosAcquisition:e.host.snapshot.presentIosAcquisition};return{...i.operations.captureSnapshot.available?h(a):{},...i.operations.captureScreenshot.available?ie(a):{},...i.operations.focusPoint.available?m(a):{},...i.operations.typeText.available?te(a):{},...l({...a,facts:i.operations}),...i.operations.scrollDirection.available?f(a):{},...ve({...a,facts:i.operations}),...n(i.operations.tapPoint,()=>de({...a,facts:i.operations,pause:async t=>await e.host.clock.sleep(t,r)}))}}function X(e,t,n){let r=t.platform===`apple`?`ios-device`:`android`,a=Q(e,t),o=a.operations.deployApp,s=Object.freeze({ensureReady:async()=>({...t,booted:!0}),bootTarget:async()=>({...t,booted:!0}),...i(x({device:t,signal:n,getInteractor:(t,n)=>e.getInteractor?.(t,n)}),a.operations),...Ae(e,t,n,a),networkDump:async t=>{let n=await e.host.appLogs.readRecent(t.sessionId,t.maxScanLines),{dump:i}=ge(n.text,{...t,path:n.path,exists:n.exists,lineNumberOffset:n.skippedLines,backend:r});return Object.freeze({source:`app-log`,backend:r,dump:i,notes:Object.freeze(i.entries.length===0?[`No HTTP(s) entries were found in recent session app logs.`]:[])})},...o.available&&e.deployment?{deployApp:async r=>await e.deployment.deployApp(t,r,n),materializeAppSource:async r=>await Pe(e.host,t,r,n),deployMaterializedApp:async r=>await e.deployment.deployMaterializedApp(t,r,n)}:{}});return Object.freeze({device:t,owner:e.owner,facts:a,operations:s,[Symbol.asyncDispose]:async()=>void 0})}function Z(e,t){return e?S:t}function je(e){return e.reachable?pe(e.capabilities,e.operation)?S:t(`owner-capability-missing`,he(e.capabilities,e.operation)):e.whenUnreachable}function Q(e,n){if(!$(e,n))return v(n,e.owner,{...fe(k),fold:W});let r=e.deployment?.fact(n)??D,i=v(n,e.owner,{appLog:C,appDeployment:D,network:C,screenRecording:w,screenshot:j,viewport:N,focus:P,gesture:I,scroll:L,typeText:F,touch:F,elementText:be,back:R,orientation:z,tvRemote:B,keyboard:V,clipboard:H,systemButton:U,fold:W,triggerAppEvent:q,settings:K,readAlert:G,awaitAlert:G,acceptAlert:G,dismissAlert:G,audioProbeCapture:J,audioProbeQuery:J,perf:J,lifecycle:Oe(n)}),a=e.getInteractor!==void 0&&Ne(n),l=a&&e.snapshotAvailable!==!1?S:A,f=a&&e.screenshotAvailable!==!1?S:j,m=(t,n)=>je({reachable:a,capabilities:e.capabilities,operation:t,whenUnreachable:n});return Object.freeze({device:i.device,operations:{...i.operations,deployApp:r,materializeAppSource:r,deployMaterializedApp:r,sendPushNotification:O,appState:Ce,networkDump:S,...u({capture:l,customActions:M,withoutActiveApp:l}),...d({capture:f}),...le({focus:Z(a,P)}),...o({type:m(`type`,F)}),...ue({unsupported:P,tap:m(`tap`,P),longPress:m(`longPress`,P),fill:m(`fill`,F),fillRef:F}),...ee({unsupported:I,plan:Z(a,I),directionalFling:Z(a,I),multiTouch:Me(n,a),targetAuthoredDrag:Z(a,I),viewport:Z(a,I)}),...p({scroll:m(`scroll`,L)}),...se({back:m(`back`,R)}),...c({orientation:m(`orientation`,z)}),...ce({tvRemote:B}),...oe({unsupported:V,dismiss:m(`keyboard`,V),...n.platform===`android`?{enter:m(`keyboard`,V),status:m(`keyboard`,V)}:{}}),..._({unsupported:H,read:m(`clipboard.read`,H),write:m(`clipboard.write`,H)}),...g({unsupported:U,home:m(`home`,xe),appSwitcher:m(`appSwitcher`,Se)}),setFoldPose:W,...ae({triggerAppEvent:Z(a,q)}),...re({setSetting:K,readSetting:K}),...ne({read:G,wait:G,accept:G,dismiss:G}),...s({setViewport:N}),ensureReady:S,bootTarget:S,bootTargetHeadless:T,listApps:E,shutdownTarget:t(`unsupported-provider-mode`,`WebDriver owns the target lifecycle for provider-owned devices.`)}})}function Me(e,t){return t?e.platform===`apple`?ye:S:I}function Ne(e){return e.kind===`device`&&e.target===`mobile`&&(e.platform===`android`||e.platform===`apple`&&e.appleOs===`ios`)}function $(e,t){return e.isSessionActive?.(t)??e.ownsDevice(t)}async function Pe(e,t,n,r){return t.platform===`apple`?await e.appleDeployment.prepareArtifact(n,{signal:r}):await e.androidDeployment.prepareArtifact(n,{signal:r})}export{ke as createWebDriverPlatformRuntimeOwner};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./runtime-deployment.js";import"./runtime2.js";async function e(e){return(await import(`./runtime2.js`).then(e=>e.n)).createCloudWebDriverRuntime(e)}export{e as createCloudWebDriverRuntime};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { b as DeviceInfo } from "../sdk-contracts.js";
|
|
2
|
+
import { c as LeaseLifecycleContext, n as ProviderDeviceInstallResult, s as DeviceLease, t as ProviderDeviceInstallOptions } from "../provider-device-runtime.js";
|
|
3
|
+
import { r as CloudArtifactsResult } from "../cloud-artifacts.js";
|
|
4
|
+
import { i as CloudProviderProfileFields } from "../sdk-remote-config.js";
|
|
5
|
+
//#region packages/contracts/src/provider-profile-fields.d.ts
|
|
6
|
+
type ProviderProfileField = keyof CloudProviderProfileFields;
|
|
7
|
+
/**
|
|
8
|
+
* What one lease provider does with every Cloud provider profile field. The record is total, so a
|
|
9
|
+
* field added to the profile fails to build until each provider says whether it consumes it; a
|
|
10
|
+
* field a provider neither reads nor refuses would otherwise ride the profile and be dropped.
|
|
11
|
+
*/
|
|
12
|
+
type ProviderProfileFieldDeclaration = Readonly<{
|
|
13
|
+
provider: string;
|
|
14
|
+
label: string;
|
|
15
|
+
fields: Readonly<Record<ProviderProfileField, 'consumed' | 'refused'>>;
|
|
16
|
+
}>;
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region packages/provider-webdriver/src/capabilities.d.ts
|
|
19
|
+
type CloudWebDriverOperation = 'lease' | 'inventory' | 'install' | 'snapshot' | 'screenshot' | 'tap' | 'doubleTap' | 'longPress' | 'swipe' | 'scroll' | 'fill' | 'type' | 'keyboard' | 'back' | 'home' | 'orientation' | 'appSwitcher' | 'tvRemote' | 'clipboard.read' | 'clipboard.write' | 'settings' | 'alert' | 'pinch' | 'rotateGesture' | 'transformGesture' | 'logs' | 'record' | 'artifacts' | 'portReverse' | 'nativeSnapshotBackend';
|
|
20
|
+
type CloudWebDriverSupportLevel = 'supported' | 'partial' | 'unsupported';
|
|
21
|
+
type CloudWebDriverOperationCapability = {
|
|
22
|
+
support: CloudWebDriverSupportLevel;
|
|
23
|
+
note?: string;
|
|
24
|
+
};
|
|
25
|
+
type CloudWebDriverCapabilityOverrides = Partial<Record<CloudWebDriverOperation, CloudWebDriverSupportLevel | CloudWebDriverOperationCapability>>;
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region packages/provider-webdriver/src/webdriver-transport.d.ts
|
|
28
|
+
type WebDriverAuth = {
|
|
29
|
+
username: string;
|
|
30
|
+
accessKey: string;
|
|
31
|
+
};
|
|
32
|
+
type WebDriverRequestPolicy = {
|
|
33
|
+
timeoutMs?: number;
|
|
34
|
+
retryAttempts?: number;
|
|
35
|
+
retryDelayMs?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Budget for creating the session, consumed by `WebDriverClient.createSession`
|
|
38
|
+
* rather than the transport: a cloud provider allocates a physical device
|
|
39
|
+
* inside that one request, so it cannot share `timeoutMs`, which is sized for
|
|
40
|
+
* a settled session's round trips.
|
|
41
|
+
*/
|
|
42
|
+
sessionCreateTimeoutMs?: number;
|
|
43
|
+
};
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region packages/provider-webdriver/src/runtime.d.ts
|
|
46
|
+
type CloudWebDriverPlatform = 'android' | 'ios';
|
|
47
|
+
type CloudWebDriverUploadResult = ProviderDeviceInstallResult & {
|
|
48
|
+
appReference: string;
|
|
49
|
+
};
|
|
50
|
+
type CloudWebDriverUploadApp = (params: {
|
|
51
|
+
provider: string;
|
|
52
|
+
lease: DeviceLease;
|
|
53
|
+
device: DeviceInfo;
|
|
54
|
+
app: string;
|
|
55
|
+
appPath: string;
|
|
56
|
+
options?: ProviderDeviceInstallOptions;
|
|
57
|
+
signal?: AbortSignal;
|
|
58
|
+
}) => Promise<CloudWebDriverUploadResult>;
|
|
59
|
+
type CloudWebDriverBaseSession = {
|
|
60
|
+
provider: string;
|
|
61
|
+
endpoint: string | URL;
|
|
62
|
+
platform: CloudWebDriverPlatform;
|
|
63
|
+
deviceName: string;
|
|
64
|
+
webdriverCapabilities: Record<string, unknown>;
|
|
65
|
+
auth?: WebDriverAuth;
|
|
66
|
+
headers?: Record<string, string>;
|
|
67
|
+
};
|
|
68
|
+
type CloudWebDriverPreparedSession = CloudWebDriverBaseSession & {
|
|
69
|
+
deviceId?: string;
|
|
70
|
+
providerSessionId?: string;
|
|
71
|
+
uploadApp?: CloudWebDriverUploadApp;
|
|
72
|
+
listArtifacts?: CloudWebDriverListArtifacts;
|
|
73
|
+
cleanup?: () => Promise<Record<string, unknown> | undefined>;
|
|
74
|
+
providerData?: Record<string, unknown>;
|
|
75
|
+
};
|
|
76
|
+
type CloudWebDriverListArtifacts = (params: {
|
|
77
|
+
provider: string;
|
|
78
|
+
lease?: DeviceLease;
|
|
79
|
+
device?: DeviceInfo;
|
|
80
|
+
webDriverSessionId?: string;
|
|
81
|
+
providerSessionId?: string;
|
|
82
|
+
}) => Promise<CloudArtifactsResult | undefined>;
|
|
83
|
+
type CloudWebDriverPrepareSession = (params: {
|
|
84
|
+
lease: DeviceLease;
|
|
85
|
+
req?: LeaseLifecycleContext;
|
|
86
|
+
base: CloudWebDriverBaseSession;
|
|
87
|
+
}) => Promise<CloudWebDriverPreparedSession>;
|
|
88
|
+
type CloudWebDriverRuntimeOptions = {
|
|
89
|
+
clientVersion: string;
|
|
90
|
+
provider: string;
|
|
91
|
+
endpoint: string | URL;
|
|
92
|
+
platform: CloudWebDriverPlatform;
|
|
93
|
+
deviceName: string;
|
|
94
|
+
webdriverCapabilities?: Record<string, unknown> | ((lease: DeviceLease) => Record<string, unknown>);
|
|
95
|
+
auth?: WebDriverAuth;
|
|
96
|
+
headers?: Record<string, string>;
|
|
97
|
+
requestPolicy?: WebDriverRequestPolicy;
|
|
98
|
+
uploadApp?: CloudWebDriverUploadApp;
|
|
99
|
+
listArtifacts?: CloudWebDriverListArtifacts;
|
|
100
|
+
deviceId?: (lease: DeviceLease) => string;
|
|
101
|
+
prepareSession?: CloudWebDriverPrepareSession;
|
|
102
|
+
capabilityOverrides?: CloudWebDriverCapabilityOverrides;
|
|
103
|
+
/** Profile fields this provider reads; any field it refuses fails lease allocation. */
|
|
104
|
+
profileFields: ProviderProfileFieldDeclaration;
|
|
105
|
+
};
|
|
106
|
+
//#endregion
|
|
107
|
+
//#region packages/provider-webdriver/src/provider-plugin.d.ts
|
|
108
|
+
/** The engine options a provider contributes; the host supplies `clientVersion`. */
|
|
109
|
+
type CloudWebDriverProviderOptions = Omit<CloudWebDriverRuntimeOptions, 'clientVersion'>;
|
|
110
|
+
//#endregion
|
|
111
|
+
export type { CloudWebDriverProviderOptions as WebDriverPluginOptions };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
package/dist/src/plugins.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { G as
|
|
1
|
+
import { G as AppErrorCode, K as AppErrorDetails, W as AppError } from "./sdk-contracts.js";
|
|
2
2
|
//#region src/sdk/plugins.d.ts
|
|
3
3
|
type ProviderPluginHost = Readonly<{
|
|
4
4
|
env: Readonly<Record<string, string | undefined>>;
|
|
5
5
|
options: Readonly<Record<string, unknown>>;
|
|
6
|
+
clientVersion: string;
|
|
6
7
|
createError(code: AppErrorCode, message: string, details?: AppErrorDetails): AppError;
|
|
7
8
|
}>;
|
|
8
9
|
//#endregion
|
package/dist/src/plugins2.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{t}from"./
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{r as t,t as n}from"./store.js";import{t as r}from"./shared.js";const i=async({positionals:i,flags:a})=>{let[o=`list`,s,c]=i;if(c||![`add`,`update`,`remove`,`list`].includes(o)||(o===`list`?s!==void 0:!s))throw new e(`INVALID_ARGS`,`Use plugins list, add <package[@version]>, update <package>, or remove <package>`);o!==`list`&&s&&await n(o,s,process.env);let l=t(process.env);return await r(a,{plugins:l,restartRequired:o!==`list`},()=>[...l.map(e=>e.compatible?`${e.name}@${e.version} (${e.provider})`:`${e.name}: unavailable; run plugins update ${e.name} or plugins remove ${e.name}`),...o===`list`?[]:[`Restart the local daemon after closing active sessions to use the changed plugin set.`],...l.length===0?[`No provider plugins installed.`]:[]].join(`
|
|
2
2
|
`)),!0};export{i as pluginsCommand};
|
package/dist/src/process-exit.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{i as e}from"./retry.js";import"./retry2.js";async function t(t){await Promise.race([n(),e(2e3)]),process.exit(t)}async function n(){await Promise.all([r(process.stdout),r(process.stderr)])}function r(e){return e.writableLength===0?Promise.resolve():new Promise(t=>{e.once(`drain`,t)})}export{t as exitAfterFlush};
|
package/dist/src/process.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{C as t,D as n,E as r,M as i,O as a,S as o,T as
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{C as t,D as n,E as r,M as i,O as a,S as o,T as s,_ as c,a as l,b as u,c as d,d as ee,f,g as p,h as m,i as h,k as te,l as g,m as _,n as v,o as y,p as ne,r as re,s as ie,t as ae,u as b,v as x,w as S,x as C,y as w}from"./owner-identity.js";import{h as T}from"./exec.js";import E from"node:fs";import D from"node:path";async function O(e,t={}){let n=A(),r=j(t);for(let t of e.read()){if(!k(t))continue;let i=await M(t,r,n);i.length===0?e.clear(t.scope):i.length!==t.records.length&&e.replace(t.scope,i)}return Object.freeze(n)}function k(e){return e.status===`decoded`}function A(){return{inspected:0,inspectedPids:[],terminated:0,terminatedPids:[],missing:0,missingPids:[],ownershipLost:0,ownershipLostPids:[],skippedForOpenWebSession:!1}}function j(e){return{openWebSession:(e.openWebSessionNames??[]).length>0,purposes:e.purposes?new Set(e.purposes):void 0,termTimeoutMs:e.termTimeoutMs??1500,killTimeoutMs:e.killTimeoutMs??1e3}}async function M(e,t,n){let r=[];for(let i of e.records){if(N(e.scope.kind,i,t)){r.push(i),F(e.scope.kind,i,t)&&(n.skippedForOpenWebSession=!0);continue}n.inspected+=1,n.inspectedPids.push(i.pid),I(n,i,await L(i,t),r)}return r}function N(e,t,n){return!P(t,n)||F(e,t,n)}function P(e,t){return t.purposes===void 0||t.purposes.has(e.purpose)}function F(e,t,n){return e===`daemon`&&t.purpose===`managed-web-browser`&&n.openWebSession}function I(e,t,n,r){if(n===`terminated`){e.terminated+=1,e.terminatedPids.push(t.pid);return}if(n===`missing`){e.missing+=1,e.missingPids.push(t.pid);return}e.ownershipLost+=1,e.ownershipLostPids.push(t.pid),r.push(t)}async function L(e,t){let n=await R(e);return n===void 0?(U(e.pid,z(e)),await B(e,t)):n}async function R(e){if(e.pid===process.pid||!_(e.pid))return`missing`;let n=await t(e.pid);return n.zombie?`missing`:H(e,n)?void 0:`ownership-lost`}function z(e){return e.purpose===`simctl-screen-recording`?`SIGINT`:`SIGTERM`}async function B(e,t){let n=await V(e,t.termTimeoutMs);return n===`exited`?`terminated`:n===`ownership-lost`?`ownership-lost`:(U(e.pid,`SIGKILL`),await V(e,t.killTimeoutMs)===`exited`?`terminated`:`ownership-lost`)}async function V(e,n){if(await a(e.pid,n),!_(e.pid))return`exited`;let r=await t(e.pid);return r.zombie?`exited`:H(e,r)?`owned-alive`:`ownership-lost`}function H(e,t){return t.startTime===e.startTime&&t.command===e.command}function U(e,t){try{process.kill(e,t)}catch{}}const W=`owned-processes.json`;function G(e){let t=D.resolve(e.stateDir),n=D.resolve(e.sessionsDir),r=D.join(t,W),a=t=>{if(t.kind===`daemon`)return r;let i=D.resolve(e.resolveSessionDir(t.sessionId));if(D.dirname(i)!==n)throw TypeError(`owned process session scope must resolve directly under the sessions dir`);return D.join(i,W)};return Object.freeze({replace(e,t){let n=J(t),r=a(e);if(n.length===0){Y(r);return}let o=D.dirname(r);E.mkdirSync(o,{recursive:!0}),i(r,e=>{let t=E.openSync(e,`wx`,384);try{E.writeFileSync(t,`${JSON.stringify({version:1,processes:n})}\n`,`utf8`),E.fsyncSync(t)}finally{E.closeSync(t)}X(r),E.renameSync(e,r)})},clear(e){Y(a(e))},read(){return q(n,r)}})}function K(e,t){let n;try{X(e),n=JSON.parse(E.readFileSync(e,`utf8`))}catch(n){return{scope:t,path:e,status:`invalid`,records:[],message:$(n)}}if(!se(n))return{scope:t,path:e,status:`invalid`,records:[],message:`owned process record must contain version 1 and a processes array`};try{return{scope:t,path:e,status:`decoded`,records:J(n.processes)}}catch(n){return{scope:t,path:e,status:`invalid`,records:[],message:$(n)}}}function q(e,t){let n=[];if(Z(t)&&n.push(K(t,{kind:`daemon`})),!E.existsSync(e))return n;for(let t of E.readdirSync(e,{withFileTypes:!0}).sort((e,t)=>e.name.localeCompare(t.name))){if(!t.isDirectory())continue;let r=D.join(e,t.name,W);Z(r)&&n.push(K(r,{kind:`session`,sessionId:t.name}))}return n}function J(e){let t=new Set,n=[];for(let r of e){if(!oe(r))throw TypeError(`owned process record has an invalid identity or purpose`);if(t.has(r.pid))throw TypeError(`duplicate owned process pid ${r.pid}`);t.add(r.pid),n.push(Object.freeze({pid:r.pid,startTime:r.startTime,command:r.command,purpose:r.purpose}))}return n.sort((e,t)=>e.pid-t.pid)}function oe(e){return Number.isInteger(e.pid)&&e.pid>0&&typeof e.startTime==`string`&&e.startTime.length>0&&typeof e.command==`string`&&e.command.length>0&&typeof e.purpose==`string`&&e.purpose.length>0}function se(e){return typeof e==`object`&&!!e&&`version`in e&&e.version===1&&`processes`in e&&Array.isArray(e.processes)}function Y(e){try{X(e),E.unlinkSync(e)}catch(e){if(!Q(e))throw e}}function X(e){try{let t=E.lstatSync(e);if(t.isSymbolicLink())throw Error(`Refusing to follow an owned process record symlink`);if(!t.isFile())throw Error(`Owned process record is not a regular file`)}catch(e){if(!Q(e))throw e}}function Z(e){try{return E.lstatSync(e).isFile()}catch{return!1}}function Q(e){return!!(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)}function $(e){return e instanceof Error?e.message:`owned process record is invalid`}var ce=e({classifyOwnerLiveness:()=>ae,classifyOwnerLivenessFromObservation:()=>v,createOwnedProcessRecordStore:()=>G,expandProcessTree:()=>ie,hostCurrentWorkingDirectory:()=>d,hostEnvironment:()=>g,hostNodeExecutablePath:()=>b,hostNodeVersion:()=>ee,hostPlatform:()=>f,hostProcessId:()=>ne,isProcessAlive:()=>_,isProcessGroupAlive:()=>m,isProcessPid:()=>re,isProcessZombie:()=>p,listHostProcesses:()=>c,ownerIdentityDiffers:()=>h,ownerIdentityMatches:()=>l,readCurrentOwnerIdentity:()=>y,readHostCpuArch:()=>x,readHostCpuArchSync:()=>w,readHostEnvironmentVariable:()=>u,readHostProcessIdentityObservations:()=>C,readOwnedProcessRecordFile:()=>K,readProcessCommand:()=>o,readProcessIdentityFacts:()=>t,readProcessStartTime:()=>S,reapOwnedProcessRecordsAtStartup:()=>O,signalPidsBestEffort:()=>s,signalProcessGroupBestEffort:()=>T,stopPidsWithEscalation:()=>r,uniquePositivePids:()=>n,waitForProcessExit:()=>a,writeHostStderr:()=>te});export{G as n,O as r,ce as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime.js";import{i as t}from"./providers.js";import{r as n}from"./provider-limrun-credentials.js";import{t as r}from"./manifest.js";import{n as i}from"./store.js";import a from"node:crypto";var o=e({providerCredentialFingerprint:()=>c,readDaemonProviderCredentials:()=>u});const s=new Map([[`limrun`,n]]);function c(e,t,n){let r=s.get(e);if(r)return d(r(t,n));let i=l(e,t);return i?d(Object.fromEntries(i.map(e=>[e,t[e]?.trim()?t[e]:void 0]))):void 0}function l(e,n){return r.includes(e)?t(e)?.credentialVariables:i(n).find(t=>t.agentDevicePlugin.provider===e)?.agentDevicePlugin.credentialVariables}function u(e,t){let n={...e};return{fingerprint:(e,t)=>c(e,n,t),stateDir:t}}function d(e){let t=Object.entries(e).filter(e=>e[1]!==void 0).sort(([e],[t])=>e.localeCompare(t));if(t.length!==0)return`v1:${a.createHash(`sha256`).update(JSON.stringify(t)).digest(`hex`).slice(0,16)}`}export{u as n,o as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e}from"./sdk-contracts.js";import{
|
|
1
|
+
import{P as e}from"./sdk-contracts.js";import{hn as t}from"./sdk-batch.js";import{t as n}from"./script.js";import{t as r}from"./session-paths.js";const i=/^\$\{([A-Z_][A-Z0-9_]*)\}$/;function a(t){if(t!==t.trim()||!n.test(t))throw new e(`INVALID_ARGS`,`Invalid --record-as variable "${t}": use uppercase letters, digits, and underscores (for example PASSWORD).`);if(t.startsWith(`AD_`))throw new e(`INVALID_ARGS`,`Invalid --record-as variable "${t}": the AD_* namespace is reserved for built-in replay variables.`);return t}function o(e){return`\${${e}}`}function ee(e){let t=i.exec(e);if(!(!t?.[1]||t[1].startsWith(`AD_`)))return t[1]}function s(e){let t=e.result?.text;if(typeof t==`string`)return t;let n=e.positionals??[];return n.length===0?``:n[0]?.startsWith(`@`)?n.length>=3?n.slice(2).join(` `):n.slice(1).join(` `):n.length>=3&&!Number.isNaN(Number(n[0]))&&!Number.isNaN(Number(n[1]))?n.slice(2).join(` `):n.slice(1).join(` `)}const c={kind:`none`};function l(e,t){if(t.path===void 0){let n=e??{kind:`default`,force:!1};return t.force?{...n,force:!0}:n}let n=e?.force===!0&&(e.kind==="default"||e.path===t.path);return{kind:`explicit`,path:t.path,force:t.force||n}}function te(e){return e.kind===`repair`?{...e,status:`armed`}:e}function u(e){return e.kind===`none`?void 0:e.target}function d(e){return e.kind===`repair`&&(e.status===`complete`||e.status===`close-succeeded`)}function f(e){return e.kind===`authoring`&&e.status===`aborted`}function p(e){return e.kind===`authoring`?e.status===`armed`:e.kind===`repair`}function m(e){return e.kind===`repair`?e.status===`committed`:e.kind===`authoring`&&e.status===`published`}function h(e){return{kind:`authoring`,status:`armed`,target:l(void 0,e)}}function g(e){return e.kind!==`authoring`||e.status!==`armed`?e:{...e,status:`aborted`}}function _(e,t){return e.kind===`authoring`?{kind:`authoring`,status:`published`,target:{kind:`explicit`,path:t,force:e.target.force}}:e}function v(e,t){let n=e.kind===`repair`?e:void 0,r=n?.sourcePath??t.sourcePath;return{kind:`repair`,status:n?.status??`armed`,target:l(n?.target,t.requested),boundary:n?.boundary??t.boundary,...r===void 0?{}:{sourcePath:r},...n?.closeReceipt===void 0?{}:{closeReceipt:n.closeReceipt}}}function y(e){return e.kind!==`repair`||e.status!==`armed`?e:{...e,status:`complete`}}function b(e,t){return e.kind===`repair`?{...e,status:e.status===`complete`?`close-succeeded`:e.status,closeReceipt:t}:e}function ne(e){if(e.kind!==`repair`)return e;let{closeReceipt:t,...n}=e;return{...n,status:`committed`}}function re(e){if(e.kind!==`repair`)return e;let{closeReceipt:t,...n}=e;return{...n,status:`aborted`}}function ie(e){return e.kind===`repair`?e.boundary:void 0}function ae(e){return e.kind===`repair`?e.sourcePath:void 0}function x(e){return e.kind===`repair`&&e.status!==`committed`}function S(e){let t=u(e);return t?.kind===`explicit`?t.path:void 0}function C(e){return u(e)?.force===!0}function w(e){return e?.scriptPublication??c}function T(e){let t=w(e);return t.kind===`authoring`&&t.status===`armed`}function E(e,t){e.scriptPublication=h({path:t.path===void 0?void 0:r(t.path),force:t.force===!0})}function D(e){e.scriptPublication=g(w(e))}function O(e){return p(w(e))}function k(e,t){if(!t.saveScript||f(w(e)))return;let n={path:typeof t.saveScript==`string`?r(t.saveScript):void 0,force:t.force===!0},i=w(e);if(i.kind===`repair`){e.scriptPublication=v(i,{requested:n,boundary:i.boundary,sourcePath:i.sourcePath});return}if(i.kind===`authoring`){e.scriptPublication={...i,target:l(i.target,n)};return}e.scriptPublication=h(n)}function A(e,t){let n=w(e);n.kind===`authoring`&&(e.scriptPublication={...n,target:l(n.target,{path:t.explicitPath===void 0?void 0:r(t.explicitPath),force:t.liveForce===!0})})}function j(e,t){e.scriptPublication=_(w(e),t)}function M(e,t){let n=w(e);n.kind===`authoring`&&(e.scriptPublication=_(n,t))}function N(e,t){return t===!0||C(w(e))}function P(e){return m(w(e))}const F=new Set(`action.backend.cost.delayMs.evidence.gesture.hint.kind.maestroFallbackReason.maestroNonHittableCoordinateFallbackAllowed.maestroNonHittableCoordinateFallbackUsed.message.platform.ref.referenceHeight.referenceWidth.refLabel.resolution.selector.selectorChain.settle.targetHittable.targetKind.text.warning.x.y`.split(`.`)),I=new Set([`action`,`backend`,`gesture`,`kind`,`platform`,`ref`,`selector`,`targetKind`]),L=new Set([`cost`,`evidence`,`resolution`,`settle`]),R=new Map([[`cost`,new Set([`nodeCount`,`runnerRoundTrips`,`wallClockMs`])],[`evidence`,new Set([`changedFromBefore`,`digest`,`foregroundApp`,`interactiveNodeCount`,`nodeCount`])],[`resolution`,new Set([`alternatives`,`kind`,`matchCount`,`phase`,`source`,`tiebreak`,`winnerDiagnostic`])],[`resolution.alternatives`,new Set([`diagnosticRef`,`label`,`role`])],[`resolution.winnerDiagnostic`,new Set([`diagnosticRef`,`label`,`role`])],[`settle`,new Set([`captures`,`diff`,`hint`,`quietMs`,`refs`,`refsGeneration`,`settled`,`tail`,`tailTruncated`,`timeoutMs`,`waitedMs`])],[`settle.diff`,new Set([`lines`,`summary`,`truncated`])],[`settle.diff.lines`,new Set([`kind`,`ref`,`text`])],[`settle.diff.summary`,new Set([`additions`,`removals`,`unchanged`])],[`settle.refs`,new Set([`ref`])],[`settle.tail`,new Set([`label`,`ref`,`role`])]]),z=new Set([`evidence.digest`,`evidence.foregroundApp`,`resolution.alternatives.diagnosticRef`,`resolution.alternatives.role`,`resolution.kind`,`resolution.phase`,`resolution.source`,`resolution.tiebreak`,`resolution.winnerDiagnostic.diagnosticRef`,`resolution.winnerDiagnostic.role`,`settle.diff.lines.kind`,`settle.diff.lines.ref`,`settle.refs.ref`,`settle.tail.ref`,`settle.tail.role`]);function oe(e,t,n){if(!e)return e;let r=ue(e.selectorChain),i=e=>K(e,t);return{...q(e,e=>le(e,t,n),i),...typeof e.text==`string`?{text:n}:{},...r?{selectorChain:r.filter(e=>!i(e))}:{}}}function B(e,t){if(!e)return e;let n=X(t);return q(e,e=>Z(e,n),e=>W(e,t))}function V(e,t){if(!e)return e;let n=X(t);return{...e,...e.label===void 0?{}:{label:Z(e.label,n)},ancestry:e.ancestry.map(e=>({...e,...e.label===void 0?{}:{label:Z(e.label,n)}})),...e.scrollRegion?{scrollRegion:{...e.scrollRegion,...e.scrollRegion.label===void 0?{}:{label:Z(e.scrollRegion.label,n)}}}:{}}}function H(e,t){return!!(e.label!==void 0&&U(e.label,t)||e.ancestry.some(e=>e.label&&U(e.label,t))||e.scrollRegion?.label&&U(e.scrollRegion.label,t))}function U(e,t){for(let n of t.keys())if(e.includes(n))return!0;return!1}function W(e,t){for(let n of t.keys())if(K(e,n))return!0;return!1}function G(e,t,n){return!e||!t?e:{...e,...e.label===t?{label:n}:{},ancestry:e.ancestry.map(e=>({...e,...e.label===t?{label:n}:{}})),...e.scrollRegion?{scrollRegion:{...e.scrollRegion,...e.scrollRegion.label===t?{label:n}:{}}}:{}}}function K(e,n){return t(e,n)}function q(e,t,n){return Object.fromEntries(Object.entries(e).map(([e,r])=>[F.has(e)?e:t(e),se(r,e,t,n)]))}function se(e,t,n,r){return typeof e==`string`&&I.has(t)?e:t===`selectorChain`&&Q(e)?ce(e,r):J(e,n,r,L.has(t)?t:void 0)}function J(e,t,n,r){if(typeof e==`string`)return r&&z.has(r)?e:t(e);if(Array.isArray(e))return e.map(e=>J(e,t,n,r));if(!e||typeof e!=`object`)return e;let i=r?R.get(r):void 0;return Object.fromEntries(Object.entries(e).map(([e,a])=>{let o=i?.has(e)===!0;return[o?e:t(e),J(a,t,n,o?`${r}.${e}`:void 0)]}))}function ce(e,t){return e.filter(e=>!t(e))}function le(e,t,n){if(!t)return e;let r=n?e.split(n):[e];return r.every(e=>!e.includes(t))?e:t.trim()?r.map(e=>e.replaceAll(t,n)).join(n):n}const Y=/\$\{[A-Z_][A-Z0-9_]*\}/y;function X(e){return[...e].sort(([e],[t])=>t.length-e.length)}function Z(e,t){if(!e||t.length===0)return e;let n=``,r=0;scan:for(;r<e.length;){for(let[i,a]of t)if(e.startsWith(i,r)){n+=a,r+=i.length;continue scan}if(e[r]===`$`){Y.lastIndex=r;let t=Y.exec(e);if(t){n+=t[0],r+=t[0].length;continue}}n+=e[r],r+=1}return n}function Q(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)}function ue(e){return Q(e)?e:void 0}let $={isActive:()=>!1};function de(e){$=e}function fe(e){return $.isActive(e)}export{C as A,p as C,b as D,y as E,a as F,s as M,ee as N,ie as O,o as P,te as S,x as T,A as _,B as a,v as b,D as c,N as d,T as f,M as g,j as h,G as i,S as j,ae as k,k as l,P as m,fe as n,V as o,O as p,oe as r,H as s,de as t,E as u,c as v,d as w,ne as x,re as y};
|