agent-device 0.21.3 → 0.21.4

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.
Files changed (131) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.3.apk → agent-device-android-ime-helper-0.21.4.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.4.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.3.manifest.json → agent-device-android-ime-helper-0.21.4.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.3.apk → agent-device-android-snapshot-helper-0.21.4.apk} +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.4.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.4.manifest.json +16 -0
  7. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunner/AgentDeviceRunnerApp.m +39 -0
  8. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerSystemSurfaceHostPolicy.swift +9 -1
  9. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+AXSnapshotFallback.swift +2 -1
  10. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +10 -1
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +26 -124
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandJournal.swift +46 -0
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Lifecycle.swift +36 -4
  14. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+MainThreadWork.swift +229 -0
  15. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +15 -0
  16. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Snapshot.swift +4 -40
  17. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SnapshotCapturePlan.swift +6 -40
  18. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Transport.swift +30 -9
  19. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +22 -6
  20. package/dist/src/adapter.js +1 -1
  21. package/dist/src/adb-executor.js +2 -2
  22. package/dist/src/adb-failure.js +1 -1
  23. package/dist/src/agent-browser-process-record.js +1 -1
  24. package/dist/src/agent-device-client.js +2 -2
  25. package/dist/src/api.js +3 -11
  26. package/dist/src/app-launch.js +1 -1
  27. package/dist/src/app-lifecycle.js +1 -1
  28. package/dist/src/app-log-reconnect.js +1 -1
  29. package/dist/src/archive.js +2 -2
  30. package/dist/src/cli-help.js +2 -2
  31. package/dist/src/cli.js +4 -4
  32. package/dist/src/client-metro-companion.js +1 -1
  33. package/dist/src/client-metro.js +1 -1
  34. package/dist/src/client-types.d.ts +69 -4
  35. package/dist/src/code-signature-cache.js +1 -1
  36. package/dist/src/command-tools.js +2 -2
  37. package/dist/src/command.js +1 -1
  38. package/dist/src/connection-runtime.js +1 -1
  39. package/dist/src/contracts.js +1 -1
  40. package/dist/src/daemon-client-lifecycle.js +1 -1
  41. package/dist/src/daemon-shutdown-report.js +1 -1
  42. package/dist/src/device-claim-rule.js +1 -1
  43. package/dist/src/device-input-state.d.ts +10 -8
  44. package/dist/src/device-inventory-context.js +1 -1
  45. package/dist/src/device-session.js +1 -1
  46. package/dist/src/diagnostics.js +1 -1
  47. package/dist/src/error.js +2 -2
  48. package/dist/src/exec.js +1 -1
  49. package/dist/src/file.js +1 -1
  50. package/dist/src/find.js +1 -1
  51. package/dist/src/gesture-runtime.js +1 -1
  52. package/dist/src/helper.js +1 -1
  53. package/dist/src/index.js +1 -1
  54. package/dist/src/install-source-network-transport.js +1 -1
  55. package/dist/src/interaction2.js +1 -1
  56. package/dist/src/interactor.js +4 -4
  57. package/dist/src/internal/bin.js +1 -1
  58. package/dist/src/internal/daemon.js +2 -2
  59. package/dist/src/internal/png-worker.js +1 -1
  60. package/dist/src/ios-client.js +121 -7
  61. package/dist/src/ios-snapshot-adapter.js +1 -1
  62. package/dist/src/ios-system-surface.js +1 -1
  63. package/dist/src/limrun-delta-sync-omitted.js +1 -0
  64. package/dist/src/limrun.d.ts +0 -1598
  65. package/dist/src/location-coordinates.js +1 -1
  66. package/dist/src/mechanics.js +16 -16
  67. package/dist/src/output-common.js +2 -0
  68. package/dist/src/owner-identity.js +1 -1
  69. package/dist/src/perf-runtime-operation-builder.js +1 -1
  70. package/dist/src/perf-runtime-plan.js +1 -1
  71. package/dist/src/platform-runtime-android-adb-host.js +1 -1
  72. package/dist/src/platform-runtime-app-log-android-transport.js +1 -1
  73. package/dist/src/platform-runtime-app-log-process.js +1 -1
  74. package/dist/src/platform-runtime-host.js +1 -1
  75. package/dist/src/platform-runtime-operation-host.js +2 -2
  76. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  77. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  78. package/dist/src/platform-runtime-screen-recording-output-host.js +1 -1
  79. package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
  80. package/dist/src/process.js +1 -1
  81. package/dist/src/proxy.js +1 -1
  82. package/dist/src/quality-warnings.js +1 -1
  83. package/dist/src/react-native.js +1 -1
  84. package/dist/src/record-runtime.js +1 -1
  85. package/dist/src/recording-stop-observation.js +1 -0
  86. package/dist/src/registry.js +35 -36
  87. package/dist/src/replay-divergence.js +1 -1
  88. package/dist/src/reporting.js +11 -9
  89. package/dist/src/result-serialization.js +1 -1
  90. package/dist/src/runner-cache-metadata.js +1 -1
  91. package/dist/src/runner-client.js +1 -1
  92. package/dist/src/runner-disposal.js +1 -1
  93. package/dist/src/runner-operations-facade.js +1 -1
  94. package/dist/src/runner.js +1 -1
  95. package/dist/src/runtime.js +3 -3
  96. package/dist/src/runtime10.js +1 -1
  97. package/dist/src/runtime2.js +4 -4
  98. package/dist/src/runtime3.js +1 -1
  99. package/dist/src/runtime4.js +4 -4
  100. package/dist/src/runtime5.js +1 -1
  101. package/dist/src/runtime6.js +1 -1
  102. package/dist/src/runtime9.js +1 -1
  103. package/dist/src/screen-recording-completion.js +1 -1
  104. package/dist/src/screen-recording-resource-recovery.js +1 -1
  105. package/dist/src/screenshot-result.js +1 -1
  106. package/dist/src/sdk-contracts.js +2 -2
  107. package/dist/src/sdk-selectors.d.ts +36 -24
  108. package/dist/src/selector-runtime.js +1 -1
  109. package/dist/src/session-observation.js +1 -1
  110. package/dist/src/session-snapshot.js +1 -1
  111. package/dist/src/session-store.js +2 -2
  112. package/dist/src/session2.js +5 -5
  113. package/dist/src/snapshot-runtime.js +1 -1
  114. package/dist/src/snapshot.js +1 -1
  115. package/dist/src/snapshot4.js +1 -1
  116. package/dist/src/stop-sequence.js +1 -0
  117. package/dist/src/success-text.js +1 -1
  118. package/dist/src/text-entry-focus.js +1 -0
  119. package/dist/src/tool-provider.js +1 -1
  120. package/dist/src/tool-provider2.js +1 -1
  121. package/dist/src/tool-provider3.js +1 -1
  122. package/dist/src/type-text-runtime.js +1 -1
  123. package/dist/src/video.js +2 -2
  124. package/dist/src/yauzl.js +1 -0
  125. package/package.json +2 -2
  126. package/server.json +2 -2
  127. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.3.apk.sha256 +0 -1
  128. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.3.apk.sha256 +0 -1
  129. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.3.manifest.json +0 -17
  130. package/dist/src/audio-probe-support.js +0 -1
  131. package/dist/src/screen-recording-live-handle.js +0 -1
