agent-device 0.21.1 → 0.21.2

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 (171) hide show
  1. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.1.apk → agent-device-android-ime-helper-0.21.2.apk} +0 -0
  2. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.2.apk.sha256 +1 -0
  3. package/android/ime-helper/dist/{agent-device-android-ime-helper-0.21.1.manifest.json → agent-device-android-ime-helper-0.21.2.manifest.json} +4 -4
  4. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.2.apk +0 -0
  5. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.2.apk.sha256 +1 -0
  6. package/android/snapshot-helper/dist/{agent-device-android-snapshot-helper-0.21.1.manifest.json → agent-device-android-snapshot-helper-0.21.2.manifest.json} +6 -6
  7. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerScrollViewportPolicy.swift +413 -0
  8. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Alert.swift +34 -0
  9. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+CommandExecution.swift +56 -31
  10. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Interaction.swift +1 -13
  11. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+Models.swift +4 -0
  12. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests+SynthesizedGesturePolicy.swift +9 -1
  13. package/dist/apple/runner/AgentDeviceRunner/AgentDeviceRunnerUITests/RunnerTests.swift +1 -0
  14. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/RecordingExportSupport.swift +0 -4
  15. package/dist/src/absence-observation-errors.js +1 -0
  16. package/dist/src/adapter.js +1 -1
  17. package/dist/src/agent-browser-lifecycle.js +1 -1
  18. package/dist/src/agent-browser-process-record.js +1 -1
  19. package/dist/src/agent-browser-tool.js +1 -1
  20. package/dist/src/agent-device-client.js +2 -2
  21. package/dist/src/ai-sdk.d.ts +1 -1
  22. package/dist/src/ai-sdk.js +1 -1
  23. package/dist/src/alert-runtime.js +1 -1
  24. package/dist/src/android-input-ownership.js +1 -1
  25. package/dist/src/app-helpers.js +1 -1
  26. package/dist/src/app-inventory-contract.js +1 -1
  27. package/dist/src/app-inventory.js +1 -1
  28. package/dist/src/app-log-runtime2.js +2 -2
  29. package/dist/src/auth-session.js +1 -1
  30. package/dist/src/back-mode.js +1 -0
  31. package/dist/src/browser-launch.js +1 -0
  32. package/dist/src/catalog.js +1 -1
  33. package/dist/src/cli-config.js +1 -1
  34. package/dist/src/cli-help.js +12 -12
  35. package/dist/src/cli-runner.js +1 -1
  36. package/dist/src/cli.js +3 -3
  37. package/dist/src/client-metro-companion.js +1 -1
  38. package/dist/src/client-metro.js +1 -1
  39. package/dist/src/client-types.d.ts +2 -1
  40. package/dist/src/code-signature-cache.js +1 -1
  41. package/dist/src/code-signature.js +1 -1
  42. package/dist/src/command-metadata.js +1 -1
  43. package/dist/src/command-schema.js +3 -3
  44. package/dist/src/command-tools.js +2 -2
  45. package/dist/src/config.js +1 -1
  46. package/dist/src/connection-runtime.js +1 -1
  47. package/dist/src/contracts.d.ts +1 -1
  48. package/dist/src/daemon-client-lifecycle.js +1 -1
  49. package/dist/src/daemon-process.js +1 -1
  50. package/dist/src/daemon-shutdown-report.js +1 -1
  51. package/dist/src/device-boot.js +1 -0
  52. package/dist/src/device-claim-inspection.js +1 -1
  53. package/dist/src/device-claim-rule.js +1 -1
  54. package/dist/src/device-input-state.d.ts +1 -1
  55. package/dist/src/device-session.js +1 -1
  56. package/dist/src/durable-resource.js +1 -1
  57. package/dist/src/engine-eval-script.js +1 -0
  58. package/dist/src/file.js +1 -1
  59. package/dist/src/find.js +1 -1
  60. package/dist/src/finders.js +1 -1
  61. package/dist/src/format.js +1 -0
  62. package/dist/src/generic-settle.js +1 -1
  63. package/dist/src/gesture-plan.js +1 -1
  64. package/dist/src/gesture-runtime.js +1 -1
  65. package/dist/src/helper.js +1 -1
  66. package/dist/src/index.d.ts +1 -1
  67. package/dist/src/input-actions.js +1 -1
  68. package/dist/src/interaction-positionals.js +1 -1
  69. package/dist/src/interaction-ref-policy.js +1 -1
  70. package/dist/src/interaction.js +1 -1
  71. package/dist/src/interaction2.js +1 -1
  72. package/dist/src/interactor.js +5 -5
  73. package/dist/src/internal/bin.js +1 -1
  74. package/dist/src/internal/daemon.js +2 -2
  75. package/dist/src/internal/png-worker.d.ts +3 -0
  76. package/dist/src/internal/png-worker.js +1 -1
  77. package/dist/src/ios-snapshot-acquisition.js +1 -1
  78. package/dist/src/ios-snapshot-planning.js +1 -1
  79. package/dist/src/ios-snapshot-runtime.js +1 -1
  80. package/dist/src/lease.js +1 -1
  81. package/dist/src/limrun.d.ts +1 -1
  82. package/dist/src/local-interactor-operation-set.js +1 -1
  83. package/dist/src/mechanics.js +16 -16
  84. package/dist/src/mobile-snapshot-semantics.js +1 -1
  85. package/dist/src/mp4-atoms.js +1 -0
  86. package/dist/src/owner-identity.js +3 -3
  87. package/dist/src/parameterized-recorded-fill.js +1 -1
  88. package/dist/src/perf-facade.js +1 -1
  89. package/dist/src/perf-runtime-plan.js +1 -1
  90. package/dist/src/platform-request-scope.js +1 -1
  91. package/dist/src/platform-runtime-app-log-process.js +1 -1
  92. package/dist/src/platform-runtime-managed-owner.js +1 -1
  93. package/dist/src/platform-runtime-operation-host.js +1 -1
  94. package/dist/src/platform-runtime-screen-recording-android-host.js +1 -1
  95. package/dist/src/platform-runtime-screen-recording-apple-runner-host.js +1 -1
  96. package/dist/src/platform-runtime-screen-recording-apple-runner-transport.js +1 -1
  97. package/dist/src/platform-runtime-screen-recording-apple-simulator-host.js +1 -1
  98. package/dist/src/platform-runtime-screen-recording-finalizer-host.js +1 -1
  99. package/dist/src/platform-runtime-screen-recording-process-host.js +1 -1
  100. package/dist/src/platform-runtime.js +1 -1
  101. package/dist/src/platform-runtime2.js +1 -1
  102. package/dist/src/png-crop-bytes.js +1 -0
  103. package/dist/src/png-worker-contract.js +1 -1
  104. package/dist/src/png.js +1 -0
  105. package/dist/src/process.js +1 -1
  106. package/dist/src/provider-webdriver.js +1 -1
  107. package/dist/src/quality-warnings.js +1 -0
  108. package/dist/src/react-native.js +1 -1
  109. package/dist/src/record-runtime.js +1 -1
  110. package/dist/src/registry.js +36 -37
  111. package/dist/src/replay.js +1 -1
  112. package/dist/src/request-admission.js +1 -1
  113. package/dist/src/request-cancellation.js +1 -1
  114. package/dist/src/request-runtime-binding.js +1 -1
  115. package/dist/src/runner-client.js +1 -1
  116. package/dist/src/runner-disposal.js +1 -1
  117. package/dist/src/runner-presentation.js +1 -1
  118. package/dist/src/runtime.js +3 -3
  119. package/dist/src/runtime10.js +1 -0
  120. package/dist/src/runtime2.js +4 -4
  121. package/dist/src/runtime4.js +3 -3
  122. package/dist/src/runtime6.js +1 -1
  123. package/dist/src/runtime7.js +1 -1
  124. package/dist/src/runtime8.js +1 -1
  125. package/dist/src/runtime9.js +1 -1
  126. package/dist/src/screen-recording-live-handle.js +1 -1
  127. package/dist/src/screen-recording-resource-recovery.js +1 -1
  128. package/dist/src/screenshot-runtime.js +1 -1
  129. package/dist/src/screenshot3.js +2 -2
  130. package/dist/src/script.js +1 -1
  131. package/dist/src/scroll-gesture.js +1 -1
  132. package/dist/src/sdk-batch.js +1 -1
  133. package/dist/src/sdk-contracts.d.ts +26 -26
  134. package/dist/src/sdk-finders.d.ts +1 -1
  135. package/dist/src/sdk-finders.js +1 -1
  136. package/dist/src/sdk-remote-config.d.ts +1 -1
  137. package/dist/src/sdk-selectors.d.ts +12 -4
  138. package/dist/src/sdk-selectors.js +1 -1
  139. package/dist/src/selection.js +0 -0
  140. package/dist/src/selector-runtime.js +1 -1
  141. package/dist/src/selectors.js +1 -1
  142. package/dist/src/semantic-index.js +1 -1
  143. package/dist/src/server.js +1 -1
  144. package/dist/src/session-snapshot.js +1 -1
  145. package/dist/src/session-store.js +2 -2
  146. package/dist/src/session-target-evidence.js +1 -1
  147. package/dist/src/session2.js +5 -5
  148. package/dist/src/simulator-boot.js +3 -0
  149. package/dist/src/snapshot-runtime-binding.js +1 -1
  150. package/dist/src/snapshot-runtime.js +1 -1
  151. package/dist/src/snapshot-state.js +1 -1
  152. package/dist/src/snapshot4.js +1 -1
  153. package/dist/src/src.js +1 -1
  154. package/dist/src/src7.js +1 -1
  155. package/dist/src/src8.js +2 -2
  156. package/dist/src/telemetry.js +1 -1
  157. package/dist/src/touch-reference-frame.js +1 -1
  158. package/dist/src/tree.js +1 -1
  159. package/dist/src/type-text-runtime.js +1 -1
  160. package/dist/src/vars.js +2 -0
  161. package/dist/src/version.js +1 -1
  162. package/dist/src/video.js +2 -2
  163. package/dist/src/viewport.js +1 -0
  164. package/dist/src/webdriver-ios-snapshot.js +1 -1
  165. package/package.json +2 -1
  166. package/server.json +2 -2
  167. package/android/ime-helper/dist/agent-device-android-ime-helper-0.21.1.apk.sha256 +0 -1
  168. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.1.apk +0 -0
  169. package/android/snapshot-helper/dist/agent-device-android-snapshot-helper-0.21.1.apk.sha256 +0 -1
  170. package/dist/apple/runner/AgentDeviceRunner/RecordingScripts/recording-trim.swift +0 -93
  171. package/dist/src/snapshot-quality-verdict.js +0 -1