@@ -1 +1 @@
1
- import{C as e,M as t,u as n,v as r}from"./sdk-contracts.js";import"./capture.js";import{r as i}from"./snapshot-capture-annotations.js";import{i as a}from"./snapshot-diagnostics.js";import{f as o}from"./android-input-ownership.js";import{v as s}from"./sdk-device.js";import{s as c}from"./session-store.js";import{s as l}from"./session-target-evidence.js";import{r as u}from"./diagnostics.js";import"./diagnostics2.js";import{i as d,s as f}from"./android-system-chrome.js";import{r as p}from"./request-cancel.js";import"./request.js";import{C as m,T as h,a as g,f as _,o as v,s as y}from"./session-snapshot.js";import{a as b,i as x,r as S,t as C}from"./screenshot-runtime.js";import{a as w}from"./session-routing.js";import{p as T,t as E}from"./quality-warnings.js";import{n as D,o as O,r as k}from"./snapshot-runtime-binding.js";import A from"node:path";import{promises as j}from"node:fs";import M from"node:os";function N(e){return{captureFailed:!0,error:e}}function P(e){return{path:e,overlayRefsRequested:!0,overlayRefsAnnotated:!1,overlayRefSource:`unavailable`}}function F(e,t){let n={path:e,overlayRefsRequested:!0,overlayRefSource:`session-snapshot`};return I(t)?{...n,overlayRefsAnnotated:!0,overlayRefs:t}:{...n,overlayRefsAnnotated:!1,overlayRefs:[]}}function I(e){return e.length>0}function L(e,t){return{path:e,overlayRefsRequested:!0,overlayRefsAnnotated:!1,overlayRefSource:`session-snapshot`,overlayAnnotationError:t}}function R(e){return`captureFailed`in e?{overlayRefCount:void 0,overlayRefsAnnotated:void 0}:{overlayRefCount:`overlayRefs`in e?e.overlayRefs.length:0,overlayRefsAnnotated:e.overlayRefsAnnotated}}function z(e){return f(e)===`accessibility-timeout`}async function ee(e){if(e.command!==`snapshot`||e.device.platform!==`android`)return;let n=t(e.error);if(z(n))return{ok:!1,error:{...n,details:{...n.details??{},androidSnapshotTimeoutScreenshot:await B(e)}}}}async function B(n){try{let t=await x({device:n.device,overlayRefs:!1,inspectFacts:n.inspectFacts,bindDevice:n.bindDevice});if(!t.ok)throw new e(`UNSUPPORTED_OPERATION`,`The target does not support screenshot capture, so no timeout evidence was taken.`);let r=await j.mkdtemp(A.join(M.tmpdir(),`agent-device-android-snapshot-timeout-`)),i=A.join(r,`snapshot-timeout-overlay-refs.png`);await t.runtime.captureScreenshot({outPath:i,options:{appBundleId:n.session?.appBundleId,stabilize:!1,surface:n.session?.surface},execution:S(m(n.logPath,{screenshotNoStabilize:!0},n.session?.appBundleId,n.session?.trace?.outPath))}),await j.access(i);let a=await V(i,n.session);return u({level:`warn`,phase:`android_snapshot_timeout_screenshot_captured`,data:{path:i,...R(a)}}),a}catch(e){let n=t(e);return u({level:`warn`,phase:`android_snapshot_timeout_screenshot_failed`,data:{error:n.message}}),N(n.message)}}async function V(e,n){if(!n?.snapshot)return P(e);try{return F(e,await b({screenshotPath:e,snapshot:n.snapshot}))}catch(n){let r=t(n);return u({level:`warn`,phase:`android_snapshot_timeout_screenshot_overlay_failed`,data:{path:e,error:r.message}}),L(e,r.message)}}function H(e){let{verdict:t,appBundleId:n,latch:r}=e;return!t||t.backend===`android-helper`?{latch:r}:t.state===`healthy`?{latch:void 0}:t.state!==`recovered`||t.reasonCode===`requested-backend`?{latch:r}:t.reasonCode===`deferred`?r!==void 0&&r.appBundleId===n?{latch:r}:{warning:E(t.backend),latch:{appBundleId:n}}:{latch:{appBundleId:n}}}function U(e){let{session:t,data:n,verdict:r,internalObservation:i}=e;if(i||!t)return n;let a=H({verdict:r,appBundleId:t.appBundleId,latch:t.recoveredSnapshotWarningLatch});if(t.recoveredSnapshotWarningLatch=a.latch,!a.warning)return n;let o=Array.isArray(n.warnings)?n.warnings:[];return{...n,warnings:[a.warning,...o]}}async function W(e){let t=await D(e,e.command);if(!t.ok)return t.response;let{session:n,device:r,snapshotScope:i}=t;return await O(n,r,async()=>{let{req:a,sessionName:s,logPath:c,sessionStore:l}=e,u={},d=G({req:a,sessionName:s,logPath:c,sessionStore:l,session:n,device:r,snapshotScope:i,capturedQuality:u,captureSnapshotData:t.captureSnapshot,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),f;try{f=await e.execute({runtime:d,sessionName:s,req:a,snapshotScope:i})}catch(t){let i=await ee({error:t,command:e.command,logPath:c,session:n,device:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i)throw t;return i}Q({req:a,sessionName:s,sessionStore:l,result:f.record});let p=U({session:l.get(s),data:f.data,verdict:u.value,internalObservation:a.internal?.observationOnly===!0});return{ok:!0,data:o(f.data,p)}},e.platformResourceCleanup)}function G(e){let{req:t,sessionName:n,logPath:r,sessionStore:i,session:a,device:o,snapshotScope:s}=e;return _({backend:Z({req:t,logPath:r,session:a,device:o,snapshotScope:s,capturedQuality:e.capturedQuality,captureSnapshotData:e.captureSnapshotData,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),...l(`snapshot`),signal:p(t.meta?.requestId),sessions:v({sessionName:n,getSession:()=>i.get(n),recordOptions:{includeSnapshot:!0},setRecord:e=>{let r=$(e),a=i.get(n);i.set(n,K({current:a,sessionName:n,sessionScope:w(t),device:o,record:r,refScopedSnapshot:q(t),issuesRefsToClient:t.command===`snapshot`&&t.internal?.observationOnly!==!0}))}})})}function K(e){let{current:t,sessionName:n,sessionScope:r,device:i,record:a,refScopedSnapshot:o}=e,s=J(t,a,o),c=s?t.snapshot:a.snapshot,l=k({session:t,sessionName:n,sessionScope:r,device:i,snapshot:c,appBundleId:a.appBundleId});return g(l,{scopeSource:X({current:t,keepCurrentSnapshot:s,refScopedSnapshot:o}),keptCurrentSnapshot:s,previousGeneration:t?.snapshotGeneration}),Y(l,s,e.issuesRefsToClient),a.appName&&(l.appName=a.appName),l}function q(e){return e.flags?.snapshotScope?.trim().startsWith(`@`)===!0}function J(e,t,n){return n&&t.snapshot?.nodes.length===0&&e?.snapshot!==void 0}function Y(e,t,n){!t&&n&&h(e)}function X(e){let{current:t,keepCurrentSnapshot:n,refScopedSnapshot:r}=e;if(r)return n?t?.snapshotScopeSource:t?.snapshotScopeSource??t?.snapshot}function Z(e){let{req:t,logPath:n,session:r,device:o,snapshotScope:c}=e;return{platform:s(o),captureSnapshot:async(s,l)=>{let u=await y({device:o,session:r,flags:t.flags,outPath:l?.outPath??t.flags?.out,logPath:n,snapshotScope:c,signal:s.signal,captureData:e.captureSnapshotData,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),d=i(u);e.capturedQuality.value=d.quality;let f=a(r);return{snapshot:u.snapshot,...d,...f?{snapshotDiagnostics:f}:{},appName:r?.appBundleId?r.appName??r.appBundleId:void 0,appBundleId:r?.appBundleId}}}}function Q(e){let t=e.sessionStore.get(e.sessionName);t&&e.sessionStore.recordAction(t,{command:e.req.command,positionals:e.req.positionals??[],flags:e.req.flags??{},result:te(e.result),interactiveObservation:c(e.req)})}function $(t){if(!t.snapshot)throw new e(`UNKNOWN`,`snapshot runtime did not produce session state`);return t}function te(e){return e.kind===`snapshot`?{nodes:e.nodes,truncated:e.truncated}:{mode:e.mode,baselineInitialized:e.baselineInitialized,summary:e.summary}}async function ne(e){let t=e.session;if(!t||!T(e.verdict)||e.req.internal?.observationOnly===!0)return;let n=await re({...e,session:t});if(n!==void 0)return{path:n,artifact:{field:`fallbackScreenshotPath`,artifactType:`screenshot`,path:n,fileName:`snapshot-fallback.png`}}}async function re(e){let{req:t,session:n}=e;try{let r=await x({device:n.device,overlayRefs:!1,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return r.ok?(await C({session:n,sessionName:e.sessionName,captureScreenshot:r.runtime.captureScreenshot,dispatchContext:m(e.logPath,t.flags,n.appBundleId,n.trace?.outPath,t.meta?.requestId,t.meta)})).path:void 0}catch{return}}async function ie(e){return await W({...e,command:`snapshot`,execute:async({runtime:t,sessionName:i,req:a,snapshotScope:s})=>{let c=await t.capture.snapshot({session:i,...r(a.flags,n),scope:s}),l=ae(a,e.sessionStore.get(i)),u=d(c.nodes),f=o(c,u===c.nodes?c:{...c,nodes:u}),p=await ne({req:a,session:e.sessionStore.get(i),sessionName:i,logPath:e.logPath,verdict:c.snapshotQuality,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),m=o(f,p?{...f,fallbackScreenshotPath:p.path,artifacts:[p.artifact]}:f);return{data:l===void 0?m:o(m,{...m,refsGeneration:l}),record:{kind:`snapshot`,nodes:c.nodes.length,truncated:c.truncated}}}})}function ae(e,t){return e.internal?.observationOnly===!0?void 0:t?.snapshotGeneration}export{W as n,ie as t};
1
+ import{C as e,N as t,u as n,v as r}from"./sdk-contracts.js";import"./capture.js";import{r as i}from"./snapshot-capture-annotations.js";import{i as a}from"./snapshot-diagnostics.js";import{f as o}from"./android-input-ownership.js";import{v as s}from"./sdk-device.js";import{s as c}from"./session-store.js";import{s as l}from"./session-target-evidence.js";import{n as u}from"./success-text.js";import{r as d}from"./diagnostics.js";import"./diagnostics2.js";import{i as f,s as p}from"./android-system-chrome.js";import{r as m}from"./request-cancel.js";import"./request.js";import{C as h,T as g,a as _,f as v,o as y,s as b}from"./session-snapshot.js";import{a as x,i as S,r as C,t as w}from"./screenshot-runtime.js";import{a as T}from"./session-routing.js";import{p as E,t as D}from"./quality-warnings.js";import{n as O,o as k,r as A}from"./snapshot-runtime-binding.js";import j from"node:path";import{promises as M}from"node:fs";import N from"node:os";function P(e){return{captureFailed:!0,error:e}}function F(e){return{path:e,overlayRefsRequested:!0,overlayRefsAnnotated:!1,overlayRefSource:`unavailable`}}function I(e,t){let n={path:e,overlayRefsRequested:!0,overlayRefSource:`session-snapshot`};return L(t)?{...n,overlayRefsAnnotated:!0,overlayRefs:t}:{...n,overlayRefsAnnotated:!1,overlayRefs:[]}}function L(e){return e.length>0}function R(e,t){return{path:e,overlayRefsRequested:!0,overlayRefsAnnotated:!1,overlayRefSource:`session-snapshot`,overlayAnnotationError:t}}function z(e){return`captureFailed`in e?{overlayRefCount:void 0,overlayRefsAnnotated:void 0}:{overlayRefCount:`overlayRefs`in e?e.overlayRefs.length:0,overlayRefsAnnotated:e.overlayRefsAnnotated}}function B(e){return p(e)===`accessibility-timeout`}async function ee(e){if(e.command!==`snapshot`||e.device.platform!==`android`)return;let n=t(e.error);if(B(n))return{ok:!1,error:{...n,details:{...n.details??{},androidSnapshotTimeoutScreenshot:await V(e)}}}}async function V(n){try{let t=await S({device:n.device,overlayRefs:!1,inspectFacts:n.inspectFacts,bindDevice:n.bindDevice});if(!t.ok)throw new e(`UNSUPPORTED_OPERATION`,`The target does not support screenshot capture, so no timeout evidence was taken.`);let r=await M.mkdtemp(j.join(N.tmpdir(),`agent-device-android-snapshot-timeout-`)),i=j.join(r,`snapshot-timeout-overlay-refs.png`);await t.runtime.captureScreenshot({outPath:i,options:{appBundleId:n.session?.appBundleId,stabilize:!1,surface:n.session?.surface},execution:C(h(n.logPath,{screenshotNoStabilize:!0},n.session?.appBundleId,n.session?.trace?.outPath))}),await M.access(i);let a=await H(i,n.session);return d({level:`warn`,phase:`android_snapshot_timeout_screenshot_captured`,data:{path:i,...z(a)}}),a}catch(e){let n=t(e);return d({level:`warn`,phase:`android_snapshot_timeout_screenshot_failed`,data:{error:n.message}}),P(n.message)}}async function H(e,n){if(!n?.snapshot)return F(e);try{return I(e,await x({screenshotPath:e,snapshot:n.snapshot}))}catch(n){let r=t(n);return d({level:`warn`,phase:`android_snapshot_timeout_screenshot_overlay_failed`,data:{path:e,error:r.message}}),R(e,r.message)}}function U(e){let{verdict:t,appBundleId:n,latch:r}=e;return!t||t.backend===`android-helper`?{latch:r}:t.state===`healthy`?{latch:void 0}:t.state!==`recovered`||t.reasonCode===`requested-backend`?{latch:r}:t.reasonCode===`deferred`?r!==void 0&&r.appBundleId===n?{latch:r}:{warning:D(t.backend),latch:{appBundleId:n}}:{latch:{appBundleId:n}}}function W(e){let{session:t,data:n,verdict:r,internalObservation:i}=e;if(i||!t)return n;let a=U({verdict:r,appBundleId:t.appBundleId,latch:t.recoveredSnapshotWarningLatch});return t.recoveredSnapshotWarningLatch=a.latch,a.warning?{...n,warnings:[a.warning,...u(n)]}:n}async function G(e){let t=await O(e,e.command);if(!t.ok)return t.response;let{session:n,device:r,snapshotScope:i}=t;return await k(n,r,async()=>{let{req:a,sessionName:s,logPath:c,sessionStore:l}=e,u={},d=K({req:a,sessionName:s,logPath:c,sessionStore:l,session:n,device:r,snapshotScope:i,capturedQuality:u,captureSnapshotData:t.captureSnapshot,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),f;try{f=await e.execute({runtime:d,sessionName:s,req:a,snapshotScope:i})}catch(t){let i=await ee({error:t,command:e.command,logPath:c,session:n,device:r,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(!i)throw t;return i}$({req:a,sessionName:s,sessionStore:l,result:f.record});let p=W({session:l.get(s),data:f.data,verdict:u.value,internalObservation:a.internal?.observationOnly===!0});return{ok:!0,data:o(f.data,p)}},e.platformResourceCleanup)}function K(e){let{req:t,sessionName:n,logPath:r,sessionStore:i,session:a,device:o,snapshotScope:s}=e;return v({backend:Q({req:t,logPath:r,session:a,device:o,snapshotScope:s,capturedQuality:e.capturedQuality,captureSnapshotData:e.captureSnapshotData,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),...l(`snapshot`),signal:m(t.meta?.requestId),sessions:y({sessionName:n,getSession:()=>i.get(n),recordOptions:{includeSnapshot:!0},setRecord:e=>{let r=te(e),a=i.get(n);i.set(n,q({current:a,sessionName:n,sessionScope:T(t),device:o,record:r,refScopedSnapshot:J(t),issuesRefsToClient:t.command===`snapshot`&&t.internal?.observationOnly!==!0}))}})})}function q(e){let{current:t,sessionName:n,sessionScope:r,device:i,record:a,refScopedSnapshot:o}=e,s=Y(t,a,o),c=s?t.snapshot:a.snapshot,l=A({session:t,sessionName:n,sessionScope:r,device:i,snapshot:c,appBundleId:a.appBundleId});return _(l,{scopeSource:Z({current:t,keepCurrentSnapshot:s,refScopedSnapshot:o}),keptCurrentSnapshot:s,previousGeneration:t?.snapshotGeneration}),X(l,s,e.issuesRefsToClient),a.appName&&(l.appName=a.appName),l}function J(e){return e.flags?.snapshotScope?.trim().startsWith(`@`)===!0}function Y(e,t,n){return n&&t.snapshot?.nodes.length===0&&e?.snapshot!==void 0}function X(e,t,n){!t&&n&&g(e)}function Z(e){let{current:t,keepCurrentSnapshot:n,refScopedSnapshot:r}=e;if(r)return n?t?.snapshotScopeSource:t?.snapshotScopeSource??t?.snapshot}function Q(e){let{req:t,logPath:n,session:r,device:o,snapshotScope:c}=e;return{platform:s(o),captureSnapshot:async(s,l)=>{let u=await b({device:o,session:r,flags:t.flags,outPath:l?.outPath??t.flags?.out,logPath:n,snapshotScope:c,signal:s.signal,captureData:e.captureSnapshotData,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),d=i(u);e.capturedQuality.value=d.quality;let f=a(r);return{snapshot:u.snapshot,...d,...f?{snapshotDiagnostics:f}:{},appName:r?.appBundleId?r.appName??r.appBundleId:void 0,appBundleId:r?.appBundleId}}}}function $(e){let t=e.sessionStore.get(e.sessionName);t&&e.sessionStore.recordAction(t,{command:e.req.command,positionals:e.req.positionals??[],flags:e.req.flags??{},result:ne(e.result),interactiveObservation:c(e.req)})}function te(t){if(!t.snapshot)throw new e(`UNKNOWN`,`snapshot runtime did not produce session state`);return t}function ne(e){return e.kind===`snapshot`?{nodes:e.nodes,truncated:e.truncated}:{mode:e.mode,baselineInitialized:e.baselineInitialized,summary:e.summary}}async function re(e){let t=e.session;if(!t||!E(e.verdict)||e.req.internal?.observationOnly===!0)return;let n=await ie({...e,session:t});if(n!==void 0)return{path:n,artifact:{field:`fallbackScreenshotPath`,artifactType:`screenshot`,path:n,fileName:`snapshot-fallback.png`}}}async function ie(e){let{req:t,session:n}=e;try{let r=await S({device:n.device,overlayRefs:!1,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return r.ok?(await w({session:n,sessionName:e.sessionName,captureScreenshot:r.runtime.captureScreenshot,dispatchContext:h(e.logPath,t.flags,n.appBundleId,n.trace?.outPath,t.meta?.requestId,t.meta)})).path:void 0}catch{return}}async function ae(e){return await G({...e,command:`snapshot`,execute:async({runtime:t,sessionName:i,req:a,snapshotScope:s})=>{let c=await t.capture.snapshot({session:i,...r(a.flags,n),scope:s}),l=oe(a,e.sessionStore.get(i)),u=f(c.nodes),d=o(c,u===c.nodes?c:{...c,nodes:u}),p=await re({req:a,session:e.sessionStore.get(i),sessionName:i,logPath:e.logPath,verdict:c.snapshotQuality,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice}),m=o(d,p?{...d,fallbackScreenshotPath:p.path,artifacts:[p.artifact]}:d);return{data:l===void 0?m:o(m,{...m,refsGeneration:l}),record:{kind:`snapshot`,nodes:c.nodes.length,truncated:c.truncated}}}})}function oe(e,t){return e.internal?.observationOnly===!0?void 0:t?.snapshotGeneration}export{G as n,ae as t};
@@ -1 +1 @@
1
- import e from"node:path";import t from"node:fs";function n(e){let t=Array.isArray(e)?e:[e],n=[],i=(e,t,a)=>{let o=n.length;n.push(r(e,{index:o,depth:t,parentIndex:a}));for(let n of u(e))i(n,t+1,o)};for(let e of t)i(e,0);return n}function r(e,t){return{index:t.index,type:i(e),role:a(e),label:o(e),value:s(e),identifier:c(e),rect:l(e),enabled:e.enabled,selected:e.selected,hittable:e.hittable,depth:t.depth,parentIndex:t.parentIndex}}function i(e){return e.elementType??e.type}function a(e){return e.role??i(e)}function o(e){return e.label??e.AXLabel??void 0}function s(e){return e.value??e.AXValue??void 0}function c(e){return e.identifier??e.AXUniqueId??void 0}function l(e){let t=e.rect??e.frame;if(!(!t||typeof t.x!=`number`||typeof t.y!=`number`||typeof t.width!=`number`||typeof t.height!=`number`))return{x:t.x,y:t.y,width:t.width,height:t.height}}function u(e){return e.children??e.nodes??e.elements??[]}function d(e){return e.key===`id`?{accessibilityId:e.value}:e.key===`value`?{value:e.value}:{label:e.value}}async function f(n,r){t.mkdirSync(e.dirname(n),{recursive:!0}),await t.promises.writeFile(n,Buffer.from(r,`base64`))}export{d as n,f as r,n as t};
1
+ import e from"node:path";import t from"node:fs";function n(e){let t=Array.isArray(e)?e:[e],n=[],i=(e,t,a)=>{let o=n.length;n.push(r(e,{index:o,depth:t,parentIndex:a}));for(let n of u(e))i(n,t+1,o)};for(let e of t)i(e,0);return n}function r(e,t){return{index:t.index,type:i(e),role:a(e),label:o(e),value:s(e),identifier:c(e),rect:l(e),enabled:e.enabled,selected:e.selected,hittable:e.hittable,depth:t.depth,parentIndex:t.parentIndex}}function i(e){return e.elementType??e.type}function a(e){return e.role??i(e)}function o(e){return e.label??e.AXLabel??void 0}function s(e){return e.value??e.AXValue??void 0}function c(e){return e.identifier??e.AXUniqueId??void 0}function l(e){let t=e.rect??e.frame;if(!(!t||typeof t.x!=`number`||typeof t.y!=`number`||typeof t.width!=`number`||typeof t.height!=`number`))return{x:t.x,y:t.y,width:t.width,height:t.height}}function u(e){return e.children??e.nodes??e.elements??[]}function d(e){return e.key===`id`?{AXUniqueId:e.value}:e.key===`value`?{AXValue:e.value}:{AXLabel:e.value}}async function f(n,r){t.mkdirSync(e.dirname(n),{recursive:!0}),await t.promises.writeFile(n,Buffer.from(r,`base64`))}export{f as a,d as i,u as n,l as r,n as t};
@@ -1 +1 @@
1
- import{C as e}from"./sdk-contracts.js";import{u as t}from"./sdk-device.js";import{$ as n,Mr as r,Q as i,Rt as a,et as o,lr as s,nn as c,rn as l,tt as u}from"./sdk-batch.js";import"./session-store.js";import{l as d}from"./runtime.js";import{n as f,r as p}from"./success-text.js";import"./alert-contract.js";import{a as m,o as h,r as g,t as _}from"./location-coordinates.js";import{a as v,t as y}from"./absence-observation-errors.js";import{r as ee}from"./diagnostics.js";import"./diagnostics2.js";import{i as b}from"./request-runtime-binding.js";import{C as x,E as S,g as C,m as w,p as te,r as ne,s as re}from"./session-snapshot.js";import{h as ie}from"./screenshot-runtime.js";import{n as ae,t as oe}from"./snapshot-runtime.js";import{a as T,i as E,o as D}from"./snapshot-runtime-binding.js";import{_ as O,a as k,c as A,g as j,h as M,m as N,o as P,p as F,s as I,t as L,u as R}from"./selector-runtime.js";async function z(e){let{device:t,action:r,inspectFacts:a,bindDevice:s}=e,c={command:`alert`,device:t,inspectFacts:a,bindDevice:s,...e.session?{}:{readiness:{}}};if(r===`wait`){let e=await C({...c,use:u});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>V(t,e)}}if(r===`accept`){let e=await C({...c,use:i});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>H(t,e)}}if(r===`dismiss`){let e=await C({...c,use:n});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>U(t,e)}}let l=await C({...c,use:o});if(l.type===`response`)return{ok:!1,response:l.response};let d=l.runtime;return{ok:!0,execute:e=>B(d,e)}}async function B(e,t){return await e.operations.readAlert(t)}async function V(e,t){return await e.operations.awaitAlert(t)}async function H(e,t){return await e.operations.acceptAlert(t)}async function U(e,t){return await e.operations.dismissAlert(t)}async function W(e){let{req:t,logPath:n,sessionStore:r,session:i,device:a,inspectFacts:o,bindDevice:s}=e,c=await z({device:a,action:K(t.positionals?.[0]),session:i,inspectFacts:o,bindDevice:s});if(!c.ok)return c.response;i&&ie(t)===`may-invalidate`&&S(i);let u=x(n,t.flags,i?.appBundleId,i?.trace?.outPath),d=await c.execute({timeoutMs:l(t.positionals?.[1])??1e4,...G(i),execution:w(u)});return E(r,i,t,d),{ok:!0,data:d}}function G(e){return{...e?.appBundleId===void 0?{}:{appBundleId:e.appBundleId},...e?.surface===void 0?{}:{surface:e.surface}}}function K(e){return e===`accept`||e===`dismiss`||e===`wait`?e:`get`}function q(e){let t=e.positionals?.[0]?.toLowerCase(),n=e.positionals?.[1]?.toLowerCase(),r=e.positionals?.[2]?.toLowerCase();return t===`clear-app-state`?{ok:!0,parsed:{setting:t,state:`clear`,appBundleId:n===`clear`?e.positionals?.[2]:e.positionals?.[1]}}:!t||!n||t===`permission`&&!r||t===`location`&&n===`set`&&(!e.positionals?.[2]||!e.positionals?.[3])||t===`reset-keychain`&&e.positionals?.[2]!==void 0?b(`INVALID_ARGS`,g):{ok:!0,parsed:{setting:t,state:n,permissionTarget:r,permissionMode:e.positionals?.[3],latitude:e.positionals?.[2],longitude:e.positionals?.[3]}}}function se(e){if(e.setting===`permission`)return{permissionTarget:e.permissionTarget,permissionMode:e.permissionMode};if(e.setting===`location`&&e.state===`set`)return{latitude:_(e.latitude,`latitude`),longitude:_(e.longitude,`longitude`)}}function ce(e,t,n){let{setting:r,state:i}=e;return r===`clear-app-state`?{setting:`clear-app-state`,state:`clear`,appBundleId:t,platform:n}:r===`location`&&i===`set`?{setting:r,state:i,latitude:e.latitude,longitude:e.longitude,platform:n}:r===`permission`?{setting:r,state:i,permissionTarget:e.permissionTarget,permissionMode:e.permissionMode,platform:n}:{setting:r,state:i,appBundleId:t,platform:n}}function le(e){return typeof e.message==`string`&&e.message.length>0?e.message:void 0}async function ue(e,t,n){let{setting:r,state:i}=t,a=await e.operations.setSetting(t);return a&&typeof a==`object`?p({setting:r,state:i,...a},le(a)??n):{setting:r,state:i,...f(n)}}async function de(e){let{req:n,logPath:r,sessionStore:i,session:o,device:s,parsed:c,inspectFacts:l,bindDevice:u}=e,{setting:d,state:f}=c,p=await C({command:`settings`,device:s,use:a,inspectFacts:l,bindDevice:u,...o?{}:{readiness:{}}});if(p.type===`response`)return p.response;if(t(s)&&!h(d))return b(`INVALID_ARGS`,m(d));let g=c.appBundleId??o?.appBundleId;if(d===`clear-app-state`&&!g)return b(`INVALID_ARGS`,`settings clear-app-state requires an app id when no app is bound to the session`);o&&S(o),ee({level:`debug`,phase:`settings_apply`,data:ce(c,g,s.platform)});let _=se(c),v=x(r,n.flags,g,o?.trace?.outPath),y=await ue(p.runtime,{setting:d,state:f,...g===void 0?{}:{appBundleId:g},..._===void 0?{}:{options:_},execution:w(v)},d===`clear-app-state`?`Cleared user data for ${g}`:`Updated setting: ${d}`);return E(i,o,n,y),{ok:!0,data:y}}async function fe(e){return await ae({...e,command:`diff`,execute:async({runtime:e,sessionName:t,req:n,snapshotScope:r})=>{let i=await e.capture.diffSnapshot({session:t,interactiveOnly:n.flags?.snapshotInteractiveOnly,depth:n.flags?.snapshotDepth,scope:r,raw:n.flags?.snapshotRaw});return{data:i,record:{kind:`diff`,mode:`snapshot`,baselineInitialized:i.baselineInitialized,summary:i.summary}}}})}function pe(e){return e!==`sleep`}const me=[`application`,`window`,`tabbar`,`scrollbar`,`image`],he=new Set([`tab bar`]);async function ge(e,t){if(t.ok||!_e(t.error.details?.reason)||t.error.details?.captureStalled===!0||t.error.details?.captureTruncated===!0)return t;let n=await ve(e).catch(()=>null);return n?b(t.error.code,`${t.error.message}. Current surface: ${n.summary}.`,{...t.error.details??{},currentSurface:n.details}):t}function _e(e){return e===d.targetAbsent||e===d.stableTimeout}async function ve(e){let t={...e.req.flags,snapshotInteractiveOnly:!0},n=[...(await re({device:e.device,session:e.session,flags:t,logPath:e.logPath??``,captureData:async()=>await e.capture(te({flags:t,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:void 0}))})).snapshot.nodes].sort(ye),r=J(n,6,{includeIdentifiers:!0});if(r.length===0)return null;let i=J(n.filter(e=>!Z(e)),4,{includeIdentifiers:!1}),a=J(n.filter(xe),4,{includeIdentifiers:!0});return{summary:(i.length>0?i:r.slice(0,4)).join(`, `),details:{labels:r,...a.length>0?{buttons:a}:{}}}}function J(e,t,n){let r=new Set,i=[];for(let a of e){let e=X(a,n);if(!(!e||r.has(e))&&(r.add(e),i.push(e),i.length>=t))break}return i}function ye(e,t){return Y(e)-Y(t)||be(e,t)}function Y(e){let t=!!X(e,{includeIdentifiers:!1});return(Z(e)?2:0)+ +!t}function be(e,t){return e.rect&&t.rect?e.rect.y-t.rect.y||e.rect.x-t.rect.x:e.rect?-1:t.rect?1:(e.depth??0)-(t.depth??0)||e.index-t.index}function X(e,t){let n=(t.includeIdentifiers?[e.label,e.value,e.identifier]:[e.label,e.value]).map(e=>typeof e==`string`?e.trim():``).find(e=>e.length>0);return n?n.replaceAll(/\s+/g,` `).slice(0,80):``}function Z(e){let t=r(`${e.type??``} ${e.role??``} ${e.subrole??``}`),n=`${e.label??``} ${e.value??``}`.trim().toLowerCase();return me.some(e=>t.includes(e))||he.has(n)||n.endsWith(`.fill`)}function xe(e){let t=`${e.type??``} ${e.role??``} ${e.subrole??``}`;return r(t).includes(`button`)}async function Q(e){let{req:t,sessionName:n,sessionStore:r}=e,i=Se(t);if(`ok`in i)return i;let a=i,{session:o,device:s}=await T(r,n,t.flags),c=await Ce(e,a,o,s);if(c&&`ok`in c)return c;let l=c,u=t.internal?.replayLandmarkGuard,d=we(a,o);if(`ok`in d)return d;let{waitParsed:f,staleRefsWarning:p}=d;return e.consumedSnapshot??={},a.kind===`sleep`?await $(e,f,o,s,l,p,u):R(await D(o,s,()=>$(e,f,o,s,l,p,u),e.platformResourceCleanup),L(e))}function Se(e){let t=c(e.positionals??[]);if(!t)return b(`INVALID_ARGS`,`wait requires a duration or text`);if(t.kind===`invalid`)return b(`INVALID_ARGS`,t.message);if(t.kind!==`absent`)return t;let n=v({depth:e.flags?.snapshotDepth,scope:e.flags?.snapshotScope});if(!n)return t;let r=y(n,`wait`);return b(r.code,r.message,r.details)}async function Ce(e,t,n,r){if(!pe(t.kind))return;let i=await F({command:`wait`,device:r,session:n,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?i.operations:i.response}function we(e,t){if(e.kind!==`ref`)return{waitParsed:e};let n=O(e.rawRef);return n.ok?{waitParsed:{...e,rawRef:n.ref},staleRefsWarning:ne({session:t,ref:n.ref,mintedGeneration:n.generation})}:n.response}async function $(e,t,n,r,i,a,o){let{req:s,sessionName:c,sessionStore:l}=e,u=A({...e,session:n,device:r,bound:i}),d=await I(async()=>{let e=await u.selectors.wait({session:c,requestId:s.meta?.requestId,target:Te(t,n,o)}),r=P(e);N(l,c,s,M(e),r,`landmark`);let i=j(e);return a?{...i,warning:a}:i}),f=i?await ge({req:s,logPath:e.logPath,session:n,device:r,capture:i.capture},d):d;return await k(e,f,`wait`)}function Te(e,t,n){switch(e.kind){case`sleep`:return{kind:`sleep`,durationMs:e.durationMs};case`selector`:return{kind:`selector`,selector:e.selectorExpression,timeoutMs:e.timeoutMs,...n?{recordedLandmark:n}:{}};case`absent`:return{kind:`absent`,selector:e.selectorExpression,timeoutMs:e.timeoutMs};case`ref`:return De(e,t);case`stable`:return{kind:`stable`,quietMs:e.quietMs,timeoutMs:e.timeoutMs};case`text`:return Oe(e);default:return Ee(e)}}function Ee(e){throw Error(`Unsupported wait positional target: ${String(e)}`)}function De(t,n){if(!n?.snapshot)throw new e(`INVALID_ARGS`,`Ref wait requires an existing snapshot in session.`);return{kind:`ref`,ref:t.rawRef,timeoutMs:t.timeoutMs}}function Oe(t){let n=s(t.text);if(!n.ok)throw new e(n.code,n.message);return{kind:`text`,text:n.text,timeoutMs:t.timeoutMs}}const ke={snapshot:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await oe({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),diff:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>e.positionals?.[0]===`snapshot`?await fe({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}):b(`INVALID_ARGS`,`diff currently supports only: diff snapshot`),wait:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await Q({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),alert:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let{session:s,device:c}=await T(r,t,e.flags);return await D(s,c,async()=>await W({req:e,logPath:n,sessionStore:r,session:s,device:c,inspectFacts:i,bindDevice:a}),o)},settings:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let s=q(e);if(!s.ok)return s;let{session:c,device:l}=await T(r,t,e.flags);return await D(c,l,async()=>await de({req:e,logPath:n,sessionStore:r,session:c,device:l,parsed:s.parsed,inspectFacts:i,bindDevice:a}),o)}};async function Ae(e){let t=e.req.command,n=ke[t];return n?await n(e):null}export{Ae as handleSnapshotCommands};
1
+ import{C as e}from"./sdk-contracts.js";import{u as t}from"./sdk-device.js";import{$ as n,Mr as r,Q as i,Rt as a,et as o,lr as s,nn as c,rn as l,tt as u}from"./sdk-batch.js";import"./session-store.js";import{l as d}from"./runtime.js";import{i as f,r as p}from"./success-text.js";import"./alert-contract.js";import{d as m,s as h,t as g,u as _}from"./location-coordinates.js";import{a as v,t as y}from"./absence-observation-errors.js";import{r as ee}from"./diagnostics.js";import"./diagnostics2.js";import{i as b}from"./request-runtime-binding.js";import{C as x,E as S,g as C,m as w,p as te,r as ne,s as re}from"./session-snapshot.js";import{h as ie}from"./screenshot-runtime.js";import{n as ae,t as oe}from"./snapshot-runtime.js";import{a as T,i as E,o as D}from"./snapshot-runtime-binding.js";import{_ as O,a as k,c as A,g as j,h as M,m as N,o as P,p as F,s as I,t as L,u as R}from"./selector-runtime.js";async function z(e){let{device:t,action:r,inspectFacts:a,bindDevice:s}=e,c={command:`alert`,device:t,inspectFacts:a,bindDevice:s,...e.session?{}:{readiness:{}}};if(r===`wait`){let e=await C({...c,use:u});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>V(t,e)}}if(r===`accept`){let e=await C({...c,use:i});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>H(t,e)}}if(r===`dismiss`){let e=await C({...c,use:n});if(e.type===`response`)return{ok:!1,response:e.response};let t=e.runtime;return{ok:!0,execute:e=>U(t,e)}}let l=await C({...c,use:o});if(l.type===`response`)return{ok:!1,response:l.response};let d=l.runtime;return{ok:!0,execute:e=>B(d,e)}}async function B(e,t){return await e.operations.readAlert(t)}async function V(e,t){return await e.operations.awaitAlert(t)}async function H(e,t){return await e.operations.acceptAlert(t)}async function U(e,t){return await e.operations.dismissAlert(t)}async function W(e){let{req:t,logPath:n,sessionStore:r,session:i,device:a,inspectFacts:o,bindDevice:s}=e,c=await z({device:a,action:K(t.positionals?.[0]),session:i,inspectFacts:o,bindDevice:s});if(!c.ok)return c.response;i&&ie(t)===`may-invalidate`&&S(i);let u=x(n,t.flags,i?.appBundleId,i?.trace?.outPath),d=await c.execute({timeoutMs:l(t.positionals?.[1])??1e4,...G(i),execution:w(u)});return E(r,i,t,d),{ok:!0,data:d}}function G(e){return{...e?.appBundleId===void 0?{}:{appBundleId:e.appBundleId},...e?.surface===void 0?{}:{surface:e.surface}}}function K(e){return e===`accept`||e===`dismiss`||e===`wait`?e:`get`}function q(e){let t=e.positionals?.[0]?.toLowerCase(),n=e.positionals?.[1]?.toLowerCase(),r=e.positionals?.[2]?.toLowerCase();return t===`clear-app-state`?{ok:!0,parsed:{setting:t,state:`clear`,appBundleId:n===`clear`?e.positionals?.[2]:e.positionals?.[1]}}:!t||!n||t===`permission`&&!r||t===`location`&&n===`set`&&(!e.positionals?.[2]||!e.positionals?.[3])||t===`reset-keychain`&&e.positionals?.[2]!==void 0?b(`INVALID_ARGS`,h):{ok:!0,parsed:{setting:t,state:n,permissionTarget:r,permissionMode:e.positionals?.[3],latitude:e.positionals?.[2],longitude:e.positionals?.[3]}}}function se(e){if(e.setting===`permission`)return{permissionTarget:e.permissionTarget,permissionMode:e.permissionMode};if(e.setting===`location`&&e.state===`set`)return{latitude:g(e.latitude,`latitude`),longitude:g(e.longitude,`longitude`)}}function ce(e,t,n){let{setting:r,state:i}=e;return r===`clear-app-state`?{setting:`clear-app-state`,state:`clear`,appBundleId:t,platform:n}:r===`location`&&i===`set`?{setting:r,state:i,latitude:e.latitude,longitude:e.longitude,platform:n}:r===`permission`?{setting:r,state:i,permissionTarget:e.permissionTarget,permissionMode:e.permissionMode,platform:n}:{setting:r,state:i,appBundleId:t,platform:n}}function le(e){return typeof e.message==`string`&&e.message.length>0?e.message:void 0}async function ue(e,t,n){let{setting:r,state:i}=t,a=await e.operations.setSetting(t);return a&&typeof a==`object`?f({setting:r,state:i,...a},le(a)??n):{setting:r,state:i,...p(n)}}async function de(e){let{req:n,logPath:r,sessionStore:i,session:o,device:s,parsed:c,inspectFacts:l,bindDevice:u}=e,{setting:d,state:f}=c,p=await C({command:`settings`,device:s,use:a,inspectFacts:l,bindDevice:u,...o?{}:{readiness:{}}});if(p.type===`response`)return p.response;if(t(s)&&!m(d))return b(`INVALID_ARGS`,_(d));let h=c.appBundleId??o?.appBundleId;if(d===`clear-app-state`&&!h)return b(`INVALID_ARGS`,`settings clear-app-state requires an app id when no app is bound to the session`);o&&S(o),ee({level:`debug`,phase:`settings_apply`,data:ce(c,h,s.platform)});let g=se(c),v=x(r,n.flags,h,o?.trace?.outPath),y=await ue(p.runtime,{setting:d,state:f,...h===void 0?{}:{appBundleId:h},...g===void 0?{}:{options:g},execution:w(v)},d===`clear-app-state`?`Cleared user data for ${h}`:`Updated setting: ${d}`);return E(i,o,n,y),{ok:!0,data:y}}async function fe(e){return await ae({...e,command:`diff`,execute:async({runtime:e,sessionName:t,req:n,snapshotScope:r})=>{let i=await e.capture.diffSnapshot({session:t,interactiveOnly:n.flags?.snapshotInteractiveOnly,depth:n.flags?.snapshotDepth,scope:r,raw:n.flags?.snapshotRaw});return{data:i,record:{kind:`diff`,mode:`snapshot`,baselineInitialized:i.baselineInitialized,summary:i.summary}}}})}function pe(e){return e!==`sleep`}const me=[`application`,`window`,`tabbar`,`scrollbar`,`image`],he=new Set([`tab bar`]);async function ge(e,t){if(t.ok||!_e(t.error.details?.reason)||t.error.details?.captureStalled===!0||t.error.details?.captureTruncated===!0)return t;let n=await ve(e).catch(()=>null);return n?b(t.error.code,`${t.error.message}. Current surface: ${n.summary}.`,{...t.error.details??{},currentSurface:n.details}):t}function _e(e){return e===d.targetAbsent||e===d.stableTimeout}async function ve(e){let t={...e.req.flags,snapshotInteractiveOnly:!0},n=[...(await re({device:e.device,session:e.session,flags:t,logPath:e.logPath??``,captureData:async()=>await e.capture(te({flags:t,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:void 0}))})).snapshot.nodes].sort(ye),r=J(n,6,{includeIdentifiers:!0});if(r.length===0)return null;let i=J(n.filter(e=>!Z(e)),4,{includeIdentifiers:!1}),a=J(n.filter(xe),4,{includeIdentifiers:!0});return{summary:(i.length>0?i:r.slice(0,4)).join(`, `),details:{labels:r,...a.length>0?{buttons:a}:{}}}}function J(e,t,n){let r=new Set,i=[];for(let a of e){let e=X(a,n);if(!(!e||r.has(e))&&(r.add(e),i.push(e),i.length>=t))break}return i}function ye(e,t){return Y(e)-Y(t)||be(e,t)}function Y(e){let t=!!X(e,{includeIdentifiers:!1});return(Z(e)?2:0)+ +!t}function be(e,t){return e.rect&&t.rect?e.rect.y-t.rect.y||e.rect.x-t.rect.x:e.rect?-1:t.rect?1:(e.depth??0)-(t.depth??0)||e.index-t.index}function X(e,t){let n=(t.includeIdentifiers?[e.label,e.value,e.identifier]:[e.label,e.value]).map(e=>typeof e==`string`?e.trim():``).find(e=>e.length>0);return n?n.replaceAll(/\s+/g,` `).slice(0,80):``}function Z(e){let t=r(`${e.type??``} ${e.role??``} ${e.subrole??``}`),n=`${e.label??``} ${e.value??``}`.trim().toLowerCase();return me.some(e=>t.includes(e))||he.has(n)||n.endsWith(`.fill`)}function xe(e){let t=`${e.type??``} ${e.role??``} ${e.subrole??``}`;return r(t).includes(`button`)}async function Q(e){let{req:t,sessionName:n,sessionStore:r}=e,i=Se(t);if(`ok`in i)return i;let a=i,{session:o,device:s}=await T(r,n,t.flags),c=await Ce(e,a,o,s);if(c&&`ok`in c)return c;let l=c,u=t.internal?.replayLandmarkGuard,d=we(a,o);if(`ok`in d)return d;let{waitParsed:f,staleRefsWarning:p}=d;return e.consumedSnapshot??={},a.kind===`sleep`?await $(e,f,o,s,l,p,u):R(await D(o,s,()=>$(e,f,o,s,l,p,u),e.platformResourceCleanup),L(e))}function Se(e){let t=c(e.positionals??[]);if(!t)return b(`INVALID_ARGS`,`wait requires a duration or text`);if(t.kind===`invalid`)return b(`INVALID_ARGS`,t.message);if(t.kind!==`absent`)return t;let n=v({depth:e.flags?.snapshotDepth,scope:e.flags?.snapshotScope});if(!n)return t;let r=y(n,`wait`);return b(r.code,r.message,r.details)}async function Ce(e,t,n,r){if(!pe(t.kind))return;let i=await F({command:`wait`,device:r,session:n,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return i.ok?i.operations:i.response}function we(e,t){if(e.kind!==`ref`)return{waitParsed:e};let n=O(e.rawRef);return n.ok?{waitParsed:{...e,rawRef:n.ref},staleRefsWarning:ne({session:t,ref:n.ref,mintedGeneration:n.generation})}:n.response}async function $(e,t,n,r,i,a,o){let{req:s,sessionName:c,sessionStore:l}=e,u=A({...e,session:n,device:r,bound:i}),d=await I(async()=>{let e=await u.selectors.wait({session:c,requestId:s.meta?.requestId,target:Te(t,n,o)}),r=P(e);N(l,c,s,M(e),r,`landmark`);let i=j(e);return a?{...i,warning:a}:i}),f=i?await ge({req:s,logPath:e.logPath,session:n,device:r,capture:i.capture},d):d;return await k(e,f,`wait`)}function Te(e,t,n){switch(e.kind){case`sleep`:return{kind:`sleep`,durationMs:e.durationMs};case`selector`:return{kind:`selector`,selector:e.selectorExpression,timeoutMs:e.timeoutMs,...n?{recordedLandmark:n}:{}};case`absent`:return{kind:`absent`,selector:e.selectorExpression,timeoutMs:e.timeoutMs};case`ref`:return De(e,t);case`stable`:return{kind:`stable`,quietMs:e.quietMs,timeoutMs:e.timeoutMs};case`text`:return Oe(e);default:return Ee(e)}}function Ee(e){throw Error(`Unsupported wait positional target: ${String(e)}`)}function De(t,n){if(!n?.snapshot)throw new e(`INVALID_ARGS`,`Ref wait requires an existing snapshot in session.`);return{kind:`ref`,ref:t.rawRef,timeoutMs:t.timeoutMs}}function Oe(t){let n=s(t.text);if(!n.ok)throw new e(n.code,n.message);return{kind:`text`,text:n.text,timeoutMs:t.timeoutMs}}const ke={snapshot:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await oe({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),diff:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>e.positionals?.[0]===`snapshot`?await fe({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}):b(`INVALID_ARGS`,`diff currently supports only: diff snapshot`),wait:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>await Q({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o}),alert:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let{session:s,device:c}=await T(r,t,e.flags);return await D(s,c,async()=>await W({req:e,logPath:n,sessionStore:r,session:s,device:c,inspectFacts:i,bindDevice:a}),o)},settings:async({req:e,sessionName:t,logPath:n,sessionStore:r,inspectFacts:i,bindDevice:a,platformResourceCleanup:o})=>{let s=q(e);if(!s.ok)return s;let{session:c,device:l}=await T(r,t,e.flags);return await D(c,l,async()=>await de({req:e,logPath:n,sessionStore:r,session:c,device:l,parsed:s.parsed,inspectFacts:i,bindDevice:a}),o)}};async function Ae(e){let t=e.req.command,n=ke[t];return n?await n(e):null}export{Ae as handleSnapshotCommands};
@@ -0,0 +1 @@
1
+ import{l as e,u as t}from"./sdk-device.js";import{i as n,n as r}from"./recording-stop-observation.js";import{t as i}from"./screen-recording-completion.js";import a from"node:path";async function o(e,t){try{return await e()}catch{if(t?.aborted)throw t.reason;return!1}}function s(e){return e.exitCode===0}function c(n){return process.platform===`darwin`&&(t(n)||e(n)&&n.kind===`simulator`||n.platform===`android`&&n.kind===`emulator`)}function l(e){return e.exportPath===void 0?e.observation===void 0||e.observation.recorder===`unconfirmed`:!1}function u(e){return f(e,`native`)}function d(e){return f(e,`collected`)}function f(e,t){let n=a.extname(e);return`${n===``?e:e.slice(0,-n.length)}.${t}${n}`}const p=`stopObservation`,m=`stoppedAtMs`,h=`stopRecorderWarning`,g=`collectedPath`,_=`exportPath`,v=`stopFinalization`,y=Symbol(`unreadable`),b={telemetryPath:D(),warning:D(),overlayWarning:D(),nativePathDisposition:{encode:e=>e,read:e=>e===void 0?void 0:n(e)?e:y},chunks:{encode:e=>e.map(O),read:e=>e===void 0?void 0:k(e)??y},capturedDurationMs:{encode:e=>e,read:e=>e===void 0?void 0:j(e)?e:y}};function x(e){return{...e.observation===void 0?{}:{[p]:C(e.observation)},...e.stoppedAtMs===void 0?{}:{[m]:e.stoppedAtMs},...e.recorderWarning===void 0?{}:{[h]:e.recorderWarning},...e.collectedPath===void 0?{}:{[g]:e.collectedPath},...e.exportPath===void 0?{}:{[_]:e.exportPath},...e.finalization===void 0?{}:{[v]:w(e.finalization)}}}function S(e){let t=e?.[p],n=e?.[m],i=M(e?.[h]),a=M(e?.[g]),o=M(e?.[_]),s=T(e?.[v]);return{...r(t)?{observation:t}:{},...j(n)?{stoppedAtMs:n}:{},...i===void 0?{}:{recorderWarning:i},...a===void 0?{}:{collectedPath:a},...o===void 0?{}:{exportPath:o},...s===void 0?{}:{finalization:s}}}function C(e){return e.recorder===`confirmed`?{recorder:e.recorder}:{recorder:e.recorder,why:e.why}}function w(e){let t={};for(let n of E()){let r=e[n];r!==void 0&&(t[n]=b[n].encode(r))}return t}function T(e){if(typeof e!=`object`||!e||Array.isArray(e))return;let t=e,n={};for(let e of E()){let r=b[e].read(t[e]);if(r===y)return;r!==void 0&&(n[e]=r)}return Object.keys(n).length===0?void 0:n}function E(){return Object.keys(b)}function D(){return{encode:e=>e,read:M}}function O(e){return{index:e.index,path:e.path,...e.clientOutPath===void 0?{}:{clientOutPath:e.clientOutPath}}}function k(e){if(!Array.isArray(e))return;let t=e.map(A);return t.every(e=>e!==void 0)?t:void 0}function A(e){if(typeof e!=`object`||!e)return;let{index:t,path:n,clientOutPath:r}=e,i=M(n),a=M(r);if(!(!Number.isInteger(t)||t<1||i===void 0)&&(r===void 0||a!==void 0))return{index:t,path:i,...a===void 0?{}:{clientOutPath:a}}}function j(e){return typeof e==`number`&&Number.isFinite(e)&&e>=0}function M(e){return typeof e==`string`&&e.length>0?e:void 0}async function N(e){let{steps:t,snapshot:n,progress:r,now:a=Date.now}=e,o=S(r?.learned),s=o.observation,c=o.recorderWarning,u=o.stoppedAtMs;if(l(o)){u=a();let e=await t.stop();s=e.observation,c=e.warning,r?.record(x({observation:s,stoppedAtMs:u,recorderWarning:e.warning}))}if(s===void 0)throw Error(`record stop reached collection without an observation of its recorder and a committed export`);let f=o.collectedPath??d(n.outPath);o.collectedPath===void 0&&(await t.collect(f),r?.record(x({collectedPath:f})));let p=o.finalization??await t.finalize({collectedPath:f,exportPath:n.outPath,stoppedAtMs:u??a()});r?.record(x({exportPath:n.outPath,finalization:p})),await t.discard(f);let{nativePathDisposition:m,warning:h,...g}=p,_=[h,c].filter(e=>e!==void 0&&e.length>0);return i(n,{...g,..._.length===0?{}:{warning:_.join(` `)}},{stopObservation:s,...m===void 0?{}:{nativePathDisposition:m}})}export{o as a,s as i,u as n,c as r,N as t};
@@ -1 +1 @@
1
- function e(e){return e?{message:e}:{}}function t(e,t){return t?{...e,message:t}:e}function n(e){return typeof e?.message==`string`&&e.message.length>0?e.message:null}export{e as n,t as r,n as t};
1
+ function e(e){return e?{message:e}:{}}function t(e,t){return t?{...e,message:t}:e}function n(e){return typeof e?.message==`string`&&e.message.length>0?e.message:null}function r(e){let t=e?.warnings;return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}export{t as i,r as n,e as r,n as t};
@@ -0,0 +1 @@
1
+ import{C as e}from"./sdk-contracts.js";import{Hr as t,Rr as n,zr as r}from"./sdk-batch.js";import{n as i,r as a}from"./snapshot.js";function o(t,n,r,i){return new e(`COMMAND_FAILED`,`fill tapped (${t}, ${n}) but ${r}`,{reason:`text_entry_focus_not_observed`,x:t,y:n,...i,hint:`The tap most likely missed the field. Re-check the target with snapshot -i and fill the element it reports, rather than retrying the same coordinates.`})}function s(e){let t=[];for(let n of p(e)){let e=a(n);r(e)&&t.push({node:n,identity:m(n),rect:e})}return t}function c(e){let t=new Map;for(let n of e)t.set(n.identity,(t.get(n.identity)??0)+1);return t}function l(e){let n=s(e),r=c(n),i=null,a=1/0;for(let e of n){if(!e.node.traits?.includes(`IsEditing`))continue;let n=t(e.rect);n>=a||(i=r.get(e.identity)===1?{identity:e.identity,rect:e.rect}:{rect:e.rect},a=n)}return i}function u(e,t,r){let i=s(e),a=c(i),o=new Set;for(let e of i)a.get(e.identity)===1&&n(e.rect,t,r)&&o.add(e.identity);return o}async function d(e){let t=Date.now()+(e.timeoutMs??3e3),n=0,r=!1;for(;;){let i=await e.readFocus();if(n+=1,i&&(r=!0,f(i,e.targetsAtPoint,e.x,e.y)))return`focused-element`;if(Date.now()>=t)break;await e.sleep(150)}throw o(e.x,e.y,`nothing there took text-entry focus, so the text was not sent`,{samples:n,editingElementObserved:r})}function f(e,t,r,i){return n(e.rect,r,i)?!0:e.identity!==void 0&&t.has(e.identity)}function p(e){let t=[],n=e=>{t.push(e);for(let t of i(e))n(t)};for(let t of Array.isArray(e)?e:[e])n(t);return t}function m(e){return[e.pid??``,e.type??e.elementType??``,e.AXUniqueId??e.identifier??``,e.AXLabel??e.label??``].join(`\0`)}export{d as awaitLimrunTextEntryFocus,l as readLimrunTextEntryFocus,u as readLimrunUnambiguousTapTargets};
@@ -1,4 +1,4 @@
1
- import{C as e}from"./sdk-contracts.js";import{a as t,c as n,m as r,t as i}from"./exec.js";import"./command.js";import{t as a}from"./scoped-provider.js";import{f as o,u as s}from"./host-file.js";import c from"node:path";function l(e,t){return t===`user-installed`?e.filter(e=>!e.bundleId.startsWith(`com.apple.`)):e}function u(n,r){return{openBundle:async(e,t)=>{await n(`open`,d(e,t))},openTarget:async e=>{await n(`open`,[e])},readClipboard:async()=>t(await n(`pbpaste`,[],{allowFailure:!0}),`Failed to read macOS clipboard`).stdout.replaceAll(`\r
1
+ import{C as e}from"./sdk-contracts.js";import{a as t,c as n,h as r,t as i}from"./exec.js";import"./command.js";import{t as a}from"./scoped-provider.js";import{f as o,u as s}from"./host-file.js";import c from"node:path";function l(e,t){return t===`user-installed`?e.filter(e=>!e.bundleId.startsWith(`com.apple.`)):e}function u(n,r){return{openBundle:async(e,t)=>{await n(`open`,d(e,t))},openTarget:async e=>{await n(`open`,[e])},readClipboard:async()=>t(await n(`pbpaste`,[],{allowFailure:!0}),`Failed to read macOS clipboard`).stdout.replaceAll(`\r
2
2
  `,`
3
3
  `).replace(/\n$/,``),writeClipboard:async e=>{t(await n(`pbcopy`,[],{allowFailure:!0,stdin:e}),`Failed to write macOS clipboard`)},readDarkMode:async()=>{let r=t(await n(`osascript`,[`-e`,`tell application "System Events" to tell appearance preferences to get dark mode`],{allowFailure:!0}),`Failed to read macOS appearance`),i=r.stdout.trim().toLowerCase();if(i===`true`)return!0;if(i===`false`)return!1;throw new e(`COMMAND_FAILED`,`Unable to determine current macOS appearance from osascript output: ${r.stdout.trim()}`)},setDarkMode:async e=>{t(await n(`osascript`,[`-e`,`tell application "System Events" to tell appearance preferences to set dark mode to ${e?`true`:`false`}`],{allowFailure:!0}),`Failed to set macOS appearance`)},listApps:async e=>await f(n,r,e)}}function d(e,t){let n=[`-b`,e];return t&&n.push(t),n}async function f(e,t,n){let r=[`/Applications`,`/System/Applications`,c.join(o(),`Applications`)],i=new Set;for(let t of r){if(!(await s(t).catch(()=>null))?.isDirectory())continue;let n=await e(`find`,[t,`-maxdepth`,`4`,`-type`,`d`,`-name`,`*.app`],{allowFailure:!0});if(n.exitCode===0)for(let e of n.stdout.split(`
4
4
  `)){let t=e.trim();t&&i.add(t)}}return l((await Promise.all(Array.from(i).map(async e=>{let n=await p(e,t).catch(()=>({})),r=n.bundleId;return r?{bundleId:r,name:n.appName??c.basename(e,`.app`)}:null}))).filter(e=>e!==null).sort((e,t)=>e.name.localeCompare(t.name)),n)}async function p(e,t){for(let n of[c.join(e,`Contents`,`Info.plist`),c.join(e,`Info.plist`)]){let e=await t(n),r=m(e,`CFBundleIdentifier`),i=m(e,`CFBundleDisplayName`),a=m(e,`CFBundleName`);if(r||i||a)return{bundleId:r,appName:i??a}}return{}}function m(e,t){let n=e?.[t];return typeof n==`string`&&n.trim()?n.trim():void 0}const h={runCommand:n,simctl:{run:async(e,t)=>await n(`xcrun`,[`simctl`,...e],t)},devicectl:{run:async(e,t)=>await n(`xcrun`,[`devicectl`,...e],t)},plist:{readJson:async(e,t)=>await D(n,e,t)},macosHost:u(n,async e=>await D(n,e)),whichCommand:r},g=a(h,w);function _(e={}){let t={...h,...e},n=e.plist??{readJson:async(e,n)=>await D(t.runCommand,e,n)};return{...t,simctl:e.simctl??{run:async(e,n)=>await t.runCommand(`xcrun`,[`simctl`,...e],n)},devicectl:e.devicectl??{run:async(e,n)=>await t.runCommand(`xcrun`,[`devicectl`,...e],n)},plist:n,macosHost:e.macosHost??u(t.runCommand,async e=>await n.readJson(e))}}function v(e){return g.resolve(e)}async function y(e,t){return await g.run(e,t)}function b(){return g.hasScope()}async function x(e,t,n){return await v().runCommand(e,t,n)}async function S(e,t){let n=v(),[r,...i]=e;return r===`simctl`?await(n.simctl?.run(i,t)??n.runCommand(`xcrun`,e,t)):r===`devicectl`?await(n.devicectl?.run(i,t)??n.runCommand(`xcrun`,e,t)):await x(`xcrun`,e,t)}async function C(e,t){return await v().plist?.readJson(e,t)??null}function w(e){return _({...e,runCommand:T(e.runCommand),...e.simctl?{simctl:{run:E(e.simctl.run)}}:{},...e.devicectl?{devicectl:{run:E(e.devicectl.run)}}:{},...e.macosHelper?{macosHelper:{run:E(e.macosHelper.run)}}:{}})}function T(e){return async(t,n,r)=>i(await e(t,n,r))}function E(e){return async(t,n)=>i(await e(t,n))}async function D(e,t,n){try{let r=await e(`plutil`,[`-convert`,`json`,`-o`,`-`,t],{allowFailure:!0,signal:n});return r.exitCode!==0||!r.stdout.trim()?null:JSON.parse(r.stdout)}catch{return n?.throwIfAborted(),null}}export{x as a,l as c,v as i,b as n,S as o,C as r,y as s,_ as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime.js";import{C as t}from"./sdk-contracts.js";import{r as n}from"./diagnostics.js";import{c as r}from"./owner-identity.js";import{c as i,m as a}from"./exec.js";import{t as o}from"./timeouts.js";import"./diagnostics2.js";import"./command.js";import"./retry.js";import"./process.js";import{t as s}from"./scoped-provider.js";var c=e({createLocalLinuxToolProvider:()=>d,resolveLinuxToolProvider:()=>f,runLinuxToolCommand:()=>m,withLinuxToolProvider:()=>p});const l={runCommand:i,whichCommand:a,desktop:h(i,a),clipboard:g(i,a),screenshot:_(i,a)},u=s(l,d);function d(e={}){let t={...l,...e};return{...t,desktop:e.desktop??h(t.runCommand,t.whichCommand),clipboard:e.clipboard??g(t.runCommand,t.whichCommand),screenshot:e.screenshot??_(t.runCommand,t.whichCommand)}}function f(e){return u.resolve(e)}async function p(e,t){return await u.run(e,t)}async function m(e,t,n){return await f().runCommand(e,t,n)}function h(e,t){return{async openTarget(r){if(r.includes(`://`)||r.startsWith(`/`)){await e(`xdg-open`,[r]);return}if(await t(r)){e(r,[],{allowFailure:!0}).catch(e=>{n({level:`warn`,phase:`linux_app_launch`,data:{app:r,error:String(e)}})}),await o(500);return}await e(`xdg-open`,[r],{allowFailure:!0})},async closeApp(n){if(await t(`wmctrl`)){await e(`wmctrl`,[`-c`,n],{allowFailure:!0});return}await e(`pkill`,[`-x`,n],{allowFailure:!0})}}}function g(e,t){return{async readText(){let n=await w(t,y),r=x[n];return(await e(r.cmd,r.args,r.options)).stdout},async writeText(n){let r=await w(t,y),i=S[r](n);await e(i.cmd,i.args,i.options)}}}function _(e,t){return{async capture(n){let r=await w(t,b),i=C[r](n);await e(i.cmd,i.args,i.options)}}}const v=5e3,y={wayland:[{tool:`wl-clipboard`,command:`wl-paste`}],x11:[{tool:`xclip`,command:`xclip`},{tool:`xsel`,command:`xsel`}],waylandError:`wl-paste (wl-clipboard) is required for clipboard access on Wayland. Install via your package manager.`,x11Error:`xclip or xsel is required for clipboard access on X11. Install via your package manager.`},b={wayland:[{tool:`grim`,command:`grim`},{tool:`gnome-screenshot`,command:`gnome-screenshot`}],x11:[{tool:`scrot`,command:`scrot`},{tool:`import`,command:`import`},{tool:`gnome-screenshot`,command:`gnome-screenshot`}],waylandError:`grim or gnome-screenshot is required for screenshots on Wayland. Install via your package manager.`,x11Error:`scrot, import (ImageMagick), or gnome-screenshot is required for screenshots on X11. Install via your package manager.`},x={"wl-clipboard":{cmd:`wl-paste`,args:[`--no-newline`],options:{allowFailure:!0,timeoutMs:v}},xclip:{cmd:`xclip`,args:[`-selection`,`clipboard`,`-o`],options:{allowFailure:!0,timeoutMs:v}},xsel:{cmd:`xsel`,args:[`--clipboard`,`--output`],options:{allowFailure:!0,timeoutMs:v}}},S={"wl-clipboard":e=>({cmd:`wl-copy`,args:[`--`,e],options:{allowFailure:!1,timeoutMs:v}}),xclip:e=>({cmd:`xclip`,args:[`-selection`,`clipboard`],options:{allowFailure:!1,timeoutMs:v,stdin:e}}),xsel:e=>({cmd:`xsel`,args:[`--clipboard`,`--input`],options:{allowFailure:!1,timeoutMs:v,stdin:e}})},C={grim:e=>({cmd:`grim`,args:[e]}),scrot:e=>({cmd:`scrot`,args:[e]}),import:e=>({cmd:`import`,args:[`-window`,`root`,e]}),"gnome-screenshot":e=>({cmd:`gnome-screenshot`,args:[`-f`,e]})};async function w(e,n){let r=T()?`wayland`:`x11`;for(let t of n[r])if(await e(t.command))return t.tool;throw new t(`TOOL_MISSING`,r===`wayland`?n.waylandError:n.x11Error)}function T(){let e=r();return!!e.WAYLAND_DISPLAY||e.XDG_SESSION_TYPE===`wayland`}export{m as n,c as r,f as t};
1
+ import{r as e}from"./rolldown-runtime.js";import{C as t}from"./sdk-contracts.js";import{r as n}from"./diagnostics.js";import{c as r}from"./owner-identity.js";import{c as i,h as a}from"./exec.js";import{t as o}from"./timeouts.js";import"./diagnostics2.js";import"./command.js";import"./retry.js";import"./process.js";import{t as s}from"./scoped-provider.js";var c=e({createLocalLinuxToolProvider:()=>d,resolveLinuxToolProvider:()=>f,runLinuxToolCommand:()=>m,withLinuxToolProvider:()=>p});const l={runCommand:i,whichCommand:a,desktop:h(i,a),clipboard:g(i,a),screenshot:_(i,a)},u=s(l,d);function d(e={}){let t={...l,...e};return{...t,desktop:e.desktop??h(t.runCommand,t.whichCommand),clipboard:e.clipboard??g(t.runCommand,t.whichCommand),screenshot:e.screenshot??_(t.runCommand,t.whichCommand)}}function f(e){return u.resolve(e)}async function p(e,t){return await u.run(e,t)}async function m(e,t,n){return await f().runCommand(e,t,n)}function h(e,t){return{async openTarget(r){if(r.includes(`://`)||r.startsWith(`/`)){await e(`xdg-open`,[r]);return}if(await t(r)){e(r,[],{allowFailure:!0}).catch(e=>{n({level:`warn`,phase:`linux_app_launch`,data:{app:r,error:String(e)}})}),await o(500);return}await e(`xdg-open`,[r],{allowFailure:!0})},async closeApp(n){if(await t(`wmctrl`)){await e(`wmctrl`,[`-c`,n],{allowFailure:!0});return}await e(`pkill`,[`-x`,n],{allowFailure:!0})}}}function g(e,t){return{async readText(){let n=await w(t,y),r=x[n];return(await e(r.cmd,r.args,r.options)).stdout},async writeText(n){let r=await w(t,y),i=S[r](n);await e(i.cmd,i.args,i.options)}}}function _(e,t){return{async capture(n){let r=await w(t,b),i=C[r](n);await e(i.cmd,i.args,i.options)}}}const v=5e3,y={wayland:[{tool:`wl-clipboard`,command:`wl-paste`}],x11:[{tool:`xclip`,command:`xclip`},{tool:`xsel`,command:`xsel`}],waylandError:`wl-paste (wl-clipboard) is required for clipboard access on Wayland. Install via your package manager.`,x11Error:`xclip or xsel is required for clipboard access on X11. Install via your package manager.`},b={wayland:[{tool:`grim`,command:`grim`},{tool:`gnome-screenshot`,command:`gnome-screenshot`}],x11:[{tool:`scrot`,command:`scrot`},{tool:`import`,command:`import`},{tool:`gnome-screenshot`,command:`gnome-screenshot`}],waylandError:`grim or gnome-screenshot is required for screenshots on Wayland. Install via your package manager.`,x11Error:`scrot, import (ImageMagick), or gnome-screenshot is required for screenshots on X11. Install via your package manager.`},x={"wl-clipboard":{cmd:`wl-paste`,args:[`--no-newline`],options:{allowFailure:!0,timeoutMs:v}},xclip:{cmd:`xclip`,args:[`-selection`,`clipboard`,`-o`],options:{allowFailure:!0,timeoutMs:v}},xsel:{cmd:`xsel`,args:[`--clipboard`,`--output`],options:{allowFailure:!0,timeoutMs:v}}},S={"wl-clipboard":e=>({cmd:`wl-copy`,args:[`--`,e],options:{allowFailure:!1,timeoutMs:v}}),xclip:e=>({cmd:`xclip`,args:[`-selection`,`clipboard`],options:{allowFailure:!1,timeoutMs:v,stdin:e}}),xsel:e=>({cmd:`xsel`,args:[`--clipboard`,`--input`],options:{allowFailure:!1,timeoutMs:v,stdin:e}})},C={grim:e=>({cmd:`grim`,args:[e]}),scrot:e=>({cmd:`scrot`,args:[e]}),import:e=>({cmd:`import`,args:[`-window`,`root`,e]}),"gnome-screenshot":e=>({cmd:`gnome-screenshot`,args:[`-f`,e]})};async function w(e,n){let r=T()?`wayland`:`x11`;for(let t of n[r])if(await e(t.command))return t.tool;throw new t(`TOOL_MISSING`,r===`wayland`?n.waylandError:n.x11Error)}function T(){let e=r();return!!e.WAYLAND_DISPLAY||e.XDG_SESSION_TYPE===`wayland`}export{m as n,c as r,f as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime.js";import{c as t,i as n,m as r}from"./exec.js";import"./command.js";import{t as i}from"./scoped-provider.js";import{f as a}from"./host-file.js";import o from"node:path";var s=e({createLocalVegaToolProvider:()=>d,resolveVegaToolProvider:()=>f,withVegaToolProvider:()=>p});const c={run:async(e,n)=>await t(await h()??`vega`,e,n),isAvailable:async()=>!!await h()},l=d(),u=i(l);function d(e=c){return{isAvailable:async()=>await e.isAvailable(),version:async t=>await e.run([`--version`],t),listDevices:async t=>await e.run([`device`,`list`],t),checkConnected:async(t,n)=>await e.run([`device`,`is-connected`,`--device`,t],n),launchApp:async(t,n,r)=>await e.run([`device`,`launch-app`,`--device`,t,`--appName`,n],r),terminateApp:async(t,n,r)=>await e.run([`device`,`terminate-app`,`--device`,t,`--appName`,n],r),pressRemote:async(t,n,r,i)=>await e.run([`device`,`run-cmd`,`--device`,t,`--command`,[`inputd-cli`,`button_press`,n,...r===void 0?[]:[`--holdDuration`,String(r)]].join(` `)],i)}}function f(e){return u.resolve(e)}async function p(e,t){return await u.run(e,t)}let m;async function h(){if(m)return m;if(await r(`vega`))return m=`vega`,m;let e=o.join(a(),`vega`,`bin`,`vega`);return await n(e)&&(m=e),m}export{s as n,f as t};
1
+ import{r as e}from"./rolldown-runtime.js";import{c as t,h as n,i as r}from"./exec.js";import"./command.js";import{t as i}from"./scoped-provider.js";import{f as a}from"./host-file.js";import o from"node:path";var s=e({createLocalVegaToolProvider:()=>d,resolveVegaToolProvider:()=>f,withVegaToolProvider:()=>p});const c={run:async(e,n)=>await t(await h()??`vega`,e,n),isAvailable:async()=>!!await h()},l=d(),u=i(l);function d(e=c){return{isAvailable:async()=>await e.isAvailable(),version:async t=>await e.run([`--version`],t),listDevices:async t=>await e.run([`device`,`list`],t),checkConnected:async(t,n)=>await e.run([`device`,`is-connected`,`--device`,t],n),launchApp:async(t,n,r)=>await e.run([`device`,`launch-app`,`--device`,t,`--appName`,n],r),terminateApp:async(t,n,r)=>await e.run([`device`,`terminate-app`,`--device`,t,`--appName`,n],r),pressRemote:async(t,n,r,i)=>await e.run([`device`,`run-cmd`,`--device`,t,`--command`,[`inputd-cli`,`button_press`,n,...r===void 0?[]:[`--holdDuration`,String(r)]].join(` `)],i)}}function f(e){return u.resolve(e)}async function p(e,t){return await u.run(e,t)}let m;async function h(){if(m)return m;if(await n(`vega`))return m=`vega`,m;let e=o.join(a(),`vega`,`bin`,`vega`);return await r(e)&&(m=e),m}export{s as n,f as t};
@@ -1 +1 @@
1
- import{C as e}from"./sdk-contracts.js";import{Ht as t}from"./sdk-batch.js";import{k as n}from"./runtime.js";import{n as r}from"./success-text.js";import{g as i,m as a}from"./session-snapshot.js";function o(e){let t=e?.trim().split(/\s+/,1)[0];if(!t||!t.startsWith(`@`)||t.length<3)return null;let n=t.slice(1);return/^[A-Za-z_-]*\d[\w-]*$/i.test(n)||/^(?:ref|node|element|el)[\w-]*$/i.test(n)?t:null}async function s(e){let n=await i({command:`type`,device:e.device,use:t,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(n.type===`response`)return{ok:!1,response:n.response};let r=n.runtime;return{ok:!0,typeText:async(e,t)=>await c(r,e,t)}}async function c(t,i,a){let s=o(i[0]);if(s)throw new e(`INVALID_ARGS`,`type does not accept a target ref like "${s}"`,{hint:`Use fill ${s} "text" to target that field, or press ${s} then type "text" to append.`});let c=i.join(` `);if(!c)throw new e(`INVALID_ARGS`,`type requires text`);let u=n(a.delayMs??0,`delay-ms`,0,1e4),d=(await t.operations.typeText(l(c,u,a)))?.textEntryRoute;return{...d===void 0?{}:{textEntryRoute:d},text:c,delayMs:u,...r(`Typed ${Array.from(c).length} chars`)}}function l(e,t,n){return{text:e,delayMs:t,...n.appBundleId===void 0?{}:{options:{appBundleId:n.appBundleId}},execution:a(n)}}export{s as n,c as t};
1
+ import{C as e}from"./sdk-contracts.js";import{Ht as t}from"./sdk-batch.js";import{k as n}from"./runtime.js";import{r}from"./success-text.js";import{g as i,m as a}from"./session-snapshot.js";function o(e){let t=e?.trim().split(/\s+/,1)[0];if(!t||!t.startsWith(`@`)||t.length<3)return null;let n=t.slice(1);return/^[A-Za-z_-]*\d[\w-]*$/i.test(n)||/^(?:ref|node|element|el)[\w-]*$/i.test(n)?t:null}async function s(e){let n=await i({command:`type`,device:e.device,use:t,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});if(n.type===`response`)return{ok:!1,response:n.response};let r=n.runtime;return{ok:!0,typeText:async(e,t)=>await c(r,e,t)}}async function c(t,i,a){let s=o(i[0]);if(s)throw new e(`INVALID_ARGS`,`type does not accept a target ref like "${s}"`,{hint:`Use fill ${s} "text" to target that field, or press ${s} then type "text" to append.`});let c=i.join(` `);if(!c)throw new e(`INVALID_ARGS`,`type requires text`);let u=n(a.delayMs??0,`delay-ms`,0,1e4),d=(await t.operations.typeText(l(c,u,a)))?.textEntryRoute;return{...d===void 0?{}:{textEntryRoute:d},text:c,delayMs:u,...r(`Typed ${Array.from(c).length} chars`)}}function l(e,t,n){return{text:e,delayMs:t,...n.appBundleId===void 0?{}:{options:{appBundleId:n.appBundleId}},execution:a(n)}}export{s as n,c as t};
package/dist/src/video.js CHANGED
@@ -1,4 +1,4 @@
1
- import{C as e}from"./sdk-contracts.js";import{nr as t}from"./sdk-batch.js";import{x as n}from"./owner-identity.js";import{c as r}from"./exec.js";import{t as i}from"./timeouts.js";import{t as a}from"./file.js";import"./command.js";import"./retry.js";import"./process.js";import o from"node:path";import s from"node:fs";import{createHash as c}from"node:crypto";import l from"node:os";function u(e=process.env){let t=p(),n=o.join(t,`home`),r=o.join(t,`module-cache`);return s.mkdirSync(n,{recursive:!0}),s.mkdirSync(r,{recursive:!0}),{...e,HOME:n,CLANG_MODULE_CACHE_PATH:r}}async function d(e){let t=[e.sourcePath,...e.extraSourcePaths??[]],n=t.map(e=>({sourcePath:e,stat:s.statSync(e),source:s.readFileSync(e)})),r=_(e.cacheName??o.basename(e.sourcePath,o.extname(e.sourcePath))),i=v([`2`,process.platform,process.arch,...n.flatMap(({sourcePath:e,stat:t,source:n})=>[o.resolve(e),t.size,n])]),a=o.join(p(),`bin`,`${r}-${i}`);return await m({sourcePaths:t,executablePath:a,timeoutMs:e.timeoutMs}),a}async function f(e){let t=_(e.cacheName),n=v([`2`,process.platform,process.arch,e.source]),r=o.join(p(),`sources`,`${t}-${n}.swift`),i=o.join(p(),`bin`,`${t}-${n}`);return await m({sourcePaths:[r],executablePath:i,sourceText:e.source,timeoutMs:e.timeoutMs}),i}function p(){let e=process.env.AGENT_DEVICE_SWIFT_CACHE_DIR?.trim();return e?o.resolve(e):o.join(l.tmpdir(),`agent-device-swift-cache`)}async function m(e){if(g(e.executablePath))return;let t=o.dirname(e.executablePath);s.mkdirSync(t,{recursive:!0});let n=await h(`${e.executablePath}.lock`,e.executablePath,e.timeoutMs??12e4);if(!n)return;let i=s.mkdtempSync(o.join(t,`.${o.basename(e.executablePath)}.${process.pid}.`)),a=o.join(i,o.basename(e.executablePath));try{if(g(e.executablePath))return;let[t]=e.sourcePaths;e.sourceText!==void 0&&t&&!s.existsSync(t)&&(s.mkdirSync(o.dirname(t),{recursive:!0}),s.writeFileSync(t,e.sourceText)),await r(`xcrun`,[`swiftc`,...e.sourcePaths,`-o`,a],{timeoutMs:e.timeoutMs??12e4,env:u()}),s.renameSync(a,e.executablePath)}finally{s.rmSync(i,{recursive:!0,force:!0}),await n()}}async function h(t,r,i){if(g(r))return null;try{return await a({lockDirPath:t,owner:{pid:process.pid,startTime:n(process.pid),acquiredAtMs:Date.now()},timeoutMs:i,pollMs:25,ownerGraceMs:i,description:`Swift cache lock: ${t} (${i}ms)`})}catch(n){throw n instanceof e&&n.message.startsWith(`Timed out waiting for Swift cache lock:`)?new e(`COMMAND_FAILED`,n.message,{...n.details,lockDir:t,timeoutMs:i,hint:`Another agent-device process may still be compiling this Swift helper. Retry shortly; if no agent-device process is active, remove "${t}" and retry.`}):n}}function g(e){try{return s.accessSync(e,s.constants.X_OK),s.statSync(e).isFile()}catch{return!1}}function _(e){return t(e.replaceAll(/[^A-Za-z0-9._-]/g,`-`))||`swift-helper`}function v(e){let t=c(`sha256`);for(let n of e)t.update(Buffer.isBuffer(n)?n:String(n)),t.update(`\0`);return t.digest(`hex`).slice(0,16)}const y={block:161,blockGroup:160,cluster:524531317,codecId:134,documentType:17026,ebml:440786851,segment:408125543,simpleBlock:163,trackEntry:174,trackNumber:215,tracks:374648427,trackType:131};function b(e){let t=x(e);if(!t)return!1;let{bytes:n,fileSize:r}=t,i=M(n,0,n.length,r);if(!i||i.id!==y.ebml||!i.complete||i.unknownSize||!S(n,i))return!1;let a=M(n,i.nextOffset,n.length,r);return!a||a.id!==y.segment||!I(a,r)?!1:C(n,a,r)}function x(e){try{let t=s.openSync(e,`r`);try{let e=s.fstatSync(t).size;if(e<=0)return;let n=Buffer.alloc(Math.min(e,1048576));return s.readSync(t,n,0,n.length,0)===n.length?{bytes:n,fileSize:e}:void 0}finally{s.closeSync(t)}}catch{return}}function S(e,t){let n=j(e,t)?.find(e=>e.id===y.documentType);return n!==void 0&&e.toString(`ascii`,n.dataStart,n.dataEnd)===`webm`}function C(e,t,n){let r=new Set,i=new Set;for(let a=t.dataStart;a<t.dataEnd;){let o=M(e,a,t.dataEnd,n);if(!o||!I(o,n))return!1;if(o.id===y.tracks&&w(e,o,r),o.id===y.cluster&&E(e,o,n,i),L(r,i))return!0;if(!o.complete||o.unknownSize)return!1;a=o.nextOffset}return!1}function w(e,t,n){let r=j(e,t);if(r){for(let t of r)if(t.id===y.trackEntry){let r=T(e,t);r!==void 0&&n.add(r)}}}function T(e,t){let n=j(e,t),r=A(e,n,y.trackNumber),i=A(e,n,y.trackType),a=n?.find(e=>e.id===y.codecId),o=a?e.toString(`ascii`,a.dataStart,a.dataEnd):void 0;return i===1&&o?.startsWith(`V_`)?r:void 0}function E(e,t,n,r){for(let i=t.dataStart;i<t.dataEnd;){let a=M(e,i,t.dataEnd,n);if(!a||!I(a,n)||(a.id===y.simpleBlock&&O(e,a,r),a.id===y.blockGroup&&D(e,a,r),!a.complete||a.unknownSize))return;i=a.nextOffset}}function D(e,t,n){let r=j(e,t)?.find(e=>e.id===y.block);r&&O(e,r,n)}function O(e,t,n){if(!t.complete||t.unknownSize)return;let r=P(e,t.dataStart);!r||r.unknown||t.dataEnd-t.dataStart<r.length+4||n.add(r.value)}function k(e,t){let n=t.dataEnd-t.dataStart;if(n<1||n>6)return;let r=0;for(let n=t.dataStart;n<t.dataEnd;n+=1)r=r*256+e[n];return Number.isSafeInteger(r)?r:void 0}function A(e,t,n){let r=t?.find(e=>e.id===n);return r?k(e,r):void 0}function j(e,t){if(!t.complete||t.unknownSize)return;let n=[];for(let r=t.dataStart;r<t.dataEnd;){let i=M(e,r,t.dataEnd,e.length);if(!i||!i.complete||i.unknownSize)return;n.push(i),r=i.nextOffset}return n}function M(e,t,n,r){let i=N(e,t);if(!i)return;let a=P(e,t+i.length);if(!a)return;let o=t+i.length+a.length;if(o>n)return;let s=a.unknown?r:o+a.value;if(!(!Number.isSafeInteger(s)||s<o))return{id:i.value,dataStart:o,dataEnd:Math.min(s,n),nextOffset:s,complete:s<=n,unknownSize:a.unknown}}function N(e,t){let n=F(e,t,4);if(!n)return;let r=0;for(let i=0;i<n;i+=1)r=r*256+e[t+i];return{length:n,value:r}}function P(e,t){let n=F(e,t,8);if(!n)return;let r=e[t],i=128>>n-1;if((r&i-1)==i-1&&e.subarray(t+1,t+n).every(e=>e===255))return{length:n,value:0,unknown:!0};let a=r&i-1;for(let r=1;r<n;r+=1)a=a*256+e[t+r];return Number.isSafeInteger(a)?{length:n,value:a,unknown:!1}:void 0}function F(e,t,n){let r=e[t];if(r===void 0||r===0)return;let i=128,a=1;for(;(r&i)===0;)i>>=1,a+=1;return a<=n&&t+a<=e.length?a:void 0}function I(e,t){return e.unknownSize||e.nextOffset<=t}function L(e,t){for(let n of e)if(t.has(n))return!0;return!1}let R;async function z(e,t={}){let n=t.pollMs??150,r=t.attempts??12,a,o=0;for(let t=0;t<r;t+=1){let t=0;try{t=s.statSync(e).size}catch{t=0}if(t>0&&t===a){if(o+=1,o>=2)return}else o=0;a=t,await i(n)}}async function B(e){let t=await G(e);if(!t)return!1;if(t===`webm`)return!0;try{let t=await V(),n=await r(t,[e],{allowFailure:!0,timeoutMs:1e4,env:u()});return n.exitCode===0||W(n.stderr,n.stdout)}catch(e){if(H(e))return!0;throw e}}async function V(){R??=f({source:`import Foundation
1
+ import{C as e}from"./sdk-contracts.js";import{nr as t}from"./sdk-batch.js";import{x as n}from"./owner-identity.js";import{c as r}from"./exec.js";import{t as i}from"./timeouts.js";import{t as a}from"./file.js";import"./command.js";import"./retry.js";import"./process.js";import o from"node:path";import s from"node:fs";import{createHash as c}from"node:crypto";import l from"node:os";function u(e=process.env){let t=p(),n=o.join(t,`home`),r=o.join(t,`module-cache`);return s.mkdirSync(n,{recursive:!0}),s.mkdirSync(r,{recursive:!0}),{...e,HOME:n,CLANG_MODULE_CACHE_PATH:r}}async function d(e){let t=[e.sourcePath,...e.extraSourcePaths??[]],n=t.map(e=>({sourcePath:e,stat:s.statSync(e),source:s.readFileSync(e)})),r=_(e.cacheName??o.basename(e.sourcePath,o.extname(e.sourcePath))),i=v([`2`,process.platform,process.arch,...n.flatMap(({sourcePath:e,stat:t,source:n})=>[o.resolve(e),t.size,n])]),a=o.join(p(),`bin`,`${r}-${i}`);return await m({sourcePaths:t,executablePath:a,timeoutMs:e.timeoutMs}),a}async function f(e){let t=_(e.cacheName),n=v([`2`,process.platform,process.arch,e.source]),r=o.join(p(),`sources`,`${t}-${n}.swift`),i=o.join(p(),`bin`,`${t}-${n}`);return await m({sourcePaths:[r],executablePath:i,sourceText:e.source,timeoutMs:e.timeoutMs}),i}function p(){let e=process.env.AGENT_DEVICE_SWIFT_CACHE_DIR?.trim();return e?o.resolve(e):o.join(l.tmpdir(),`agent-device-swift-cache`)}async function m(e){if(g(e.executablePath))return;let t=o.dirname(e.executablePath);s.mkdirSync(t,{recursive:!0});let n=await h(`${e.executablePath}.lock`,e.executablePath,e.timeoutMs??12e4);if(!n)return;let i=s.mkdtempSync(o.join(t,`.${o.basename(e.executablePath)}.${process.pid}.`)),a=o.join(i,o.basename(e.executablePath));try{if(g(e.executablePath))return;let[t]=e.sourcePaths;e.sourceText!==void 0&&t&&!s.existsSync(t)&&(s.mkdirSync(o.dirname(t),{recursive:!0}),s.writeFileSync(t,e.sourceText)),await r(`xcrun`,[`swiftc`,...e.sourcePaths,`-o`,a],{timeoutMs:e.timeoutMs??12e4,env:u()}),s.renameSync(a,e.executablePath)}finally{s.rmSync(i,{recursive:!0,force:!0}),await n()}}async function h(t,r,i){if(g(r))return null;try{return await a({lockDirPath:t,owner:{pid:process.pid,startTime:n(process.pid),acquiredAtMs:Date.now()},timeoutMs:i,pollMs:25,ownerGraceMs:i,description:`Swift cache lock: ${t} (${i}ms)`})}catch(n){throw n instanceof e&&n.message.startsWith(`Timed out waiting for Swift cache lock:`)?new e(`COMMAND_FAILED`,n.message,{...n.details,lockDir:t,timeoutMs:i,hint:`Another agent-device process may still be compiling this Swift helper. Retry shortly; if no agent-device process is active, remove "${t}" and retry.`}):n}}function g(e){try{return s.accessSync(e,s.constants.X_OK),s.statSync(e).isFile()}catch{return!1}}function _(e){return t(e.replaceAll(/[^A-Za-z0-9._-]/g,`-`))||`swift-helper`}function v(e){let t=c(`sha256`);for(let n of e)t.update(Buffer.isBuffer(n)?n:String(n)),t.update(`\0`);return t.digest(`hex`).slice(0,16)}const y={block:161,blockGroup:160,cluster:524531317,codecId:134,documentType:17026,ebml:440786851,segment:408125543,simpleBlock:163,trackEntry:174,trackNumber:215,tracks:374648427,trackType:131};function b(e){let t=x(e);if(!t)return!1;let{bytes:n,fileSize:r}=t,i=M(n,0,n.length,r);if(!i||i.id!==y.ebml||!i.complete||i.unknownSize||!S(n,i))return!1;let a=M(n,i.nextOffset,n.length,r);return!a||a.id!==y.segment||!I(a,r)?!1:C(n,a,r)}function x(e){try{let t=s.openSync(e,`r`);try{let e=s.fstatSync(t).size;if(e<=0)return;let n=Buffer.alloc(Math.min(e,1048576));return s.readSync(t,n,0,n.length,0)===n.length?{bytes:n,fileSize:e}:void 0}finally{s.closeSync(t)}}catch{return}}function S(e,t){let n=j(e,t)?.find(e=>e.id===y.documentType);return n!==void 0&&e.toString(`ascii`,n.dataStart,n.dataEnd)===`webm`}function C(e,t,n){let r=new Set,i=new Set;for(let a=t.dataStart;a<t.dataEnd;){let o=M(e,a,t.dataEnd,n);if(!o||!I(o,n))return!1;if(o.id===y.tracks&&w(e,o,r),o.id===y.cluster&&E(e,o,n,i),L(r,i))return!0;if(!o.complete||o.unknownSize)return!1;a=o.nextOffset}return!1}function w(e,t,n){let r=j(e,t);if(r){for(let t of r)if(t.id===y.trackEntry){let r=T(e,t);r!==void 0&&n.add(r)}}}function T(e,t){let n=j(e,t),r=A(e,n,y.trackNumber),i=A(e,n,y.trackType),a=n?.find(e=>e.id===y.codecId),o=a?e.toString(`ascii`,a.dataStart,a.dataEnd):void 0;return i===1&&o?.startsWith(`V_`)?r:void 0}function E(e,t,n,r){for(let i=t.dataStart;i<t.dataEnd;){let a=M(e,i,t.dataEnd,n);if(!a||!I(a,n)||(a.id===y.simpleBlock&&O(e,a,r),a.id===y.blockGroup&&D(e,a,r),!a.complete||a.unknownSize))return;i=a.nextOffset}}function D(e,t,n){let r=j(e,t)?.find(e=>e.id===y.block);r&&O(e,r,n)}function O(e,t,n){if(!t.complete||t.unknownSize)return;let r=P(e,t.dataStart);!r||r.unknown||t.dataEnd-t.dataStart<r.length+4||n.add(r.value)}function k(e,t){let n=t.dataEnd-t.dataStart;if(n<1||n>6)return;let r=0;for(let n=t.dataStart;n<t.dataEnd;n+=1)r=r*256+e[n];return Number.isSafeInteger(r)?r:void 0}function A(e,t,n){let r=t?.find(e=>e.id===n);return r?k(e,r):void 0}function j(e,t){if(!t.complete||t.unknownSize)return;let n=[];for(let r=t.dataStart;r<t.dataEnd;){let i=M(e,r,t.dataEnd,e.length);if(!i||!i.complete||i.unknownSize)return;n.push(i),r=i.nextOffset}return n}function M(e,t,n,r){let i=N(e,t);if(!i)return;let a=P(e,t+i.length);if(!a)return;let o=t+i.length+a.length;if(o>n)return;let s=a.unknown?r:o+a.value;if(!(!Number.isSafeInteger(s)||s<o))return{id:i.value,dataStart:o,dataEnd:Math.min(s,n),nextOffset:s,complete:s<=n,unknownSize:a.unknown}}function N(e,t){let n=F(e,t,4);if(!n)return;let r=0;for(let i=0;i<n;i+=1)r=r*256+e[t+i];return{length:n,value:r}}function P(e,t){let n=F(e,t,8);if(!n)return;let r=e[t],i=128>>n-1;if((r&i-1)==i-1&&e.subarray(t+1,t+n).every(e=>e===255))return{length:n,value:0,unknown:!0};let a=r&i-1;for(let r=1;r<n;r+=1)a=a*256+e[t+r];return Number.isSafeInteger(a)?{length:n,value:a,unknown:!1}:void 0}function F(e,t,n){let r=e[t];if(r===void 0||r===0)return;let i=128,a=1;for(;(r&i)===0;)i>>=1,a+=1;return a<=n&&t+a<=e.length?a:void 0}function I(e,t){return e.unknownSize||e.nextOffset<=t}function L(e,t){for(let n of e)if(t.has(n))return!0;return!1}let R;async function z(e,t={}){let n=t.pollMs??150,r=t.attempts??12,a,o=0;for(let t=0;t<r;t+=1){let t=0;try{t=s.statSync(e).size}catch{t=0}if(t>0&&t===a){if(o+=1,o>=2)return}else o=0;a=t,await i(n)}}async function B(e){let t=await K(e);if(!t)return!1;if(t===`webm`)return!0;try{let t=await V(),n=await r(t,[e],{allowFailure:!0,timeoutMs:1e4,env:u()});return n.exitCode===0||W(n.stderr,n.stdout)}catch(e){if(H(e))return!0;throw e}}async function V(){R??=f({source:`import Foundation
2
2
  import AVFoundation
3
3
 
4
4
  let url = URL(fileURLWithPath: CommandLine.arguments[1])
@@ -20,4 +20,4 @@ Task {
20
20
  }
21
21
 
22
22
  semaphore.wait()
23
- exit(exitCode)`,cacheName:`video-validator`,timeoutMs:3e4});try{return await R}catch(e){throw R=void 0,e}}function H(t){return t instanceof e?t.code===`TOOL_MISSING`||W(String(t.details?.stderr??``),String(t.details?.stdout??``)):!1}async function U(e,t={}){let n=t.pollMs??150,r=t.attempts??12;for(let t=0;t<r;t+=1){if(await B(e))return;await i(n)}}function W(e,t){let n=`${e}\n${t}`;return/\b(no such module ['"]AVFoundation['"]|unable to find utility ["']swiftc?["']|xcrun: error: unable to find utility ["']swiftc?["'])\b/i.test(n)}async function G(e){try{let t=s.statSync(e);if(!t.isFile()||t.size<=0)return}catch{return}return e.toLowerCase().endsWith(`.webm`)?b(e)?`webm`:void 0:await K(e)?`mp4`:void 0}async function K(e){let{findMp4Atom:t}=await import(`./mp4-atoms.js`).then(e=>e.n);return t(e,[`ftyp`])!==void 0&&t(e,[`moov`])!==void 0}export{d as a,u as i,U as n,z as r,B as t};
23
+ exit(exitCode)`,cacheName:`video-validator`,timeoutMs:3e4});try{return await R}catch(e){throw R=void 0,e}}function H(t){return t instanceof e?t.code===`TOOL_MISSING`||W(String(t.details?.stderr??``),String(t.details?.stdout??``)):!1}async function U(e,t={}){let n=t.pollMs??150,r=t.attempts??12;for(let t=0;t<r;t+=1){if(await B(e))return;await i(n)}}function W(e,t){let n=`${e}\n${t}`;return/\b(no such module ['"]AVFoundation['"]|unable to find utility ["']swiftc?["']|xcrun: error: unable to find utility ["']swiftc?["'])\b/i.test(n)}async function G(e){return await K(e)!==void 0}async function K(e){try{let t=s.statSync(e);if(!t.isFile()||t.size<=0)return}catch{return}return e.toLowerCase().endsWith(`.webm`)?b(e)?`webm`:void 0:await q(e)?`mp4`:void 0}async function q(e){let{findMp4Atom:t}=await import(`./mp4-atoms.js`).then(e=>e.n);return t(e,[`ftyp`])!==void 0&&t(e,[`moov`])!==void 0}export{u as a,z as i,B as n,d as o,U as r,G as t};
@@ -0,0 +1 @@
1
+ import{i as e,t}from"./rolldown-runtime.js";var n=t(((e,t)=>{t.exports=n;function n(){this.pending=0,this.max=1/0,this.listeners=[],this.waiting=[],this.error=null}n.prototype.go=function(e){this.pending<this.max?i(this,e):this.waiting.push(e)},n.prototype.wait=function(e){this.pending===0?e(this.error):this.listeners.push(e)},n.prototype.hold=function(){return r(this)};function r(e){e.pending+=1;var t=!1;return n;function n(n){if(t)throw Error(`callback called twice`);if(t=!0,e.error=e.error||n,--e.pending,e.waiting.length>0&&e.pending<e.max)i(e,e.waiting.shift());else if(e.pending===0){var a=e.listeners;e.listeners=[],a.forEach(r)}}function r(t){t(e.error)}}function i(e,t){t(r(e))}})),r=t((t=>{var r=e(`fs`),i=e(`util`),a=e(`stream`),o=a.Readable,s=a.PassThrough,c=n(),l=e(`events`).EventEmitter;t.BufferSlicer=f,t.FdSlicer=u,i.inherits(u,l);function u(e){l.call(this),this.fd=e,this.pend=new c,this.pend.max=1,this.refCount=0}u.prototype.read=function(e,t,n,i,a){var o=this;o.pend.go(function(s){r.read(o.fd,e,t,n,i,function(e,t,n){s(),a(e,t,n)})})},u.prototype.createReadStream=function(e){return new d(this,e)},u.prototype.ref=function(){this.refCount+=1},u.prototype.unref=function(){var e=this;if(--e.refCount,e.refCount<0)throw Error(`invalid unref`);if(e.refCount>0)return;r.close(e.fd,t);function t(t){t?e.emit(`error`,t):e.emit(`close`)}},i.inherits(d,o);function d(e,t){t||={},o.call(this,t),this.context=e,this.context.ref(),this.start=t.start||0,this.endOffset=t.end,this.pos=this.start}d.prototype._read=function(e){var t=this,n=Math.min(t._readableState.highWaterMark,e);if(t.endOffset!=null&&(n=Math.min(n,t.endOffset-t.pos)),n<=0){t.push(null),this._cleanup();return}t.context.pend.go(function(e){var i=Buffer.allocUnsafe(n);r.read(t.context.fd,i,0,n,t.pos,function(n,r){n?t.destroy(n):r===0?(t.push(null),t._cleanup()):(t.pos+=r,t.push(i.slice(0,r))),e()})})},d.prototype._destroy=function(e,t){this._cleanup(),t(e)},d.prototype._cleanup=function(){this.context!=null&&(this.context.unref(),this.context=null)},i.inherits(f,l);function f(e){l.call(this),this.refCount=0,this.buffer=e}f.prototype.read=function(e,t,n,r,i){if(!(0<=t&&t<=e.length))throw RangeError(`offset outside buffer: 0 <= `+t+` <= `+e.length);if(r<0)throw RangeError(`position is negative: `+r);if(t+n>e.length&&(n=e.length-t),r+n>this.buffer.length&&(n=this.buffer.length-r),n<=0){setImmediate(function(){i(null,0)});return}this.buffer.copy(e,t,r,r+n),setImmediate(function(){i(null,n)})},f.prototype.createReadStream=function(e){e||={};var t=new s(e);t.start=e.start||0,t.endOffset=e.end,t.pos=t.endOffset||this.buffer.length;for(var n=this.buffer.slice(t.start,t.pos),r=65536,i=0;;){var a=i+r;if(a>=n.length){i<n.length&&t.write(n.slice(i,n.length));break}t.write(n.slice(i,a)),i=a}return t.end(),t},f.prototype.ref=function(){this.refCount+=1},f.prototype.unref=function(){if(--this.refCount,this.refCount<0)throw Error(`invalid unref`)}})),i=t(((e,t)=>{let n=new Int32Array([0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117]);function r(e){let t=-1;for(let r of e)t=n[(t^r)&255]^t>>>8;return(t^-1)>>>0}t.exports=r})),a=t((t=>{var n=e(`fs`),a=e(`zlib`),o=r(),s=e(`util`),c=e(`events`).EventEmitter,l=e(`stream`).Transform,u=e(`stream`).PassThrough,d=e(`stream`).Writable;let f=typeof a.crc32==`function`?a.crc32:i();t.open=m,t.openPromise=p;function p(e,t){return new Promise((n,r)=>{m(e,{...t,lazyEntries:!0},function(e,t){if(e)return r(e);n(t)})})}function m(e,t,r){typeof t==`function`&&(r=t,t=null),t??={},t.autoClose??(t.autoClose=!0),t.lazyEntries??(t.lazyEntries=!1),t.decodeStrings??(t.decodeStrings=!0),t.validateEntrySizes??(t.validateEntrySizes=!0),t.strictFileNames??(t.strictFileNames=!1),r??=F,n.open(e,`r`,function(e,i){if(e)return r(e);h(i,t,function(e,t){e&&n.close(i,F),r(e,t)})})}function h(e,t,r){typeof t==`function`&&(r=t,t=null),t??={},t.autoClose??(t.autoClose=!1),t.lazyEntries??(t.lazyEntries=!1),t.decodeStrings??(t.decodeStrings=!0),t.validateEntrySizes??(t.validateEntrySizes=!0),t.strictFileNames??(t.strictFileNames=!1),r??=F,n.fstat(e,function(n,i){if(n)return r(n);g(new o.FdSlicer(e),i.size,t,r)})}function g(e,t,n,r){typeof n==`function`&&(r=n,n=null),n??={},n.autoClose??(n.autoClose=!0),n.lazyEntries??(n.lazyEntries=!1),n.decodeStrings??(n.decodeStrings=!0);var i=!!n.decodeStrings;if(n.validateEntrySizes??(n.validateEntrySizes=!0),n.strictFileNames??(n.strictFileNames=!1),r??=F,typeof t!=`number`)throw Error(`expected totalSize parameter to be a number`);if(t>2**53-1)throw Error(`zip file too large. only file sizes up to 2^52 are supported due to JavaScript's Number type being an IEEE 754 double.`);e.ref();var a=22,o=20,s=Math.min(o+a+65535,t),c=N(s);E(e,c,0,s,t-c.length,function(l){if(l)return r(l);for(var u=s-a;u>=0;--u)if(c.readUInt32LE(u)===101010256){var d=c.subarray(u),f=d.readUInt16LE(4),p=d.readUInt16LE(10),m=d.readUInt32LE(16),h=d.readUInt16LE(20),g=d.length-a;if(h!==g)return r(Error(`Invalid comment length. Expected: `+g+`. Found: `+h+". Are there extra bytes at the end of the file? Or is the end of central dir signature `PK☺☻` in the comment?"));var v=i?j(d.subarray(22),!1):d.subarray(22);if(u-o>=0&&c.readUInt32LE(u-o)===117853008){var y=M(c.subarray(u-o,u-o+o),8),b=N(56);return E(e,b,0,b.length,y,function(a){return a?r(a):b.readUInt32LE(0)===101075792?(f=b.readUInt32LE(16),f===0?(p=M(b,32),m=M(b,48),r(null,new _(e,m,t,p,v,n.autoClose,n.lazyEntries,i,n.validateEntrySizes,n.strictFileNames))):r(Error(`multi-disk zip files are not supported: found disk number: `+f))):r(Error(`invalid zip64 end of central directory record signature`))})}return f===0?r(null,new _(e,m,t,p,v,n.autoClose,n.lazyEntries,i,n.validateEntrySizes,n.strictFileNames)):r(Error(`multi-disk zip files are not supported: found disk number: `+f))}r(Error(`End of central directory record signature not found. Either not a zip file, or file is truncated.`))})}s.inherits(_,c);function _(e,t,n,r,i,a,o,s,l,u){var d=this;c.call(d),d.reader=e,d.reader.on(`error`,function(e){y(d,e)}),d.reader.once(`close`,function(){d.emit(`close`)}),d.readEntryCursor=t,d.fileSize=n,d.entryCount=r,d.comment=i,d.entriesRead=0,d.autoClose=!!a,d.lazyEntries=!!o,d.decodeStrings=!!s,d.validateEntrySizes=!!l,d.strictFileNames=!!u,d.isOpen=!0,d.emittedError=!1,d.hasEachEntryBeenCalled=!1,d.lazyEntries||d._readEntry()}_.prototype.close=function(){this.isOpen&&(this.isOpen=!1,this.reader.unref())};function v(e,t){e.autoClose&&e.close(),y(e,t)}function y(e,t){e.emittedError||(e.emittedError=!0,e.emit(`error`,t))}_.prototype.readEntry=function(){if(!this.lazyEntries)throw Error(`readEntry() called without lazyEntries:true`);this._readEntry()},_.prototype._readEntry=function(){var e=this;if(e.entryCount===e.entriesRead){setImmediate(function(){e.autoClose&&e.close(),!e.emittedError&&e.emit(`end`)});return}if(!e.emittedError){var t=N(46);E(e.reader,t,0,t.length,e.readEntryCursor,function(n){if(n)return v(e,n);if(!e.emittedError){var r=new b,i=t.readUInt32LE(0);if(i!==33639248)return v(e,Error(`invalid central directory file header signature: 0x`+i.toString(16)));if(r.versionMadeBy=t.readUInt16LE(4),r.versionNeededToExtract=t.readUInt16LE(6),r.generalPurposeBitFlag=t.readUInt16LE(8),r.compressionMethod=t.readUInt16LE(10),r.lastModFileTime=t.readUInt16LE(12),r.lastModFileDate=t.readUInt16LE(14),r.crc32=t.readUInt32LE(16),r.compressedSize=t.readUInt32LE(20),r.uncompressedSize=t.readUInt32LE(24),r.fileNameLength=t.readUInt16LE(28),r.extraFieldLength=t.readUInt16LE(30),r.fileCommentLength=t.readUInt16LE(32),r.internalFileAttributes=t.readUInt16LE(36),r.externalFileAttributes=t.readUInt32LE(38),r.relativeOffsetOfLocalHeader=t.readUInt32LE(42),r.generalPurposeBitFlag&64)return v(e,Error(`strong encryption is not supported`));e.readEntryCursor+=46,t=N(r.fileNameLength+r.extraFieldLength+r.fileCommentLength),E(e.reader,t,0,t.length,e.readEntryCursor,function(n){if(n)return v(e,n);if(!e.emittedError){r.fileNameRaw=t.subarray(0,r.fileNameLength);var i=r.fileNameLength+r.extraFieldLength;r.extraFieldRaw=t.subarray(r.fileNameLength,i),r.fileCommentRaw=t.subarray(i,i+r.fileCommentLength);try{r.extraFields=T(r.extraFieldRaw)}catch(t){return v(e,t)}if(e.decodeStrings){var a=!!(r.generalPurposeBitFlag&2048);r.fileComment=j(r.fileCommentRaw,a),r.fileName=C(r.generalPurposeBitFlag,r.fileNameRaw,r.extraFields,e.strictFileNames);var o=w(r.fileName);if(o!=null)return v(e,Error(o))}else r.fileComment=r.fileCommentRaw,r.fileName=r.fileNameRaw;r.comment=r.fileComment,e.readEntryCursor+=t.length,e.entriesRead+=1;for(var s=0;s<r.extraFields.length;s++){var c=r.extraFields[s];if(c.id===1){var l=c.data,u=0;if(r.uncompressedSize===4294967295){if(u+8>l.length)return v(e,Error(`zip64 extended information extra field does not include uncompressed size`));r.uncompressedSize=M(l,u),u+=8}if(r.compressedSize===4294967295){if(u+8>l.length)return v(e,Error(`zip64 extended information extra field does not include compressed size`));r.compressedSize=M(l,u),u+=8}if(r.relativeOffsetOfLocalHeader===4294967295){if(u+8>l.length)return v(e,Error(`zip64 extended information extra field does not include relative header offset`));r.relativeOffsetOfLocalHeader=M(l,u),u+=8}break}}if(e.validateEntrySizes&&r.compressionMethod===0){var d=r.uncompressedSize;if(r.isEncrypted()&&(d+=12),r.compressedSize!==d){var f=`compressed/uncompressed size mismatch for stored file: `+r.compressedSize+` != `+r.uncompressedSize;return v(e,Error(f))}}e.emit(`entry`,r),e.lazyEntries||e._readEntry()}})}})}},_.prototype.eachEntry=function(){let e=this;if(!e.lazyEntries)throw Error(`eachEntry() requires lazyEntries: true`);if(e.hasEachEntryBeenCalled)throw Error(`eachEntry() must only be called once per ZipFile`);e.hasEachEntryBeenCalled=!0;let t=null;e.on(`entry`,r),e.on(`end`,i),e.on(`error`,a);function n(){e.removeListener(`entry`,r),e.removeListener(`end`,i),e.removeListener(`error`,a),e.autoClose&&e.close()}function r(e){let{resolve:n}=t;t=null,n({value:e})}function i(){let{resolve:e}=t;t=null,n(),e({done:!0})}function a(e){let{reject:r}=t;t=null,n(),r(e)}return{[Symbol.asyncIterator](){return this},next(){let n=new Promise((e,n)=>{if(t!=null)throw Error(`next() called before previous Promise was resolved.`);t={resolve:e,reject:n}});return e.readEntry(),n},return(e){return n(),Promise.resolve({done:!0,value:e})},throw(e){return n(),Promise.reject(e)}}},_.prototype.openReadStream=function(e,t,n){var r=this,i=0,a=e.compressedSize;if(n??(n=t,t=null),t==null)t={};else{if(t.decodeFileData===!1){if(t.decrypt!=null)throw Error(`cannot use options.decrypt when options.decodeFileData === false`);if(t.decompress!=null)throw Error(`cannot use options.decompress when options.decodeFileData === false`)}else{if(t.decrypt!=null){if(!e.isEncrypted())throw Error(`options.decrypt can only be specified for encrypted entries. See also option decodeFileData.`);if(t.decrypt!==!1)throw Error(`invalid options.decrypt value: `+t.decrypt);if(e.isCompressed()&&t.decompress!==!1)throw Error(`entry is encrypted and compressed, and options.decompress !== false. See also option decodeFileData.`)}if(t.decompress!=null){if(!e.isCompressed())throw Error(`options.decompress can only be specified for compressed entries. See also option decodeFileData.`);if(t.decompress!==!1&&t.decompress!==!0)throw Error(`invalid options.decompress value: `+t.decompress);s=t.decompress}}if(t.start!=null){if(i=t.start,i<0)throw Error(`options.start < 0`);if(i>e.compressedSize)throw Error(`options.start > entry.compressedSize`)}if(t.end!=null){if(a=t.end,a<0)throw Error(`options.end < 0`);if(a>e.compressedSize)throw Error(`options.end > entry.compressedSize`);if(a<i)throw Error(`options.end < options.start`)}}var o=t.decodeFileData===!1||(e.compressionMethod===0||e.compressionMethod===8&&t.decompress===!1)&&(!e.isEncrypted()||t.decrypt===!1);if((t.start!=null||t.end!=null)&&!o)throw Error(`start/end range require options.decodeFileData === false for non-trivial encoded entries.`);if(!r.isOpen)return n(Error(`closed`));if(e.isEncrypted()&&!o&&t.decrypt!==!1)return n(Error(`entry is encrypted, and options.decodeFileData !== false`));var s;if(o)s=!1;else if(e.compressionMethod===8)s=t.decodeFileData!==!0;else return n(Error(`unsupported compression method: `+e.compressionMethod));r.readLocalFileHeader(e,{minimal:!0},function(t,o){if(t)return n(t);r.openReadStreamLowLevel(o.fileDataStart,e.compressedSize,i,a,s,e.uncompressedSize,n)})},_.prototype.openReadStreamLowLevel=function(e,t,n,r,i,o,s){var c=this;e+t;var l=c.reader.createReadStream({start:e+n,end:e+r}),u=l;if(i){var d=!1,f=a.createInflateRaw();l.on(`error`,function(e){setImmediate(function(){d||f.emit(`error`,e)})}),l.pipe(f),c.validateEntrySizes?(u=new D(o),f.on(`error`,function(e){setImmediate(function(){d||u.emit(`error`,e)})}),f.pipe(u)):u=f,P(u,function(){d=!0,f!==u&&f.unpipe(u),l.unpipe(f),l.destroy()})}s(null,u)},_.prototype.readLocalFileHeader=function(e,t,n){var r=this;n??(n=t,t=null),t??={},r.reader.ref();var i=N(30);E(r.reader,i,0,i.length,e.relativeOffsetOfLocalHeader,function(a){try{if(a)return n(a);var o=i.readUInt32LE(0);if(o!==67324752)return n(Error(`invalid local file header signature: 0x`+o.toString(16)));var s=i.readUInt16LE(26),c=i.readUInt16LE(28),l=e.relativeOffsetOfLocalHeader+30+s+c;if(l+e.compressedSize>r.fileSize)return n(Error(`file data overflows file bounds: `+l+` + `+e.compressedSize+` > `+r.fileSize));if(t.minimal)return n(null,{fileDataStart:l});var u=new x;u.fileDataStart=l,u.versionNeededToExtract=i.readUInt16LE(4),u.generalPurposeBitFlag=i.readUInt16LE(6),u.compressionMethod=i.readUInt16LE(8),u.lastModFileTime=i.readUInt16LE(10),u.lastModFileDate=i.readUInt16LE(12),u.crc32=i.readUInt32LE(14),u.compressedSize=i.readUInt32LE(18),u.uncompressedSize=i.readUInt32LE(22),u.fileNameLength=s,u.extraFieldLength=c,i=N(s+c),r.reader.ref(),E(r.reader,i,0,i.length,e.relativeOffsetOfLocalHeader+30,function(e){try{return e?n(e):(u.fileName=i.subarray(0,s),u.extraField=i.subarray(s),n(null,u))}finally{r.reader.unref()}})}finally{r.reader.unref()}})},_.prototype.openReadStreamPromise=function(e,t){return new Promise((n,r)=>{this.openReadStream(e,t,function(e,t){if(e)return r(e);n(t)})})},_.prototype.openReadStreamLowLevelPromise=function(e,t,n,r,i,a){return new Promise((o,s)=>{this.openReadStream(e,t,n,r,i,a,function(e,t){if(e)return s(e);o(t)})})},_.prototype.readLocalFileHeaderPromise=function(e,t){return new Promise((n,r)=>{this.readLocalFileHeader(e,t,function(e,t){if(e)return r(e);n(t)})})};function b(){}b.prototype.getLastModDate=function(e){if(e??={},!e.forceDosFormat)for(var t=0;t<this.extraFields.length;t++){var n=this.extraFields[t];if(n.id===21589){var r=n.data;if(r.length<5||!(r[0]&1))continue;var i=r.readInt32LE(1);return new Date(i*1e3)}if(n.id===10){var r=n.data;if(r.length!==32||r.readUInt16LE(4)!==1||r.readUInt16LE(6)!==24)continue;var a=(r.readUInt32LE(8)+4294967296*r.readInt32LE(12))/1e4-0xa9730b66800;return new Date(a)}}return S(this.lastModFileDate,this.lastModFileTime,e.timezone)},b.prototype.canDecodeFileData=function(){return!this.isEncrypted()&&(this.compressionMethod===0||this.compressionMethod===8)},b.prototype.isEncrypted=function(){return!!(this.generalPurposeBitFlag&1)},b.prototype.isCompressed=function(){return this.compressionMethod===8};function x(){}function S(e,t,n){var r=e&31,i=(e>>5&15)-1,a=(e>>9&127)+1980,o=0,s=(t&31)*2,c=t>>5&63,l=t>>11&31;if(n==null||n===`local`)return new Date(a,i,r,l,c,s,o);if(n===`UTC`)return new Date(Date.UTC(a,i,r,l,c,s,o));throw Error(`unrecognized options.timezone: `+options.timezone)}function C(e,t,n,r){for(var i=null,a=0;a<n.length;a++){var o=n[a];if(o.id===28789){if(o.data.length<6||o.data.readUInt8(0)!==1)continue;var s=o.data.readUInt32LE(1);if(f(t)!==s)continue;i=j(o.data.subarray(5),!0);break}}return i??=j(t,!!(e&2048)),r||(i=i.replace(/\\/g,`/`)),i}function w(e){return e.indexOf(`\\`)===-1?/^[a-zA-Z]:/.test(e)||/^\//.test(e)?`absolute path: `+e:e.split(`/`).indexOf(`..`)===-1?null:`invalid relative path: `+e:`invalid characters in fileName: `+e}function T(e){for(var t=[],n=0;n<e.length-3;){var r=e.readUInt16LE(n+0),i=e.readUInt16LE(n+2),a=n+4,o=a+i;if(o>e.length)throw Error(`extra field length exceeds extra field buffer size`);var s=e.subarray(a,o);t.push({id:r,data:s}),n=o}return t}function E(e,t,n,r,i,a){if(r===0)return setImmediate(function(){a(null,N(0))});e.read(t,n,r,i,function(e,t){if(e)return a(e);if(t<r)return a(Error(`unexpected EOF`));a()})}s.inherits(D,l);function D(e){l.call(this),this.actualByteCount=0,this.expectedByteCount=e}D.prototype._transform=function(e,t,n){if(this.actualByteCount+=e.length,this.actualByteCount>this.expectedByteCount){var r=`too many bytes in the stream. expected `+this.expectedByteCount+`. got at least `+this.actualByteCount;return n(Error(r))}n(null,e)},D.prototype._flush=function(e){if(this.actualByteCount<this.expectedByteCount){var t=`not enough bytes in the stream. expected `+this.expectedByteCount+`. got only `+this.actualByteCount;return e(Error(t))}e()},s.inherits(O,c);function O(){c.call(this),this.refCount=0}O.prototype.ref=function(){this.refCount+=1},O.prototype.unref=function(){var e=this;if(--e.refCount,e.refCount>0)return;if(e.refCount<0)throw Error(`invalid unref`);e.close(t);function t(t){if(t)return e.emit(`error`,t);e.emit(`close`)}},O.prototype.createReadStream=function(e){e??={};var t=e.start,n=e.end;if(t===n){var r=new u;return setImmediate(function(){r.end()}),r}var i=this._readStreamForRange(t,n),a=!1,o=new k(this);i.on(`error`,function(e){setImmediate(function(){a||o.emit(`error`,e)})}),P(o,function(){i.unpipe(o),o.unref(),i.destroy()});var s=new D(n-t);return o.on(`error`,function(e){setImmediate(function(){a||s.emit(`error`,e)})}),P(s,function(){a=!0,o.unpipe(s),o.destroy()}),i.pipe(o).pipe(s)},O.prototype._readStreamForRange=function(e,t){throw Error(`not implemented`)},O.prototype.read=function(e,t,n,r,i){var a=this.createReadStream({start:r,end:r+n}),o=new d,s=0;o._write=function(n,r,i){n.copy(e,t+s,0,n.length),s+=n.length,i()},o.on(`finish`,i),a.on(`error`,function(e){i(e)}),a.pipe(o)},O.prototype.close=function(e){setImmediate(e)},s.inherits(k,u);function k(e){u.call(this),this.context=e,this.context.ref(),this.unreffedYet=!1}k.prototype._flush=function(e){this.unref(),e()},k.prototype.unref=function(e){this.unreffedYet||(this.unreffedYet=!0,this.context.unref())};var A=`\0☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~⌂ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■\xA0`;function j(e,t){if(t)return e.toString(`utf8`);for(var n=``,r=0;r<e.length;r++)n+=A[e[r]];return n}function M(e,t){var n=e.readUInt32LE(t);return e.readUInt32LE(t+4)*4294967296+n}var N=typeof Buffer.allocUnsafe==`function`?function(e){return Buffer.allocUnsafe(e)}:function(e){return new Buffer(e)};function P(e,t){typeof e.destroy==`function`?e._destroy=function(e,n){t(),n?.(e)}:e.destroy=t}function F(e){if(e)throw e}}));export{a as t};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-device",
3
- "version": "0.21.3",
3
+ "version": "0.21.4",
4
4
  "description": "Mobile app automation and verification for AI coding agents. CLI, MCP server, and typed Node.js API for iOS, Android, HarmonyOS, TV, web, macOS, and Linux.",
5
5
  "mcpName": "io.github.callstack/agent-device",
6
6
  "license": "MIT",
@@ -301,7 +301,7 @@
301
301
  "@agent-device/xml": "workspace:*",
302
302
  "@arethetypeswrong/cli": "^0.18.5",
303
303
  "@chenglou/freerange": "^0.0.4",
304
- "@limrun/api": "^0.24.5",
304
+ "@limrun/api": "^0.49.3",
305
305
  "@nkzw/eslint-plugin": "^2.0.0",
306
306
  "@nkzw/oxlint-config": "^1.3.0",
307
307
  "@stryker-mutator/core": "10.0.0",
package/server.json CHANGED
@@ -7,12 +7,12 @@
7
7
  "url": "https://github.com/callstack/agent-device",
8
8
  "source": "github"
9
9
  },
10
- "version": "0.21.3",
10
+ "version": "0.21.4",
11
11
  "packages": [
12
12
  {
13
13
  "registryType": "npm",
14
14
  "identifier": "agent-device",
15
- "version": "0.21.3",
15
+ "version": "0.21.4",
16
16
  "transport": {
17
17
  "type": "stdio"
18
18
  },
@@ -1 +0,0 @@
1
- 94e386014aafa5af78801fc0ff83e0eb0c8ce1734fbc121d6b126007e99db7ac agent-device-android-ime-helper-0.21.3.apk
@@ -1 +0,0 @@
1
- 5faa8e4e6d581c94614fde709406868c3fa7858519766fdfaa773709cbba7434 agent-device-android-snapshot-helper-0.21.3.apk
@@ -1,17 +0,0 @@
1
- {
2
- "name": "android-snapshot-helper",
3
- "version": "0.21.3",
4
- "releaseTag": "v0.21.3",
5
- "assetName": "agent-device-android-snapshot-helper-0.21.3.apk",
6
- "apkUrl": null,
7
- "sha256": "5faa8e4e6d581c94614fde709406868c3fa7858519766fdfaa773709cbba7434",
8
- "checksumName": "agent-device-android-snapshot-helper-0.21.3.apk.sha256",
9
- "packageName": "com.callstack.agentdevice.snapshothelper",
10
- "versionCode": 21003,
11
- "instrumentationRunner": "com.callstack.agentdevice.snapshothelper/.SnapshotInstrumentation",
12
- "minSdk": 23,
13
- "targetSdk": 36,
14
- "outputFormat": "uiautomator-xml",
15
- "statusProtocol": "android-snapshot-helper-v1",
16
- "installArgs": ["install", "-r"]
17
- }
@@ -1 +0,0 @@
1
- import{l as e,u as t}from"./sdk-device.js";async function n(e,t){try{return await e()}catch{if(t?.aborted)throw t.reason;return!1}}function r(e){return e.exitCode===0}function i(n){return process.platform===`darwin`&&(t(n)||e(n)&&n.kind===`simulator`||n.platform===`android`&&n.kind===`emulator`)}export{r as n,n as r,i as t};
@@ -1 +0,0 @@
1
- import{C as e}from"./sdk-contracts.js";import{t}from"./durable-resource.js";function n(e,t){let n=r(e),a,o=!1,s,c,l=()=>o||s!==void 0,u=()=>(o=!0,a??=t.finish(n).catch(e=>{throw a=void 0,e}),a),d=()=>s??=a?a.then(async e=>e.status===`completed`?{status:`cleaned`}:await t.forceCleanup(n),async()=>await t.forceCleanup(n)):t.forceCleanup(n);return Object.freeze({inspect:()=>n,appendGestureEvents:e=>{e.length===0||l()||(n=r({...n,gestureEvents:[...n.gestureEvents,...e]}))},setTouchReferenceFrame:e=>{l()||(n=r({...n,...e?{touchReferenceFrame:e}:{}}))},setRunnerSessionId:e=>{l()||e.trim().length===0||(n=r({...n,runnerSessionId:e}))},invalidate:e=>{l()||n.invalidatedReason||(n=r({...n,invalidatedReason:e}))},finish:u,forceCleanup:d,[Symbol.asyncDispose]:async()=>{c??=d().then(i),await c}})}function r(e){return Object.freeze({...e,gestureEvents:Object.freeze([...e.gestureEvents])})}function i(n){if(!t(n))throw new e(`COMMAND_FAILED`,n.message??`Screen recording cleanup could not be confirmed`,{reason:n.reason,retriable:n.reason!==`ownership-fence-lost`,hint:n.reason===`ownership-fence-lost`?`Use the current recording owner or recovery record before retrying cleanup.`:`Keep the recovery record and retry cleanup through the exact runtime owner.`})}export{n as t};