@@ -1,2 +1,2 @@
1
1
  import{C as e,p as t}from"./sdk-contracts.js";import{f as n,n as r}from"./sdk-device.js";function i(e,t){return{ok:!1,code:`INVALID_ARGS`,message:e,...t?{hint:t}:{}}}const a=[`visible`,`hidden`,`exists`,`absent`,`editable`,`selected`,`focused`,`text`];function o(e){return!!(e&&[e.x,e.y,e.width,e.height].every(Number.isFinite)&&e.width>0&&e.height>0)}function s(e,t){return t.x>=e.x&&t.y>=e.y&&t.x+t.width<=e.x+e.width&&t.y+t.height<=e.y+e.height}function c(e){return e.width*e.height}function l(e,t,n){return t>=e.x&&t<=e.x+e.width&&n>=e.y&&n<=e.y+e.height}function u(e){let t=null,n=-1;for(let r of e){let e=r.width*r.height;e>n&&(t=r,n=e)}return t}function d(e,t){return f(e.x,e.x+e.width,t.x,t.x+t.width)&&f(e.y,e.y+e.height,t.y,t.y+t.height)}function f(e,t,n,r){return Math.max(e,n)<=Math.min(t,r)}function ee(e){let t=`${e??``}`.toLowerCase();return t.includes(`scroll`)||t.includes(`recyclerview`)||t.includes(`listview`)||t.includes(`gridview`)||t.includes(`collectionview`)||t===`table`}function te(e){return ee(e.type)?!0:`${e.role??``} ${e.subrole??``}`.toLowerCase().includes(`scroll`)}function ne(e){return new Map(e.map(e=>[e.index,e]))}function re(e,t,n,r){let i=t,a=new Set;for(;typeof i.parentIndex==`number`&&!a.has(i.index);){if(a.add(i.index),i=n.get(i.parentIndex)??e[i.parentIndex],!i)return null;let t=r(i);if(t!==null)return t}return null}function ie(e,t,n){return re(e,t,ne(e),e=>n(e)?e:null)}function p(e){let t=e.trim().replaceAll(/XCUIElementType/gi,``).replace(/^AX/,``).toLowerCase(),n=Math.max(t.lastIndexOf(`.`),t.lastIndexOf(`/`));return n!==-1&&(t=t.slice(n+1)),t}function ae(e,t){let n=p(e);return n?t===`android`?n.includes(`edittext`)||n.includes(`autocompletetextview`):n.includes(`textfield`)||n.includes(`securetextfield`)||n.includes(`searchfield`)||n.includes(`textview`)||n.includes(`textarea`)||n===`search`:!0}function oe(e){let t=e.trim();return!(!t||/^(true|false)$/i.test(t)||/^\d+$/.test(t))}function se(e){if(typeof e!=`string`)return!1;let t=e.trim();return t?!/^(true|false)$/i.test(t):!1}function m(e){return[e.label,e.value,e.identifier].map(e=>typeof e==`string`?e.trim():``).filter(e=>e.length>0)[0]??``}const ce=Symbol(`SnapshotVisibility`);function le(e,t={}){let n,r,i=()=>(n||(n=ne(e),t.onNodeMapBuilt?.()),n),a=()=>(r||(r=de(e),t.onViewportRectsCollected?.()),r),o=n=>pe(e,n,a(),t.onContainingRectFallback),s=n=>{let r=ge(n,i(),e=>!!e.rect)?.rect;if(r)return r;let o=a();return o.length===0?null:pe(e,n.rect??{x:0,y:0,width:0,height:0},o,t.onContainingRectFallback)},c=e=>{if(!e.rect)return!0;let t=s(e);return!t||d(e.rect,t)},l=e=>e.rect?c(e)?he(e.rect,o(e.rect)):!1:!0;return{[ce]:!0,get nodeByIndex(){return i()},get viewportRects(){return a()},findAncestor(t,n){return re(e,t,i(),n)},isVisibleInEffectiveViewport:c,isVisibleOnScreen:l,resolveEffectiveViewport:s,resolveViewport:o}}function ue(e){let t=[e.type,e.role,e.subrole].map(e=>p(e??``)).join(` `);return t.includes(`application`)||t.includes(`window`)}function de(e){return e.flatMap(e=>ue(e)&&o(e.rect)?[e.rect]:[])}function fe(e,t,n){return pe(e,t,n??de(e))}function pe(e,n,r,i){let a=t(n),o=e=>l(e,a.x,a.y);return(u(r.filter(o))??u(r))||(i?.(),u(e.flatMap(e=>me(e.rect)&&o(e.rect)?[e.rect]:[])))}function me(e){return e?Number.isFinite(e.x)&&Number.isFinite(e.y)&&Number.isFinite(e.width)&&Number.isFinite(e.height):!1}function he(e,t){return!t||t.width<=0||t.height<=0||l(t,e.x+e.width/2,e.y+e.height/2)}function ge(e,t,n=()=>!0){let r=typeof e.parentIndex==`number`?t.get(e.parentIndex):void 0,i=new Set;for(;r&&!i.has(r.index);){if(i.add(r.index),n(r)&&te(r))return r;r=typeof r.parentIndex==`number`?t.get(r.parentIndex):void 0}return null}function _e(e,t){if(t===`android`&&e.visibleToUser===!1)return!1;let n=p(e.type??``);return n.includes(`application`)||n.includes(`window`)||n.includes(`scrollview`)||n.includes(`tableview`)||n.includes(`collectionview`)||n===`table`||n===`list`||n===`listview`?!1:t===`android`?e.hittable===!0&&o(e.rect):e.hittable===!0||o(e.rect)}function h(e){return e.hittable===!0?!0:e.rect?e.rect.width>0&&e.rect.height>0:!1}function g(e,t){return ae(e.type??``,t)&&e.enabled!==!1}const ve=new Set([`id`,`role`,`text`,`label`,`value`,`appname`,`windowtitle`]),_=new Set([`visible`,`hidden`,`editable`,`selected`,`focused`,`enabled`,`hittable`]),v=new Set([...ve,..._]),ye=[...v],be=new Set(`button.imagebutton.link.cell.statictext.checkedtextview.textfield.textbox.edittext.textarea.switch.slider.image.imageview.webview.framelayout.linearlayout.relativelayout.constraintlayout.viewgroup.view.listview.recyclerview.collectionview.list.searchfield.segmentedcontrol.group.window.checkbox.radio.menuitem.toolbar.scrollarea.scrollview.nestedscrollview.table.application.navigationbar.tabbar.tab.alert.dialog.header`.split(`.`));function xe(e){return be.has(e.trim().toLowerCase())}const Se=new Map([[`"`,`"`],[`'`,`'`],[`\\`,`\\`],[`/`,`/`],[`b`,`\b`],[`f`,`\f`],[`n`,`
2
- `],[`r`,`\r`],[`t`,` `]]);function y(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);let r=Ee(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>we(e))}}function b(e){try{return y(e)}catch{return null}}function x(e){let t=e.trim();if(!t)return!1;if(t===`||`)return!0;let n=t.indexOf(`=`);if(n!==-1){let e=t.slice(0,n).trim().toLowerCase();return v.has(e)}return v.has(t.toLowerCase())}function Ce(e){let t=e.trim(),n=t.indexOf(`=`);if(n===-1)return null;let r=t.slice(0,n).trim().toLowerCase();if(!r||v.has(r))return null;let i=t.slice(n+1).trim();if(!i)return null;let a=ke(i).trim();return a?{key:r,value:a}:null}function S(e,t={}){if(e.length===0)return null;let n=t.preferTrailingValue??!1,r=0,i=[];for(;r<e.length;){let t=e[r];if(t===void 0||!x(t))break;r+=1;let n=e.slice(0,r).join(` `).trim();n&&b(n)&&i.push(r)}if(i.length===0)return null;let a=i.at(-1);if(a===void 0)return null;let o=a;if(n)for(let t=i.length-1;t>=0;--t){let n=i[t];if(n!==void 0&&n<e.length){o=n;break}}let s=e.slice(0,o).join(` `).trim();return s?{selectorExpression:s,rest:e.slice(o)}:null}function we(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=De(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Invalid selector segment: ${t}`);return{raw:n,terms:r.map(Te)}}function Te(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Empty selector term`);let r=n.indexOf(`=`);if(r===-1){let r=n.toLowerCase();if(!_.has(r))throw new e(`INVALID_ARGS`,`Invalid selector term "${t}", expected key=value`);return{key:r,value:!0}}let i=n.slice(0,r).trim().toLowerCase(),a=n.slice(r+1).trim();if(!v.has(i))throw new e(`INVALID_ARGS`,`Unknown selector key: ${i}`);if(!a)throw new e(`INVALID_ARGS`,`Missing selector value for key: ${i}`);if(_.has(i)){let t=Me(a);if(t===null)throw new e(`INVALID_ARGS`,`Invalid boolean value for ${i}: ${a}`);return{key:i,value:t}}return{key:i,value:ke(a)}}function Ee(t){let n=[],r=``,i=null;for(let a=0;a<t.length;a+=1){let o=t[a];if((o===`"`||o===`'`)&&!Ne(t,a)){i=Oe(i,o),r+=o;continue}if(!i&&o===`|`&&t[a+1]===`|`){let i=r.trim();if(!i)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);n.push(i),r=``,a+=1;continue}r+=o}let a=r.trim();if(!a)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);return n.push(a),n}function De(t){let n=[],r=``,i=null;for(let e=0;e<t.length;e+=1){let a=t.charAt(e);if((a===`"`||a===`'`)&&!Ne(t,e)){i=Oe(i,a),r+=a;continue}if(!i&&/\s/.test(a)){r.trim()&&n.push(r.trim()),r=``;continue}r+=a}if(i)throw new e(`INVALID_ARGS`,`Unclosed quote in selector: ${t}`);return r.trim()&&n.push(r.trim()),n}function Oe(e,t){return e?e===t?null:e:t}function ke(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?Ae(t.slice(1,-1)):t}function Ae(e){let t=``,n=0;for(;n<e.length;){let r=e.charAt(n);if(r!==`\\`){t+=r,n+=1;continue}let i=e.charAt(n+1);if(!i){t+=r,n+=1;continue}let a=je(i);if(a!==null){t+=a,n+=2;continue}if(i===`u`){let r=e.slice(n+2,n+6);if(/^[0-9a-fA-F]{4}$/.test(r)){t+=String.fromCharCode(Number.parseInt(r,16)),n+=6;continue}}t+=r,n+=1}return t}function je(e){return Se.get(e)??null}function Me(e){let t=ke(e).toLowerCase();return t===`true`||t!==`false`&&null}function Ne(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==1}function Pe(e){return a.includes(e)}const Fe=`is requires predicate: ${a.join(`|`)}`;function Ie(e){let t=e.toLowerCase();return Pe(t)?{ok:!0,predicate:t}:i(Fe,Le)}const Le=`Use "is <predicate> <selector>" or "is <selector> <predicate>". visible|hidden|editable|selected|focused double as selector keys: a bare predicate token after the selector is read as the predicate, so write key=true (e.g. visible=true) inside the selector to use it as a filter instead.`;function Re(e){if(Pe((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(Pe(n)&&b(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function ze(e){let{predicate:t,node:n,nodes:r,expectedText:i,platform:a}=e,o=m(n),s=g(n,a),c=n.selected===!0,l=n.focused===!0,u=t===`text`?h(n):Ve(n,le(r),a),d=!1;switch(t){case`visible`:d=u;break;case`hidden`:d=!u;break;case`editable`:d=s;break;case`selected`:d=c;break;case`focused`:d=l;break;case`text`:d=o===(i??``);break;default:return Be(t)}let f=t===`text`?`expected="${i??``}" actual="${o}"`:`actual=${JSON.stringify({visible:u,editable:s,selected:c,focused:l})}`;return{pass:d,actualText:o,details:f}}function Be(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function Ve(e,t,n){if(n===`android`&&e.visibleToUser===!1)return!1;if(o(e.rect))return t.isVisibleInEffectiveViewport(e);if(e.rect)return!1;if(n!==`android`&&e.hittable===!0)return!0;let r=He(e,t,n);return r?o(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function He(e,t,n){return t.findAncestor(e,e=>_e(e,n)?e:null)}function Ue(e){let t=Re(e),n=t[0]??``;return{predicate:n,split:S(t.slice(1),{preferTrailingValue:n===`text`})}}const We=`is requires a selector expression`,Ge=`is text requires expected text value`;function Ke(e){let{predicate:t,split:n}=Ue([...e]),r=Ie(t);if(!r.ok)return r;if(!n)return i(We);let a=n.rest.join(` `).trim();return r.predicate===`text`&&!a?i(Ge):r.predicate!==`text`&&n.rest.length>0?i(`is ${r.predicate} does not accept trailing values`):{ok:!0,predicate:r.predicate,selectorExpression:n.selectorExpression,expectedText:a}}function qe(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:i(`get only supports text or attrs`)}function Je(e){let t=e[0];if(t?.startsWith(`@`)){let n=e.slice(1).join(` `).trim();return{ok:!0,ref:t,...n?{label:n}:{}}}let n=e.join(` `).trim();return n?{ok:!0,selector:n}:i(`get requires @ref or selector expression`)}function Ye(e){return e?{ok:!0,text:e}:i(`wait requires text`)}function Xe(e){return Array.from(new Set(e))}function Ze(e){return JSON.stringify(Qe(e))}function Qe(e){if(Array.isArray(e))return e.map(Qe);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,Qe(t[e])]))}function $e(e){let t=0,n=e.length;for(;t<n&&e[t]===`-`;)t+=1;for(;n>t&&e[n-1]===`-`;)--n;return e.slice(t,n)}const et=/^#\s*agent-device:target-v(\d+)(?:\s+(\S.*))?$/,tt=/^#\s*agent-device:targets-v(\d+)(?:\s+(\S.*))?$/,nt=4096;function rt(e){return e.normalize(`NFC`)}function it(e){if(e===void 0)return;let t=rt(e);return t.length>0?t:void 0}function at(e){return rt(e)}function ot(e){if(e===void 0)return;let t=rt(e).trim().replaceAll(/\s+/g,` `);return t.length>0?t:void 0}function C(e){return Buffer.byteLength(e,`utf8`)}function w(e,t){if(C(e)<=t)return e;let n=e.length;for(;n>0&&C(e.slice(0,n))>t;)--n;if(n>0){let t=e.charCodeAt(n-1);t>=55296&&t<=56319&&--n}return e.slice(0,n)}function st(e){let t={};return e.id!==void 0&&(t.id=e.id),t.role=e.role,e.label!==void 0&&(t.label=e.label),t.ancestry=e.ancestry.map(ct),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=lt(e.scrollRegion)),e.rect&&(t.rect=ut(e.rect)),t.verification=e.verification,t}function ct(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function lt(e){let t={role:e.role};return e.id!==void 0&&(t.id=e.id),e.label!==void 0&&(t.label=e.label),t}function ut(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function dt(e){return JSON.stringify(st(e))}function ft(e){return`# agent-device:target-v1 ${dt(e)}`}function pt(e){return JSON.stringify({source:st(e.source),destination:st(e.destination)})}function mt(e){return`# agent-device:targets-v1 ${pt(e)}`}function ht(e){let t=e.trim(),n=tt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:gt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function gt(t){if(C(t)>8320)throw new e(`INVALID_ARGS`,`targets-v1 annotation exceeds the 8320-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`targets-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`targets-v1 annotation must be a JSON object.`);let r=n;if(r.source===void 0||r.destination===void 0)throw new e(`INVALID_ARGS`,`targets-v1 annotation requires source and destination evidence.`);return{source:vt(JSON.stringify(r.source)),destination:vt(JSON.stringify(r.destination))}}function _t(e){let t=e.trim();if(!t.startsWith(`#`))return{kind:`none`};let n=et.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:vt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function vt(t){if(C(t)>4096)throw new e(`INVALID_ARGS`,`target-v1 annotation exceeds the ${nt}-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`target-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`target-v1 annotation must be a JSON object.`);let r=n,i=yt(r.role,`role`),a=bt(r.id,`id`),o=xt(r.label,`label`),s=Ct(r.ancestry),c=Tt(r.sibling,`sibling`,0),l=Tt(r.viewportOrder,`viewportOrder`,0),u=Et(r.scrollRegion),d=Dt(r.rect),f=Ot(r.verification);return{...a===void 0?{}:{id:a},role:i,...o===void 0?{}:{label:o},ancestry:s,sibling:c,viewportOrder:l,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:f}}function yt(t,n){if(t===void 0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" is required.`);if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);return St(at(t),n)}function bt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=it(t);return r===void 0?void 0:St(r,n)}function xt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=ot(t);return r===void 0?void 0:St(r,n)}function St(t,n){if(C(t)>256)throw new e(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return t}function Ct(t){if(t===void 0)return[];if(!Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry" must be an array.`);if(t.length>8)throw new e(`INVALID_ARGS`,`target-v1 "ancestry" exceeds the 8-entry cap.`);return t.map((e,t)=>wt(e,t))}function wt(t,n){if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry[${n}]" must be an object.`);let r=t,i=yt(r.role,`ancestry[${n}].role`),a=xt(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function Tt(t,n,r){if(t===void 0)return r;if(typeof t!=`number`||!Number.isSafeInteger(t)||t<0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a non-negative integer.`);return t}function Et(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "scrollRegion" must be an object.`);let n=t,r=yt(n.role,`scrollRegion.role`),i=bt(n.id,`id`),a=xt(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function Dt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "rect" must be an object.`);let n=t;return{x:T(n.x,`rect.x`),y:T(n.y,`rect.y`),width:T(n.width,`rect.width`),height:T(n.height,`rect.height`)}}function T(t,n){if(typeof t!=`number`||!Number.isFinite(t))throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a finite number.`);return t}function Ot(t){if(t===`verified`||t===`unverifiable`)return t;throw new e(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function kt(e){let t=at(p(e.type??``)),n=it(e.identifier),r=ot(e.label);return{...n===void 0?{}:{id:w(n,256)},role:w(t,256),...r===void 0?{}:{label:w(r,256)}}}function At(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function jt(e,t){let n=0;for(let r of e)kt(r).id===t&&(n+=1);return n}function Mt(e,t){if(e.id===void 0||jt(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function Nt(e,t){let n=0;for(let r of e)if(r.parentIndex===t.parentIndex){if(r.index===t.index)return n;n+=1}return 0}function Pt(e,t){return{documentOrder:e.index,sibling:Nt(t,e)}}function Ft(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function It(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Lt(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function Rt(e,t){if(e.length<t.length)return!1;for(let[n,r]of t.entries()){let t=e[n];if(!t||t.role!==r.role||r.label!==void 0&&t.label!==r.label)return!1}return!0}function zt(e,t){let n=[];return e.id!==t.id&&n.push(`id: recorded=${e.id??`(none)`} observed=${t.id??`(none)`}`),e.role!==t.role&&n.push(`role: recorded=${e.role} observed=${t.role}`),e.label!==t.label&&n.push(`label: recorded=${e.label??`(none)`} observed=${t.label??`(none)`}`),n}function Bt(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function Vt(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function Ht(e,t){for(let[n,r]of e.entries()){let e=t[n];if(Vt(r,e))return[`ancestry[${n}]: recorded=${Bt(r)} observed=${Bt(e)}`]}return[]}function Ut(e,t,n={}){let r=[],i=p(e.type??``),a=Wt(e,n.nodes),o=D(e.label),s=D(e.value),c=D(m(e)),l=n.action===`fill`;a&&r.push(`id=${E(a)}`),i&&o&&r.push(l?`role=${E(i)} label=${E(o)} editable=true`:`role=${E(i)} label=${E(o)}`),o&&r.push(l?`label=${E(o)} editable=true`:`label=${E(o)}`),s&&r.push(l?`value=${E(s)} editable=true`:`value=${E(s)}`),c&&c!==o&&c!==s&&r.push(l?`text=${E(c)} editable=true`:`text=${E(c)}`),i&&l&&!r.some(e=>e.includes(`editable=true`))&&r.push(`role=${E(i)} editable=true`);let u=Xe(r);return u.length===0&&i&&u.push(l?`role=${E(i)} editable=true`:`role=${E(i)}`),u.length===0&&h(e)&&u.push(`visible=true`),u}function Wt(e,t){let n=D(e.identifier);if(!n||!t)return n;let r=kt(e).id;return r===void 0?n:jt(t,r)>1?null:n}function E(e){return JSON.stringify(e)}function D(e){return e&&e.trim()||null}const Gt=[`any`,`text`,`label`,`value`,`role`,`id`],Kt=[`text`,`label`,`value`,`role`,`id`];function qt(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function O(e){return e===`exists`||e===`wait`||e===`get_text`||e===`get_attrs`||e===`list`}function Jt(e,t,n,r={}){let i=A(n);if(!i)return{matches:[],score:0};let a=0,o=[];for(let n of e){if(r.requireRect&&!n.rect)continue;let e=Yt(n,t,i);if(!(e<=0)){if(e>a){a=e,o.length=0,o.push(n);continue}e===a&&o.push(n)}}return{matches:o,score:a}}function Yt(e,t,n){switch(t){case`role`:return Xt(e.type,n);case`label`:return k(e.label,n);case`value`:return k(e.value,n);case`id`:return k(e.identifier,n);default:return Math.max(k(e.label,n),k(e.value,n),k(e.identifier,n))}}function k(e,t){let n=A(e??``);return n?n===t?2:+!!n.includes(t):0}function Xt(e,t){let n=Zt(e??``);return n?n===t?2:+!!n.includes(t):0}function A(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}function Zt(e){let t=e.trim();return t?(t=(t.split(`.`).pop()??t).replaceAll(/XCUIElementType/gi,``).toLowerCase(),t):``}const Qt=`find requires a value`,$t=`find actions: click (default; press/tap are aliases), list, focus, fill, type, exists, wait, get text, get attrs — there is no longpress/swipe find action. Run find "<text>" list to inspect every match with its @ref without acting, then dispatch the gesture on the chosen ref, e.g. longpress @eNN.`;function en(e,t){if(e.length===0)return{ok:!1,code:`INVALID_ARGS`,message:`find requires a locator or text`};let n=rn([...e]);return n.query?t?.findFirst&&t?.findLast?{ok:!1,code:`INVALID_ARGS`,message:`find accepts only one of --first or --last`}:{ok:!0,parsed:n}:{ok:!1,code:`INVALID_ARGS`,message:Qt}}const tn=[`exists`,`list`,`click`,`focus`];function nn(e){return tn.includes(e)}function rn(t){let n=`any`,r=0;Kt.includes(t[0])&&(n=t[0],r=1);let i=t[r]??``,a=t.slice(r+1);if(a.length===0)return{locator:n,query:i,action:`click`};let o=qt(a[0]);if(nn(o))return{locator:n,query:i,action:o};if(o===`get`)return{locator:n,query:i,action:an(a[1])};if(o===`wait`){let e=sn(a[1]);return{locator:n,query:i,action:`wait`,timeoutMs:e??void 0}}if(o===`fill`||o===`type`){let e=a.slice(1);return{locator:n,query:i,action:o,value:e.length===0?void 0:e.join(` `)}}throw new e(`INVALID_ARGS`,`Unsupported find action: ${a[0]}`,{hint:$t})}function an(t){let n=t?.toLowerCase();if(n===`text`)return`get_text`;if(n===`attrs`)return`get_attrs`;throw new e(`INVALID_ARGS`,`find get only supports text or attrs`)}function on(e,t){return e!==`any`||!t.includes(`=`)&&!t.includes(`||`)?null:b(t)?t:null}function sn(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function cn(e,t,n){return t.terms.every(t=>ln(e,t,n))}function ln(e,t,n){switch(t.key){case`id`:return j(e.identifier,String(t.value));case`role`:return j(p(e.type??``),String(t.value));case`label`:return j(e.label,String(t.value));case`value`:return j(e.value,String(t.value));case`text`:return j(m(e),String(t.value));case`appname`:return j(e.appName,String(t.value));case`windowtitle`:return j(e.windowTitle,String(t.value));case`visible`:return h(e)===!!t.value;case`hidden`:return!h(e)==!!t.value;case`editable`:return g(e,n)===!!t.value;case`selected`:return e.selected===!0==!!t.value;case`focused`:return e.focused===!0==!!t.value;case`enabled`:return e.enabled!==!1==!!t.value;case`hittable`:return e.hittable===!0==!!t.value;default:return!1}}function j(e,t){return A(e??``)===A(t)}function un(e,t,n){let r=n.requireRect??!1,i=n.requireUnique??!0,a=[],o=null;for(let[s,c]of t.selectors.entries()){let t=_n(e,c,n.platform,r);if(a.push({selector:c.raw,matches:t.count}),!(t.count===0||!t.firstNode)){if(o??={selector:c,selectorIndex:s,matchedNodes:t.candidates},i&&t.count!==1){if(!n.disambiguateAmbiguous||!t.disambiguated||!t.tiebreak)continue;return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.disambiguated,selector:c,selectorIndex:s,matches:t.count,diagnostics:a,disambiguation:{matchCount:t.count,tiebreak:t.tiebreak,alternatives:t.candidates.filter(e=>e!==t.disambiguated)}}}}return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.firstNode,selector:c,selectorIndex:s,matches:t.count,diagnostics:a}}}}return{resolution:null,matchedNodes:o?.matchedNodes??[],firstMatch:o}}function dn(e,t,n){return un(e,t,n).resolution}function fn(e,t,n){let r=n.requireRect??!1;for(let[i,a]of t.selectors.entries()){let t=e.filter(e=>r&&!e.rect?!1:cn(e,a,n.platform));if(t.length>0)return{selector:a,selectorIndex:i,matchedNodes:t}}return null}function pn(e,t,n){let r=n.requireRect??!1,i=[];for(let[a,o]of t.selectors.entries()){let t=xn(e,o,n.platform,r);if(i.push({selector:o.raw,matches:t}),t>0)return{selectorIndex:a,selector:o,matches:t,diagnostics:i}}return null}const mn=`Snapshot refs expire when the UI changes. Run snapshot -i and retry with a fresh @ref.`;function hn(e){return e.some(e=>e.matches>1)?`Add more terms to disambiguate (e.g. role=button text="Sign in"), use an @ref from snapshot -i, or use find <text> --first/--last.`:`Selector text/label values match exactly (quote multi-word values: text="Sign in"). Run snapshot -i to see current elements and refs, or use find <text> for contains matching.`}function gn(e,t,n){if(t.length===0)return`Selector did not match: ${e}`;let r=t.map(e=>`${e.selector} -> ${e.matches}`).join(`, `);return n.unique??!0?`Selector did not resolve uniquely (${r})`:`Selector did not match (${r})`}function _n(e,t,n,r){let i=0,a=null,o=[],s={best:null,bestVisible:!1,tie:!1},c=le(e).isVisibleOnScreen;for(let l of e)r&&!l.rect||cn(l,t,n)&&(i+=1,a??=l,o.push(l),vn(s,l,c));return{count:i,firstNode:a,disambiguated:s.tie?null:s.best,tiebreak:s.tie?null:yn(o,s.best,c),candidates:o}}function vn(e,t,n){if(!e.best){e.best=t;return}e.bestVisible||=n(e.best);let r=n(t);if(r!==e.bestVisible){r&&(e.best=t,e.bestVisible=!0,e.tie=!1);return}let i=Sn(t,e.best);i.result>0?(e.best=t,e.tie=!1):i.result===0&&(e.tie=!0)}function yn(e,t,n){if(!t)return null;let r=null;for(let i of e)i!==t&&(!r||bn(i,r,n).result>0)&&(r=i);return r?bn(t,r,n).criterion:null}function bn(e,t,n){let r=n(e);return r===n(t)?Sn(e,t):{result:r?1:-1,criterion:`visible`}}function xn(e,t,n,r){let i=0;for(let a of e)r&&!a.rect||cn(a,t,n)&&(i+=1);return i}function Sn(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return{result:n>r?1:-1,criterion:`deepest`};let i=Cn(e),a=Cn(t);return i===a?{result:0,criterion:null}:{result:i<a?1:-1,criterion:`smallest-area`}}function Cn(e){return e.rect?e.rect.width*e.rect.height:1/0}const wn={act:{ambiguity:`reject-candidates`,requireRect:!0},actCoveredDiagnosis:{ambiguity:`first-match`,requireRect:!0},readText:{ambiguity:`disambiguate`,requireRect:!1},readUnique:{ambiguity:`fail-closed`,requireRect:!1},readAny:{ambiguity:`first-match`,requireRect:!1},wait:{ambiguity:`first-match`,requireRect:!1},findAct:{ambiguity:`reject-candidates`,requireRect:!0},readList:{ambiguity:`reject-candidates`,requireRect:!1},cropTarget:{ambiguity:`fail-closed`,requireRect:!0}};function Tn(e){return e.ambiguity===`first-match`?{requireRect:e.requireRect,requireUnique:!1}:{requireRect:e.requireRect,requireUnique:!0,disambiguateAmbiguous:e.ambiguity===`disambiguate`}}function En(e,t){let n=e===`is`?Ue([...t]).split:S([...t]);return n?b(n.selectorExpression)?{kind:`expression`,expression:n.selectorExpression,rest:n.rest}:{kind:`invalid`}:{kind:`not-applicable`}}function Dn(e){return{platform:e.platform,...Tn({ambiguity:e.allowDisambiguation?`disambiguate`:`fail-closed`,requireRect:e.requireRect})}}function On(e,t,n){let r=b(e);if(!r)return{kind:`unresolved`,reason:`parse-invalid`,matchedNodes:[]};let{resolution:i,matchedNodes:a}=un(t,r,Dn(n));return i?{kind:`resolved`,winner:i.node,matchedNodes:a,matchCount:a.length,...i.disambiguation?{disambiguation:{tiebreak:i.disambiguation.tiebreak,matchCount:i.disambiguation.matchCount,alternatives:i.disambiguation.alternatives}}:{}}:{kind:`unresolved`,reason:a.length>0?`ambiguous`:`no-match`,matchedNodes:a}}function kn(e,t,n={}){return Ut(e,t,n)}function An(e,t,n){let r=b(e);if(!r)return;let i=dn(t,r,Dn(n));if(i)return{node:i.node,basis:Mn(i.selector)}}function jn(e){if(!e)return;let t=b(e);if(!t)return;let n=t.selectors.flatMap(e=>e.terms.flatMap(e=>(e.key===`label`||e.key===`text`||e.key===`id`)&&typeof e.value==`string`?[e.value]:[]));if(n.length===0)return;let r=n[0];return r&&n.every(e=>e===r)?r:void 0}function Mn(e){let t=new Set(e.terms.map(e=>e.key));if(t.has(`id`))return`id`;let n=t.has(`role`),r=t.has(`label`)||t.has(`text`);return n&&r?`role-label`:r||t.has(`value`)?`label`:`other`}function Nn(e,t){let n=b(e);if(!n)return e.includes(`=`)||e.includes(`||`)?null:e;let r=new Set(t.textKeys),i=t.textAliases??{};return n.selectors.length>1?Pn(n.selectors,r,i):Fn(n.selectors[0],r,new Set(t.booleanKeys),i)}function Pn(e,t,n){let r=e.map(e=>{let r=e.terms.length===1?e.terms[0]:void 0;return r&&In(r.key,t,n)&&typeof r.value==`string`?r.value:void 0}),i=r[0];return i!==void 0&&r.every(e=>e===i)?i:null}function Fn(e,t,n,r){if(!e)return null;let i={},a=0;for(let o of e.terms){if(In(o.key,t,r)&&typeof o.value==`string`)a+=1;else if(!Ln(o,n,`boolean`))return null;i[r[o.key]??o.key]=o.value}return a<=1&&Object.keys(i).length>0?i:null}function In(e,t,n){return t.has(e)||n[e]!==void 0}function Ln(e,t,n){return t.has(e.key)&&typeof e.value===n}function Rn(e){let t=b(e);if(!t||t.selectors.length!==1)return null;let n=t.selectors[0];if(!n||n.terms.length!==1)return null;let r=n.terms[0];return!r||typeof r.value!=`string`||r.key!==`id`&&r.key!==`label`&&r.key!==`text`&&r.key!==`value`?null:{key:r.key,value:r.value,raw:n.raw}}function zn(e,t){if(!t)return!1;let n=b(e);return n?n.selectors.some(e=>e.terms.some(e=>(e.key===`text`||e.key===`label`||e.key===`value`)&&typeof e.value==`string`&&e.value.includes(t))):!1}function Bn(e,t){return b(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function Vn(e){return y(e).selectors.map(e=>e.raw)}function Hn(e){return b(e)!==null}function Un(e){y(e)}function M(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}const Wn=new Set([`exists`,`present`,`appears`,`gone`,`disappears`]);function Gn(e){let t=e[0];if(t===void 0)return null;let n=M(t);if(n!==null)return{kind:`sleep`,durationMs:n};let r=M(e.at(-1));return t===`text`?Kn(e,r):t===`stable`?qn(e):t===`absent`?Jn(e,r):t.startsWith(`@`)?{kind:`ref`,rawRef:t,timeoutMs:r}:Xn(e,r)}function Kn(e,t){return{kind:`text`,text:(t===null?e.slice(1).join(` `):e.slice(1,-1).join(` `)).trim(),timeoutMs:t}}function qn(e){let t=e.slice(1),n=t.length>1?M(t[1]):null;return{kind:`stable`,quietMs:t.length>0?M(t[0]):null,timeoutMs:n}}function Jn(e,t){let n=t===null?e.slice(1):e.slice(1,-1),r=S(n);return n.length>0&&r?.rest.length===0&&Hn(r.selectorExpression)?{kind:`absent`,selectorExpression:r.selectorExpression,timeoutMs:t}:{kind:`invalid`,reason:`absent-selector-required`,message:Yn(n)}}function Yn(e){let t=e.join(` `);return t.length>0?`wait absent requires one valid selector; received "${t}". Use wait absent '<selector>' [timeoutMs].`:`wait absent requires <selector> [timeoutMs].`}function Xn(e,t){let n=t===null?e.slice():e.slice(0,-1),r=S(n);return r&&r.rest.length===0&&Hn(r.selectorExpression)?{kind:`selector`,selectorExpression:r.selectorExpression,timeoutMs:t}:Zn(n,r)||{kind:`text`,text:(t===null?e.join(` `):e.slice(0,-1).join(` `)).trim(),timeoutMs:t}}function Zn(e,t){for(let t of e){let n=Ce(t);if(n)return{kind:`invalid`,reason:`unknown-selector-key`,message:Qn(n,e)}}return t&&t.rest.length>0?{kind:`invalid`,reason:`selector-shaped-text`,message:$n(t,e)}:e.some(e=>x(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:er(e)}:null}function Qn(e,t){let n=t.join(` `),r=xe(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${ye.join(`, `)}. Use wait '${r}' [timeoutMs] to wait for the selector, or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function $n(e,t){let n=t.join(` `);return`Selector ${e.selectorExpression} is followed by unexpected extra arguments: "${e.rest.join(` `)}". Selector values with spaces need quotes, e.g. label="Sign in". Use wait '<selector>' [timeoutMs], or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function er(e){let t=e.join(` `),n=e.filter(e=>!x(e)),r=e.filter(e=>x(e));if(n.length>0){let e=n[0],i=Wn.has(e.toLowerCase())?` "${e}" describes a condition, not a selector key. Use the selector form: `+(e.toLowerCase()===`gone`||e.toLowerCase()===`disappears`?`wait absent '${r.join(` `)}' [timeoutMs] to wait for zero matches.`:`wait '${r.join(` `)}' [timeoutMs] to wait for it to appear.`):` "${e}" is not a recognized selector key (${ye.join(`, `)}).`;return`"${t}" mixes plain word "${e}" with selector-shaped "${r.join(` `)}", so it is neither a valid selector nor safe as literal text.${i} Use wait '<selector>' [timeoutMs] for a selector, or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}return`"${t}" looks like a selector key but is not a valid selector expression. Use wait '<selector>' [timeoutMs], e.g. wait '${e[0]}="value"' [timeoutMs], or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}function tr(e){let t=Gn(e);return t?t.kind===`sleep`?t.durationMs:t.kind===`invalid`?null:t.timeoutMs:null}const nr=24e4,rr=3e4,ir=3e5,N={budget:{source:`none`},envelopeMs:9e4,onTimeout:`reset-daemon`};function ar(e,t){if(e.envelopeMs===`unbounded`)return;let n={...e,envelopeMs:e.envelopeMs};return or(n,t.positionals??[])??sr(n,t.flags)??n.envelopeMs}function or(e,t){if(e.budget.source!==`positional-parser`)return;let n=e.budget.parser(t);return n===null?void 0:lr(e,n)}function sr(e,t){if(e.budget.source===`flag`)return e.budget.envelope===`widen`?cr(e,e.budget,t):e.budget.envelope===`margin`?typeof t?.timeoutMs==`number`?lr(e,t.timeoutMs):e.envelopeMs:typeof t?.timeoutMs==`number`?t.timeoutMs:e.envelopeMs}function cr(e,t,n){if(n?.settle!==!0)return e.envelopeMs;let r=typeof n.timeoutMs==`number`?n.timeoutMs:t.defaultBudgetMs;return typeof r==`number`?ur(e,r):e.envelopeMs}function lr(e,t){return Math.max(e.envelopeMs,t+rr)}function ur(e,t){return Math.max(e.envelopeMs,e.envelopeMs+t+rr)}const dr={click:`settle-and-verify`,press:`settle-and-verify`,fill:`settle-and-verify`,longpress:`settle`,hover:`settle`,scroll:`settle`,back:`settle`};function fr(e){if(e!==void 0)return dr[e]}function P(t){return new e(`COMMAND_FAILED`,t,{reason:`runtime-contract-invalid`,hint:`This is an agent-device runtime contract bug; report the selected device and command.`})}function pr(e){if(!n(e))throw TypeError(`Unknown local runtime family: ${String(e)}`);return Object.freeze({kind:`local-family`,family:e})}function mr(e,t){let n=e.trim(),r=t.trim();if(n.length===0||r.length===0)throw TypeError(`Provider runtime owner requires non-empty provider and instance identities`);return Object.freeze({kind:`provider-runtime`,provider:n,instance:r})}function hr(e){let t=e.trim();if(t.length===0)throw TypeError(`Managed local runtime owner requires a non-empty allocator instance identity`);return Object.freeze({kind:`managed-local`,instance:t})}function F(e){switch(e.kind){case`local-family`:return`local:${e.family}`;case`managed-local`:return`managed:${JSON.stringify([e.instance])}`;case`provider-runtime`:return`provider:${JSON.stringify([e.provider,e.instance])}`}}function gr(e,t){return F(e)===F(t)}function _r(e,t){return e.available?t():{}}function vr(e){if(!I(e.requesterId)||!I(e.identityIncarnationId)||!br(e.requestGeneration))throw TypeError(`Managed binding fence requires non-empty requester and identity incarnation ids and a non-negative integer request generation`);return Object.freeze({token:JSON.stringify([e.requesterId,e.identityIncarnationId]),generation:e.requestGeneration})}function yr(e){let t=xr(e.token);if(!t||t.length!==2)return null;let[n,r]=t;if(!I(n)||!I(r)||!br(e.generation))return null;let i=Object.freeze({requesterId:n,requestGeneration:e.generation,identityIncarnationId:r});return vr(i).token===e.token?i:null}function br(e){return Number.isInteger(e)&&e>=0}function I(e){return typeof e==`string`&&e.trim().length>0}function xr(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function Sr(e,t){let n={},r={};for(let i of t.required){let t=Cr(e.facts.operations,i);if(n[i]=t,!t.available)throw Or(i,t);r[i]=Er(e.operations,i)}for(let i of t.preferred){let t=Cr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Er(e.operations,i))}for(let i of t.conditional??[]){let t=Cr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Er(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function Cr(e,t){let n=e[t];if(!wr(n))throw P(`Runtime owner omitted the ${t} fact`);let r=Tr(n);if(r)return r;throw P(`Runtime owner returned an invalid ${t} fact`)}function wr(e){return typeof e==`object`&&!!e&&`available`in e}function Tr(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Dr(e.reason)&&(e.hint===void 0||typeof e.hint==`string`))return Object.freeze({available:!1,reason:e.reason,...e.hint===void 0?{}:{hint:e.hint}})}function Er(e,t){let n=e[t];if(typeof n!=`function`)throw P(`Runtime owner advertised ${t} without an implementation`);return n}function Dr(e){return e===`unsupported-platform-leaf`||e===`unsupported-device-kind`||e===`unsupported-device-backend`||e===`unsupported-provider-mode`||e===`owner-capability-missing`}function Or(t,n){return new e(`UNSUPPORTED_OPERATION`,`Runtime operation ${t} is unavailable`,{reason:n.reason,hint:n.hint})}function kr(e){return JSON.stringify({required:[...e.required].sort(),preferred:[...e.preferred].sort(),conditional:[...e.conditional??[]].sort()})}function Ar(){return e=>{let t=jr(e.required,`required`),n=jr(e.preferred??[],`preferred`),r=jr(e.conditional??[],`conditional`),i=[[`required`,t],[`preferred`,n],[`conditional`,r]];for(let e=0;e<i.length;e+=1){let t=i[e];if(t)for(let n of i.slice(e+1)){let e=n[1].find(e=>t[1].includes(e));if(e!==void 0)throw TypeError(`Runtime operation cannot be both ${t[0]} and ${n[0]}: ${e}`)}}return Object.freeze(r.length===0?{required:t,preferred:n}:{required:t,preferred:n,conditional:r})}}function jr(e,t){let n=[...e];if(new Set(n).size!==n.length)throw TypeError(`Runtime use contains duplicate ${t} operations`);return Object.freeze(n)}const L=Ar(),Mr=L({required:[`bootTarget`]}),Nr=L({required:[`bootTargetHeadless`]}),Pr=L({required:[`ensureReady`,`listApps`]}),Fr=L({required:[`captureSnapshot`]}),Ir=L({required:[`setViewport`]}),Lr=L({required:[`focusPoint`]}),Rr=L({required:[`typeText`]}),zr=L({required:[`back`]}),Br=L({required:[`home`]}),Vr=L({required:[`setOrientation`]}),Hr=L({required:[`tvRemote`]}),Ur=L({required:[`keyboardStatus`]}),Wr=L({required:[`keyboardDismiss`]}),Gr=L({required:[`keyboardEnter`]}),Kr=L({required:[`appSwitcher`]}),qr=L({required:[`triggerAppEvent`]}),Jr=L({required:[`setSetting`]}),Yr=L({required:[`readAlert`]}),Xr=L({required:[`awaitAlert`]}),Zr=L({required:[`acceptAlert`]}),Qr=L({required:[`dismissAlert`]}),$r=L({required:[`readClipboard`]}),ei=L({required:[`writeClipboard`]}),ti=L({required:[`perfFrames`]}),ni=L({required:[`perfMemorySample`]}),ri=L({required:[`perfMemorySnapshot`]}),ii=L({required:[`perfNativeCaptureStart`]}),ai=L({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),oi=L({required:[`perfProfileReport`]}),si=Object.freeze([ti,ni,ri,ii,ai,oi]),R=L({required:[`tapPoint`]}),ci=L({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),li=L({required:[`longPressPoint`]}),ui=L({required:[`captureSnapshot`,`longPressPoint`]}),di=L({required:[`hoverPoint`]}),fi=L({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),pi=L({required:[`fillPoint`]}),z=L({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),mi=Object.freeze([R,ci]),hi=mi,gi=Object.freeze([li,ui]),_i=Object.freeze([di,fi]),vi=Object.freeze([pi,z]);function yi(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:ci}:{kind:`tap-point`,use:R};case`fill`:return t?{kind:`captured-fill`,use:z}:{kind:`fill-point`,use:pi};case`longpress`:return t?{kind:`captured-long-press`,use:ui}:{kind:`long-press-point`,use:li};case`hover`:return t?{kind:`captured-hover`,use:fi}:{kind:`hover-point`,use:di}}}const bi=L({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),xi=L({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Si=L({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ci=L({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),wi=L({required:[`gestureViewport`]}),Ti=L({required:[`scrollDirection`]}),Ei=L({required:[`scrollDirection`,`captureSnapshot`]}),Di=Object.freeze({plan:bi,"directional-fling":xi,"multi-touch":Si,"target-authored-drag":Ci}),Oi=Object.freeze([bi,xi,Si,Ci]),ki=Object.freeze([bi]),Ai=Object.freeze([Ti,Ei]);function ji(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function Mi(e){return e.intent===`drag`?`target-authored-drag`:ji(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function Ni(e){let t=Mi(e);switch(t){case`plan`:return B(t);case`directional-fling`:return B(t);case`multi-touch`:return B(t);case`target-authored-drag`:return B(t)}}function B(e){let t=Di[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function Pi(e){return e.until===void 0?e.edge===void 0?Object.freeze({kind:`direction`,use:Ti}):Object.freeze({kind:`edge`,edge:e.edge,use:Ei}):Object.freeze({kind:`until`,until:e.until,use:Ei})}const Fi=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),Ii=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Li=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),Ri=L({required:[`captureSnapshot`]}),zi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Bi=L({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),Vi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),Hi=L({required:[`captureSnapshot`],conditional:[`findText`]}),Ui=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`]}),Wi=Object.freeze([Ri,zi]),Gi=Object.freeze([Bi,Vi]),Ki=L({required:[`captureSnapshot`,`focusPoint`]}),qi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),Ji=L({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),Yi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),Xi=Object.freeze([Bi,Vi,Ri,zi,Ki,qi,Ji,Yi]),Zi=Object.freeze([Hi,Ui]),Qi=Object.freeze([Fr,Fi,Ii,Li]),V=Object.freeze({"capture-only":Wi,"element-text":Gi,"wait-observation":Zi,"find-focus":Object.freeze([Ki,qi]),"find-type":Object.freeze([Ji,Yi])});function $i(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function ea(e){switch(e.intent){case`capture-only`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`element-text`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`wait-observation`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`find-focus`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`find-type`:return H(e.hasActiveApp,e.intent,V[e.intent])}}function H(e,t,n){return Object.freeze(e?{kind:`selector-active-app`,intent:t,operation:`captureSnapshot`,use:n[0]}:{kind:`selector-without-active-app`,intent:t,operation:`captureSnapshotWithoutActiveApp`,use:n[1]})}function ta(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:Fi}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:Li}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:Fr}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:Ii})}const na=L({required:[`captureScreenshot`]}),ra=L({required:[`captureScreenshot`,`captureSnapshot`]}),ia=Object.freeze([na,ra]);function aa(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:ra}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:ra}):Object.freeze({kind:`capture`,use:na})}const oa=Object.freeze([Mr,Nr]),sa=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Mr}),ca=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Nr});function la(e){return e.headless?ca:sa}const ua=L({required:[`ensureReady`,`appState`]}),da=Object.freeze([ua]),fa=L({required:[`shutdownTarget`]}),pa=Object.freeze([$r,ei]),ma=Object.freeze([Yr,Xr,Zr,Qr]),ha=Object.freeze([Ur,Wr,Gr]),ga=L({required:[`deployApp`]}),_a=L({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),va=L({required:[`ensureReady`,`sendPushNotification`]}),ya=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),ba=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),xa=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),Sa=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Ca(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:Sa}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:ba}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:xa}):Object.freeze({kind:`open`,use:ya})}const wa=Object.freeze([ya,ba,xa,Sa]),Ta=L({required:[`closeApplication`,`finalizeApplicationClose`]}),Ea=L({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),Da=Object.freeze([Ta,Ea]),Oa=L({required:[`finalizeApplicationClose`]}),ka=L({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),Aa=L({required:[`prepareAppleRunner`]}),ja=L({required:[`clearRuntimeHints`]}),Ma=L({required:[`configureProviderPortReverse`]}),Na=Object.freeze([ja,Ma]),U=L({required:[`appLogInspect`]}),Pa=L({required:[`appLogInspect`,`appLogDoctor`]}),Fa=L({required:[`appLogInspect`,`appLogStart`]}),Ia=L({required:[],preferred:[`appLogInspect`]}),La=Object.freeze([U,Pa,Fa]);function Ra(t){let n=(t.action??`path`).toLowerCase();if(t.restart&&n!==`clear`)throw new e(`INVALID_ARGS`,`logs --restart is only supported with logs clear`);switch(n){case`path`:return Object.freeze({kind:`path`,requiresAppSession:!1,use:U});case`start`:return Object.freeze({kind:`start`,requiresAppSession:!0,use:Fa});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:U});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:Pa});case`mark`:return Object.freeze({kind:`mark`,marker:t.marker??``,requiresAppSession:!1,use:U});case`clear`:return t.restart?Object.freeze({kind:`clear-restart`,requiresAppSession:!0,use:Fa}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:U});default:throw new e(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const za=L({required:[`audioProbeStart`]}),Ba=L({required:[`audioProbeReattach`,`audioProbeCleanup`]}),Va=L({required:[`audioProbeQuery`]}),Ha=Object.freeze([za,Ba,Va]);function Ua(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:Va});switch(e.probeAction){case`start`:return Object.freeze({kind:`capture-start`,use:za});case`status`:return Object.freeze({kind:`capture-status`});case`stop`:return Object.freeze({kind:`capture-stop`})}}const Wa=[`probe`],Ga=[`start`,`status`,`stop`];function Ka(t){let n=(t?.[0]??`probe`).toLowerCase();if(!Wa.includes(n))throw new e(`INVALID_ARGS`,`audio requires probe`);let r=(t?.[1]??`status`).toLowerCase();if(!Ga.includes(r))throw new e(`INVALID_ARGS`,`audio probe requires ${Ga.join(`, `)}`);if(r!==`start`&&t&&t.length>2)throw new e(`INVALID_ARGS`,`audio probe duration and bucket are only supported with audio probe start`);return Object.freeze({probeAction:r,durationMs:qa(t?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:qa(t?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function qa(t,n){if(t===void 0)return n.defaultValue;let r=Number.parseInt(t,10);if(!Number.isInteger(r)||String(r)!==t||r<n.min||r>n.max)throw new e(`INVALID_ARGS`,n.message);return r}const Ja=L({required:[`networkDump`]}),Ya=L({required:[],preferred:[`networkDump`]}),Xa=[`dump`,`log`],Za=[`summary`,`headers`,`body`,`all`];function Qa(t){let n=(t.action??`dump`).toLowerCase(),r=(t.include??`summary`).toLowerCase();if(!$a(n))throw new e(`INVALID_ARGS`,`network requires dump or log`);if(!eo(r))throw new e(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:Ja})}function $a(e){return Xa.some(t=>t===e)}function eo(e){return Za.some(t=>t===e)}function to(e){let t=new Map;for(let r of e){if(!n(r.family))throw TypeError(`Unknown platform family registration: ${String(r.family)}`);if(t.has(r.family))throw TypeError(`Duplicate platform family registration: ${r.family}`);t.set(r.family,no(r))}let i=r.filter(e=>!t.has(e));if(i.length>0)throw TypeError(`Missing platform family registrations: ${i.join(`, `)}`);let a=Object.freeze([...r]),o=Object.freeze(a.map(e=>ro(t,e)));return Object.freeze({families:a,modules:o,get:e=>ro(t,e)})}function no(e){return Object.freeze({...e})}function ro(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const io=Object.freeze({kind:`device-inventory`});function ao(e){if(typeof e!=`object`||!e)throw po();let t=e,n=Object.keys(t).sort();if(!(t.kind===`none`&&W(n,[`kind`]))&&!(t.kind===`host`&&W(n,[`kind`]))&&!(t.kind===`inventory`&&W(n,[`kind`,`use`])&&so(t.use))&&!(t.kind===`device-runtime`&&W(n,[`kind`,`use`])&&co(t.use))&&!(t.kind===`device-runtime`&&(W(n,[`kind`,`uses`])||W(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&oo(t.uses)))throw po()}function oo(e){if(!Array.isArray(e)||e.length===0||!e.every(co))return!1;let t=e.map(kr);return new Set(t).size===t.length}function so(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&W(Object.keys(t).sort(),[`kind`])}function co(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[uo(t.required),uo(t.preferred),uo(t.conditional??[])];if(!lo(n))return!1;let r=n.flat();return new Set(r).size===r.length&&W(Object.keys(t).sort(),t.conditional===void 0?[`preferred`,`required`]:[`conditional`,`preferred`,`required`])}function lo(e){return e.every(e=>e!==null&&fo(e))}function uo(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function fo(e){return new Set(e).size===e.length}function W(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function po(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const mo=L({required:[`screenRecordingStart`]}),ho=L({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),go=L({required:[]}),_o=L({required:[],preferred:[`screenRecordingStart`]}),vo=Object.freeze([mo,ho]);function yo(t){switch((t.action??``).toLowerCase()){case`start`:if(!bo(t.scope??`app`))throw new e(`INVALID_ARGS`,`record scope must be app, device, or system`);return Object.freeze({kind:`start`,use:mo});case`stop`:return t.hasLiveHandle===!0?Object.freeze({kind:`stop-live`,use:go}):Object.freeze({kind:`stop-recovery`,use:ho});default:throw new e(`INVALID_ARGS`,`record requires start or stop`)}}function bo(e){return e===`app`||e===`device`||e===`system`}function xo(e){if(ao(e),e.kind!==`device-runtime`||!(`uses`in e))throw So();let t=e.uses.map(kr),n=vo.map(kr),r=new Set(t),i=new Set(n);if(t.length!==n.length||r.size!==t.length||[...r].some(e=>!i.has(e)))throw So()}function So(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Co(e){let t=e.platformExecution;if(t===void 0)throw TypeError(`Command descriptor "${e.name}" must declare platformExecution (none, host, inventory, or device-runtime); there is no registry-entry default`);return ao(t),t}const G={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},K={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},wo=()=>!0,To=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,Eo=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),Do=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,Oo=e=>{let t=e.flags?.leaseProvider;return e.flags?.leaseId===void 0&&typeof t==`string`&&(e.flags?.platform===`android`||e.flags?.platform===`ios`)?{kind:`provider-app-catalog`,provider:t}:void 0},ko=new Set([`status`,`get`]),Ao=e=>Lo(e,ko,`status`),jo=new Set([`get`,`wait`]),Mo=e=>Lo(e,jo,`get`),No=e=>Ro(e,ko,`status`),Po=e=>Ro(e,jo,`get`),Fo=e=>{try{return O(rn(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},Io=e=>Ro(e,new Set([`read`]),``);function Lo(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function Ro(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const q={kind:`none`},zo={kind:`host`},J={recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0},Bo={targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0}},Y={...N,onTimeout:`preserve-daemon`},Vo={...N,envelopeMs:18e4},Ho={...N,onTimeout:`preserve-daemon`},Uo={...Ho,envelopeMs:33e4},Wo={...N,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},Go={fields:{count:{defaultValue:1,omitDefault:!0},intervalMs:{defaultValue:0,omitDefault:!0},holdMs:{defaultValue:0,omitDefault:!0},jitterPx:{defaultValue:0,omitDefault:!0},doubleTap:{defaultValue:!1,omitDefault:!0}}},Ko={fields:{delayMs:{defaultValue:0}}};function X(e,t){return fr(e)===void 0?t:Wo}function Z(e){let t=fr(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const qo={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:ga},timeoutPolicy:Vo,batchable:!0},Jo=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>ta({customActions:t,hasActiveApp:e}).use)},Yo=e=>{let t=Zo(e);if(t===void 0||!Xo(t))return Xi;let n=$i(t);return[!0,!1].map(e=>ea({hasActiveApp:e,intent:n}).use)};function Xo(e){return O(e)||e===`focus`||e===`type`}function Zo(e){if(e.positionals===void 0)return;let t=en(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const Qo=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:wo},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`lease_allocate`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseAllocate`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:Uo,batchable:!1,platformExecution:q},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:Ho,batchable:!1,platformExecution:q},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:Ho,batchable:!1,platformExecution:q},{name:`artifacts`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`session_list`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionList`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,...K},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`session_save_script`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionSaveScript`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`publication`},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`devices`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,...K},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`inventory`,use:io}},{name:`capabilities`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,...K},timeoutPolicy:N,batchable:!0,platformExecution:q},{name:`doctor`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,allowSessionlessDefaultDevice:wo,...K},timeoutPolicy:N,batchable:!0,platformExecution:zo},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:Oo},platformExecution:{kind:`device-runtime`,uses:[Pr]},timeoutPolicy:N,batchable:!0},{name:`boot`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:oa},timeoutPolicy:N,batchable:!0},{name:`shutdown`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,use:fa},timeoutPolicy:N,batchable:!0},{name:`appstate`,deviceClaimPolicy:`observe`,catalog:{group:`public`,key:`appState`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:da},timeoutPolicy:N,batchable:!0},{name:`perf`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:si}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:La},timeoutPolicy:N,batchable:!0},{name:`events`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`,allowInvalidRecording:!0,...K},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`network`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,use:Ja},timeoutPolicy:N,batchable:!0},{name:`audio`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ha}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Eo,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`}},batchable:!1,platformExecution:q},{name:`test`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Eo},timeoutPolicy:{...N,envelopeMs:`unbounded`},batchable:!0,platformExecution:q},{name:`runtime`,deviceClaimPolicy:`require-owner`,catalog:{group:`internal`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[...Na,wi]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:Io,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:pa}},{name:`keyboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:No,daemon:{route:`session`,refFrameEffect:Ao,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ha}},{name:`install`,...qo},{name:`reinstall`,...qo},{name:`install_source`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`internal`,key:`installSource`},recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:_a},timeoutPolicy:Vo,batchable:!1},{name:`release_materialized_paths`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`releaseMaterializedPaths`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,...K},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`push`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:va},timeoutPolicy:N,batchable:!0},{name:`trigger-app-event`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`triggerAppEvent`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[qr]}},{name:`open`,deviceClaimPolicy:`acquire-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowSessionlessDefaultDevice:wo,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:wa}},{name:`prepare`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:{budget:{source:`flag`,envelope:`margin`},envelopeMs:nr,onTimeout:`reset-daemon`},batchable:!1,mcpExposed:!1,platformExecution:{kind:`device-runtime`,use:Aa}},{name:`batch`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`close`,deviceClaimPolicy:`release-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowInvalidRecording:!0,saveScriptFlagOwner:!0,sessionlessLeaseAdmissionExemption:Do},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Da}},{name:`snapshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:{...Y,budget:{source:`flag`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Qi,selectUses:Jo}},{name:`diff`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Qi,selectUses:Jo}},{name:`wait`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,targetIdentityVerification:`post-resolution`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:{...Y,budget:{source:`positional-parser`,parser:tr}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Zi}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:Po,daemon:{route:`snapshot`,refFrameEffect:Mo},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ma}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`snapshot`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Jr]}},{name:`react-native`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`reactNative`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`reactNative`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[R]}},{name:`record`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`,allowInvalidRecording:!0,allowSessionlessDefaultDevice:To},platformExecution:{kind:`device-runtime`,uses:vo},timeoutPolicy:N,batchable:!0},{name:`trace`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:q},{name:`find`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:Fo,daemon:{route:`find`,refFrameEffect:`may-invalidate`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Xi,selectUses:Yo}},{name:`click`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:X(`click`,Y),postActionObservation:Z(`click`),responseDataTransform:Go,batchable:!0,platformExecution:{kind:`device-runtime`,uses:mi}},{name:`fill`,...Bo,frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:Ko,batchable:!0,platformExecution:{kind:`device-runtime`,uses:vi}},{name:`longpress`,...Bo,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{...Wo,envelopeMs:21e4},postActionObservation:Z(`longpress`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:gi}},{name:`hover`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`},timeoutPolicy:X(`hover`,Y),postActionObservation:Z(`hover`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:_i}},{name:`press`,...Bo,frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),responseDataTransform:Go,batchable:!0,platformExecution:{kind:`device-runtime`,uses:hi}},{name:`type`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:X(`type`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Rr]}},{name:`get`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`},timeoutPolicy:X(`get`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:Gi}},{name:`is`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`},timeoutPolicy:X(`is`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:Wi}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`back`,N),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[zr]}},{name:`gesture`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,targetIdentityVerification:`pre-dispatch`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Oi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Br]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Hr]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Vr]}},{name:`scroll`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`scroll`,N),postActionObservation:Z(`scroll`),platformExecution:{kind:`device-runtime`,uses:Ai}},{name:`swipe`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ki}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Lr]}},{name:`screenshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`generic`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ia}},{name:`viewport`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[Ir]}},{name:`app-switcher`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`appSwitcher`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Kr]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:_a},timeoutPolicy:N,batchable:!0},{name:`debug`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`daemon`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:zo},{name:`device`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`metro`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`session`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`cdp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`auth`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`connect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`connection`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`disconnect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`mcp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`proxy`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`takeover`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:{kind:`inventory`,use:io}},{name:`react-devtools`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`,key:`reactDevtools`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`web`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:zo}],$o=new Set([`public`,`local-cli`]),es=new Set(Qo.filter(e=>$o.has(cs(e))).map(e=>e.name)),Q=Qo.map(e=>{let t=Co(e);return e.name===`record`&&xo(t),{...e,mcpExposed:os(e),platformExecution:t}});function ts(e){return Q.filter(t=>cs(t)===e).map(e=>[ls(e),e.name])}function ns(){return Q.filter(e=>ss(e)).map(e=>e.name).sort()}function rs(e){let t=Q.find(t=>t.name===e)?.platformExecution;if(t?.kind===`device-runtime`)return(`uses`in t?t.uses:[t.use]).map(e=>e.required)}function is(){return Q.filter(e=>e.catalog.group===`public`&&e.platformExecution.kind===`device-runtime`).map(e=>e.name).sort()}const $=new Map(Q.map(e=>[e.name,e]));function as(e){return es.has(e)}function os(e){return e.mcpExposed??es.has(e.name)}function ss(e){return e.mcpExposed&&as(e.name)}function cs(e){return e.catalog.group}function ls(e){return e.catalog.key??e.name}const us=new Map(Q.map(e=>[e.name,e.timeoutPolicy])),ds=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),fs=new Map(Array.from($.values()).flatMap(e=>e.responseDataTransform?[[e.name,e.responseDataTransform]]:[]));function ps(e){if(e!==void 0)return $.get(e)?.postActionObservation}function ms(e){return ps(e)!==void 0}function hs(e){return ps(e)===`settle-and-verify`}function gs(e){return e===void 0?N:us.get(e)??N}function _s(e){return e===void 0?`require-owner`:ds.get(e)??`require-owner`}function vs(e){if(e!==void 0)return fs.get(e)}function ys(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function bs(e){if(e!==void 0)return $.get(e)?.frameworkTier}function xs(e){return $.get(e)?.targetIdentityVerification}function Ss(e){let t=$.get(e.command);if(t?.recordsSessionAction)return typeof t.recordingEffect==`function`?t.recordingEffect(e):t.recordingEffect}function Cs(){return[...new Set(Array.from(fs.values()).flatMap(e=>Object.keys(e.fields)))].sort()}function ws(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function Ts(e){return e.filter(e=>e.batchable).map(e=>e.name)}const Es=Ts(Q),Ds=new Set([`batch`,`replay`]),Os=[`command`,`positionals`,`input`,`flags`,`runtime`],ks=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`],As=`Session, daemon, connection, and host tooling commands are excluded from batch — they own lifecycle a batch cannot carry — and batch and replay never nest. Run an excluded command on its own; every other device command is available as a step.`,js=new Set(Es);function Ms(e){return js.has(e)}function Ns(e){return typeof e==`string`?e.trim().toLowerCase():``}function Ps(e){let t=Ns(e);return Ms(t)?t:void 0}function Fs(t,n,r=As){let i=Ps(t);if(i!==void 0)return i;throw new e(`INVALID_ARGS`,`Batch step ${n} command is not available through command batch: ${String(t)}`,{hint:r})}function Is(t,n){if(Ds.has(t))throw new e(`INVALID_ARGS`,`Batch step ${n} cannot run ${t}.`)}export{Yr as $,C as $n,nr as $t,Qa as A,qt as An,se as Ar,la as At,Oa as B,Rt as Bn,u as Br,Hr as Bt,gs as C,hn as Cn,he as Cr,Vr as Ct,ho as D,en as Dn,m as Dr,ai as Dt,_o as E,$t as En,fe as Er,ri as Et,Ra as F,It as Fn,te as Fr,ta as Ft,xa as G,Ft as Gn,hr as Gt,ya as H,kt as Hn,s as Hr,Ir as Ht,ja as I,Mt as In,ee as Ir,yi as It,ga as J,ft as Jn,F as Jt,Aa as K,nt as Kn,Sr as Kt,Ta as L,Ht as Ln,l as Lr,Jr as Lt,Ka as M,on as Mn,ne as Mr,aa as Mt,Ua as N,Ut as Nn,ie as Nr,Pi as Nt,to as O,Jt as On,ae as Or,ii as Ot,Ia as P,D as Pn,re as Pr,ea as Pt,Qr as Q,w as Qn,ir as Qt,Ea as R,zt as Rn,o as Rr,fa as Rt,vs as S,un as Sn,ge as Sr,li as St,yo as T,Qt as Tn,ue as Tr,ni as Tt,Sa as U,Pt as Un,a as Ur,yr as Ut,ka as V,Lt as Vn,c as Vr,Rr as Vt,ba as W,Nt as Wn,pr as Wt,va as X,_t as Xn,_r as Xt,_a as Y,ht as Yn,gr as Yt,Zr as Z,dt as Zn,P as Zt,is as _,mn as _n,S as _r,Br as _t,Is as a,Vn as an,Je as ar,zr as at,Ss as b,fn as bn,h as br,Gr as bt,Ps as c,zn as cn,Ye as cr,ui as ct,rs as d,jn as dn,Re as dr,ei as dt,ar as en,Ze as er,Xr as et,ms as f,En as fn,ye as fr,L as ft,ns as g,Tn as gn,y as gr,wi as gt,ts as h,wn as hn,x as hr,Lr as ht,Es as i,Nn as in,We as ir,Pr as it,Ba as j,rn as jn,p as jr,Ni as jt,Ya as k,O as kn,oe as kr,oi as kt,ws as l,Un as ln,Ie as lr,ci as lt,Cs as m,An as mn,xe as mr,$i as mt,Os as n,M as nn,Xe as nr,ua as nt,Ns as o,Rn as on,qe as or,z as ot,hs as p,On as pn,Ce as pr,pi as pt,Ca as q,mt as qn,mr as qt,ks as r,Hn as rn,Ge as rr,Kr as rt,Fs as s,Bn as sn,Ke as sr,fi as st,As as t,Gn as tn,$e as tr,qr as tt,Q as u,kn as un,ze as ur,$r as ut,_s as v,pn as vn,b as vr,di as vt,xs as w,Gt as wn,_e as wr,ti as wt,ys as x,dn as xn,le as xr,Ur as xt,bs as y,gn as yn,g as yr,Wr as yt,Ma as z,At as zn,d as zr,R as zt};
2
+ `],[`r`,`\r`],[`t`,` `]]);function y(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);let r=Ee(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Selector expression cannot be empty`);return{raw:n,selectors:r.map(e=>we(e))}}function b(e){try{return y(e)}catch{return null}}function x(e){let t=e.trim();if(!t)return!1;if(t===`||`)return!0;let n=t.indexOf(`=`);if(n!==-1){let e=t.slice(0,n).trim().toLowerCase();return v.has(e)}return v.has(t.toLowerCase())}function Ce(e){let t=e.trim(),n=t.indexOf(`=`);if(n===-1)return null;let r=t.slice(0,n).trim().toLowerCase();if(!r||v.has(r))return null;let i=t.slice(n+1).trim();if(!i)return null;let a=ke(i).trim();return a?{key:r,value:a}:null}function S(e,t={}){if(e.length===0)return null;let n=t.preferTrailingValue??!1,r=0,i=[];for(;r<e.length;){let t=e[r];if(t===void 0||!x(t))break;r+=1;let n=e.slice(0,r).join(` `).trim();n&&b(n)&&i.push(r)}if(i.length===0)return null;let a=i.at(-1);if(a===void 0)return null;let o=a;if(n)for(let t=i.length-1;t>=0;--t){let n=i[t];if(n!==void 0&&n<e.length){o=n;break}}let s=e.slice(0,o).join(` `).trim();return s?{selectorExpression:s,rest:e.slice(o)}:null}function we(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Selector segment cannot be empty`);let r=De(n);if(r.length===0)throw new e(`INVALID_ARGS`,`Invalid selector segment: ${t}`);return{raw:n,terms:r.map(Te)}}function Te(t){let n=t.trim();if(!n)throw new e(`INVALID_ARGS`,`Empty selector term`);let r=n.indexOf(`=`);if(r===-1){let r=n.toLowerCase();if(!_.has(r))throw new e(`INVALID_ARGS`,`Invalid selector term "${t}", expected key=value`);return{key:r,value:!0}}let i=n.slice(0,r).trim().toLowerCase(),a=n.slice(r+1).trim();if(!v.has(i))throw new e(`INVALID_ARGS`,`Unknown selector key: ${i}`);if(!a)throw new e(`INVALID_ARGS`,`Missing selector value for key: ${i}`);if(_.has(i)){let t=Me(a);if(t===null)throw new e(`INVALID_ARGS`,`Invalid boolean value for ${i}: ${a}`);return{key:i,value:t}}return{key:i,value:ke(a)}}function Ee(t){let n=[],r=``,i=null;for(let a=0;a<t.length;a+=1){let o=t[a];if((o===`"`||o===`'`)&&!Ne(t,a)){i=Oe(i,o),r+=o;continue}if(!i&&o===`|`&&t[a+1]===`|`){let i=r.trim();if(!i)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);n.push(i),r=``,a+=1;continue}r+=o}let a=r.trim();if(!a)throw new e(`INVALID_ARGS`,`Invalid selector fallback expression: ${t}`);return n.push(a),n}function De(t){let n=[],r=``,i=null;for(let e=0;e<t.length;e+=1){let a=t.charAt(e);if((a===`"`||a===`'`)&&!Ne(t,e)){i=Oe(i,a),r+=a;continue}if(!i&&/\s/.test(a)){r.trim()&&n.push(r.trim()),r=``;continue}r+=a}if(i)throw new e(`INVALID_ARGS`,`Unclosed quote in selector: ${t}`);return r.trim()&&n.push(r.trim()),n}function Oe(e,t){return e?e===t?null:e:t}function ke(e){let t=e.trim();return t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`)?Ae(t.slice(1,-1)):t}function Ae(e){let t=``,n=0;for(;n<e.length;){let r=e.charAt(n);if(r!==`\\`){t+=r,n+=1;continue}let i=e.charAt(n+1);if(!i){t+=r,n+=1;continue}let a=je(i);if(a!==null){t+=a,n+=2;continue}if(i===`u`){let r=e.slice(n+2,n+6);if(/^[0-9a-fA-F]{4}$/.test(r)){t+=String.fromCharCode(Number.parseInt(r,16)),n+=6;continue}}t+=r,n+=1}return t}function je(e){return Se.get(e)??null}function Me(e){let t=ke(e).toLowerCase();return t===`true`||t!==`false`&&null}function Ne(e,t){let n=0;for(let r=t-1;r>=0&&e[r]===`\\`;--r)n+=1;return n%2==1}function Pe(e){return a.includes(e)}const Fe=`is requires predicate: ${a.join(`|`)}`;function Ie(e){let t=e.toLowerCase();return Pe(t)?{ok:!0,predicate:t}:i(Fe,Le)}const Le=`Use "is <predicate> <selector>" or "is <selector> <predicate>". visible|hidden|editable|selected|focused double as selector keys: a bare predicate token after the selector is read as the predicate, so write key=true (e.g. visible=true) inside the selector to use it as a filter instead.`;function Re(e){if(Pe((e[0]??``).toLowerCase()))return e;for(let t=1;t<e.length;t+=1){let n=(e[t]??``).toLowerCase();if(Pe(n)&&b(e.slice(0,t).join(` `)))return[n,...e.slice(0,t),...e.slice(t+1)]}return e}function ze(e){let{predicate:t,node:n,nodes:r,expectedText:i,platform:a}=e,o=m(n),s=g(n,a),c=n.selected===!0,l=n.focused===!0,u=t===`text`?h(n):Ve(n,le(r),a),d=!1;switch(t){case`visible`:d=u;break;case`hidden`:d=!u;break;case`editable`:d=s;break;case`selected`:d=c;break;case`focused`:d=l;break;case`text`:d=o===(i??``);break;default:return Be(t)}let f=t===`text`?`expected="${i??``}" actual="${o}"`:`actual=${JSON.stringify({visible:u,editable:s,selected:c,focused:l})}`;return{pass:d,actualText:o,details:f}}function Be(e){throw Error(`Unhandled is predicate: ${String(e)}`)}function Ve(e,t,n){if(n===`android`&&e.visibleToUser===!1)return!1;if(o(e.rect))return t.isVisibleInEffectiveViewport(e);if(e.rect)return!1;if(n!==`android`&&e.hittable===!0)return!0;let r=He(e,t,n);return r?o(r.rect)?t.isVisibleInEffectiveViewport(r):n!==`android`&&r.hittable===!0:!1}function He(e,t,n){return t.findAncestor(e,e=>_e(e,n)?e:null)}function Ue(e){let t=Re(e),n=t[0]??``;return{predicate:n,split:S(t.slice(1),{preferTrailingValue:n===`text`})}}const We=`is requires a selector expression`,Ge=`is text requires expected text value`;function Ke(e){let{predicate:t,split:n}=Ue([...e]),r=Ie(t);if(!r.ok)return r;if(!n)return i(We);let a=n.rest.join(` `).trim();return r.predicate===`text`&&!a?i(Ge):r.predicate!==`text`&&n.rest.length>0?i(`is ${r.predicate} does not accept trailing values`):{ok:!0,predicate:r.predicate,selectorExpression:n.selectorExpression,expectedText:a}}function qe(e){return e===`text`||e===`attrs`?{ok:!0,format:e}:i(`get only supports text or attrs`)}function Je(e){let t=e[0];if(t?.startsWith(`@`)){let n=e.slice(1).join(` `).trim();return{ok:!0,ref:t,...n?{label:n}:{}}}let n=e.join(` `).trim();return n?{ok:!0,selector:n}:i(`get requires @ref or selector expression`)}function Ye(e){return e?{ok:!0,text:e}:i(`wait requires text`)}function Xe(e){return Array.from(new Set(e))}function Ze(e){return JSON.stringify(Qe(e))}function Qe(e){if(Array.isArray(e))return e.map(Qe);if(!e||typeof e!=`object`)return e;let t=e;return Object.fromEntries(Object.keys(t).sort().map(e=>[e,Qe(t[e])]))}function $e(e){let t=0,n=e.length;for(;t<n&&e[t]===`-`;)t+=1;for(;n>t&&e[n-1]===`-`;)--n;return e.slice(t,n)}const et=/^#\s*agent-device:target-v(\d+)(?:\s+(\S.*))?$/,tt=/^#\s*agent-device:targets-v(\d+)(?:\s+(\S.*))?$/,nt=4096;function rt(e){return e.normalize(`NFC`)}function it(e){if(e===void 0)return;let t=rt(e);return t.length>0?t:void 0}function at(e){return rt(e)}function ot(e){if(e===void 0)return;let t=rt(e).trim().replaceAll(/\s+/g,` `);return t.length>0?t:void 0}function C(e){return Buffer.byteLength(e,`utf8`)}function w(e,t){if(C(e)<=t)return e;let n=e.length;for(;n>0&&C(e.slice(0,n))>t;)--n;if(n>0){let t=e.charCodeAt(n-1);t>=55296&&t<=56319&&--n}return e.slice(0,n)}function st(e){let t={};return e.id!==void 0&&(t.id=e.id),t.role=e.role,e.label!==void 0&&(t.label=e.label),t.ancestry=e.ancestry.map(ct),t.sibling=e.sibling,t.viewportOrder=e.viewportOrder,e.scrollRegion&&(t.scrollRegion=lt(e.scrollRegion)),e.rect&&(t.rect=ut(e.rect)),t.verification=e.verification,t}function ct(e){let t={role:e.role};return e.label!==void 0&&(t.label=e.label),t}function lt(e){let t={role:e.role};return e.id!==void 0&&(t.id=e.id),e.label!==void 0&&(t.label=e.label),t}function ut(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}function dt(e){return JSON.stringify(st(e))}function ft(e){return`# agent-device:target-v1 ${dt(e)}`}function pt(e){return JSON.stringify({source:st(e.source),destination:st(e.destination)})}function mt(e){return`# agent-device:targets-v1 ${pt(e)}`}function ht(e){let t=e.trim(),n=tt.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:gt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function gt(t){if(C(t)>8320)throw new e(`INVALID_ARGS`,`targets-v1 annotation exceeds the 8320-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`targets-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`targets-v1 annotation must be a JSON object.`);let r=n;if(r.source===void 0||r.destination===void 0)throw new e(`INVALID_ARGS`,`targets-v1 annotation requires source and destination evidence.`);return{source:vt(JSON.stringify(r.source)),destination:vt(JSON.stringify(r.destination))}}function _t(e){let t=e.trim();if(!t.startsWith(`#`))return{kind:`none`};let n=et.exec(t);return n?Number(n[1])===1?{kind:`v1`,evidence:vt((n[2]??``).trim())}:{kind:`future-version`}:{kind:`none`}}function vt(t){if(C(t)>4096)throw new e(`INVALID_ARGS`,`target-v1 annotation exceeds the ${nt}-byte payload cap.`);let n;try{n=JSON.parse(t)}catch{throw new e(`INVALID_ARGS`,`target-v1 annotation is not valid JSON.`)}if(typeof n!=`object`||!n||Array.isArray(n))throw new e(`INVALID_ARGS`,`target-v1 annotation must be a JSON object.`);let r=n,i=yt(r.role,`role`),a=bt(r.id,`id`),o=xt(r.label,`label`),s=Ct(r.ancestry),c=Tt(r.sibling,`sibling`,0),l=Tt(r.viewportOrder,`viewportOrder`,0),u=Et(r.scrollRegion),d=Dt(r.rect),f=Ot(r.verification);return{...a===void 0?{}:{id:a},role:i,...o===void 0?{}:{label:o},ancestry:s,sibling:c,viewportOrder:l,...u?{scrollRegion:u}:{},...d?{rect:d}:{},verification:f}}function yt(t,n){if(t===void 0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" is required.`);if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);return St(at(t),n)}function bt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=it(t);return r===void 0?void 0:St(r,n)}function xt(t,n){if(t===void 0)return;if(typeof t!=`string`)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a string.`);let r=ot(t);return r===void 0?void 0:St(r,n)}function St(t,n){if(C(t)>256)throw new e(`INVALID_ARGS`,`target-v1 "${n}" exceeds the 256-byte field cap.`);return t}function Ct(t){if(t===void 0)return[];if(!Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry" must be an array.`);if(t.length>8)throw new e(`INVALID_ARGS`,`target-v1 "ancestry" exceeds the 8-entry cap.`);return t.map((e,t)=>wt(e,t))}function wt(t,n){if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "ancestry[${n}]" must be an object.`);let r=t,i=yt(r.role,`ancestry[${n}].role`),a=xt(r.label,`ancestry[${n}].label`);return{role:i,...a===void 0?{}:{label:a}}}function Tt(t,n,r){if(t===void 0)return r;if(typeof t!=`number`||!Number.isSafeInteger(t)||t<0)throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a non-negative integer.`);return t}function Et(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "scrollRegion" must be an object.`);let n=t,r=yt(n.role,`scrollRegion.role`),i=bt(n.id,`id`),a=xt(n.label,`scrollRegion.label`);return{role:r,...i===void 0?{}:{id:i},...a===void 0?{}:{label:a}}}function Dt(t){if(t===void 0)return;if(typeof t!=`object`||!t||Array.isArray(t))throw new e(`INVALID_ARGS`,`target-v1 "rect" must be an object.`);let n=t;return{x:T(n.x,`rect.x`),y:T(n.y,`rect.y`),width:T(n.width,`rect.width`),height:T(n.height,`rect.height`)}}function T(t,n){if(typeof t!=`number`||!Number.isFinite(t))throw new e(`INVALID_ARGS`,`target-v1 "${n}" must be a finite number.`);return t}function Ot(t){if(t===`verified`||t===`unverifiable`)return t;throw new e(`INVALID_ARGS`,`target-v1 "verification" must be "verified" or "unverifiable".`)}function kt(e){let t=at(p(e.type??``)),n=it(e.identifier),r=ot(e.label);return{...n===void 0?{}:{id:w(n,256)},role:w(t,256),...r===void 0?{}:{label:w(r,256)}}}function At(e,t){return e.id===t.id&&e.role===t.role&&e.label===t.label}function jt(e,t){let n=0;for(let r of e)kt(r).id===t&&(n+=1);return n}function Mt(e,t){if(e.id===void 0||jt(t,e.id)<=1)return e;let{role:n,label:r}=e;return{role:n,...r===void 0?{}:{label:r}}}function Nt(e,t){let n=0;for(let r of e)if(r.parentIndex===t.parentIndex){if(r.index===t.index)return n;n+=1}return 0}function Pt(e,t){return{documentOrder:e.index,sibling:Nt(t,e)}}function Ft(e,t){return e.documentOrder===t.documentOrder&&e.sibling===t.sibling}function It(e){return{...e.id===void 0?{}:{id:e.id},role:e.role,...e.label===void 0?{}:{label:e.label}}}function Lt(e,t){return t.id===void 0?e.role===t.role&&e.label===t.label:e.id===t.id}function Rt(e,t){if(e.length<t.length)return!1;for(let[n,r]of t.entries()){let t=e[n];if(!t||t.role!==r.role||r.label!==void 0&&t.label!==r.label)return!1}return!0}function zt(e,t){let n=[];return e.id!==t.id&&n.push(`id: recorded=${e.id??`(none)`} observed=${t.id??`(none)`}`),e.role!==t.role&&n.push(`role: recorded=${e.role} observed=${t.role}`),e.label!==t.label&&n.push(`label: recorded=${e.label??`(none)`} observed=${t.label??`(none)`}`),n}function Bt(e){return e?`${e.role}${e.label?`/${e.label}`:``}`:`(missing)`}function Vt(e,t){return!t||t.role!==e.role||e.label!==void 0&&t.label!==e.label}function Ht(e,t){for(let[n,r]of e.entries()){let e=t[n];if(Vt(r,e))return[`ancestry[${n}]: recorded=${Bt(r)} observed=${Bt(e)}`]}return[]}function Ut(e,t,n={}){let r=[],i=p(e.type??``),a=Wt(e,n.nodes),o=D(e.label),s=D(e.value),c=D(m(e)),l=n.action===`fill`;a&&r.push(`id=${E(a)}`),i&&o&&r.push(l?`role=${E(i)} label=${E(o)} editable=true`:`role=${E(i)} label=${E(o)}`),o&&r.push(l?`label=${E(o)} editable=true`:`label=${E(o)}`),s&&r.push(l?`value=${E(s)} editable=true`:`value=${E(s)}`),c&&c!==o&&c!==s&&r.push(l?`text=${E(c)} editable=true`:`text=${E(c)}`),i&&l&&!r.some(e=>e.includes(`editable=true`))&&r.push(`role=${E(i)} editable=true`);let u=Xe(r);return u.length===0&&i&&u.push(l?`role=${E(i)} editable=true`:`role=${E(i)}`),u.length===0&&h(e)&&u.push(`visible=true`),u}function Wt(e,t){let n=D(e.identifier);if(!n||!t)return n;let r=kt(e).id;return r===void 0?n:jt(t,r)>1?null:n}function E(e){return JSON.stringify(e)}function D(e){return e&&e.trim()||null}const Gt=[`any`,`text`,`label`,`value`,`role`,`id`],Kt=[`text`,`label`,`value`,`role`,`id`];function qt(e){let t=e?.toLowerCase();return t===`press`||t===`tap`?`click`:t}function O(e){return e===`exists`||e===`wait`||e===`get_text`||e===`get_attrs`||e===`list`}function Jt(e,t,n,r={}){let i=A(n);if(!i)return{matches:[],score:0};let a=0,o=[];for(let n of e){if(r.requireRect&&!n.rect)continue;let e=Yt(n,t,i);if(!(e<=0)){if(e>a){a=e,o.length=0,o.push(n);continue}e===a&&o.push(n)}}return{matches:o,score:a}}function Yt(e,t,n){switch(t){case`role`:return Xt(e.type,n);case`label`:return k(e.label,n);case`value`:return k(e.value,n);case`id`:return k(e.identifier,n);default:return Math.max(k(e.label,n),k(e.value,n),k(e.identifier,n))}}function k(e,t){let n=A(e??``);return n?n===t?2:+!!n.includes(t):0}function Xt(e,t){let n=Zt(e??``);return n?n===t?2:+!!n.includes(t):0}function A(e){return e.trim().toLowerCase().replaceAll(/\s+/g,` `)}function Zt(e){let t=e.trim();return t?(t=(t.split(`.`).pop()??t).replaceAll(/XCUIElementType/gi,``).toLowerCase(),t):``}const Qt=`find requires a value`,$t=`find actions: click (default; press/tap are aliases), list, focus, fill, type, exists, wait, get text, get attrs — there is no longpress/swipe find action. Run find "<text>" list to inspect every match with its @ref without acting, then dispatch the gesture on the chosen ref, e.g. longpress @eNN.`;function en(e,t){if(e.length===0)return{ok:!1,code:`INVALID_ARGS`,message:`find requires a locator or text`};let n=rn([...e]);return n.query?t?.findFirst&&t?.findLast?{ok:!1,code:`INVALID_ARGS`,message:`find accepts only one of --first or --last`}:{ok:!0,parsed:n}:{ok:!1,code:`INVALID_ARGS`,message:Qt}}const tn=[`exists`,`list`,`click`,`focus`];function nn(e){return tn.includes(e)}function rn(t){let n=`any`,r=0;Kt.includes(t[0])&&(n=t[0],r=1);let i=t[r]??``,a=t.slice(r+1);if(a.length===0)return{locator:n,query:i,action:`click`};let o=qt(a[0]);if(nn(o))return{locator:n,query:i,action:o};if(o===`get`)return{locator:n,query:i,action:an(a[1])};if(o===`wait`){let e=sn(a[1]);return{locator:n,query:i,action:`wait`,timeoutMs:e??void 0}}if(o===`fill`||o===`type`){let e=a.slice(1);return{locator:n,query:i,action:o,value:e.length===0?void 0:e.join(` `)}}throw new e(`INVALID_ARGS`,`Unsupported find action: ${a[0]}`,{hint:$t})}function an(t){let n=t?.toLowerCase();if(n===`text`)return`get_text`;if(n===`attrs`)return`get_attrs`;throw new e(`INVALID_ARGS`,`find get only supports text or attrs`)}function on(e,t){return e!==`any`||!t.includes(`=`)&&!t.includes(`||`)?null:b(t)?t:null}function sn(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}function cn(e,t,n){return t.terms.every(t=>ln(e,t,n))}function ln(e,t,n){switch(t.key){case`id`:return j(e.identifier,String(t.value));case`role`:return j(p(e.type??``),String(t.value));case`label`:return j(e.label,String(t.value));case`value`:return j(e.value,String(t.value));case`text`:return j(m(e),String(t.value));case`appname`:return j(e.appName,String(t.value));case`windowtitle`:return j(e.windowTitle,String(t.value));case`visible`:return h(e)===!!t.value;case`hidden`:return!h(e)==!!t.value;case`editable`:return g(e,n)===!!t.value;case`selected`:return e.selected===!0==!!t.value;case`focused`:return e.focused===!0==!!t.value;case`enabled`:return e.enabled!==!1==!!t.value;case`hittable`:return e.hittable===!0==!!t.value;default:return!1}}function j(e,t){return A(e??``)===A(t)}function un(e,t,n){let r=n.requireRect??!1,i=n.requireUnique??!0,a=[],o=null;for(let[s,c]of t.selectors.entries()){let t=_n(e,c,n.platform,r);if(a.push({selector:c.raw,matches:t.count}),!(t.count===0||!t.firstNode)){if(o??={selector:c,selectorIndex:s,matchedNodes:t.candidates},i&&t.count!==1){if(!n.disambiguateAmbiguous||!t.disambiguated||!t.tiebreak)continue;return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.disambiguated,selector:c,selectorIndex:s,matches:t.count,diagnostics:a,disambiguation:{matchCount:t.count,tiebreak:t.tiebreak,alternatives:t.candidates.filter(e=>e!==t.disambiguated)}}}}return{matchedNodes:t.candidates,firstMatch:o,resolution:{node:t.firstNode,selector:c,selectorIndex:s,matches:t.count,diagnostics:a}}}}return{resolution:null,matchedNodes:o?.matchedNodes??[],firstMatch:o}}function dn(e,t,n){return un(e,t,n).resolution}function fn(e,t,n){let r=n.requireRect??!1;for(let[i,a]of t.selectors.entries()){let t=e.filter(e=>r&&!e.rect?!1:cn(e,a,n.platform));if(t.length>0)return{selector:a,selectorIndex:i,matchedNodes:t}}return null}function pn(e,t,n){let r=n.requireRect??!1,i=[];for(let[a,o]of t.selectors.entries()){let t=xn(e,o,n.platform,r);if(i.push({selector:o.raw,matches:t}),t>0)return{selectorIndex:a,selector:o,matches:t,diagnostics:i}}return null}const mn=`Snapshot refs expire when the UI changes. Run snapshot -i and retry with a fresh @ref.`;function hn(e){return e.some(e=>e.matches>1)?`Add more terms to disambiguate (e.g. role=button text="Sign in"), use an @ref from snapshot -i, or use find <text> --first/--last.`:`Selector text/label values match exactly (quote multi-word values: text="Sign in"). Run snapshot -i to see current elements and refs, or use find <text> for contains matching.`}function gn(e,t,n){if(t.length===0)return`Selector did not match: ${e}`;let r=t.map(e=>`${e.selector} -> ${e.matches}`).join(`, `);return n.unique??!0?`Selector did not resolve uniquely (${r})`:`Selector did not match (${r})`}function _n(e,t,n,r){let i=0,a=null,o=[],s={best:null,bestVisible:!1,tie:!1},c=le(e).isVisibleOnScreen;for(let l of e)r&&!l.rect||cn(l,t,n)&&(i+=1,a??=l,o.push(l),vn(s,l,c));return{count:i,firstNode:a,disambiguated:s.tie?null:s.best,tiebreak:s.tie?null:yn(o,s.best,c),candidates:o}}function vn(e,t,n){if(!e.best){e.best=t;return}e.bestVisible||=n(e.best);let r=n(t);if(r!==e.bestVisible){r&&(e.best=t,e.bestVisible=!0,e.tie=!1);return}let i=Sn(t,e.best);i.result>0?(e.best=t,e.tie=!1):i.result===0&&(e.tie=!0)}function yn(e,t,n){if(!t)return null;let r=null;for(let i of e)i!==t&&(!r||bn(i,r,n).result>0)&&(r=i);return r?bn(t,r,n).criterion:null}function bn(e,t,n){let r=n(e);return r===n(t)?Sn(e,t):{result:r?1:-1,criterion:`visible`}}function xn(e,t,n,r){let i=0;for(let a of e)r&&!a.rect||cn(a,t,n)&&(i+=1);return i}function Sn(e,t){let n=e.depth??0,r=t.depth??0;if(n!==r)return{result:n>r?1:-1,criterion:`deepest`};let i=Cn(e),a=Cn(t);return i===a?{result:0,criterion:null}:{result:i<a?1:-1,criterion:`smallest-area`}}function Cn(e){return e.rect?e.rect.width*e.rect.height:1/0}const wn={act:{ambiguity:`reject-candidates`,requireRect:!0},actCoveredDiagnosis:{ambiguity:`first-match`,requireRect:!0},readText:{ambiguity:`disambiguate`,requireRect:!1},readUnique:{ambiguity:`fail-closed`,requireRect:!1},readAny:{ambiguity:`first-match`,requireRect:!1},wait:{ambiguity:`first-match`,requireRect:!1},findAct:{ambiguity:`reject-candidates`,requireRect:!0},readList:{ambiguity:`reject-candidates`,requireRect:!1},cropTarget:{ambiguity:`fail-closed`,requireRect:!0}};function Tn(e){return e.ambiguity===`first-match`?{requireRect:e.requireRect,requireUnique:!1}:{requireRect:e.requireRect,requireUnique:!0,disambiguateAmbiguous:e.ambiguity===`disambiguate`}}function En(e,t){let n=e===`is`?Ue([...t]).split:S([...t]);return n?b(n.selectorExpression)?{kind:`expression`,expression:n.selectorExpression,rest:n.rest}:{kind:`invalid`}:{kind:`not-applicable`}}function Dn(e){return{platform:e.platform,...Tn({ambiguity:e.allowDisambiguation?`disambiguate`:`fail-closed`,requireRect:e.requireRect})}}function On(e,t,n){let r=b(e);if(!r)return{kind:`unresolved`,reason:`parse-invalid`,matchedNodes:[]};let{resolution:i,matchedNodes:a}=un(t,r,Dn(n));return i?{kind:`resolved`,winner:i.node,matchedNodes:a,matchCount:a.length,...i.disambiguation?{disambiguation:{tiebreak:i.disambiguation.tiebreak,matchCount:i.disambiguation.matchCount,alternatives:i.disambiguation.alternatives}}:{}}:{kind:`unresolved`,reason:a.length>0?`ambiguous`:`no-match`,matchedNodes:a}}function kn(e,t,n={}){return Ut(e,t,n)}function An(e,t,n){let r=b(e);if(!r)return;let i=dn(t,r,Dn(n));if(i)return{node:i.node,basis:Mn(i.selector)}}function jn(e){if(!e)return;let t=b(e);if(!t)return;let n=t.selectors.flatMap(e=>e.terms.flatMap(e=>(e.key===`label`||e.key===`text`||e.key===`id`)&&typeof e.value==`string`?[e.value]:[]));if(n.length===0)return;let r=n[0];return r&&n.every(e=>e===r)?r:void 0}function Mn(e){let t=new Set(e.terms.map(e=>e.key));if(t.has(`id`))return`id`;let n=t.has(`role`),r=t.has(`label`)||t.has(`text`);return n&&r?`role-label`:r||t.has(`value`)?`label`:`other`}function Nn(e,t){let n=b(e);if(!n)return e.includes(`=`)||e.includes(`||`)?null:e;let r=new Set(t.textKeys),i=t.textAliases??{};return n.selectors.length>1?Pn(n.selectors,r,i):Fn(n.selectors[0],r,new Set(t.booleanKeys),i)}function Pn(e,t,n){let r=e.map(e=>{let r=e.terms.length===1?e.terms[0]:void 0;return r&&In(r.key,t,n)&&typeof r.value==`string`?r.value:void 0}),i=r[0];return i!==void 0&&r.every(e=>e===i)?i:null}function Fn(e,t,n,r){if(!e)return null;let i={},a=0;for(let o of e.terms){if(In(o.key,t,r)&&typeof o.value==`string`)a+=1;else if(!Ln(o,n,`boolean`))return null;i[r[o.key]??o.key]=o.value}return a<=1&&Object.keys(i).length>0?i:null}function In(e,t,n){return t.has(e)||n[e]!==void 0}function Ln(e,t,n){return t.has(e.key)&&typeof e.value===n}function Rn(e){let t=b(e);if(!t||t.selectors.length!==1)return null;let n=t.selectors[0];if(!n||n.terms.length!==1)return null;let r=n.terms[0];return!r||typeof r.value!=`string`||r.key!==`id`&&r.key!==`label`&&r.key!==`text`&&r.key!==`value`?null:{key:r.key,value:r.value,raw:n.raw}}function zn(e,t){if(!t)return!1;let n=b(e);return n?n.selectors.some(e=>e.terms.some(e=>(e.key===`text`||e.key===`label`||e.key===`value`)&&typeof e.value==`string`&&e.value.includes(t))):!1}function Bn(e,t){return b(e)?.selectors.some(e=>e.terms.some(e=>e.key===t))??!1}function Vn(e){return y(e).selectors.map(e=>e.raw)}function Hn(e){return b(e)!==null}function Un(e){y(e)}function M(e){if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}const Wn=new Set([`exists`,`present`,`appears`,`gone`,`disappears`]);function Gn(e){let t=e[0];if(t===void 0)return null;let n=M(t);if(n!==null)return{kind:`sleep`,durationMs:n};let r=M(e.at(-1));return t===`text`?Kn(e,r):t===`stable`?qn(e):t===`absent`?Jn(e,r):t.startsWith(`@`)?{kind:`ref`,rawRef:t,timeoutMs:r}:Xn(e,r)}function Kn(e,t){return{kind:`text`,text:(t===null?e.slice(1).join(` `):e.slice(1,-1).join(` `)).trim(),timeoutMs:t}}function qn(e){let t=e.slice(1),n=t.length>1?M(t[1]):null;return{kind:`stable`,quietMs:t.length>0?M(t[0]):null,timeoutMs:n}}function Jn(e,t){let n=t===null?e.slice(1):e.slice(1,-1),r=S(n);return n.length>0&&r?.rest.length===0&&Hn(r.selectorExpression)?{kind:`absent`,selectorExpression:r.selectorExpression,timeoutMs:t}:{kind:`invalid`,reason:`absent-selector-required`,message:Yn(n)}}function Yn(e){let t=e.join(` `);return t.length>0?`wait absent requires one valid selector; received "${t}". Use wait absent '<selector>' [timeoutMs].`:`wait absent requires <selector> [timeoutMs].`}function Xn(e,t){let n=t===null?e.slice():e.slice(0,-1),r=S(n);return r&&r.rest.length===0&&Hn(r.selectorExpression)?{kind:`selector`,selectorExpression:r.selectorExpression,timeoutMs:t}:Zn(n,r)||{kind:`text`,text:(t===null?e.join(` `):e.slice(0,-1).join(` `)).trim(),timeoutMs:t}}function Zn(e,t){for(let t of e){let n=Ce(t);if(n)return{kind:`invalid`,reason:`unknown-selector-key`,message:Qn(n,e)}}return t&&t.rest.length>0?{kind:`invalid`,reason:`selector-shaped-text`,message:$n(t,e)}:e.some(e=>x(e))?{kind:`invalid`,reason:`selector-shaped-text`,message:er(e)}:null}function Qn(e,t){let n=t.join(` `),r=xe(e.key)?`role=${e.key} label="${e.value}"`:`label="${e.value}"`;return`Unknown selector key "${e.key}" in "${n}". Supported: ${ye.join(`, `)}. Use wait '${r}' [timeoutMs] to wait for the selector, or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function $n(e,t){let n=t.join(` `);return`Selector ${e.selectorExpression} is followed by unexpected extra arguments: "${e.rest.join(` `)}". Selector values with spaces need quotes, e.g. label="Sign in". Use wait '<selector>' [timeoutMs], or wait text '${n}' [timeoutMs] to wait for the literal text "${n}".`}function er(e){let t=e.join(` `),n=e.filter(e=>!x(e)),r=e.filter(e=>x(e));if(n.length>0){let e=n[0],i=Wn.has(e.toLowerCase())?` "${e}" describes a condition, not a selector key. Use the selector form: `+(e.toLowerCase()===`gone`||e.toLowerCase()===`disappears`?`wait absent '${r.join(` `)}' [timeoutMs] to wait for zero matches.`:`wait '${r.join(` `)}' [timeoutMs] to wait for it to appear.`):` "${e}" is not a recognized selector key (${ye.join(`, `)}).`;return`"${t}" mixes plain word "${e}" with selector-shaped "${r.join(` `)}", so it is neither a valid selector nor safe as literal text.${i} Use wait '<selector>' [timeoutMs] for a selector, or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}return`"${t}" looks like a selector key but is not a valid selector expression. Use wait '<selector>' [timeoutMs], e.g. wait '${e[0]}="value"' [timeoutMs], or wait text '${t}' [timeoutMs] to wait for the literal text "${t}".`}function tr(e){let t=Gn(e);return t?t.kind===`sleep`?t.durationMs:t.kind===`invalid`?null:t.timeoutMs:null}const nr=24e4,rr=3e4,ir=3e5,N={budget:{source:`none`},envelopeMs:9e4,onTimeout:`reset-daemon`};function ar(e,t){if(e.envelopeMs===`unbounded`)return;let n={...e,envelopeMs:e.envelopeMs};return or(n,t.positionals??[])??sr(n,t.flags)??n.envelopeMs}function or(e,t){if(e.budget.source!==`positional-parser`)return;let n=e.budget.parser(t);return n===null?void 0:lr(e,n)}function sr(e,t){if(e.budget.source===`flag`)return e.budget.envelope===`widen`?cr(e,e.budget,t):e.budget.envelope===`margin`?typeof t?.timeoutMs==`number`?lr(e,t.timeoutMs):e.envelopeMs:typeof t?.timeoutMs==`number`?t.timeoutMs:e.envelopeMs}function cr(e,t,n){if(n?.settle!==!0)return e.envelopeMs;let r=typeof n.timeoutMs==`number`?n.timeoutMs:t.defaultBudgetMs;return typeof r==`number`?ur(e,r):e.envelopeMs}function lr(e,t){return Math.max(e.envelopeMs,t+rr)}function ur(e,t){return Math.max(e.envelopeMs,e.envelopeMs+t+rr)}const dr={click:`settle-and-verify`,press:`settle-and-verify`,fill:`settle-and-verify`,longpress:`settle`,hover:`settle`,scroll:`settle`,back:`settle`};function fr(e){if(e!==void 0)return dr[e]}function P(t){return new e(`COMMAND_FAILED`,t,{reason:`runtime-contract-invalid`,hint:`This is an agent-device runtime contract bug; report the selected device and command.`})}function pr(e){if(!n(e))throw TypeError(`Unknown local runtime family: ${String(e)}`);return Object.freeze({kind:`local-family`,family:e})}function mr(e,t){let n=e.trim(),r=t.trim();if(n.length===0||r.length===0)throw TypeError(`Provider runtime owner requires non-empty provider and instance identities`);return Object.freeze({kind:`provider-runtime`,provider:n,instance:r})}function hr(e){let t=e.trim();if(t.length===0)throw TypeError(`Managed local runtime owner requires a non-empty allocator instance identity`);return Object.freeze({kind:`managed-local`,instance:t})}function F(e){switch(e.kind){case`local-family`:return`local:${e.family}`;case`managed-local`:return`managed:${JSON.stringify([e.instance])}`;case`provider-runtime`:return`provider:${JSON.stringify([e.provider,e.instance])}`}}function gr(e,t){return F(e)===F(t)}function _r(e,t){return e.available?t():{}}function vr(e){if(!I(e.requesterId)||!I(e.identityIncarnationId)||!br(e.requestGeneration))throw TypeError(`Managed binding fence requires non-empty requester and identity incarnation ids and a non-negative integer request generation`);return Object.freeze({token:JSON.stringify([e.requesterId,e.identityIncarnationId]),generation:e.requestGeneration})}function yr(e){let t=xr(e.token);if(!t||t.length!==2)return null;let[n,r]=t;if(!I(n)||!I(r)||!br(e.generation))return null;let i=Object.freeze({requesterId:n,requestGeneration:e.generation,identityIncarnationId:r});return vr(i).token===e.token?i:null}function br(e){return Number.isInteger(e)&&e>=0}function I(e){return typeof e==`string`&&e.trim().length>0}function xr(e){try{let t=JSON.parse(e);return Array.isArray(t)?t:null}catch{return null}}function Sr(e,t){let n={},r={};for(let i of t.required){let t=Cr(e.facts.operations,i);if(n[i]=t,!t.available)throw Or(i,t);r[i]=Er(e.operations,i)}for(let i of t.preferred){let t=Cr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Er(e.operations,i))}for(let i of t.conditional??[]){let t=Cr(e.facts.operations,i);n[i]=t,t.available&&(r[i]=Er(e.operations,i))}return Object.freeze({device:e.device,owner:e.owner,facts:Object.freeze(n),operations:Object.freeze(r)})}function Cr(e,t){let n=e[t];if(!wr(n))throw P(`Runtime owner omitted the ${t} fact`);let r=Tr(n);if(r)return r;throw P(`Runtime owner returned an invalid ${t} fact`)}function wr(e){return typeof e==`object`&&!!e&&`available`in e}function Tr(e){if(e.available===!0)return Object.freeze({available:!0});if(e.available===!1&&Dr(e.reason)&&(e.hint===void 0||typeof e.hint==`string`))return Object.freeze({available:!1,reason:e.reason,...e.hint===void 0?{}:{hint:e.hint}})}function Er(e,t){let n=e[t];if(typeof n!=`function`)throw P(`Runtime owner advertised ${t} without an implementation`);return n}function Dr(e){return e===`unsupported-platform-leaf`||e===`unsupported-device-kind`||e===`unsupported-device-backend`||e===`unsupported-provider-mode`||e===`owner-capability-missing`}function Or(t,n){return new e(`UNSUPPORTED_OPERATION`,`Runtime operation ${t} is unavailable`,{reason:n.reason,hint:n.hint})}function kr(e){return JSON.stringify({required:[...e.required].sort(),preferred:[...e.preferred].sort(),conditional:[...e.conditional??[]].sort()})}function Ar(){return e=>{let t=jr(e.required,`required`),n=jr(e.preferred??[],`preferred`),r=jr(e.conditional??[],`conditional`),i=[[`required`,t],[`preferred`,n],[`conditional`,r]];for(let e=0;e<i.length;e+=1){let t=i[e];if(t)for(let n of i.slice(e+1)){let e=n[1].find(e=>t[1].includes(e));if(e!==void 0)throw TypeError(`Runtime operation cannot be both ${t[0]} and ${n[0]}: ${e}`)}}return Object.freeze(r.length===0?{required:t,preferred:n}:{required:t,preferred:n,conditional:r})}}function jr(e,t){let n=[...e];if(new Set(n).size!==n.length)throw TypeError(`Runtime use contains duplicate ${t} operations`);return Object.freeze(n)}const L=Ar(),Mr=L({required:[`bootTarget`]}),Nr=L({required:[`bootTargetHeadless`]}),Pr=L({required:[`ensureReady`,`listApps`]}),Fr=L({required:[`captureSnapshot`]}),Ir=L({required:[`setViewport`]}),Lr=L({required:[`focusPoint`]}),Rr=L({required:[`typeText`]}),zr=L({required:[`back`]}),Br=L({required:[`home`]}),Vr=L({required:[`setOrientation`]}),Hr=L({required:[`tvRemote`]}),Ur=L({required:[`keyboardStatus`]}),Wr=L({required:[`keyboardDismiss`]}),Gr=L({required:[`keyboardEnter`]}),Kr=L({required:[`appSwitcher`]}),qr=L({required:[`triggerAppEvent`]}),Jr=L({required:[`setSetting`]}),Yr=L({required:[`readAlert`]}),Xr=L({required:[`awaitAlert`]}),Zr=L({required:[`acceptAlert`]}),Qr=L({required:[`dismissAlert`]}),$r=L({required:[`readClipboard`]}),ei=L({required:[`writeClipboard`]}),ti=L({required:[`perfFrames`]}),ni=L({required:[`perfMemorySample`]}),ri=L({required:[`perfMemorySnapshot`]}),ii=L({required:[`perfNativeCaptureStart`]}),ai=L({required:[`perfNativeCaptureReattach`,`perfNativeCaptureCleanup`]}),oi=L({required:[`perfProfileReport`]}),si=Object.freeze([ti,ni,ri,ii,ai,oi]),R=L({required:[`tapPoint`]}),ci=L({required:[`captureSnapshot`,`tapPoint`],preferred:[`tapRef`],conditional:[`tapElementSelector`]}),li=L({required:[`longPressPoint`]}),ui=L({required:[`captureSnapshot`,`longPressPoint`]}),di=L({required:[`hoverPoint`]}),fi=L({required:[`captureSnapshot`,`hoverPoint`],preferred:[`hoverRef`]}),pi=L({required:[`fillPoint`]}),z=L({required:[`captureSnapshot`,`fillPoint`],preferred:[`fillRef`]}),mi=Object.freeze([R,ci]),hi=mi,gi=Object.freeze([li,ui]),_i=Object.freeze([di,fi]),vi=Object.freeze([pi,z]);function yi(e,t){switch(e){case`click`:case`press`:return t?{kind:`captured-tap`,use:ci}:{kind:`tap-point`,use:R};case`fill`:return t?{kind:`captured-fill`,use:z}:{kind:`fill-point`,use:pi};case`longpress`:return t?{kind:`captured-long-press`,use:ui}:{kind:`long-press-point`,use:li};case`hover`:return t?{kind:`captured-hover`,use:fi}:{kind:`hover-point`,use:di}}}const bi=L({required:[`performGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),xi=L({required:[`performDirectionalFlingPlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Si=L({required:[`performMultiTouchGesturePlan`,`captureSnapshot`],preferred:[`gestureViewport`]}),Ci=L({required:[`performTargetAuthoredDrag`,`captureSnapshot`],preferred:[`gestureViewport`]}),wi=L({required:[`gestureViewport`]}),Ti=L({required:[`scrollDirection`]}),Ei=L({required:[`scrollDirection`,`captureSnapshot`]}),Di=Object.freeze({plan:bi,"directional-fling":xi,"multi-touch":Si,"target-authored-drag":Ci}),Oi=Object.freeze([bi,xi,Si,Ci]),ki=Object.freeze([bi]),Ai=Object.freeze([Ti,Ei]);function ji(e){return e.intent===`pan`?(`pointerCount`in e?e.pointerCount:1)===2:e.intent===`pinch`||e.intent===`rotate`||e.intent===`transform`}function Mi(e){return e.intent===`drag`?`target-authored-drag`:ji(e)?`multi-touch`:e.intent===`fling`&&`direction`in e?`directional-fling`:`plan`}function Ni(e){let t=Mi(e);switch(t){case`plan`:return B(t);case`directional-fling`:return B(t);case`multi-touch`:return B(t);case`target-authored-drag`:return B(t)}}function B(e){let t=Di[e];return Object.freeze({tier:e,operation:t.required[0],use:t})}function Pi(e){return e.until===void 0?e.edge===void 0?Object.freeze({kind:`direction`,use:Ti}):Object.freeze({kind:`edge`,edge:e.edge,use:Ei}):Object.freeze({kind:`until`,until:e.until,use:Ei})}const Fi=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`]}),Ii=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Li=L({required:[`captureSnapshot`,`captureSnapshotWithCustomActions`,`captureSnapshotWithoutActiveApp`]}),Ri=L({required:[`captureSnapshot`]}),zi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`]}),Bi=L({required:[`captureSnapshot`],preferred:[`readTextAtPoint`]}),Vi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],preferred:[`readTextAtPoint`]}),Hi=L({required:[`captureSnapshot`],conditional:[`findText`]}),Ui=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`],conditional:[`findText`]}),Wi=Object.freeze([Ri,zi]),Gi=Object.freeze([Bi,Vi]),Ki=L({required:[`captureSnapshot`,`focusPoint`]}),qi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`]}),Ji=L({required:[`captureSnapshot`,`focusPoint`,`typeText`]}),Yi=L({required:[`captureSnapshot`,`captureSnapshotWithoutActiveApp`,`focusPoint`,`typeText`]}),Xi=Object.freeze([Bi,Vi,Ri,zi,Ki,qi,Ji,Yi]),Zi=Object.freeze([Hi,Ui]),Qi=Object.freeze([Fr,Fi,Ii,Li]),V=Object.freeze({"capture-only":Wi,"element-text":Gi,"wait-observation":Zi,"find-focus":Object.freeze([Ki,qi]),"find-type":Object.freeze([Ji,Yi])});function $i(e){return e===`focus`?`find-focus`:e===`type`?`find-type`:`capture-only`}function ea(e){switch(e.intent){case`capture-only`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`element-text`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`wait-observation`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`find-focus`:return H(e.hasActiveApp,e.intent,V[e.intent]);case`find-type`:return H(e.hasActiveApp,e.intent,V[e.intent])}}function H(e,t,n){return Object.freeze(e?{kind:`selector-active-app`,intent:t,operation:`captureSnapshot`,use:n[0]}:{kind:`selector-without-active-app`,intent:t,operation:`captureSnapshotWithoutActiveApp`,use:n[1]})}function ta(e){return e.customActions?e.hasActiveApp?Object.freeze({kind:`custom-actions-active-app`,operation:`captureSnapshotWithCustomActions`,use:Fi}):Object.freeze({kind:`custom-actions-without-active-app`,operation:`captureSnapshotWithCustomActions`,use:Li}):e.hasActiveApp?Object.freeze({kind:`active-app`,operation:`captureSnapshot`,use:Fr}):Object.freeze({kind:`without-active-app`,operation:`captureSnapshotWithoutActiveApp`,use:Ii})}const na=L({required:[`captureScreenshot`]}),ra=L({required:[`captureScreenshot`,`captureSnapshot`]}),ia=Object.freeze([na,ra]);function aa(e){return e.cropOn?Object.freeze({kind:`capture-with-crop-on`,use:ra}):e.overlayRefs?Object.freeze({kind:`capture-with-overlay-refs`,use:ra}):Object.freeze({kind:`capture`,use:na})}const oa=Object.freeze([Mr,Nr]),sa=Object.freeze({kind:`boot-target`,operation:`bootTarget`,use:Mr}),ca=Object.freeze({kind:`boot-target-headless`,operation:`bootTargetHeadless`,use:Nr});function la(e){return e.headless?ca:sa}const ua=L({required:[`ensureReady`,`appState`]}),da=Object.freeze([ua]),fa=L({required:[`shutdownTarget`]}),pa=Object.freeze([$r,ei]),ma=Object.freeze([Yr,Xr,Zr,Qr]),ha=Object.freeze([Ur,Wr,Gr]),ga=L({required:[`deployApp`]}),_a=L({required:[`ensureReady`,`materializeAppSource`,`deployMaterializedApp`]}),va=L({required:[`ensureReady`,`sendPushNotification`]}),ya=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`]}),ba=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`]}),xa=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`clearRuntimeHints`]}),Sa=L({required:[`resolveOpenTarget`,`prepareApplicationOpen`,`openApplication`,`applyRuntimeHints`,`clearRuntimeHints`]});function Ca(e){return e.applyRuntimeHints&&e.clearRemovedRuntimeHints?Object.freeze({kind:`open-apply-and-clear-runtime-hints`,use:Sa}):e.applyRuntimeHints?Object.freeze({kind:`open-apply-runtime-hints`,use:ba}):e.clearRemovedRuntimeHints?Object.freeze({kind:`open-clear-runtime-hints`,use:xa}):Object.freeze({kind:`open`,use:ya})}const wa=Object.freeze([ya,ba,xa,Sa]),Ta=L({required:[`closeApplication`,`finalizeApplicationClose`]}),Ea=L({required:[`closeApplication`,`finalizeApplicationClose`,`clearRuntimeHints`]}),Da=Object.freeze([Ta,Ea]),Oa=L({required:[`finalizeApplicationClose`]}),ka=L({required:[`finalizeApplicationClose`,`clearRuntimeHints`]}),Aa=L({required:[`prepareAppleRunner`]}),ja=L({required:[`clearRuntimeHints`]}),Ma=L({required:[`configureProviderPortReverse`]}),Na=Object.freeze([ja,Ma]),U=L({required:[`appLogInspect`]}),Pa=L({required:[`appLogInspect`,`appLogDoctor`]}),Fa=L({required:[`appLogInspect`,`appLogStart`]}),Ia=L({required:[],preferred:[`appLogInspect`]}),La=Object.freeze([U,Pa,Fa]);function Ra(t){let n=(t.action??`path`).toLowerCase();if(t.restart&&n!==`clear`)throw new e(`INVALID_ARGS`,`logs --restart is only supported with logs clear`);switch(n){case`path`:return Object.freeze({kind:`path`,requiresAppSession:!1,use:U});case`start`:return Object.freeze({kind:`start`,requiresAppSession:!0,use:Fa});case`stop`:return Object.freeze({kind:`stop`,requiresAppSession:!1,use:U});case`doctor`:return Object.freeze({kind:`doctor`,requiresAppSession:!1,use:Pa});case`mark`:return Object.freeze({kind:`mark`,marker:t.marker??``,requiresAppSession:!1,use:U});case`clear`:return t.restart?Object.freeze({kind:`clear-restart`,requiresAppSession:!0,use:Fa}):Object.freeze({kind:`clear`,requiresAppSession:!1,use:U});default:throw new e(`INVALID_ARGS`,`logs requires path, start, stop, doctor, mark, or clear`)}}const za=L({required:[`audioProbeStart`]}),Ba=L({required:[`audioProbeReattach`,`audioProbeCleanup`]}),Va=L({required:[`audioProbeQuery`]}),Ha=Object.freeze([za,Ba,Va]);function Ua(e){if(e.mode===`query`)return Object.freeze({kind:`query`,action:e.probeAction,use:Va});switch(e.probeAction){case`start`:return Object.freeze({kind:`capture-start`,use:za});case`status`:return Object.freeze({kind:`capture-status`});case`stop`:return Object.freeze({kind:`capture-stop`})}}const Wa=[`probe`],Ga=[`start`,`status`,`stop`];function Ka(t){let n=(t?.[0]??`probe`).toLowerCase();if(!Wa.includes(n))throw new e(`INVALID_ARGS`,`audio requires probe`);let r=(t?.[1]??`status`).toLowerCase();if(!Ga.includes(r))throw new e(`INVALID_ARGS`,`audio probe requires ${Ga.join(`, `)}`);if(r!==`start`&&t&&t.length>2)throw new e(`INVALID_ARGS`,`audio probe duration and bucket are only supported with audio probe start`);return Object.freeze({probeAction:r,durationMs:qa(t?.[2],{defaultValue:1e4,min:100,max:12e4,message:`audio probe duration must be an integer in range 100..120000 ms`}),bucketMs:qa(t?.[3],{defaultValue:1e3,min:100,max:1e4,message:`audio probe bucket must be an integer in range 100..10000 ms`})})}function qa(t,n){if(t===void 0)return n.defaultValue;let r=Number.parseInt(t,10);if(!Number.isInteger(r)||String(r)!==t||r<n.min||r>n.max)throw new e(`INVALID_ARGS`,n.message);return r}const Ja=L({required:[`networkDump`]}),Ya=L({required:[],preferred:[`networkDump`]}),Xa=[`dump`,`log`],Za=[`summary`,`headers`,`body`,`all`];function Qa(t){let n=(t.action??`dump`).toLowerCase(),r=(t.include??`summary`).toLowerCase();if(!$a(n))throw new e(`INVALID_ARGS`,`network requires dump or log`);if(!eo(r))throw new e(`INVALID_ARGS`,`network --include must be summary, headers, body, or all`);return Object.freeze({action:n,include:r,use:Ja})}function $a(e){return Xa.some(t=>t===e)}function eo(e){return Za.some(t=>t===e)}function to(e){let t=new Map;for(let r of e){if(!n(r.family))throw TypeError(`Unknown platform family registration: ${String(r.family)}`);if(t.has(r.family))throw TypeError(`Duplicate platform family registration: ${r.family}`);t.set(r.family,no(r))}let i=r.filter(e=>!t.has(e));if(i.length>0)throw TypeError(`Missing platform family registrations: ${i.join(`, `)}`);let a=Object.freeze([...r]),o=Object.freeze(a.map(e=>ro(t,e)));return Object.freeze({families:a,modules:o,get:e=>ro(t,e)})}function no(e){return Object.freeze({...e})}function ro(e,t){let n=e.get(t);if(!n)throw TypeError(`Missing platform family registration: ${t}`);return n}const io=Object.freeze({kind:`device-inventory`});function ao(e){if(typeof e!=`object`||!e)throw po();let t=e,n=Object.keys(t).sort();if(!(t.kind===`none`&&W(n,[`kind`]))&&!(t.kind===`host`&&W(n,[`kind`]))&&!(t.kind===`inventory`&&W(n,[`kind`,`use`])&&so(t.use))&&!(t.kind===`device-runtime`&&W(n,[`kind`,`use`])&&co(t.use))&&!(t.kind===`device-runtime`&&(W(n,[`kind`,`uses`])||W(n,[`kind`,`selectUses`,`uses`])&&typeof t.selectUses==`function`)&&oo(t.uses)))throw po()}function oo(e){if(!Array.isArray(e)||e.length===0||!e.every(co))return!1;let t=e.map(kr);return new Set(t).size===t.length}function so(e){if(typeof e!=`object`||!e)return!1;let t=e;return t.kind===`device-inventory`&&W(Object.keys(t).sort(),[`kind`])}function co(e){if(typeof e!=`object`||!e)return!1;let t=e,n=[uo(t.required),uo(t.preferred),uo(t.conditional??[])];if(!lo(n))return!1;let r=n.flat();return new Set(r).size===r.length&&W(Object.keys(t).sort(),t.conditional===void 0?[`preferred`,`required`]:[`conditional`,`preferred`,`required`])}function lo(e){return e.every(e=>e!==null&&fo(e))}function uo(e){return Array.isArray(e)&&e.every(e=>typeof e==`string`)?e:null}function fo(e){return new Set(e).size===e.length}function W(e,t){return e.length===t.length&&e.every((e,n)=>e===t[n])}function po(){return TypeError(`Command platform execution must declare exactly one of none, host, inventory, or device-runtime`)}const mo=L({required:[`screenRecordingStart`]}),ho=L({required:[`screenRecordingReattach`,`screenRecordingCleanup`]}),go=L({required:[]}),_o=L({required:[],preferred:[`screenRecordingStart`]}),vo=Object.freeze([mo,ho]);function yo(t){switch((t.action??``).toLowerCase()){case`start`:if(!bo(t.scope??`app`))throw new e(`INVALID_ARGS`,`record scope must be app, device, or system`);return Object.freeze({kind:`start`,use:mo});case`stop`:return t.hasLiveHandle===!0?Object.freeze({kind:`stop-live`,use:go}):Object.freeze({kind:`stop-recovery`,use:ho});default:throw new e(`INVALID_ARGS`,`record requires start or stop`)}}function bo(e){return e===`app`||e===`device`||e===`system`}function xo(e){if(ao(e),e.kind!==`device-runtime`||!(`uses`in e))throw So();let t=e.uses.map(kr),n=vo.map(kr),r=new Set(t),i=new Set(n);if(t.length!==n.length||r.size!==t.length||[...r].some(e=>!i.has(e)))throw So()}function So(){return TypeError(`Record runtime execution must declare exactly the uses selected by its two runtime-bearing plans`)}function Co(e){let t=e.platformExecution;if(t===void 0)throw TypeError(`Command descriptor "${e.name}" must declare platformExecution (none, host, inventory, or device-runtime); there is no registry-entry default`);return ao(t),t}const G={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0},K={leaseAdmissionExempt:!0,sessionExecutionLockExempt:!0,selectorValidationExempt:!0},wo=()=>!0,To=e=>(e.positionals?.[0]??``).toLowerCase()===`start`,Eo=e=>e.command===`test`&&(typeof e.flags?.shardAll==`number`||typeof e.flags?.shardSplit==`number`),Do=e=>(e.positionals?.length??0)===0?{kind:`unconditional`}:void 0,Oo=e=>{let t=e.flags?.leaseProvider;return e.flags?.leaseId===void 0&&typeof t==`string`&&(e.flags?.platform===`android`||e.flags?.platform===`ios`)?{kind:`provider-app-catalog`,provider:t}:void 0},ko=new Set([`status`,`get`]),Ao=e=>Lo(e,ko,`status`),jo=new Set([`get`,`wait`]),Mo=e=>Lo(e,jo,`get`),No=e=>Ro(e,ko,`status`),Po=e=>Ro(e,jo,`get`),Fo=e=>{try{return O(rn(e.positionals??[]).action)?`observes-app`:`mutates-app`}catch{return`mutates-app`}},Io=e=>Ro(e,new Set([`read`]),``);function Lo(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`preserve`:`may-invalidate`}function Ro(e,t,n){return t.has((e.positionals?.[0]??n).toLowerCase())?`observes-app`:`mutates-app`}const q={kind:`none`},zo={kind:`host`},J={recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0},Bo={targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},recordsSessionAction:!0,recordingEffect:`mutates-app`,deviceClaimPolicy:`require-owner`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0}},Y={...N,onTimeout:`preserve-daemon`},Vo={...N,envelopeMs:18e4},Ho={...N,onTimeout:`preserve-daemon`},Uo={...Ho,envelopeMs:33e4},Wo={...N,budget:{source:`flag`,envelope:`widen`,defaultBudgetMs:1e4},onTimeout:`preserve-daemon`},Go={fields:{count:{defaultValue:1,omitDefault:!0},intervalMs:{defaultValue:0,omitDefault:!0},holdMs:{defaultValue:0,omitDefault:!0},jitterPx:{defaultValue:0,omitDefault:!0},doubleTap:{defaultValue:!1,omitDefault:!0}}},Ko={fields:{delayMs:{defaultValue:0}}};function X(e,t){return fr(e)===void 0?t:Wo}function Z(e){let t=fr(e);if(t===void 0)throw Error(`Missing post-action observation descriptor support for ${e}`);return t}const qo={deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:ga},timeoutPolicy:Vo,batchable:!0},Jo=e=>{let t=e.flags?.snapshotCustomActions===!0||e.input?.customActions===!0;return[!0,!1].map(e=>ta({customActions:t,hasActiveApp:e}).use)},Yo=e=>{let t=Zo(e);if(t===void 0||!Xo(t))return Xi;let n=$i(t);return[!0,!1].map(e=>ea({hasActiveApp:e,intent:n}).use)};function Xo(e){return O(e)||e===`focus`||e===`type`}function Zo(e){if(e.positionals===void 0)return;let t=en(e.positionals,e.flags);return t.ok?t.parsed.action:void 0}const Qo=[{name:`human_control`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`humanControl`},recordsSessionAction:!1,daemon:{route:`humanControl`,refFrameEffect:`preserve`,selectorValidationExempt:!0,skipSessionlessProviderDevice:wo},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`lease_allocate`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseAllocate`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:Uo,batchable:!1,platformExecution:q},{name:`lease_heartbeat`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseHeartbeat`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:Ho,batchable:!1,platformExecution:q},{name:`lease_release`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`leaseRelease`},recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:Ho,batchable:!1,platformExecution:q},{name:`artifacts`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`lease`,refFrameEffect:`preserve`,...G},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`session_list`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionList`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,...K},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`session_save_script`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`sessionSaveScript`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`publication`},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`devices`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,...K},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`inventory`,use:io}},{name:`capabilities`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,...K},timeoutPolicy:N,batchable:!0,platformExecution:q},{name:`doctor`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,allowSessionlessDefaultDevice:wo,...K},timeoutPolicy:N,batchable:!0,platformExecution:zo},{name:`apps`,deviceClaimPolicy:`observe`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`inventory`,lockPolicySelectorOverride:!0,preferExplicitDeviceOverExistingSession:!0,sessionlessLeaseAdmissionExemption:Oo},platformExecution:{kind:`device-runtime`,uses:[Pr]},timeoutPolicy:N,batchable:!0},{name:`boot`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:oa},timeoutPolicy:N,batchable:!0},{name:`shutdown`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`may-invalidate`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,use:fa},timeoutPolicy:N,batchable:!0},{name:`appstate`,deviceClaimPolicy:`observe`,catalog:{group:`public`,key:`appState`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`state`},platformExecution:{kind:`device-runtime`,uses:da},timeoutPolicy:N,batchable:!0},{name:`perf`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:si}},{name:`logs`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,uses:La},timeoutPolicy:N,batchable:!0},{name:`events`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`,allowInvalidRecording:!0,...K},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`network`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},platformExecution:{kind:`device-runtime`,use:Ja},timeoutPolicy:N,batchable:!0},{name:`audio`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,sessionKind:`observability`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Ha}},{name:`replay`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Eo,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`}},batchable:!1,platformExecution:q},{name:`test`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`,sessionKind:`replay`,skipSessionlessProviderDevice:Eo},timeoutPolicy:{...N,envelopeMs:`unbounded`},batchable:!0,platformExecution:q},{name:`runtime`,deviceClaimPolicy:`require-owner`,catalog:{group:`internal`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[...Na,wi]}},{name:`clipboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:Io,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:pa}},{name:`keyboard`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:No,daemon:{route:`session`,refFrameEffect:Ao,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ha}},{name:`install`,...qo},{name:`reinstall`,...qo},{name:`install_source`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`internal`,key:`installSource`},recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:_a},timeoutPolicy:Vo,batchable:!1},{name:`release_materialized_paths`,deviceClaimPolicy:`none`,catalog:{group:`internal`,key:`releaseMaterializedPaths`},recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`,...K},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`push`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},platformExecution:{kind:`device-runtime`,use:va},timeoutPolicy:N,batchable:!0},{name:`trigger-app-event`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`triggerAppEvent`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[qr]}},{name:`open`,deviceClaimPolicy:`acquire-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowSessionlessDefaultDevice:wo,saveScriptFlagOwner:!0},timeoutPolicy:{...N,budget:{source:`flag`,envelope:`margin`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:wa}},{name:`prepare`,deviceClaimPolicy:`transient-exclusive`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`preserve`},timeoutPolicy:{budget:{source:`flag`,envelope:`margin`},envelopeMs:nr,onTimeout:`reset-daemon`},batchable:!1,mcpExposed:!1,platformExecution:{kind:`device-runtime`,use:Aa}},{name:`batch`,deviceClaimPolicy:`none`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!1,daemon:{route:`session`,refFrameEffect:`delegated`},timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`close`,deviceClaimPolicy:`release-session`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`session`,refFrameEffect:`may-invalidate`,allowInvalidRecording:!0,saveScriptFlagOwner:!0,sessionlessLeaseAdmissionExemption:Do},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Da}},{name:`snapshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:{...Y,budget:{source:`flag`}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Qi,selectUses:Jo}},{name:`diff`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Qi,selectUses:Jo}},{name:`wait`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,targetIdentityVerification:`post-resolution`,daemon:{route:`snapshot`,refFrameEffect:`preserve`},timeoutPolicy:{...Y,budget:{source:`positional-parser`,parser:tr}},batchable:!0,platformExecution:{kind:`device-runtime`,uses:Zi}},{name:`alert`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:Po,daemon:{route:`snapshot`,refFrameEffect:Mo},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ma}},{name:`settings`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`snapshot`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Jr]}},{name:`react-native`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`reactNative`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`reactNative`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[R]}},{name:`record`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`,allowInvalidRecording:!0,allowSessionlessDefaultDevice:To},platformExecution:{kind:`device-runtime`,uses:vo},timeoutPolicy:N,batchable:!0},{name:`trace`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`recordTrace`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:q},{name:`find`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:Fo,daemon:{route:`find`,refFrameEffect:`may-invalidate`},timeoutPolicy:Y,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Xi,selectUses:Yo}},{name:`click`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:X(`click`,Y),postActionObservation:Z(`click`),responseDataTransform:Go,batchable:!0,platformExecution:{kind:`device-runtime`,uses:mi}},{name:`fill`,...Bo,frameworkTier:`core`,timeoutPolicy:X(`fill`,Y),postActionObservation:Z(`fill`),responseDataTransform:Ko,batchable:!0,platformExecution:{kind:`device-runtime`,uses:vi}},{name:`longpress`,...Bo,catalog:{group:`public`,key:`longPress`},frameworkTier:`extended`,timeoutPolicy:{...Wo,envelopeMs:21e4},postActionObservation:Z(`longpress`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:gi}},{name:`hover`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`},timeoutPolicy:X(`hover`,Y),postActionObservation:Z(`hover`),batchable:!0,platformExecution:{kind:`device-runtime`,uses:_i}},{name:`press`,...Bo,frameworkTier:`core`,timeoutPolicy:X(`press`,Y),postActionObservation:Z(`press`),responseDataTransform:Go,batchable:!0,platformExecution:{kind:`device-runtime`,uses:hi}},{name:`type`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:X(`type`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Rr]}},{name:`get`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`},timeoutPolicy:X(`get`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:Gi}},{name:`is`,deviceClaimPolicy:`require-owner`,targetIdentityVerification:`pre-dispatch`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`interaction`,refFrameEffect:`preserve`},timeoutPolicy:X(`is`,Y),batchable:!0,platformExecution:{kind:`device-runtime`,uses:Wi}},{name:`back`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`back`,N),postActionObservation:Z(`back`),platformExecution:{kind:`device-runtime`,uses:[zr]}},{name:`gesture`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,targetIdentityVerification:`pre-dispatch`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:Oi}},{name:`home`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Br]}},{name:`tv-remote`,catalog:{group:`public`,key:`tvRemote`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Hr]}},{name:`orientation`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Vr]}},{name:`scroll`,catalog:{group:`public`},frameworkTier:`core`,...J,timeoutPolicy:X(`scroll`,N),postActionObservation:Z(`scroll`),platformExecution:{kind:`device-runtime`,uses:Ai}},{name:`swipe`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`interaction`,refFrameEffect:`may-invalidate`,androidBlockingDialogGuard:!0},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ki}},{name:`focus`,catalog:{group:`public`},frameworkTier:`extended`,...J,platformExecution:{kind:`device-runtime`,uses:[Lr]}},{name:`screenshot`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`core`,recordsSessionAction:!0,recordingEffect:`observes-app`,daemon:{route:`generic`,refFrameEffect:`preserve`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:ia}},{name:`viewport`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!1,platformExecution:{kind:`device-runtime`,uses:[Ir]}},{name:`app-switcher`,deviceClaimPolicy:`require-owner`,catalog:{group:`public`,key:`appSwitcher`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,daemon:{route:`generic`,refFrameEffect:`may-invalidate`},timeoutPolicy:N,batchable:!0,platformExecution:{kind:`device-runtime`,uses:[Kr]}},{name:`install-from-source`,deviceClaimPolicy:`none`,catalog:{group:`public`,key:`installFromSource`},frameworkTier:`extended`,recordsSessionAction:!0,recordingEffect:`mutates-app`,platformExecution:{kind:`device-runtime`,use:_a},timeoutPolicy:N,batchable:!0},{name:`debug`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`daemon`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:zo},{name:`device`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`metro`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`session`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,platformExecution:q},{name:`cdp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`auth`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`connect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`connection`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`disconnect`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`mcp`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`proxy`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`takeover`,deviceClaimPolicy:`observe`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:{kind:`inventory`,use:io}},{name:`react-devtools`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`,key:`reactDevtools`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:q},{name:`web`,deviceClaimPolicy:`none`,catalog:{group:`local-cli`},recordsSessionAction:!1,timeoutPolicy:N,batchable:!1,mcpExposed:!1,platformExecution:zo}],$o=new Set([`public`,`local-cli`]),es=new Set(Qo.filter(e=>$o.has(cs(e))).map(e=>e.name)),Q=Qo.map(e=>{let t=Co(e);return e.name===`record`&&xo(t),{...e,mcpExposed:os(e),platformExecution:t}});function ts(e){return Q.filter(t=>cs(t)===e).map(e=>[ls(e),e.name])}function ns(){return Q.filter(e=>ss(e)).map(e=>e.name).sort()}function rs(e){let t=Q.find(t=>t.name===e)?.platformExecution;if(t?.kind===`device-runtime`)return(`uses`in t?t.uses:[t.use]).map(e=>e.required)}function is(){return Q.filter(e=>e.catalog.group===`public`&&e.platformExecution.kind===`device-runtime`).map(e=>e.name).sort()}const $=new Map(Q.map(e=>[e.name,e]));function as(e){return es.has(e)}function os(e){return e.mcpExposed??es.has(e.name)}function ss(e){return e.mcpExposed&&as(e.name)}function cs(e){return e.catalog.group}function ls(e){return e.catalog.key??e.name}const us=new Map(Q.map(e=>[e.name,e.timeoutPolicy])),ds=new Map(Q.map(e=>[e.name,e.deviceClaimPolicy])),fs=new Map(Array.from($.values()).flatMap(e=>e.responseDataTransform?[[e.name,e.responseDataTransform]]:[]));function ps(e){if(e!==void 0)return $.get(e)?.postActionObservation}function ms(e){return ps(e)!==void 0}function hs(e){return ps(e)===`settle-and-verify`}function gs(e){return e===void 0?N:us.get(e)??N}function _s(e){return e===void 0?`require-owner`:ds.get(e)??`require-owner`}function vs(e){if(e!==void 0)return fs.get(e)}function ys(e){return e===void 0?!1:$.get(e)?.recordsSessionAction??!1}function bs(e){if(e!==void 0)return $.get(e)?.frameworkTier}function xs(e){return $.get(e)?.targetIdentityVerification}function Ss(e){let t=$.get(e.command);if(t?.recordsSessionAction)return typeof t.recordingEffect==`function`?t.recordingEffect(e):t.recordingEffect}function Cs(){return[...new Set(Array.from(fs.values()).flatMap(e=>Object.keys(e.fields)))].sort()}const ws={apps:{appsFilter:`user-installed`}};function Ts(e,t){if(!e||!as(e))return!1;let n=ws[e];if(!n)return!1;let r=!1;for(let e of Object.keys(n))t[e]===void 0&&(t[e]=n[e],r=!0);return r}function Es(e){let t=[];for(let n of e)n.daemon&&t.push({command:n.name,...n.daemon,replayScopedAction:n.recordsSessionAction});return t}function Ds(e){return e.filter(e=>e.batchable).map(e=>e.name)}const Os=Ds(Q),ks=new Set([`batch`,`replay`]),As=[`command`,`positionals`,`input`,`flags`,`runtime`],js=[`platform`,`target`,`device`,`udid`,`serial`,`verbose`,`out`],Ms=`Session, daemon, connection, and host tooling commands are excluded from batch — they own lifecycle a batch cannot carry — and batch and replay never nest. Run an excluded command on its own; every other device command is available as a step.`,Ns=new Set(Os);function Ps(e){return Ns.has(e)}function Fs(e){return typeof e==`string`?e.trim().toLowerCase():``}function Is(e){let t=Fs(e);return Ps(t)?t:void 0}function Ls(t,n,r=Ms){let i=Is(t);if(i!==void 0)return i;throw new e(`INVALID_ARGS`,`Batch step ${n} command is not available through command batch: ${String(t)}`,{hint:r})}function Rs(t,n){if(ks.has(t))throw new e(`INVALID_ARGS`,`Batch step ${n} cannot run ${t}.`)}export{Qr as $,w as $n,ir as $t,Ya as A,O as An,oe as Ar,oi as At,Ma as B,At as Bn,d as Br,R as Bt,vs as C,un as Cn,ge as Cr,li as Ct,_o as D,$t as Dn,fe as Dr,ri as Dt,yo as E,Qt as En,ue as Er,ni as Et,Ia as F,D as Fn,re as Fr,ea as Ft,ba as G,Nt as Gn,pr as Gt,ka as H,Lt as Hn,c as Hr,Rr as Ht,Ra as I,It as In,te as Ir,ta as It,Ca as J,mt as Jn,mr as Jt,xa as K,Ft as Kn,hr as Kt,ja as L,Mt as Ln,ee as Lr,yi as Lt,Ba as M,rn as Mn,p as Mr,Ni as Mt,Ka as N,on as Nn,ne as Nr,aa as Nt,ho as O,en as On,m as Or,ai as Ot,Ua as P,Ut as Pn,ie as Pr,Pi as Pt,Zr as Q,dt as Qn,P as Qt,Ta as R,Ht as Rn,l as Rr,Jr as Rt,ys as S,dn as Sn,le as Sr,Ur as St,xs as T,Gt as Tn,_e as Tr,ti as Tt,ya as U,kt as Un,s as Ur,Ir as Ut,Oa as V,Rt as Vn,u as Vr,Hr as Vt,Sa as W,Pt as Wn,a as Wr,yr as Wt,_a as X,ht as Xn,gr as Xt,ga as Y,ft as Yn,F as Yt,va as Z,_t as Zn,_r as Zt,ns as _,Tn as _n,y as _r,wi as _t,Rs as a,Nn as an,We as ar,Pr as at,bs as b,gn as bn,g as br,Wr as bt,Is as c,Bn as cn,Ke as cr,fi as ct,Q as d,kn as dn,ze as dr,$r as dt,nr as en,C as er,Yr as et,rs as f,jn as fn,Re as fr,ei as ft,ts as g,wn as gn,x as gr,Lr as gt,Cs as h,An as hn,xe as hr,$i as ht,Os as i,Hn as in,Ge as ir,Kr as it,Qa as j,qt as jn,se as jr,la as jt,to as k,Jt as kn,ae as kr,ii as kt,Es as l,zn as ln,Ye as lr,ui as lt,hs as m,On as mn,Ce as mr,pi as mt,As as n,Gn as nn,$e as nr,qr as nt,Fs as o,Vn as on,Je as or,zr as ot,ms as p,En as pn,ye as pr,L as pt,Aa as q,nt as qn,Sr as qt,js as r,M as rn,Xe as rr,ua as rt,Ls as s,Rn as sn,qe as sr,z as st,Ms as t,ar as tn,Ze as tr,Xr as tt,Ts as u,Un as un,Ie as ur,ci as ut,is as v,mn as vn,S as vr,Br as vt,gs as w,hn as wn,he as wr,Vr as wt,Ss as x,fn as xn,h as xr,Gr as xt,_s as y,pn as yn,b as yr,di as yt,Ea as z,zt as zn,o as zr,fa as zt};
@@ -125,31 +125,6 @@ declare function normalizeAgentDeviceError(err: unknown, context?: NormalizeErro
125
125
  declare function normalizeError(err: unknown, context?: NormalizeErrorContext): NormalizedError;
126
126
  declare function defaultHintForCode(code: string): string | undefined;
127
127
  //#endregion
128
- //#region packages/kernel/src/device.d.ts
129
- declare const APPLE_OS_VALUES: readonly ['ios', 'ipados', 'tvos', 'watchos', 'visionos', 'macos'];
130
- type AppleOS = (typeof APPLE_OS_VALUES)[number];
131
- declare const PLATFORMS: readonly ['apple', 'android', 'harmonyos', 'vega', 'linux', 'web'];
132
- type Platform = (typeof PLATFORMS)[number];
133
- declare const PUBLIC_PLATFORMS: readonly ['ios', 'macos', 'android', 'harmonyos', 'vega', 'linux', 'web'];
134
- type PublicPlatform = (typeof PUBLIC_PLATFORMS)[number];
135
- declare const PLATFORM_SELECTORS: readonly ["apple", "android", "harmonyos", "vega", "linux", "web", "ios", "macos"];
136
- type PlatformSelector = (typeof PLATFORM_SELECTORS)[number];
137
- declare const DEVICE_KINDS: readonly ['simulator', 'emulator', 'device'];
138
- type DeviceKind = (typeof DEVICE_KINDS)[number];
139
- declare const DEVICE_TARGETS: readonly ['mobile', 'tv', 'desktop'];
140
- type DeviceTarget = (typeof DEVICE_TARGETS)[number];
141
- type DeviceInfo = {
142
- platform: Platform;
143
- id: string;
144
- name: string;
145
- kind: DeviceKind;
146
- target?: DeviceTarget;
147
- appleOs?: AppleOS;
148
- booted?: boolean;
149
- simulatorSetPath?: string;
150
- iosPhysicalDeviceBackend?: 'coredevice' | 'xctest';
151
- };
152
- //#endregion
153
128
  //#region packages/kernel/src/snapshot.d.ts
154
129
  /**
155
130
  * Structured quality verdict computed once by a platform snapshot capture/presentation plan.
@@ -416,6 +391,31 @@ type ScreenshotOverlayRef = {
416
391
  };
417
392
  declare function centerOfRect(rect: Rect): Point;
418
393
  //#endregion
394
+ //#region packages/kernel/src/device.d.ts
395
+ declare const APPLE_OS_VALUES: readonly ['ios', 'ipados', 'tvos', 'watchos', 'visionos', 'macos'];
396
+ type AppleOS = (typeof APPLE_OS_VALUES)[number];
397
+ declare const PLATFORMS: readonly ['apple', 'android', 'harmonyos', 'vega', 'linux', 'web'];
398
+ type Platform = (typeof PLATFORMS)[number];
399
+ declare const PUBLIC_PLATFORMS: readonly ['ios', 'macos', 'android', 'harmonyos', 'vega', 'linux', 'web'];
400
+ type PublicPlatform = (typeof PUBLIC_PLATFORMS)[number];
401
+ declare const PLATFORM_SELECTORS: readonly ["apple", "android", "harmonyos", "vega", "linux", "web", "ios", "macos"];
402
+ type PlatformSelector = (typeof PLATFORM_SELECTORS)[number];
403
+ declare const DEVICE_KINDS: readonly ['simulator', 'emulator', 'device'];
404
+ type DeviceKind = (typeof DEVICE_KINDS)[number];
405
+ declare const DEVICE_TARGETS: readonly ['mobile', 'tv', 'desktop'];
406
+ type DeviceTarget = (typeof DEVICE_TARGETS)[number];
407
+ type DeviceInfo = {
408
+ platform: Platform;
409
+ id: string;
410
+ name: string;
411
+ kind: DeviceKind;
412
+ target?: DeviceTarget;
413
+ appleOs?: AppleOS;
414
+ booted?: boolean;
415
+ simulatorSetPath?: string;
416
+ iosPhysicalDeviceBackend?: 'coredevice' | 'xctest';
417
+ };
418
+ //#endregion
419
419
  //#region packages/kernel/src/contracts.d.ts
420
420
  declare const SESSION_RUNTIME_PLATFORMS: readonly ['ios', 'android', 'harmonyos'];
421
421
  type SessionRuntimePlatform = (typeof SESSION_RUNTIME_PLATFORMS)[number];
@@ -533,4 +533,4 @@ type JsonRpcRequestEnvelope<TParams = unknown> = {
533
533
  params?: TParams;
534
534
  };
535
535
  //#endregion
536
- export { SnapshotVisibility as A, DaemonError as B, SnapshotCommandOptionFields as C, SnapshotQualityVerdict as D, SnapshotProvenance as E, DeviceTarget as F, normalizeError as G, defaultHintForCode as H, Platform as I, PlatformSelector as L, AppleOS as M, DeviceInfo as N, SnapshotState as O, DeviceKind as P, PublicPlatform as R, ScreenshotOverlayRef as S, SnapshotOptions as T, isAgentDeviceError as U, NormalizedError as V, normalizeAgentDeviceError as W, SessionIsolationMode as _, DaemonRequest as a, RawSnapshotNode as b, DaemonServerMode as c, JsonRpcRequestEnvelope as d, LeaseBackend as f, ResponseLevel as g, ResponseCost as h, DaemonLockPolicy as i, centerOfRect as j, SnapshotUnchanged as k, DaemonTransportPreference as l, NetworkIncludeMode as m, DaemonArtifactType as n, DaemonResponse as o, LocalInstallSource as p, DaemonInstallSource as r, DaemonResponseData as s, DaemonArtifact as t, JsonRpcId as u, SessionRuntimeHints as v, SnapshotNode as w, Rect as x, Point as y, AppError as z };
536
+ export { SnapshotCommandOptionFields as A, DaemonError as B, Platform as C, RawSnapshotNode as D, Point as E, SnapshotState as F, normalizeError as G, defaultHintForCode as H, SnapshotUnchanged as I, SnapshotVisibility as L, SnapshotOptions as M, SnapshotProvenance as N, Rect as O, SnapshotQualityVerdict as P, centerOfRect as R, DeviceTarget as S, PublicPlatform as T, isAgentDeviceError as U, NormalizedError as V, normalizeAgentDeviceError as W, SessionIsolationMode as _, DaemonRequest as a, DeviceInfo as b, DaemonServerMode as c, JsonRpcRequestEnvelope as d, LeaseBackend as f, ResponseLevel as g, ResponseCost as h, DaemonLockPolicy as i, SnapshotNode as j, ScreenshotOverlayRef as k, DaemonTransportPreference as l, NetworkIncludeMode as m, DaemonArtifactType as n, DaemonResponse as o, LocalInstallSource as p, DaemonInstallSource as r, DaemonResponseData as s, DaemonArtifact as t, JsonRpcId as u, SessionRuntimeHints as v, PlatformSelector as w, DeviceKind as x, AppleOS as y, AppError as z };
@@ -1,4 +1,4 @@
1
- import { w as SnapshotNode } from "./sdk-contracts.js";
1
+ import { j as SnapshotNode } from "./sdk-contracts.js";
2
2
  //#region packages/selectors/src/internal/find.d.ts
3
3
  declare const FIND_LOCATORS: readonly ['any', 'text', 'label', 'value', 'role', 'id'];
4
4
  type FindLocator = (typeof FIND_LOCATORS)[number];
@@ -1 +1 @@
1
- import{On as e}from"./sdk-batch.js";function t(t,n,r,i){return e(t,n,r,typeof i==`boolean`?{requireRect:i}:i)}export{t};
1
+ import{kn as e}from"./sdk-batch.js";function t(t,n,r,i){return e(t,n,r,typeof i==`boolean`?{requireRect:i}:i)}export{t};
@@ -1,4 +1,4 @@
1
- import { F as DeviceTarget, L as PlatformSelector, _ as SessionIsolationMode, c as DaemonServerMode, f as LeaseBackend, l as DaemonTransportPreference, v as SessionRuntimeHints } from "./sdk-contracts.js";
1
+ import { S as DeviceTarget, _ as SessionIsolationMode, c as DaemonServerMode, f as LeaseBackend, l as DaemonTransportPreference, v as SessionRuntimeHints, w as PlatformSelector } from "./sdk-contracts.js";
2
2
  //#region packages/contracts/src/companion-tunnel-scope.d.ts
3
3
  /**
4
4
  * The identity a companion tunnel is scoped to.
@@ -1,4 +1,4 @@
1
- import { D as SnapshotQualityVerdict, E as SnapshotProvenance, I as Platform, O as SnapshotState, R as PublicPlatform, S as ScreenshotOverlayRef, T as SnapshotOptions$1, b as RawSnapshotNode, h as ResponseCost, w as SnapshotNode, x as Rect, y as Point } from "./sdk-contracts.js";
1
+ import { C as Platform, D as RawSnapshotNode, E as Point, F as SnapshotState, M as SnapshotOptions$1, N as SnapshotProvenance, O as Rect, P as SnapshotQualityVerdict, T as PublicPlatform, h as ResponseCost, j as SnapshotNode, k as ScreenshotOverlayRef } from "./sdk-contracts.js";
2
2
  //#region packages/contracts/src/session-surface.d.ts
3
3
  declare const SESSION_SURFACES: readonly ['app', 'frontmost-app', 'desktop', 'menubar'];
4
4
  type SessionSurface = (typeof SESSION_SURFACES)[number];
@@ -532,6 +532,17 @@ type ScrollCommandResult = {
532
532
  durationMs?: number;
533
533
  message?: string;
534
534
  settle?: SettleObservation;
535
+ /**
536
+ * Set only when an on-screen keyboard made the owner clip the swipe into the band above it
537
+ * (#2500). Absent means the swipe was not clipped, which is not the same claim as `false`: a
538
+ * platform that never runs the clip has nothing to report. The platform leaf's `referenceHeight`
539
+ * names the shortened axis the reported `pixels` were planned against, and `keyboardMinY` names
540
+ * where the keyboard began. A surface the owner refused to swipe at all fails instead, under the
541
+ * `scroll_keyboard_occludes_surface` reason.
542
+ */
543
+ keyboardAvoided?: true;
544
+ /** The keyboard's edge in the same unit as the gesture coordinates, when the swipe was clipped. */
545
+ keyboardMinY?: number;
535
546
  };
536
547
  //#endregion
537
548
  //#region packages/contracts/src/settings.d.ts
@@ -589,7 +600,6 @@ type IosViewportEvidence = Readonly<{
589
600
  reason: 'not-provided' | 'not-supported' | 'invalid';
590
601
  }>;
591
602
  type IosProviderPrunedField = 'nodes' | 'depth' | 'scope' | 'interactive-only';
592
- type IosTruncationDimension = 'nodes' | 'depth' | 'payload';
593
603
  type IosAcquisitionResidue = Readonly<{
594
604
  kind: 'provider-pruned';
595
605
  fields: readonly IosProviderPrunedField[];
@@ -598,8 +608,6 @@ type IosAcquisitionResidue = Readonly<{
598
608
  reason: 'not-provided' | 'not-supported' | 'invalid';
599
609
  }> | Readonly<{
600
610
  kind: 'truncated';
601
- dimension: IosTruncationDimension;
602
- limit?: number;
603
611
  }> | Readonly<{
604
612
  kind: 'stale-generation';
605
613
  expected?: IosSnapshotGeneration;
@@ -1 +1 @@
1
- import{yn as e}from"./sdk-batch.js";function t(t,n,r){return e(typeof t==`string`?t:t.raw,n,r)}export{t};
1
+ import{bn as e}from"./sdk-batch.js";function t(t,n,r){return e(typeof t==`string`?t:t.raw,n,r)}export{t};
Binary file
@@ -1 +1 @@
1
- import{C as e,c as t,f as n,w as r,x as i,y as a}from"./sdk-contracts.js";import{l as o,v as s}from"./sdk-device.js";import{Dn as c,Pt as l,ar as u,kn as d,or as f,sr as p}from"./sdk-batch.js";import{s as m}from"./session-store.js";import{i as ee,s as te}from"./session-target-evidence.js";import{f as h}from"./parameterized-recorded-fill.js";import{_ as ne,t as re}from"./runtime.js";import{a as ie,m as ae,p as oe,s as se,t as ce}from"./app-inventory-contract.js";import{r as le}from"./diagnostics.js";import"./diagnostics2.js";import{i as ue}from"./rect-center.js";import{a as g}from"./android-system-chrome.js";import{r as de}from"./request-cancel.js";import"./request.js";import{r as _}from"./provider-device-runtime.js";import{n as v}from"./dispatch-resolve.js";import{a as fe,i as y}from"./request-runtime-binding.js";import{C as b,S as pe,f as x,i as S,n as me,o as he,p as ge,r as _e,s as ve,y as C}from"./session-snapshot.js";import{t as w}from"./snapshot-quality-verdict.js";import{t as T}from"./ios-system-surface.js";import{t as E}from"./backend-snapshot-options.js";import{t as D}from"./snapshot-runtime-binding.js";function O(e){let n=i(e);return n?{ok:!0,ref:n.base,generation:n.generation}:{ok:!1,response:y(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:t})}}function k(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};if(t===`list`)return{action:`list`,matches:Array.isArray(e.matches)?e.matches.length:0};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function A(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:e.kind===`list`?{matches:e.matches.map(e=>({ref:e.ref,node:g(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:g(e.node)}}function j(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=be(e),i=r?.kind===`ref`?L(r.ref):void 0,a=r?.kind===`selector`?r.selector:void 0,o={...i?{ref:i}:{},...a?{selector:a}:{},...n?{selectorChain:n}:{}};if(t===`attrs`)return o;let s=typeof e.text==`string`?e.text:``;return{...o,text:s,refLabel:ye(s)}}function M(e){let{target:t}=e;return{...t.kind===`ref`?{ref:L(t.ref)}:{},...t.kind===`selector`?{selector:t.selector}:{},...typeof e.text==`string`?{text:e.text}:{},node:g(e.node)}}function N(e){let{node:t,preActionNodes:n,...r}=e;return r}function P(e){return{waitedMs:e.waitedMs,...typeof e.text==`string`?{text:e.text}:{},...typeof e.selector==`string`?{selector:e.selector}:{},...typeof e.captures==`number`?{captures:e.captures}:{},...typeof e.nodeCount==`number`?{nodeCount:e.nodeCount}:{},...typeof e.hint==`string`?{hint:e.hint}:{}}}function F(e){let{selectorChain:t,...n}=e;return n}function I(e,t,n,r,i,a){let o=e.get(t);if(!o)return;let s=h(o)&&i?ee(i,{mode:a}):void 0;e.recordAction(o,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:m(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function ye(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function be(e){let t=e.target;if(!t||typeof t!=`object`)return;let n=t;if(n.kind===`ref`&&typeof n.ref==`string`)return{kind:`ref`,ref:n.ref};if(n.kind===`selector`&&typeof n.selector==`string`)return{kind:`selector`,selector:n.selector}}function L(e){return e.startsWith(`@`)?e.slice(1):e}async function R(e){let t=await D({...e,plan:l({hasActiveApp:e.session?.appBundleId!==void 0,intent:xe(e.command)}),...e.session?{}:{readiness:{}}});return t.ok?{ok:!0,operations:{capture:t.capture,...t.readTextAtPoint?{readText:t.readTextAtPoint}:{},...t.findText?{findText:t.findText}:{}}}:t}function xe(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const Se=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function z(e,t){let n=Se.filter(([e])=>t?.[e]!==void 0).map(([,e])=>e);return n.length===0?null:y(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function B(t,n){if(t.device.platform!==`android`||!t.appBundleId||t.lease?.leaseProvider||_(t.device))return null;if(!n)throw new e(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let r=await n.readAppState(t.device),i=r.package?.trim();if(!i||i===t.appBundleId)return null;let a=await n.isPermissionPackage(i);return!we(i)&&!a?null:{expectedPackage:t.appBundleId,foregroundPackage:i,activity:r.activity,hint:Ce(a),...a?{permissionDialog:!0}:{}}}function V(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Ce(e){return e?`Use "alert get" to inspect it, then "alert accept" or "alert dismiss" to respond.`:`Use screenshot as visual truth, then take a fresh snapshot -i before retrying.`}function we(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}function H(e,t){let n=t?.iosSystemSurfaceBundleId?T:ne(t);if(!n)return e;if(e.ok){let t=U(e.data?.warning,n);return{...e,data:{...e.data,warning:t}}}let r=e.error.details??{};return{...e,error:{...e.error,details:{...r,hint:U(r.hint,n)}}}}function U(e,t){return typeof e==`string`&&e.trim()!==``?`${e}\n${t}`:t}async function Te(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:s,contextFromFlags:c}=e,l=oe(n),u=e.readTextAtPoint;if(!u)return l;let d=ue(n.rect);if(!d||o(t)&&l&&!ae(n.type??``))return l;let f=c(r,i,a),p=await u({point:d,options:{appBundleId:i,surface:s},execution:ge(f)});return p.status===`read`?p.text:(le({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Ee(p.reason),nodeRef:n.ref,surface:s,platform:t.platform}}),l)}function Ee(e){switch(e){case`no-text-at-point`:return`no_text_at_point`;default:return e}}function W(e){let{session:t,sessionStore:n,sessionName:r}=e,i=0,a,o,s=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async c=>{let l=Date.now(),u=Pe(c,e.req.flags?.out),d=Ae({timestamp:l,lastSnapshotAt:i,lastSnapshotResult:a,lastSnapshotCacheKey:o,session:t,request:c,cacheKey:u});if(d)return s(d);let f=je({session:t,timestamp:l,request:c});if(f)return i=f.createdAt,a={snapshot:f},o=u,s(a);let p=await De({params:e,request:c});c.signal?.throwIfAborted();let m={snapshot:p};return Ie({session:t,sessionStore:n,sessionName:r,snapshot:p}),i=l,a=m,o=u,s(m)}}}async function De(e){let{params:t,request:n}=e,r=await G(t,n,n.snapshotScope);return n.recovery?.legacyIosSparse&&se(r)?await Oe({runtimeParams:t,request:n,policy:n.recovery.legacyIosSparse}):n.recovery?.sparseVerdictQueryScope?.shouldScope&&w(r.snapshotQuality)?await ke({runtimeParams:t,request:n,policy:n.recovery.sparseVerdictQueryScope,snapshot:r}):r}async function Oe(e){let{runtimeParams:t,request:n,policy:r}=e;try{return await G(t,n,void 0,!1)}catch(e){if(!r.shouldScope)throw e;return await G(t,n,r.query,!1)}}async function ke(e){let{runtimeParams:t,request:n,policy:r,snapshot:i}=e;try{return await G(t,n,r.query,!1)}catch{return i}}async function G(e,t,n,r=t.flags?.snapshotInteractiveOnly){let i={...t.flags,snapshotInteractiveOnly:r},a=e.capture;return(await ve({device:e.device,session:e.session,flags:i,outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await a(x({flags:i,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))})).snapshot}function Ae(e){let{timestamp:t,lastSnapshotAt:n,lastSnapshotResult:r,lastSnapshotCacheKey:i,session:a,request:o,cacheKey:s}=e;if(o.cache?.forceFresh!==!0&&r&&i===s&&!(t-n>=750)&&!b(a)&&!K(a,o))return r}function je(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(i&&Me(t,r)&&Ne(i,n)&&i.presentationKey===q(r))return i}function Me(e,t){return!(t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||b(e)||K(e,t))}function Ne(e,t){return t-e.createdAt<750}function K(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&C(e)}function q(e){return n(a(Fe(e)))}function Pe(e,t){return JSON.stringify({presentationKey:q(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Fe(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Ie(e){let{session:t,sessionStore:n,sessionName:r,snapshot:i}=e;!t||w(i.snapshotQuality)||(S(t,i),n.set(r,t))}function J(e){return re({backend:Re(e),...te(`selector commands`,{plural:!0}),sessions:he({sessionName:e.sessionName,getSession:()=>e.session,recordOptions:{includeSnapshot:!0},setRecord:t=>{!e.session||!t.snapshot||(S(e.session,t.snapshot),e.sessionStore.set(e.sessionName,e.session))}}),signal:e.signal??de(e.req.meta?.requestId)})}async function Le(e,t){e.consumedSnapshot??={};let n=e.sessionStore.get(e.sessionName);return!n&&t?{ok:!1,response:fe()}:{ok:!0,session:n,device:n?.device??await v(e.req.flags??{})}}async function Y(e,t){let n=await Le(e,t.requireSession);if(!n.ok)return n;let r=await R({command:t.command,device:n.device,session:n.session,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return r.ok?{ok:!0,runtime:J({...e,session:n.session,device:n.device,bound:r.operations})}:{ok:!1,response:r.response}}function Re(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,c=e.contextFromFlags??((e,t,n)=>pe(i??``,e,t,n)),l=e.bound?.readText,u=e.bound?.findText,d=x({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,f=e.bound,p=f===void 0?void 0:W({device:r,session:n,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,logPath:i,capture:f.capture});return{platform:s(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...E(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||ze(t)||a&&r.platform===`web`;return await p.capture({flags:i,signal:e.signal,snapshotScope:o,includeRects:a,cache:{forceFresh:s,useSessionSnapshot:!0,bypassForPostGestureStabilization:!0}})}),readText:async(e,i)=>({text:await Te({readTextAtPoint:l,device:r,node:i,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:c})}),...u?{findText:async(e,t)=>({found:(await u({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:d,...e.signal?{signal:e.signal}:{}})).found})}:{}}}function ze(e){if(e.command!==`is`)return!1;let t=p(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function Be(e){let{req:t}=e;if(t.command!==`find`)return null;let n=t.positionals??[],r=c(n,t.flags);if(!r.ok)return y(r.code,r.message);let i=r.parsed,a=i.action;if(!d(a))return null;let o=await Y(e,{requireSession:!1,command:`find`});return o.ok?H(await Q(async()=>{let n=await o.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});I(e.sessionStore,e.sessionName,t,k(n,a));let r=A(n),s=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(s.length>0){let t=e.sessionStore.get(e.sessionName);if(t&&(me(t,s),e.sessionStore.set(e.sessionName,t),t.snapshotGeneration!==void 0))return{...r,refsGeneration:t.snapshotGeneration}}return r}),X(e)):o.response}function X(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function Ve(e){let{req:t}=e;if(t.command!==`get`)return null;let n=f(t.positionals?.[0]);if(!n.ok)return y(n.code,n.message);let r=n.format,i=Ue(t);if(!i.ok)return i.response;if(i.target.kind===`ref`){let e=z(`get`,t.flags);if(e)return e}let a=t.internal?.replayTargetGuard,o=await Y(e,{requireSession:!0,command:`get`});if(!o.ok)return o.response;let s=o.runtime,c=i.target.kind===`ref`?_e({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0;return H(await Q(async()=>{let n=await s.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});I(e.sessionStore,e.sessionName,t,j(n,r),{node:n.node,preActionNodes:n.preActionNodes});let o=M(n);return c?{...o,warning:c}:o}),X(e))}async function He(e){let{req:t}=e;if(t.command!==`is`)return null;let n=p(t.positionals??[]);if(!n.ok)return y(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:a}=n;if(r===`absent`){let e=ie({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=ce(e);return y(t.code,t.message,t.details)}}let o=t.internal?.replayTargetGuard,s=await Y(e,{requireSession:!0,command:`is`});return s.ok?H(await $(e,await Q(async()=>{let n=await s.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:i,expectedText:a,expectedResolvedTarget:o}),c=Z(n),l=N(n);return I(e.sessionStore,e.sessionName,t,l,c),F(l)}),`is ${r}`),X(e)):s.response}function Z(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function Ue(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=O(t);return n.ok?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:e.positionals.length>2?e.positionals.slice(2).join(` `).trim():``},refGeneration:n.generation}:{ok:!1,response:n.response}}let n=u(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:y(n.code,n.message)}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=r(e);return y(t.code,t.message,t.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{if(!e.androidObservation)return t;i=await B(r,e.androidObservation)}catch{return t}return i?y(t.error.code,`${n} failed because ${V(i)}.`,{...t.error.details??{},...i,blockedBy:`android_foreground_surface`,originalMessage:t.error.message}):t}export{O as _,$ as a,J as c,B as d,z as f,P as g,N as h,He as i,W as l,I as m,Be as n,Z as o,R as p,Ve as r,Q as s,X as t,H as u};
1
+ import{C as e,c as t,f as n,w as r,x as i,y as a}from"./sdk-contracts.js";import{l as o,v as s}from"./sdk-device.js";import{An as c,Ft as l,On as u,cr as d,or as f,sr as p}from"./sdk-batch.js";import{s as m}from"./session-store.js";import{i as ee,s as h}from"./session-target-evidence.js";import{f as g}from"./parameterized-recorded-fill.js";import{n as te}from"./runtime.js";import{a as ne,m as re,p as ie,s as ae,t as oe}from"./absence-observation-errors.js";import{r as se}from"./diagnostics.js";import"./diagnostics2.js";import{i as ce}from"./rect-center.js";import{a as _}from"./android-system-chrome.js";import{r as le}from"./request-cancel.js";import"./request.js";import{a as v,i as y,s as b}from"./request-runtime-binding.js";import{n as ue}from"./dispatch-resolve.js";import{C as de,b as fe,f as pe,i as x,m as me,n as he,o as ge,p as S,r as _e,s as ve,w as C}from"./session-snapshot.js";import{p as w}from"./quality-warnings.js";import{t as T}from"./ios-system-surface.js";import{t as E}from"./backend-snapshot-options.js";import{t as D}from"./snapshot-runtime-binding.js";function O(e){let n=i(e);return n?{ok:!0,ref:n.base,generation:n.generation}:{ok:!1,response:y(`INVALID_ARGS`,`Invalid ref "${e}" — malformed generation suffix.`,{hint:t})}}function k(e,t){if(t===`exists`)return{found:!0};if(t===`wait`)return{found:!0,waitedMs:e.waitedMs};if(t===`list`)return{action:`list`,matches:Array.isArray(e.matches)?e.matches.length:0};let n=typeof e.ref==`string`?e.ref:void 0;return t===`get_attrs`?{ref:n,action:`get attrs`}:{ref:n,action:`get text`,text:typeof e.text==`string`?e.text:``}}function A(e){return e.kind===`found`?{found:!0,...typeof e.waitedMs==`number`?{waitedMs:e.waitedMs}:{}}:e.kind===`list`?{matches:e.matches.map(e=>({ref:e.ref,node:_(e.node)}))}:{ref:e.ref,...e.kind===`text`?{text:e.text}:{},node:_(e.node)}}function j(e,t){let n=Array.isArray(e.selectorChain)?e.selectorChain:void 0,r=be(e),i=r?.kind===`ref`?L(r.ref):void 0,a=r?.kind===`selector`?r.selector:void 0,o={...i?{ref:i}:{},...a?{selector:a}:{},...n?{selectorChain:n}:{}};if(t===`attrs`)return o;let s=typeof e.text==`string`?e.text:``;return{...o,text:s,refLabel:ye(s)}}function M(e){let{target:t}=e;return{...t.kind===`ref`?{ref:L(t.ref)}:{},...t.kind===`selector`?{selector:t.selector}:{},...typeof e.text==`string`?{text:e.text}:{},node:_(e.node)}}function N(e){let{node:t,preActionNodes:n,...r}=e;return r}function P(e){return{waitedMs:e.waitedMs,...typeof e.text==`string`?{text:e.text}:{},...typeof e.selector==`string`?{selector:e.selector}:{},...typeof e.captures==`number`?{captures:e.captures}:{},...typeof e.nodeCount==`number`?{nodeCount:e.nodeCount}:{},...typeof e.hint==`string`?{hint:e.hint}:{}}}function F(e){let{selectorChain:t,...n}=e;return n}function I(e,t,n,r,i,a){let o=e.get(t);if(!o)return;let s=g(o)&&i?ee(i,{mode:a}):void 0;e.recordAction(o,{command:n.command,positionals:n.positionals??[],flags:n.flags??{},result:r,interactiveObservation:m(n),...s?{targetEvidence:s,targetEvidenceMode:a??`action`}:{}})}function ye(e){let t=e.trim();if(!(!t||t.length>80||/[\r\n]/.test(t)))return t}function be(e){let t=e.target;if(!t||typeof t!=`object`)return;let n=t;if(n.kind===`ref`&&typeof n.ref==`string`)return{kind:`ref`,ref:n.ref};if(n.kind===`selector`&&typeof n.selector==`string`)return{kind:`selector`,selector:n.selector}}function L(e){return e.startsWith(`@`)?e.slice(1):e}async function R(e){let t=await D({...e,plan:l({hasActiveApp:e.session?.appBundleId!==void 0,intent:xe(e.command)}),...e.session?{}:{readiness:{}}});return t.ok?{ok:!0,operations:{capture:t.capture,...t.readTextAtPoint?{readText:t.readTextAtPoint}:{},...t.findText?{findText:t.findText}:{}}}:t}function xe(e){switch(e){case`is`:return`capture-only`;case`find`:case`get`:return`element-text`;case`wait`:return`wait-observation`}}const Se=[[`snapshotDepth`,`--depth`],[`snapshotScope`,`--scope`],[`snapshotRaw`,`--raw`]];function z(e,t){let n=Se.filter(([e])=>t?.[e]!==void 0).map(([,e])=>e);return n.length===0?null:y(`INVALID_ARGS`,`${e} @ref does not support ${n.join(`, `)}.`)}async function B(t,n){if(t.device.platform!==`android`||!t.appBundleId||t.lease?.leaseProvider||b(t.device))return null;if(!n)throw new e(`INTERNAL_ERROR`,`Android observation was not supplied by root runtime composition`);let r=await n.readAppState(t.device),i=r.package?.trim();if(!i||i===t.appBundleId)return null;let a=await n.isPermissionPackage(i);return!we(i)&&!a?null:{expectedPackage:t.appBundleId,foregroundPackage:i,activity:r.activity,hint:Ce(a),...a?{permissionDialog:!0}:{}}}function V(e){return e.permissionDialog?`Android permission dialog is blocking ${e.expectedPackage}`:`${e.foregroundPackage} is foreground instead of ${e.expectedPackage}`}function Ce(e){return e?`Use "alert get" to inspect it, then "alert accept" or "alert dismiss" to respond.`:`Use screenshot as visual truth, then take a fresh snapshot -i before retrying.`}function we(e){return e===`com.android.settings`||e===`com.android.systemui`||e.includes(`launcher`)}function H(e,t){let n=t?.iosSystemSurfaceBundleId?T:te(t);if(!n)return e;if(e.ok){let t=U(e.data?.warning,n);return{...e,data:{...e.data,warning:t}}}let r=e.error.details??{};return{...e,error:{...e.error,details:{...r,hint:U(r.hint,n)}}}}function U(e,t){return typeof e==`string`&&e.trim()!==``?`${e}\n${t}`:t}async function Te(e){let{device:t,node:n,flags:r,appBundleId:i,traceOutPath:a,surface:s,contextFromFlags:c}=e,l=ie(n),u=e.readTextAtPoint;if(!u)return l;let d=ce(n.rect);if(!d||o(t)&&l&&!re(n.type??``))return l;let f=c(r,i,a),p=await u({point:d,options:{appBundleId:i,surface:s},execution:me(f)});return p.status===`read`?p.text:(se({level:`warn`,phase:`interaction_read_fallback`,data:{reason:Ee(p.reason),nodeRef:n.ref,surface:s,platform:t.platform}}),l)}function Ee(e){switch(e){case`no-text-at-point`:return`no_text_at_point`;default:return e}}function W(e){let{session:t,sessionStore:n,sessionName:r}=e,i=0,a,o,s=t=>(e.consumedSnapshot&&(e.consumedSnapshot.state=t.snapshot),t);return{capture:async c=>{let l=Date.now(),u=Pe(c,e.req.flags?.out),d=Ae({timestamp:l,lastSnapshotAt:i,lastSnapshotResult:a,lastSnapshotCacheKey:o,session:t,request:c,cacheKey:u});if(d)return s(d);let f=je({session:t,timestamp:l,request:c});if(f)return i=f.createdAt,a={snapshot:f},o=u,s(a);let p=await De({params:e,request:c});c.signal?.throwIfAborted();let m={snapshot:p};return Ie({session:t,sessionStore:n,sessionName:r,snapshot:p}),i=l,a=m,o=u,s(m)}}}async function De(e){let{params:t,request:n}=e,r=await G(t,n,n.snapshotScope);return n.recovery?.legacyIosSparse&&ae(r)?await Oe({runtimeParams:t,request:n,policy:n.recovery.legacyIosSparse}):n.recovery?.sparseVerdictQueryScope?.shouldScope&&w(r.snapshotQuality)?await ke({runtimeParams:t,request:n,policy:n.recovery.sparseVerdictQueryScope,snapshot:r}):r}async function Oe(e){let{runtimeParams:t,request:n,policy:r}=e;try{return await G(t,n,void 0,!1)}catch(e){if(!r.shouldScope)throw e;return await G(t,n,r.query,!1)}}async function ke(e){let{runtimeParams:t,request:n,policy:r,snapshot:i}=e;try{return await G(t,n,r.query,!1)}catch{return i}}async function G(e,t,n,r=t.flags?.snapshotInteractiveOnly){let i={...t.flags,snapshotInteractiveOnly:r},a=e.capture;return(await ve({device:e.device,session:e.session,flags:i,outPath:t.outPath??e.req.flags?.out,logPath:e.logPath??``,snapshotScope:n,includeRects:t.includeRects,signal:t.signal,captureData:async()=>await a(S({flags:i,logPath:e.logPath??``,meta:e.req.meta,session:e.session,snapshotScope:n,includeRects:t.includeRects,signal:t.signal}))})).snapshot}function Ae(e){let{timestamp:t,lastSnapshotAt:n,lastSnapshotResult:r,lastSnapshotCacheKey:i,session:a,request:o,cacheKey:s}=e;if(o.cache?.forceFresh!==!0&&r&&i===s&&!(t-n>=750)&&!C(a)&&!K(a,o))return r}function je(e){let{session:t,timestamp:n,request:r}=e,i=t?.snapshot;if(i&&Me(t,r)&&Ne(i,n)&&i.presentationKey===q(r))return i}function Me(e,t){return!(t.cache?.forceFresh===!0||t.cache?.useSessionSnapshot!==!0||C(e)||K(e,t))}function Ne(e,t){return t-e.createdAt<750}function K(e,t){return t.cache?.bypassForPostGestureStabilization===!0&&fe(e)}function q(e){return n(a(Fe(e)))}function Pe(e,t){return JSON.stringify({presentationKey:q(e),includeRects:e.includeRects===!0,outPath:e.outPath??t??null})}function Fe(e){return e.snapshotScope===void 0?e.flags:{...e.flags,snapshotScope:e.snapshotScope}}function Ie(e){let{session:t,sessionStore:n,sessionName:r,snapshot:i}=e;!t||w(i.snapshotQuality)||(x(t,i),n.set(r,t))}function J(e){return pe({backend:Re(e),...h(`selector commands`,{plural:!0}),sessions:ge({sessionName:e.sessionName,getSession:()=>e.session,recordOptions:{includeSnapshot:!0},setRecord:t=>{!e.session||!t.snapshot||(x(e.session,t.snapshot),e.sessionStore.set(e.sessionName,e.session))}}),signal:e.signal??le(e.req.meta?.requestId)})}async function Le(e,t){e.consumedSnapshot??={};let n=e.sessionStore.get(e.sessionName);return!n&&t?{ok:!1,response:v()}:{ok:!0,session:n,device:n?.device??await ue(e.req.flags??{})}}async function Y(e,t){let n=await Le(e,t.requireSession);if(!n.ok)return n;let r=await R({command:t.command,device:n.device,session:n.session,inspectFacts:e.inspectFacts,bindDevice:e.bindDevice});return r.ok?{ok:!0,runtime:J({...e,session:n.session,device:n.device,bound:r.operations})}:{ok:!1,response:r.response}}function Re(e){let{req:t,session:n,device:r,logPath:i,sessionName:a,sessionStore:o}=e,c=e.contextFromFlags??((e,t,n)=>de(i??``,e,t,n)),l=e.bound?.readText,u=e.bound?.findText,d=S({flags:t.flags,logPath:i??``,meta:t.meta,session:n,snapshotScope:void 0}).execution,f=e.bound,p=f===void 0?void 0:W({device:r,session:n,sessionStore:o,sessionName:a,req:t,consumedSnapshot:e.consumedSnapshot,logPath:i,capture:f.capture});return{platform:s(r),captureSnapshot:p&&(async(e,n)=>{let i={...t.flags,...E(n)},a=n?.includeRects===!0,o=n?.scope??t.flags?.snapshotScope,s=t.command===`wait`||t.command===`find`||ze(t)||a&&r.platform===`web`;return await p.capture({flags:i,signal:e.signal,snapshotScope:o,includeRects:a,cache:{forceFresh:s,useSessionSnapshot:!0,bypassForPostGestureStabilization:!0}})}),readText:async(e,i)=>({text:await Te({readTextAtPoint:l,device:r,node:i,flags:t.flags,appBundleId:n?.appBundleId,traceOutPath:n?.trace?.outPath,surface:n?.surface,contextFromFlags:c})}),...u?{findText:async(e,t)=>({found:(await u({text:t,options:{appBundleId:n?.appBundleId,surface:n?.surface},execution:d,...e.signal?{signal:e.signal}:{}})).found})}:{}}}function ze(e){if(e.command!==`is`)return!1;let t=d(e.positionals??[]);return t.ok&&t.predicate===`absent`}async function Be(e){let{req:t}=e;if(t.command!==`find`)return null;let n=t.positionals??[],r=u(n,t.flags);if(!r.ok)return y(r.code,r.message);let i=r.parsed,a=i.action;if(!c(a))return null;let o=await Y(e,{requireSession:!1,command:`find`});return o.ok?H(await Q(async()=>{let n=await o.runtime.selectors.find({session:e.sessionName,requestId:t.meta?.requestId,locator:i.locator,query:i.query,action:a,timeoutMs:i.timeoutMs});I(e.sessionStore,e.sessionName,t,k(n,a));let r=A(n),s=typeof r.ref==`string`?[r.ref]:Array.isArray(r.matches)?r.matches.map(e=>e.ref).filter(e=>typeof e==`string`):[];if(s.length>0){let t=e.sessionStore.get(e.sessionName);if(t&&(he(t,s),e.sessionStore.set(e.sessionName,t),t.snapshotGeneration!==void 0))return{...r,refsGeneration:t.snapshotGeneration}}return r}),X(e)):o.response}function X(e){return e.consumedSnapshot?.state??e.sessionStore.get(e.sessionName)?.snapshot}async function Ve(e){let{req:t}=e;if(t.command!==`get`)return null;let n=p(t.positionals?.[0]);if(!n.ok)return y(n.code,n.message);let r=n.format,i=Ue(t);if(!i.ok)return i.response;if(i.target.kind===`ref`){let e=z(`get`,t.flags);if(e)return e}let a=t.internal?.replayTargetGuard,o=await Y(e,{requireSession:!0,command:`get`});if(!o.ok)return o.response;let s=o.runtime,c=i.target.kind===`ref`?_e({session:e.sessionStore.get(e.sessionName),ref:i.target.ref,mintedGeneration:i.refGeneration}):void 0;return H(await Q(async()=>{let n=await s.selectors.get({session:e.sessionName,requestId:t.meta?.requestId,property:r,target:i.target,expectedResolvedTarget:a});I(e.sessionStore,e.sessionName,t,j(n,r),{node:n.node,preActionNodes:n.preActionNodes});let o=M(n);return c?{...o,warning:c}:o}),X(e))}async function He(e){let{req:t}=e;if(t.command!==`is`)return null;let n=d(t.positionals??[]);if(!n.ok)return y(n.code,n.message,n.hint?{hint:n.hint}:void 0);let{predicate:r,selectorExpression:i,expectedText:a}=n;if(r===`absent`){let e=ne({depth:t.flags?.snapshotDepth,scope:t.flags?.snapshotScope});if(e){let t=oe(e);return y(t.code,t.message,t.details)}}let o=t.internal?.replayTargetGuard,s=await Y(e,{requireSession:!0,command:`is`});return s.ok?H(await $(e,await Q(async()=>{let n=await s.runtime.selectors.is({session:e.sessionName,requestId:t.meta?.requestId,predicate:r,selector:i,expectedText:a,expectedResolvedTarget:o}),c=Z(n),l=N(n);return I(e.sessionStore,e.sessionName,t,l,c),F(l)}),`is ${r}`),X(e)):s.response}function Z(e){let t=e.node,n=e.preActionNodes;if(!(!t||typeof t!=`object`||!Array.isArray(n)))return{node:t,preActionNodes:n}}function Ue(e){let t=e.positionals?.[1]??``;if(t.startsWith(`@`)){let n=O(t);return n.ok?{ok:!0,target:{kind:`ref`,ref:n.ref,fallbackLabel:e.positionals.length>2?e.positionals.slice(2).join(` `).trim():``},refGeneration:n.generation}:{ok:!1,response:n.response}}let n=f(e.positionals?.slice(1)??[]);return n.ok?{ok:!0,target:{kind:`selector`,selector:`selector`in n?n.selector:``}}:{ok:!1,response:y(n.code,n.message)}}async function Q(e){try{return{ok:!0,data:await e()}}catch(e){let t=r(e);return y(t.code,t.message,t.details)}}async function $(e,t,n){if(t.ok)return t;let r=e.sessionStore.get(e.sessionName);if(!r)return t;let i;try{if(!e.androidObservation)return t;i=await B(r,e.androidObservation)}catch{return t}return i?y(t.error.code,`${n} failed because ${V(i)}.`,{...t.error.details??{},...i,blockedBy:`android_foreground_surface`,originalMessage:t.error.message}):t}export{O as _,$ as a,J as c,B as d,z as f,P as g,N as h,He as i,W as l,I as m,Be as n,Z as o,R as p,Ve as r,Q as s,X as t,H as u};
@@ -1 +1 @@
1
- import{br as e,gr as t,hr as n,vn as r,vr as i,xn as a,yr as o}from"./sdk-batch.js";import{t as s}from"./sdk-selectors.js";export{r as findSelectorChainMatch,s as formatSelectorFailure,o as isNodeEditable,e as isNodeVisible,n as isSelectorToken,t as parseSelectorChain,a as resolveSelectorChain,i as tryParseSelectorChain};
1
+ import{Sn as e,_r as t,br as n,gr as r,xr as i,yn as a,yr as o}from"./sdk-batch.js";import{t as s}from"./sdk-selectors.js";export{a as findSelectorChainMatch,s as formatSelectorFailure,n as isNodeEditable,i as isNodeVisible,r as isSelectorToken,t as parseSelectorChain,e as resolveSelectorChain,o as tryParseSelectorChain};